Nos modelos UML, uma restrição é um mecanismo de extensão que permite refinar a semântica de um elemento de modelo UML. Uma restrição refina um elemento de modelo expressando uma condição ou uma restrição em uma declaração textual com a qual o elemento de modelo deve estar em conformidade.
Um exemplo de restrição é uma condição como por exemplo {count > 10}. Uma restrição deve ser aplicada no design de um sistema. A condição ou restrição é especificada no corpo da restrição.
Normalmente, as restrições não possuem nomes. Em vez disso, elas são identificadas pelo conteúdo de seus corpos. Algumas restrições comumente utilizadas são identificadas por nomes, para que o conteúdo de seus corpos não precisem ser repetidos. A restrição XOR é aplicada quando mais de uma associação possui uma conexão comum a uma classe.
Para obter informações adicionais sobre OCL, leia a especificação da Unified Modeling Language disponível no Web site do OMG (Object Management Group). Em geral, a sintaxe para o corpo ou as propriedades da linguagem do corpo não são aplicadas.
Uma restrição é exibida como um texto incluído entre chaves ({}) e aparece em um retângulo com o canto superior direito dobrado.
É possível incluir restrições no modelo com os seguintes objetivos:
Em modelos que descrevem sistemas de software, as restrições representam condições ou restrições que não podem ser modeladas de outra maneira.
Em modelos que descrevem sistemas de software de tempo crítico, as restrições fornecem uma instrução sobre o valor relativo ou absoluto de tempo durante uma interação.
As restrições em um modelo podem aparecer em qualquer tipo de diagrama UML, bem como em diagramas de forma livre.
É possível validar uma restrição. O nível de validação da restrição aplicado depende do tipo de restrição que está sendo validada. Há três tipos de restrições:
A sintaxe e a expressão de uma restrição serão validadas se a restrição possuir o estereótipo «metaConstraint» aplicado a ela ou se estiver definida em um perfil.
Apenas a sintaxe de uma restrição será validada se ela não tiver o estereótipo «metaConstraint» aplicado e ela não estiver definida em um perfil.