UML & Padrões Aula 2 1
(continuação...) Ainda a tratar: Multiplicidade de Associações Binárias Navegabilidade de Associações Restrições Classes Concretas e Abstratas Atributos e Métodos Estáticos Classes Parametrizadas Interfaces 2
Multiplicidade de Associações Binárias muitos-para-muitos muitos-para-um um-para-um * Partic. 1 * Partic. 2 x x x x x x * 1 Partic. 1 Partic. 2 Notação: * - zero ou mais 1 - exatamente um 0..1 - zero ou um 1..* - um ou mais 1, 3..5 - um ou três a 5 x x x x x x x x x 1 1 Partic. 1 Partic. 2 x x x 3
Navegabilidade de Associações As associações são classificadas quanto à navegabilidade em: - bidirecionais (normal) Class-1 Class-2 - unidirecionais Class-1 Class-2 Pode-se indicar o sentido em que se lê o nome de uma associação Empresa empregador Trabalha-para Emprega empregado Pessoa papel da classe na associação 4
Restrições Uma restrição especifica uma condição que tem de se verificar. Uma restrição é indicada por uma expressão ou texto entre chaves ou por uma nota posicionada junto aos elementos a que diz respeito, ou a eles ligada por linhas tracejadas (sem setas, para não confundir com relação de dependência). OCL - "Object Constraint Language" - pode ser usada para especificar restrições mais formalmente. Pessoa nome datanascimento localnascimento datafalecimento datafalecimento > datanascimento {datafalecimento > datanascimento} 5
Restrições em Associações Fatura 1 {ordered} * LinhaFatura uma fatura é constituída por um conjunto ordenado de 0 ou mais linhas Pessoa * {subset} Membro-de * Comité 1 Diretor-de * 6
Restrições em Associações Conta {or} Pessoa Empresa associações mutuamente exclusivas 0..1 Pessoa * empregado empregador chefe 1 trabalhador * Empresa Chefe possui nenhum ou vários trabalhadores 7
Hierarquias de classes Em geral, pode-se ter uma hierarquia de classes relacionadas por herança / generalização em cada classe da hierarquia colocam-se as propriedades que são comuns a todas as suas subclasses evita-se redundância, promove-se reutilização! 8
Hierarquias de classes MÉTODOS DE ACESSO CONSTRUTOR 9
Notações Alternativas para Hierarquias de classes Pessoa Pessoa Aluno Professor Aluno Professor 10
Classes e operações abstratas ( concretas) Classes concretas são as que estamos acostumados a construir e gerar objetos a partir delas. Uma classes abstrata ocorre quando a mesma possui no mínimo um método abstrato. Classe abstrata: classe que não pode ter instâncias diretas pode ter instâncias indirectas pelas subclasses concretas Método abstrato: método com implementação a definir nas subclasses uma classe com métodos abstratos tem de ser abstrata Notação : nome em itálico ou propriedade {abstract} 11
Classes e operações abstratas Figura x: int y: int display() Classe abstrata Método abstrato: sem implementação Circulo Retangulo display() display() Fonte: The UML User Guide, Booch et al 12
Atributos e operações de classe ( instância) Atributo de classe: tem um único valor para todas as instâncias (objetos) da classe, o qual está definido mesmo que não exista nenhuma instância. private static float taxa; Método de classe: não tem como argumento implícito um objeto da classe public static void atualizataxa(novataxa: float) Notação: nome sublinhado Correspondem a membros estáticos (static) em C++ e Java 13
Atributos e operações de classe ( instância) número: int saldo: double taxa: float dataaniv : Date Conta atualizataxa(novataxa: float) fazrender() A taxa se aplica a todas as instâncias de Conta geradas Altera o valor do atributo taxa da classe. Todos os objetos da classe podem enxergar essa mudança. Conta.atualizaTaxa(0.45); 14
Em uma empresa existem diversos funcionários, que são representados pelo seu nome, endereço, cpf, cargo e salário. Entretanto, existem funcionários pagos via CLT, funcionários que são PJ e funcionários que são comissionados. Esses tipos de funcionários têm características próprias como o desconto do FGTS do CLT, as horas e o valor das horas para os PJ e a comissão para os comissionados. Os funcionários têm maneiras diferentes de gerar seu salário, ou seja, apesar de todos poderem calcular o salário, eles o fazem de maneiras diferentes. Defina o diagrama de classe para essa situação. Imagine agora que cada funcionário tem seu salário ajustado através do comportamento ajustarsalario() que varia de acordo com a taxa de reajuste, que vale para todos os objetos da classe. Essa taxa entretanto varia para cada tipo de funcionário. Altere o diagrama de classe para essa situação. 15
Exercício Parte 1 Funcionario - nome : String - endereco: String - cpf : int - cargo : String - salário : double + calcularsalário() : double Classe em itálico: classe abstrata Método sem implementação: método abstrato. FuncionarioCLT - desconto : double + calcularsalário() : double FuncionarioPJ - numhoras: double - valorhora: double + calcularsalário() : double FuncionarioCom - comissao: double + calcularsalário() : double 16
Exercício Parte 2 Funcionario - nome : String - endereco: String - cpf : int - cargo : String - salário : double + calcularsalário() : double Classe em itálico: classe abstrata Método sem implementação: método abstrato. FuncionarioCLT FuncionarioPJ FuncionarioCom - desconto : double - taxa : double + calcularsalário() : double + ajustartaxa() : void - numhoras: double - valorhora: double - taxa : double + calcularsalário() : double + ajustartaxa() : void - comissao: double - taxa : double + calcularsalário() : double + ajustartaxa() : void Atributo de cla estático Método de classe: estático, para mexer no atributo estátic 17
Classes Parametrizadas Muitas linguagens especialmente as fortemente tipadas têm a noção de Classes Parametrizadas ou Templates. Também chamadas de classes Parametrizada, Genérica ou Gabarito. Desse jeito pode-se definir comportamentos para conjuntos em geral definindo uma classe gabarito Conjunto (Set). Conjunto <empregado> ConjuntodeEmpregados; 18
Classes Parametrizadas ClasseTemplate Este relacionamento indica que Conjunto de Empregados estará de acordo com a interface de Conjunto. em termos de especificação, Conjunto de Empregados é um subtipo de Conjunto (mas sem a possibilidades de acrescentar propriedades ao elemento de amarração). Conjunto + inserir(t) + remover(t) T Parâmetro Template (marcador) As classes parametrizadas são utilizadas, na maioria das vezes, para coleções. << bind >> < Empregado > <Empregado> Conjunto Amarração de Parâmetro Elemento de Amarração 19
Interfaces Def. Dicionário: dispositivo ou sistemas que entidades não relacionadas utilizam para se comunicar. Def. Desenvolvimento de Sistemas: quando estamos desenvolvendo uma comunidade de entidades (classes) que interagem entre si, uma interface representa a cara que uma dessas entidades pode mostrar a outra, ou seja, que serviços ela fornece. 20
Interfaces Um interface especifica um conjunto de operações externamente visíveis de uma classe (ou componente, subsistema, etc.) Todo atributo será público, estático e constante. «interface» InterfaceExemplo + static x : int + operaçao1(): int Um estereótipo UML é usado para indicar uma interface. 21
Interfaces Notações alternativas para interfaces ClientClass ClientClass InterfaceClass ou operações «interface» InterfaceClass ImplementationClass atributos operações ImplementationClass atributos operações 22
Interfaces Uma classe de implementação pode ter várias interfaces Vantagem em separar interface de implementação: os clientes de uma classe podem ficar a depender apenas da classe de interface em vez da classe de implementação «interface» SabeCantar «interface» SabeVoar Classe1 23
Interfaces Exemplo 1 Considere a classe abaixo: Pessoa A classe Pessoa é descrita em termos de características e comportamentos. Se a classe é pensada isoladamente e simplisticamente, provavelmente, pensaríamos na seguinte implementação: Pessoa - nome - sexo - idade + fazaniversario (): void + casar(pessoa p): boolean E se quiséssemos que ela se comportasse como um ser alado em um Mundo Alado?? 24
Interfaces 1. Poderíamos criar outra classe Pessoa com os comportamentos que o sistema requeresse. Sistema A Pessoa - nome - sexo - idade + fazaniversario (): void + casar(pessoa p): boolean Mundo Alado Pessoa + voar() + pousar() Passaros Aviao 25
Interfaces 2. Posso manter classe atual e acrescentar os itens faltantes: Sistema A Mundo Alado Pessoa - nome - sexo - idade Passaros Aviao + fazaniversario (): void + casar(pessoa p): boolean + voar() + pousar() 26
Interfaces 3. Posso fazer com que minha classe se comporte como o outro sistema espera: Sistema A Mundo Alado Pessoa - nome - sexo - idade <<interface>> seralado + voar() + pousar() Passaros Aviao + fazaniversario (): void + casar(pessoa p): boolean 27
Interfaces Esse sistema não precisa do comportamento de Pessoa como uma classe descrita no sistema A, apenas que objetos dessa classe se comportem como seres alados que possam voar e pousar no Mundo Alado. Objetos pessoa então deve estar em concordância com um protocolo de comportamento. Não há necessidade do Sistema Mundo Alado conhecer a verdadeira classe Pessoa com quem interage. Qualquer classe que forneça implementação para as operações definidas na interface que o sistema do Mundo Alado espera pode representar o papel de ser alado. Vegetal Mundo Alado Pessoa <<interface>> seralado Aviao Animal Passaros 28
Interfaces Exemplo 2: Agora imagine uma classe ContaBancaria, que possui o comportamento de criarconta, bloquear, desbloquear, creditar, debitar,... Existem, claramente, comportamentos que só podem ser executados pelo cliente (dono da conta) e comportamentos que são restritos do gerente da conta. ContaBancária <<interface>> ContaManipulável +creditar() +debitar() cliente O Cliente manipula apenas o que ele consegue ver através da interface ContaManipulável. Mas ele não pode criar uma conta no banco sozinho, ou bloqueá-la ou mesmo desbloqueá-la. Tais ações são somente executadas pelo gerente da conta. 29
Interfaces <<interface>> Administrável +criar() +bloquear() +desbloquear() Gerente ContaBancária -numero -saldo +criar() +bloquear() +desbloquear() +creditar() +debitar() <<interface>> Manipulável +creditar() +debitar() Cliente 30
s Exercícios: E uma empresa, um cliente é conhecido pelo seu nome, endereço, data da primeira e ultima compra e o total comprado. Há clientes específicos, que alem das características comuns possuem ainda, no caso do Cliente PJ o nome do contato, uma lista de até 10 telefones, seu CNPJ e uma lista de até 3 números de fax. Outro tipo de cliente é o Cliente PF que possui ainda o numero do CPF e o numero do cartão de credito. O cliente PJ interage com um ou vários empregados da empresa no momento de sua compra. Esses empregados são os representantes de vendas da empresa. Tanto os clientes PJ e PF quanto o empregado devem implementar uma Interface conhecida como IPessoa. 31
s Exercícios 1) Cliente -nome: String -endereco: String -dataprimeiracompra: Date -dataultimacompra: Date -totalcomprado: Currency #creditopermitido: Currency #nivelcredibilidade() Cliente pessoa-jurídica nomecontato: String telefones[1..10]: String CNPJ: String FAX[1..3]: String Cliente pessoa-física nome: String CPF: String numcartaocredito colocarlistanegra() Empresa representante de vendas * * Empregado IPessoa 32
s Exercícios Um avião possui um controlador de Vôo, que por si só, é uma classe bem complexa, tendo suas próprias características e comportamentos. Avião pode ser representado por uma reunião de passageiros. E também como uma composição de no mínimo 1 até muitos motores. Se o objeto avião deixar de existir, os objetos motores também não mais existirão. Já os passageiros, mesmo que o objeto avião seja destruído, continuarão a existir. Vamos ver o código?? 33
s Exercícios ControladorVoo 1 controla possui * Avião * Passageiro 1..* Motor 34
s Observe um código em Java: public class Aviao { ControladorVoo controller;... // isto é composição Motor motor = new Motor(); // isto é agregação public void add(passageiro p){ p.embarc(this); } public void remove(passageiro p){ p.desembarc(this) } Composição é responsabilidade do próprio objeto. Por isso Motor é inicializado dentro do Avião. E NUNCA poderá ser substituído por outro enquanto o Avião existir. O controlador Voo controla vários aviões ao mesmo tempo. Ele funciona como um observador do avião, e os dois se comunicam. Assim, apenas um controlador é setado para cada avião, mas vários aviões podem estar associados ao mesmo controlador. O passageiro está dentro do avião, mas depois ele sai. O passageiro não pertence ao avião e não pode estar em dois aviões ao mesmo tempo. Portanto é uma agregação. // isto é uma associação public void setcontroladorvoo (ControladorVoo controller); public ControladorVoo getcontroladorvoo (); } 35
UML Diagrama de Objetos 36
UML Diagrama de Objetos É uma variação do diagrama de classes e utiliza quase a mesma notação, com duas exceções: os objetos são escritos com seus nomes sublinhados e todas as instâncias num relacionamento são mostradas. A diferença é que o diagrama de objetos apresenta os atributos com valores e mostra os objetos que foram instanciados das classes. É como se fosse o perfil do sistema em um certo momento de sua execução. Considere o diagrama de classes abaixo: Professor Curso Aluno -matrícula: String -nome: String 1..3 ministra 1..5 -coddisciplina: String -descrição: String -codturma: String 0..10 * -matrícula: String -nome: String -período: Integer 37
UML Diagrama de Objetos objeto anónimo p1: Professor matricula: "205-6712-09" nome: "Jaelson Castro" p2: Professor c1: Curso c3: Curso : Curso : Curso c2: Curso codcurso: "IF291" descrição: "MPS" codturma: I7 codcurso: "IF185" descrição: "AER" codturma: I6 : Aluno : Aluno : Aluno :Aluno : Aluno matricula: "562746134" nome: "John Major" : Aluno : Aluno :Aluno matricula: "219846534" nome: "Nelson Mandella" Bill: Lewinsky: classe não especificada Nos diagramas de objetos, o objeto é representado por um retângulo com o nome sublinhado 38
UML Diagrama de Objetos Os diagramas de objetos não são tão importantes como os diagramas de classes, mas eles são muito úteis para exemplificar diagramas complexos de classes ajudando muito em sua compreensão. Também são usados como parte dos diagramas de colaboração, onde a colaboração dinâmica entre os objetos do sistema é mostrada. Podemos chamá-lo de Diagrama de Instância. 39
UML Diagrama de Objetos Exemplo: O professor Claudio que ministra a disciplina 0034 Lógica e Programação na turma M45 possui três alunos. Marta e Celina são irmãs e João entrou na faculdade recentemente sob matricula 201134, e frequentam o terceiro período. : Aluno prof1: Professor matricula: nome: Claudio c1 : Curso coddisciplina: 0034 descrição: Lógica e Programação codturma: M45 matricula: nome: Marta período: 3 : Aluno : Aluno matricula: 201134 nome: João período: 3 matricula: nome: Celina período: 3 objeto anónimo 40