Object Constraint Language: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Nessun oggetto della modifica
Riga 1:
{{WIP|Moongateclimber}}
L'<b>Object Constraint Language</b> o '''OCL''' è un [[linguaggio formale|linguaggio di specifica formale]] cheinizialmente estendeproposto come estensione per il linguaggio di modellazione [[Paradigma object-oriented|object-oriented]] [[Unified Modeling Language|UML]] consentendo la specifica di elementi di modello attraverso un sistema di [[asserzione|asserzioni]]. Nato e sviluppatosi indipendentemente da UMLsuccessivamente (come evoluzione del precedente [[Syntropy2003]]), OCLentrato èa statofar incluso,parte nel [[2003]], neldel nuovo standard del linguaggio (UML 2.0). Secondo le indicazioni di [[Object Management Group|OMG]], OCL può essere in effetti impiegato nelinsieme contestoa diqualunque qualsiasi [[metamodello]] basato su [[Meta-Object Facility|MOF]]. Inoltre, OMG ha adottato OCL comeè un elemento chiave del nuovo standard per la trasformazione di modelli di OMG, [[QVT]], e fa parte della famiglia di standard che compongono la [[Model Driven Architecture]].
 
InOCL UML,deriva inda genere,[[Syntropy]]. Il nucleo di OCL vienepuò utilizzatoessere perdescritto descriverecome proprietàun dilinguaggio ''istanze''mutuato didal ''classificatori'';[[calcolo dei predicati del primo ordine]] per l'esempioespressione piùdi comunecondizioni dilogiche istanzainerenti lo stato e le operazioni di classificatoreoggetti èin un ''oggetto''contesto istanzaobject-oriented. diCon unala ''classe''.potenza Ledel asserzionicalcolo dei predicati, OCL possonoconsente descriveredi unadescrivere [[invariante|invarianti]] che legano iil valorivalore degli attributi di ununa oggettoclasse, [[asserzione|precondizioni e postcondizioni]] delle operazioni, valorie inizialivia didicendo. attributi,A opartire regoledalla diversione derivazione2.0 per(che gliè attributiquella derivati.inclusa Lanello versionestandard 2.0UML), delil linguaggio (è stato arricchito di elementi che consentono sonodi statidescrivere aggiuntila nuovisemantica elementidi [[sintassi|sintattici]]operazioni edi tipo ''interrogazione'' (''query''), ovvero prive di [[semanticaeffetto collaterale|semanticieffetti collaterali]] per definire interrogazioni.
 
 
==Descrizione generale==
I vincoli OCL sono in genere asserzioni che specificano, in modo formale, proprietà di determinati elementi di un modello. Il linguaggio include elementi del [[calcolo dei predicati del primo ordine]], attraverso i quali si possono esprimere informazioni non descrivibili in altro modo nei [[diagramma|diagrammi]] UML.
 
 
 
e ''interrogazioni'' (''query'') che arricchiscono un modello a oggetti con informazione non esprimibile con la notazione [[diagramma|diagrammatica]] prevista dal metamodello in uso. Le espressioni OCL possono essere utilizzate per esprimere, per esempio, [[invariante|invarianti]], [[precondizione|precondizioni]] e postcondizioni, [[guardia (informatica)|guardie]] e regole di derivazione. La valutazione delle espressioni OCL è sempre intesa come priva di [[effetto collaterale|effetti collaterali]].
 
Gran parte delle informazioni che si possono descrivere in OCL non sono esprimibili in nessun altro modo ''formale'' nel contesto di UML (ovvero non possono essere rappresentate dai [[diagramma|diagrammi]] UML).
 
==Descrizione==
===Invarianti semplici===
In genere, in UML, un'espressione OCL è associata a una ''classe'', e descrive proprietà degli ''oggetti'' istanza di quella classe. Tali proprietà sono descritte come condizioni che legano i valori degli attributi, dei parametri e dei valori tornati delle operazioni, e così via. Di conseguenza, un'espressione OCL contiene in generale riferimenti a tali ''caratteristiche'' Si consideri il seguente esempio:
 
:<code><b>context</b> Persona <b>inv:</b><br></code>
===Applicazioni===
:<code>età>=0</code>
Nel contesto di un modello UML (o comunque basato su MOF), OCL può essere utilizzato per specificare:
* il valore iniziale di un [[attributo]] di un'estremità di [[associazione]];
* una regola di derivazione per un attributo o un'estremità di [[associazione]] derivati;
* la semantica di una [[operazione]]
* una istanza in un diagramma dinamico
* una condizione in un diagramma dinamico
* il valore attuale dei parametri di un'operazione (o di un messaggio, ecc.) in un diagramma dinamico
 
La [[parola chiave]] <code>context</context> precede la dichiarazione della classe a cui questa regola OCL si applica. <code>inv:</code> specifica che questa particolare regola è una [[invariante]], ovvero deve essere interpretata come una condizione che è sempre vera, per tutti gli oggetti di classe <code>Persona</code>. L'espressione che segue dichiara che l'età di una persona è sempre non negativa.
===Invarianti===
Le espressioni OCL possono essere usate in UML per specificare proprietà ''invarianti'' di una classe, ovvero [[asserzione|asserzioni]] che sono sempre vere, per tutte le istanze della classe''.
 
Nel caso in cui un attributo di una classe sia a sua volta un oggetto, è possibile riferirsi ai suoi attributi o metodi utilizzando la ''[[dot notation]]'':
Si consideri il seguente esempio di espressione OCL:
 
:<code><b>context</b> Persona <b>inv:</b><br></code>
:<code>età>=0 <and età<padre.età</code>
 
La parola chiave iniziale <code>context</code> indica che il contesto dell'espressione è la<code>Persona</code> (che intendiamo essere una classe descritta nel modello UML; vedi [[diagramma delle classi]]). La parola chiave <code>inv</code> indica che quanto segue è una proprietà invariante della classe. La parte rimanente dell'espressione descrive la semplice verità [[genealogia|genealogica]] che ''(data una qualunque persona, in qualunque momento), l'età (di quella persona) è strettamente minore dell'età del padre (di quella persona).''
 
Si può osservare che OCL utilizza la tradizionale ''[[dot notation]]'' per riferirsi agli attributi degli oggetti: "l'età del padre" diventa <code>padre.età</code>.
 
Questa regola arricchisce la precedente con un ulteriore vincolo (legato da un [[and]] booleano), che specifica che ogni persona è più giovane del proprio padre.
==OCL e UML==
OCL estende la sintassi e la semantica base di UML consentendo di esprimere vincoli che descrivono relazioni fra diversi elementi di modello non esprimibili per via [[diagramma|diagrammatica]]. Come alternativa formale alla tradizionale descrizione di tali relazioni in testo libero, garantisce una minore ambiguità e consente alcuni tipi di verifiche automatiche da parte dei tool di modellazione.
 
==Voci correlate==
Riga 50 ⟶ 33:
* [http://www.parlezuml.com/tutorials/umlforjava/java_ocl.pdf Tutorial su OCL per [[Java (linguaggio)|Java]]]
* [http://www.klasse.nl/ocl/index.html Varie risorse su OCL] nel sito di [[Jos Warmer]] e [[Anneke Kleppe]]
* [http://www.deepthought.com.au/it/ocl_review.html Una revisione critica di OCL]
 
[[Categoria:UML]]