Object Constraint Language: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Recupero di 1 fonte/i e segnalazione di 0 link interrotto/i.) #IABot (v2.0.1
Funzionalità collegamenti suggeriti: 2 collegamenti inseriti.
 
(5 versioni intermedie di 4 utenti non mostrate)
Riga 1:
L''''Object Constraint Language''' o '''OCL''' è un [[Linguaggio formale|linguaggio di specifica formale]] inizialmente proposto come estensione per il linguaggio di modellazione [[Paradigma object-oriented|object-oriented]] [[Unified Modeling Language|UML]] e successivamente ([[2003]]) entrato a far parte del nuovo standard del linguaggio (UML 2.0). OCL può essere impiegato insieme a qualunque [[metamodello]] basato su [[Meta-Object Facility|MOF]]. Inoltre, OCL è 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]]. I principali ideatori di OCL sono [[Jos Warmer]] e [[Anneke Kleppe]].
 
OCL deriva da un linguaggio precedente noto come [[Syntropy]]. Il nucleo di OCL può essere descritto come un linguaggio mutuato dal [[Calcolo dei predicati|calcolo dei predicati del primo ordine]] per l'espressione di condizioni logiche inerenti allo stato e alle operazioni di oggetti in un contesto ''object-oriented''. Con la potenza del calcolo dei predicati, OCL consente di descrivere [[Invariante di classe|invarianti]] che legano il valore degli attributi di una classe, [[asserzione (informatica)|precondizioni e postcondizioni]] delle operazioni, e via dicendo. A partire dalla versione 2.0 (che è quella inclusa nello standard UML), il linguaggio è stato arricchito di elementi che consentono di descrivere la semantica di operazioni di tipo ''interrogazione'' (''query''), ovvero prive di [[effetto collaterale (informatica)|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).
Riga 74:
:<code>figli.coniuge->asSet().genitori->asSet()</code>
 
Estremamente simile a un attributo derivato è una ''query'', ovvero un'operazione senza effetti collaterali che fornisce un'informazione sull'oggetto a cui viene applicata. (Da un punto di vista implementativo potrebbe non esistere ''alcuna'' distinzione). La sintassi OCL per descrivere la semantica di un'operazione ''query'' è dunque molto simile a quella per le regole di derivazione. Se <code>suoceri</code> fosse stata espressa come [[query]], la si sarebbe specificata in OCL come segue:
 
:<code>'''context''' Persona::suoceri():Set(Persona) '''body:'''<br /></code>
Riga 234:
| a'''.substring('''n, m''')'''
| String
|-
| esistenza carattere all'interno della stringa (da A a Z)
| a'''.exists('''c ┃ c = [A, ..., Z]''')'''
| Boolean
|-
| uguaglianza
Line 247 ⟶ 251:
La maggior parte dei tool e degli [[Integrated development environment|ambienti integrati]] per la modellazione in UML non gestiscono ancora OCL, o lo gestiscono in modo solo parziale. Molti dei tool elencati qui di seguito non sono integrati in ambienti di modellazione UML.
 
* [[Model Run]] ([[Borland]], {{collegamento interrotto|1=[http://www.borland.com/company/boldsoft.html/products/modelrun/modelrun.html] |datedata=marzo 2018 |bot=InternetArchiveBot }}), attualmente incluso in [[Borland Delphi 7 Studio Architect]]
* [[OCL Compiler]] ([[Cybernetic Intelligence GMBH]], [https://web.archive.org/web/20191227145653/http://www.cybernetic.org/]), un analizzatore di espressioni OCL, con diversi front-end per l'integrazione in ambienti UML come [[Rational Rose]]
* [[OCLCUD]] ([[Università tecnica di Dresda|Università di Dresda]]), [http://dresden-ocl.sourceforge.net]), integrato con [[ArgoUML]]
* [[Octopus]] ([[Klasse Objecten]], [http://www.klasse.nl/ocl/octopus-intro.html] {{Webarchive|url=https://web.archive.org/web/20050208013427/http://www.klasse.nl/ocl/octopus-intro.html |datedata=8 febbraio 2005 }}). Supporta completamente l'ultima versione di OCL, 2.0. Creato dagli autori di OCL.
 
== Curiosità ==
Line 264 ⟶ 268:
* [https://web.archive.org/web/20110807045309/http://www.omg.org/technology/documents/modeling_spec_catalog.htm#UML Specifiche di UML] (includono la specifica di OCL)
* [https://web.archive.org/web/20060220003552/http://www.parlezuml.com/tutorials/umlforjava/java_ocl.pdf Tutorial su OCL per Java], con informazioni molto complete sulla sintassi OCL
* [http://www.klasse.nl/ocl/index.html Varie risorse su OCL] {{Webarchive|url=https://web.archive.org/web/20060515052915/http://www.klasse.nl/ocl/index.html |datedata=15 maggio 2006 }} nel sito di [[Jos Warmer]] e [[Anneke Kleppe]], ideatori di OCL
* {{cita web | 1 = http://www.deepthought.com.au/it/ocl_review.html | 2 = Una revisione critica di OCL | accesso = 5 maggio 2006 | urlarchivio = https://web.archive.org/web/20060505175435/http://www.deepthought.com.au/it/ocl_review.html | dataarchivio = 5 maggio 2006 | urlmorto = sì }}
* {{cita web | 1 = http://projekte.fast.de/Projekte/forsoft/ocl/4_1Equivalence_OCL_relation.html | 2 = Confronto fra OCL e calcolo relazionale | accesso = 7 maggio 2006 | urlarchivio = https://web.archive.org/web/20070313123733/http://projekte.fast.de/Projekte/forsoft/ocl/4_1Equivalence_OCL_relation.html | dataarchivio = 13 marzo 2007 | urlmorto = sì }}