A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições.

Apresentações semelhantes


Apresentação em tema: "UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições."— Transcrição da apresentação:

1 UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE

2 Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições –Tipos –Estilos de programação e questões de modelagem Considerações Finais

3

4 Introdução Empresa de Software de sucesso ↔ desenvolve software de qualidade e atende aos usuários Modelagem é uma tarefa fundamental nas atividades iniciais do desenvolvimento do software –Comunicar a estrutura e comportamento desejados para o sistema –Visualizar e controlar a arquitetura do software –Melhor entendimento do sistema –Gerenciar os riscos –Etc,... É preciso utilizar uma linguagem expressiva, simples e padrão

5 Introdução UML é uma linguagem para especificação, visualização, construção e documentação de artefatos de sistemas de software. –Linguagem padrão adotada e recomendada pela OMG. Extensível Apenas uma linguagem Independente de processo Amplamente utilizada pelo mercado e pela academia Inter-disciplinar Não possui semântica formal bem definida Abrange modelagem estrutural e comportamental Sub-dividida em diagramas (9)

6 Introdução Parte estrutural –Diagrama de classes –Diagrama de objetos –Diagrama de Componentes –Diagrama de Desenvolvimento Classes, interfaces e relacionamentos Objetos e relacionamentos Componentes e dependências Nodos e configurações

7 Introdução Parte comportamental –Diagrama de Colaboração –Diagrama de Seqüência –Diagrama de Casos de Uso –Diagrama de estados –Diagrama de atividades Diagramas de Interação: Objetos, relacionamentos e mensagens } Casos de uso, atores e relacionamentos Máquina de estados: Estados, transições, eventos e atividades }

8 Diagrama de Classes É um diagrama que mostra um conjunto de classes, interfaces e relacionamentos. Responsável por modelar a parte estática do sistema Uma classe é uma descrição de um conjunto de objetos que compartilham os mesmos atributos, operações, relacionamentos e semântica Interface é uma coleção de operações que são usadas para especificar um serviço de uma classe Um relacionamento é uma conexão entre classes. Pode conter notas, restrições e pacotes

9 Diagrama de Classes

10 Adornos aplicados às classes, atributos e operações: –Visibilidade – especifica se ela pode ser usada por outros classificadores Public (+) Protected (#) Private (-) –Escopo – especifica se a propriedade aparece em cada instância do classificador ou se existe apenas uma instância da característica para todas as instâncias do classificador Instance (default) Classifier (propriedade sublinhada)

11 Diagrama de Classes Outras propriedades: –Abstract (nome da classe em itálico) –Leaf ‘{leaf}’ após nome da classe –Root ‘{root}’ após nome da classe

12 Diagrama de Classes Um relacionamento é uma conexão entre classes. Generalização – relacionamento entre uma classe geral (super-classe) e uma mais específica (sub-classe) Dependência – indica que a mudança na especificação de uma classe deve afetar uma outra classe.

13 Diagrama de Classes Associação é um relacionamento estrutural, que especifica que objetos de uma classe são conectados com objetos de uma outra classe Associação entre todo-parte é conhecida como agregação Composição é um tipo especial de agregação que ocorre quando o tempo de vida do todo e da parte são iguais

14 Diagrama de Classes Vários adornos aplicados às associações –Nome, Papéis, Multiplicidade, etc. Realização é um relacionamento entre classificadores onde um especifica um contrato e outro garante cumpri-lo

15 Diagrama de Classe Uma associação entre duas classes pode possuir propriedades: classes-associação

16

17

18 Introdução UML não provê todos aspectos relevantes da especificação do sistema Linguagem Natural é ambigua Linguagens formais requerem forte conhecimento matemático OCL - Linguagem para escrita de restrição sobre objetos, que pode ser aplicada em um ou mais valores de um (ou parte de) sistema ou modelo orientado a objetos.

19 Introdução Linguagem formal de fácil escrita e leitura Não é uma linguagem de programação Sem efeitos colaterais Linguagem tipada Avaliação instântanea

20 Introdução Uso de OCL: –Especificar invariantes –Descrever pre e pos condições sobre operações e métodos –Servir como linguagem de navegação

21

22 Invariantes É uma expressão cujo resultado deve ser verdadeiro para todas as instâncias da classe, tipo ou interface associada Exemplos: Context c : Customer inv MinimumAge: c.age() >= 18 Context Customer inv: self.age() >= 18 Podem ser representadas através: – Nota no modelo UML –Estereótipo > –Arquivo separado –Tab específico provido por ferramentas

23 Invariantes Exemplo: Context membership inv: card.owner = customer Context CustomerCard inv: printedName = customer.title.concat (customer.name)

24 Invariantes

25 Pre e pos-condições Pré-condição é uma restrição que deve ser verdadeira no inicio da execução da operação. Pós-condição é uma restrição que deve ser verdadeira no final da execução da operação. Context Typename::operationName (param1 : Type1,...) : ReturnType pre: param1 >... post: result =... Context LoyaltyAccount::isEmpty() : Boolean pre: -- none post: result = ( points = 0) Context LoyaltyProgram::enroll(c : Customer) pre: not customer->includes(c) post: customer =

26 Pre e pos-condições Podem ser representadas através: –Nota no modelo UML –Estereótipos > e > –Arquivo separado –Tab específico provido por ferramentas

27 Tipos e instâncias Tipos Pré-definidos –Tipos Básicos Integer Real String Boolean –Tipos Collection Set Bag Sequence Collection Tipos Modelo –classes, interfaces ou tipos definidos no modelo UML

28 Tipos Básicos Boolean Context Customer inv: title = (if isMale = true then ‘Mr.’ else ‘Ms.’ endif) Context Customer inv: age() > 21 and age() < 65

29 Tipos Collection Collection - supertipo abstrato usado para definir operações comuns entre todos os tipos Collection (Set, Bag e Sequence) Operações: –size –count(object) –includes(object) –includesAll(collection) –isEmpty –notEmpty –sum() –exists(expression) –forAll(expression) –including(object) –excluding(object)

30 ProgramPartner numberOfCustomers : Integer LoyaltyProgram enroll() ServiceLevel name : String 1..n +partners 1..n Context LoyaltyProgram inv: serviceLevel->size = 2

31 ProgramPartner numberOfCustomers : Integer LoyaltyProgram enroll() Service condition : Boolean pointsEarned : Integer pointsBurned : Integer description : String ServiceLevel name : String 1..n +partners 1..n +deliveredServices 0..n +availableServices 0..n 1..n Context ServiceLevel inv: loyaltyProgram.partners -> includesAll(availableServices.progr amPartner)

32 Context LoyaltProgram inv: partners.deliveredServices->forAll ( pointsEarned = 0 and pointsBurned = 0) implies membership.loyaltyAccount->isEmpty

33 Tipos Collection Tipo Set –Subtração (-) Set{1, 4, 7, 10} – Set {4, 7} = Set {1, 10} –Diferença simétrica Set{1, 4, 7, 10}.symmetricDifference(Set{4, 5, 7}) = Set{1, 5, 10} Tipo Sequence –first, last, at, append e prepend. Sequence{1, 4, 7, 10}->first = 1 Sequence{1, 4, 7, 10}->last = 10 Sequence{1, 4, 7, 10}->at(3) = 7 Sequence{1, 4, 7, 10}->append( 15 ) = Sequence{1, 4, 7, 10, 15} Sequence{1, 4, 7, 10}->prepend( 15 ) = Sequence{15, 1, 4, 7, 10}

34 Tipos Collection Context ProgramPartner inv: numberOfCustomers = loyaltyProgram.customer->size Context ProgramPartner inv: numberOfCustomers = loyaltyProgram.customer- >asSet->size

35 Tipos Collection Operações de interação

36 – select Context CustomerCard inv: self.trasactions->select( points > 100 ) –reject

37 – collect Context LoyaltyAccount inv: transaction->collect (points)-> exists (p: Integer | p = 500)

38 Tipos Modelo Classes (inclusive, classes-associação), tipos e interfaces definidos no modelo UML, são consideradas classes em OCL. Estes tipos possuem propriedades: –Atributos –Operações e métodos –Navegações (associações) –Enumerações (definidas como tipo de algum atributo) Exemplos: Service, ProgramPartner, Customer, etc. Enumeration {silver, gold} definida na classe CustomerCard.

39

40 Tipos Modelo Navegações são tratadas como atributos cujos tipos são tipos modelo ou collections –Se a multiplicidade é no máximo 1, o tipo é modelo Context CustomerCard inv: self.owner.age() > 18 –Se a multiplicidade > 1, o tipo é collection Context Customer inv: self.cards->size = 1

41 Tipos Modelo Navegação em classes-associação Context Membership inv: program.serviceLevel->includes (actualLevel) Context LoyaltyProgram inv: serviceLevel->includesAll ( membership.actualLevel)

42 Estilos para especificação OCL Escolha correta do objeto Context Context Person inv: wife.employers->intersection (self.employers)->isEmpty and husband.employers->intersection (self.employers)->isEmpty Context Company inv: employees.wife->intersection(self.employees)->isEmpty

43 Estilos para especificação OCL Dividir uma restrição em várias Context ProgramPartner inv: partners.deliveredServices->forAll(pointsEarnerd = 0) and membership.card->forAll(goodThru = Date.fromYMD( )) and customer->forAll(age() > 55) Context ProgramPartner inv: partners.deliveredServices->forAll(pointsEarnerd = 0) Context ProgramPartner inv: membership.card->forAll(goodThru = Date.fromYMD( )) Context ProgramPartner inv: customer->forAll(age() > 55)

44 Estilos para especificação OCL Context Membership inv: program.partners.deliveredServices->forAll(pointsEarned = 0) implies LoyaltyAccount->isEmpty Context LoyaltyProgram inv: isSaving = partners.deliveredServices->forAll(pointsEarned = 0) Context Membership inv: program.isSaving implies LoyaltyAccount->isEmpty Evitar expressões de navegação complexa Adicionar atributos ou operações extras

45 Questões de modelagem com OCL Adicionar detalhes ao modelo versus adicionar restrições

46 Context ClassicGuitar inv: strings->forAll(oclType = PlasticString) Context ElectricGuitar inv: strings->forAll(oclType = MetalString)

47 Context Guitar inv: type = #classic implies strings->forAll(type = #plastic) Context Guitar inv: type = #electric implies strings->forAll(type = #metal)

48 Considerações Finais OCL é uma linguagem que expressa informação extra em modelos. –Formal –Fácil de ler e escrever –Declarativa –Sem efeitos colaterais –Tipada –Adotada pela OMG como parte de UML. Extensões –Novos tipos –Novas operações –O que fazer quando uma restrição for violada –Geração de código (?) –Outros diagramas: de estados, sequência,etc –Ferramentas que permitam geração de código (?)


Carregar ppt "UML - OCL Franklin Ramalho DSC-UFCG CIn - UFPE. Roteiro UML –Introdução –Diagramas –Diagrama de classes OCL –Introdução –Invariantes, pré e pós-Condições."

Apresentações semelhantes


Anúncios Google