Projeto
Incorporando Restrições à UML
Os conceitos principais por trás da linguagem OCL
De que trata o artigo: Neste artigo será apresentada uma introdução à OCL, a linguagem de restrição oficial da UML.
Para que serve: Impor restrições a alguns objetos é de fundamental importância para esclarecer, verificar e validar modelos UML. Este artigo trata sobre como é possível fazer isso através da OCL.
Em que situação o tema é útil: Para aqueles que não conseguem apenas com os diagramas UML definir todos os aspectos relevantes da especificação do sistema.
A UML (Unified Modeling Language) é uma linguagem para especificação, documentação, visualização e desenvolvimento de sistemas orientados a objetos. Sintetiza os principais métodos existentes, sendo considerada uma das linguagens mais expressivas para modelagem de sistemas e por isso de grande aceitação na indústria. Por meio de seus diagramas é possível representar sistemas de softwares sob diversas perspectivas de visualização. Facilita a comunicação de todas as pessoas envolvidas no processo de desenvolvimento de um sistema - gerentes, coordenadores, analistas, desenvolvedores - por apresentar um vocabulário de fácil entendimento.
A primeira versão da UML foi apresentada em junho de 1996 e submetida à OMG (Object Management Group), consórcio de empresas que define padrões de modelos e linguagens. A revisão desse modelo mostrou uma grande deficiência na clareza e consistência das definições da UML. Em particular, uma dificuldade encontrada foi que a semântica da UML poderia ser interpretada de formas ambíguas. O problema foi minimizado com a elaboração de uma nova versão da linguagem, a qual foi publicada em 1997. O mais importante incremento nesta versão foi a criação da OCL (Object Constraint Language), que acompanha oficialmente a evolução da UML até os dias atuais.
A linguagem OCL
A OCL (ou linguagem para especificação formal de restrições, em português) é uma linguagem declarativa para descrever as regras que se aplicam aos modelos UML. É uma linguagem de texto precisa que fornece afirmações em um modelo orientado a objeto que não possam ser expressadas pela notação diagramática. A OCL complementa os modelos UML fornecendo expressões que não têm nem as ambiguidades da língua natural (eg. “o sistema deve identificar uma pessoa com um telescópio”), nem a dificuldade inerente de se usar matemática complexa.
Com a OCL é possível testar a construção dos modelos, retirar métricas ao nível de projeto e ainda especificar vários tipos de restrições, que poderão refletir regras de negócio, através de pré/pós condições e invariantes.
Como a OCL é uma linguagem formal, semelhante a uma linguagem de programação, torna-se, também, possível a criação de geradores de código tendo como entrada os modelos e as especificações/restrições nessa linguagem e como saída programas fontes em linguagens de programação ou “triggers” para bancos de dados. Inclusive, atualmente a OCL vem se tornando um componente fundamental no novo padrão MDA-QVT (Query-View-Tranformation) para transformação de modelos da OMG.
A OCL pode ser utilizada para:
· Especificar invariantes em classes e tipos do modelos de classes.
· Especificar tipos invariantes para estereótipos.
· Descrever pré e pós-condições em operações.
· Como uma linguagem de navegação entre associações.
· Como uma linguagem de consulta.
· Para especificar o alvo das mensagens e ações.
· Para especificar regras de derivações para atributos.
· Especificar restrições sobre operações.
A estrutura da OCL está intimamente ligada a outros modelos da UML, sendo bastante usada com o Diagrama de Classes através de uso de notas nos diagramas. É composta por expressões escritas em forma de afirmações. É uma linguagem que possui tipos de dados pré-definidos, assim como algumas palavras reservadas. Nas próximas seções falaremos sobre a sintaxe de cada uma dessas características principais.
Expressões OCL
Toda expressão OCL é declarativa no sentido de que expressa o quê a restrição representa no sistema e não como essa restrição é implementada. A avaliação de uma expressão quase sempre resulta em um valor booleano e nunca muda o estado do sistema no modelo.
As expressões OCL são utilizadas para definir condições invariantes nas classes representadas em um modelo e também são utilizadas para especificar as pré e pós-condições em operações aplicadas a classes deste modelo.