Baixe o app para aproveitar ainda mais
Prévia do material em texto
UML – Unified Modeling Language Diagramas de Classes José Correia, Abril 2006 (http://paginas.ispgaya.pt/~jcorreia/) José Correia UML – Diagramas de Classes 2 Questões ? Qual a finalidade dos diagramas de classes UML? ? Que elementos constituem os diagramas de classes? ? O que é uma Associação? ? O que significa a multiplicidade das associações? E a navegabilidade? ? O que é uma Classe-Associação? ? O que é uma Agregação? ? Qual a diferença entre uma Associação e uma Agregação? ? Para que serve a Generalização? ? O que são super-classes e subclasses? ? Qual a diferença entre agregações e generalizações? ? O que são métodos? ? etc. José Correia UML – Diagramas de Classes 3 Afinal, o que é um objecto? ? “Um objecto é uma pessoa, uma coisa, ou um lugar” - “Inside Taligent Technology”, Sean Cotter, Mike Potel, Addison Wesley, 1995 ? Para quem já conhece o modelo Entidade-Associação, pode dizer-se que um objecto é uma instância de uma entidade, não só com dados, mas também com comportamento ? Os objectos (que constituem um modelo) colaboram entre si para fornecerem as funcionalidades pretendidas • Exemplo: Numa sala de aula, um PROFESSOR ensina os ALUNOS, cada um dos quais sentado na sua CADEIRA e usando uma MESA • os objectos colaboram para realizar a tarefa para a qual foram criados José Correia UML – Diagramas de Classes 4 Noção de objecto Um objecto é algo (coisa concreta ou conceito)... … que faz sentido num determinado contexto … com fronteiras bem definidas … relevante para o problema em causa … com identidade própria • os objectos são distinguíveis uns dos outros apesar de poderem ter o mesmo valor em todos os seus atributos … com estado, comportamento e identidade • tem identidade pelo simples facto de existir José Correia UML – Diagramas de Classes 5 Objectos: Atributos e Estado ? Um objecto que represente uma cara tem como atributos dois olhos (um esquerdo e um direito), um nariz, duas orelhas (uma esquerda e outra direita), uma boca, etc. ? O estado desse objecto corresponde ao conjunto de valores dos seus atributos • Exemplos: estados “feliz” ou “com fortes dores” José Correia UML – Diagramas de Classes 6 Objectos: Comportamento ? O comportamento permitido a um objecto é o conjunto dos estados possíveis para esse objecto ? O comportamento que determinado objecto pode assumir fica definido pelo conjunto das operações que podem ser executadas sobre esse objecto ? Os atributos do objecto e, consequentemente, todas as alterações ao seu estado, apenas deverão estar acessíveis através das operações sobre os objectos • No exemplo anterior, podemos admitir as seguintes operações: ‘mostra muita dor’, ‘mostra desconforto’, ‘mostra alegria’ e ‘mostra desconfiança’. - exemplo extraído de “Quadrinhos e arte sequencial”, Eisner, 1985 José Correia UML – Diagramas de Classes 7 Objecto: Estado, Identidade e Comportamento ? Estado: valores de atributos (tamanho, forma, peso, etc.) e ligações com outros objectos ? Identidade no espaço: é possível distinguir dois objectos mesmo que o seu estado seja idêntico • exemplo: podemos distinguir duas folhas de papel A4, mesmo que tenham os mesmos valores dos atributos ? Identidade no tempo: é possível saber que se trata do mesmo objecto mesmo que o seu estado mude • exemplo: se pintarmos um folha de papel A4 de amarelo, continua a ser a mesma folha de papel ? Comportamento: um objecto exibe comportamentos invocáveis (por resposta a mensagens) ou reactivos (por resposta a eventos) José Correia UML – Diagramas de Classes 8 Objectos do mundo real e computacionais ? No desenvolvimento de software orientado por objectos, procura-se imitar no computador o mundo real visto como um conjunto de objectos que interagem entre si ? Alguns objectos computacionais são imagens de objectos do mundo real • Exemplos de objectos do mundo real: - o José - o carro com matrícula ZE-03-06 - a aula de ASI no dia 27/03/2006 às 18h00 • Exemplos de objectos computacionais: - o registo que descreve o José (imagem de objecto do mundo real) ? Dependendo do contexto (análise ou projecto) podemos estar a falar em objectos do mundo real, em objectos computacionais ou nas duas coisas em simultâneo José Correia UML – Diagramas de Classes 9 Objectos e Classes ? Há objectos que são muito parecidos • por exemplo, todas as pessoas têm um nome e data de nascimento, quase todas têm uma morada, a maioria terá telefone, etc. • Todos os objectos que modelizam o conceito “pessoa” partilham estas características, ou atributos, embora cada uma delas possa ter valores distintos para esses atributos ? Diz-se que estes objectos muito parecidos são todos de um mesmo tipo, ou classe • uma classe pode ser vista como uma “fábrica dos objectos” dessa classe ? “Uma classe é uma descrição de um grupo de objectos, todos com os mesmos atributos, comportamentos e associações com outros objectos” -- Terry Quatrani José Correia UML – Diagramas de Classes 10 Noção de classe ? Uma classe de objectos é um agrupamento de objectos com... … as mesmas propriedades (atributos) … igual comportamento (operações) … idênticas relações com outros objectos … a mesma semântica José Correia UML – Diagramas de Classes 11 Noção de classe (cont.) ? Em Matemática, uma classe é um conjunto de “objectos” com uma propriedade em comum, podendo ser definida em compreensão... C = {x ∈|N : x mod 3 = 2} ... ou em extensão C = {2, 5, 8, 11, 14, ...} ? Um objecto de uma classe é uma instância da classe ? A extensão de uma classe é o conjunto de instâncias da classe ? Classes de objectos estão para os objectos da mesma forma que tipos de dados estão para as variáveis (no âmbito de uma linguagem de programação) José Correia UML – Diagramas de Classes 12 Noção de classe (cont.) ? O conjunto de todos os objectos num determinado contexto/domínio/aplicação forma um universo ? As classes (em extensão) são subconjuntos do UoD (Universe of Discourse) UoD x José x Sofia x Claudia Aluno Curso x Electrotecnia x Informática objecto x Dª Rita x Sr. Silva Funcionário classe José Correia UML – Diagramas de Classes 13 Noção de classe (cont.) ? Exemplos de classes: • Coisas concretas: Pessoa, Turma, Carro, Imóvel, Factura, Livro • Papéis: Aluno, Professor, Piloto • Eventos: Curso, Aula, Acidente • Tipos de dados: Data, Intervalo de Tempo, Número Complexo, Vector ? Para se precisar o significado pretendido para uma classe, deve-se explicar o que é (e não é ...) uma instância da classe • Exemplo: “Um aluno é uma pessoa que está inscrita num curso ministrado numa escola. Uma pessoa que esteve no passado inscrita num curso, mas não está presentemente inscrita em nenhum curso, não é um aluno.” • o nome da classe pode não ser suficiente para se compreender o significado da classe José Correia UML – Diagramas de Classes 14 Diagramas de Classes ? Em UML, um diagrama de classes serve para capturar e modelar o vocabulário de um sistema, do ponto de vista do utilizador/problema ou do implementador/solução • ponto de vista do utilizador/problema – na fase de captura e análise de requisitos, em paralelo com a identificação dos casos de uso • vocabulário do implementador/solução – na fase de projecto (design) José Correia UML – Diagramas de Classes 15 Representação de Classes ? Nos diagramas (de classes), uma classe é representada por um rectângulo com o nome da classe ? Em UML, é habitual escrever os nomes das classes no singular (nome de uma instância da classe), com a primeira letra em maiúscula Aluno Professor Curso José Correia UML – Diagramas de Classes 16 Representação de Objectos ? Nos diagramas (de objectos),um objecto é representado por um rectângulo com o nome sublinhado José : Professor nome do objecto separador nome da classe ou : Professor objecto anónimo ou José: classe não especificada José Correia UML – Diagramas de Classes 17 Noção de atributo ? Um atributo é uma propriedade, com nome, de uma classe que descreve uma gama de valores que as instâncias da propriedade podem tomar ? Exemplos: • atributos de Pessoa: nome, data de nascimento, peso, etc. • atributos de Carro: matrícula, ano, peso, etc. ? Um atributo de uma classe tem um valor (possivelmente diferente) em cada instância (objecto) da classe • Exemplo: José é uma pessoa com nome “José Silva”, data de nascimento “18/3/1973” e peso “70 Kg” José Correia UML – Diagramas de Classes 18 Noção de atributo (cont.) ? Todos os objectos de uma classe são caracterizados pelos mesmos atributos ? Uma classe não pode ter dois atributos com o mesmo nome ? Podem existir atributos com o mesmo nome em classes diferentes (ver atributo peso definido nas classes Pessoa e Carro) ? O valor de um atributo de um objecto pode mudar ao longo do tempo • o estado de um objecto num dado momento é dado (em parte) pelos valores dos seus atributos (outra parte é dada pelas ligações que tem com outros objectos) José Correia UML – Diagramas de Classes 19 Representação de atributos e valores ? Os atributos são listados num compartimento de atributos (opcional) a seguir ao compartimento com o nome da classe ? A seguir ao nome de um atributo pode (deve!) indicar-se o tipo de dados (domínio do atributo) e o valor por defeito ? Os nomes dos tipos não estão pré-definidos em UML, podendo (devendo!) usar-se os da linguagem de implementação alvo Pessoa nome: string data de nascimento: date peso: inteiro = 75 kg compartimento de atributos valor inicial por omissão José: Pessoa nome = “José Silva” data de nascimento = 18/3/1973 peso = 70 kg classe objecto José Correia UML – Diagramas de Classes 20 Noção de operação ? Uma operação é uma função ou transformação que pode ser aplicada a objectos (por ele próprio, ou por objectos de outras classes) • Por exemplo, ligar e desligar constituem duas operações da classe Aparelho • Estas operações podem ser invocadas, por exemplo, por objectos das classes Pessoa e Controlador ? Uma operação… … é algo que se pode (mandar) fazer a um objecto de uma classe … é um serviço oferecido pelos objectos de uma classe … tem sempre como destino um objecto … independentemente de ser invocada por um objecto, é aplicada a um objecto José Correia UML – Diagramas de Classes 21 Noção de operação (cont.) ? Todos os objectos da classe partilham as mesmas operações ? A mesma operação pode ser aplicada a classes diferentes • É a propriedade de polimorfismo: uma dada operação assume diferentes formas em classes diferentes ? As operações são representadas num compartimento de operações, a seguir ao compartimento de atributos ? Para cada operação pode-se indicar o nome, lista de argumentos e tipo de retorno Pessoa nome: string morada: string mudar-morada(nova-morada:string): bool José Correia UML – Diagramas de Classes 22 Métodos ? O método é a implementação de uma operação para determinada classe ? Os métodos de uma operação devem ter a mesma assinatura: nº de argumentos, tipo de argumentos, tipo de resultado ? Uma operação polimórfica é uma operação que apresenta diversas implementações, cada implementação para cada tipo de objectos para os quais a operação é submetida ? Exemplo de uma operação polimórfica: • A operação print pode ser aplicada a ficheiros, tabelas de BD, écrans, etc. ? Para cada classe de objectos é definido o método apropriado à implementação da operação Ficheiro nome: string tamanho: integer data_criação: data print(impressora:string) remover_conteudo() renomear(nome:string) José Correia UML – Diagramas de Classes 23 Tipos de Operações ? Operações com efeitos laterais • modificam o estado do objecto • modificam os seus atributos e relações em que o objecto participa ? As perguntas (queries) são funções que calculam valores sem alterar o estado do objecto ? Atributos derivados • Propriedades de um objecto que podem ser calculadas a partir de outras propriedades. • Exemplo: as dimensões de um rectângulo são calculadas a partir dos seus vértices superior esquerdo e inferior direito. Rectângulo vertice_sup_esq: ponto vertice_inf_dir: ponto rodar(angulo: real) mover(vertice_sup_esq: ponto) aumentar(factor: real) José Correia UML – Diagramas de Classes 24 Ligações e Associações ? Conforme já foi dito, os objectos podem ter de colaborar entre si para levar a cabo determinada tarefa ? Esta necessidade de colaboração é modelizada por uma ligação entre os objectos ? Quando dois objectos estão ligados, também estão as respectivas classes ? Diz-se, então, que as classes estão associadas e representa-se esta associação por uma linha a unir as duas classes • a classe Professor está associada à classe Aluno pela associação ensina Professor ensina Aluno José Correia UML – Diagramas de Classes 25 Participante-1 Participante-2 Nome da associação Ligações e Associações (cont.) ? Uma associação é uma relação estrutural entre objectos das classes participantes (um objecto de cada classe em cada ligação) ? Uma associação descreve um grupo de ligações com estrutura e semântica comuns: • Pessoa trabalha-para Empresa • Pessoa é-descendente-directo-de Pessoa ? Uma associação não gera novos objectos Pessoa trabalha-para Empresa José Correia UML – Diagramas de Classes 26 Ligações e Associações (cont.) ? As associações são bidireccionais por natureza ? Pode haver mais do que uma associação (com nomes diferentes) entre o mesmo par de classes ? Assim como um objecto é uma instância duma classe, uma ligação é uma instância duma associação • José Silva trabalha-para a empresa Zacarias & Zacarias Lda. • José Silva é-filho-de José Silva Sénior e Maria da Fonte Silva ? As ligações da mesma associação relacionam objectos das mesmas classes José Correia UML – Diagramas de Classes 27 Ligações e Associações (cont.) ? As associações descrevem conjuntos de ligações potenciais, da mesma forma que as classes descrevem conjuntos de objectos potenciais ? Associações e ligações correspondem normalmente a verbos existentes na formulação do problema ? Matematicamente, uma associação binária é uma relação binária, i.e., um subconjunto do produto cartesiano das extensões das classes participantes ? Do ponto de vista formal e matemático uma ligação é um tuplo: sequência de instâncias de objectos José Correia UML – Diagramas de Classes 28 Características das Associações ? As associações podem ser binárias (caso normal), ternárias (caso não muito frequente) ou de ordem superior (caso muito raro) ? Associações ternárias ou de ordem superior devem, sempre que possível, ser transformadas em associações binárias ? Exemplo de uma associação ternária: • as pessoas envolvidas no desenvolvimento de um projecto utilizam determinadas linguagens de programação na sua implementação Projecto Linguagem deprogramação Pessoa José Correia UML – Diagramas de Classes 29 Papéis ? O papel que os objectos desempenham numa associação pode necessitar de identificação explícita ? Exemplo: ? Os papeis aparecem normalmente como substantivos na especificação do problema Participante-1 Participante-2 Nome da associação papel-1 papel-2 Empresa Pessoaempregador empregado Emprega José Correia UML – Diagramas de Classes 30 Auto-associação ? Pode-se associar uma classe com ela própria (em papéis diferentes) ? Associações entre objectosda mesma classe necessitam, obrigatoriamente, de identificação explícita dos papeis desempenhados por cada objecto ? Quando objectos da mesma classe se associam, diz-se que existe uma auto-associação • Exemplos: - pessoa É CASADA COM pessoa; - empregado É RESPONSÁVEL POR empregado Pessoa Paternidade pai filho filho mãe Maternidade José Correia UML – Diagramas de Classes 31 Multiplicidade das Associações ? O número de objectos de cada lado das associações entre as respectivas classes, designa-se por aridade (ou multiplicidade) da associação • Exemplo: Podemos dizer que um Aluno tem mais do que um Professor e um Professor ensina a mais do que um Aluno ? Notação (exemplos): • * - zero ou mais • 1 - exactamente um • 0..1 - zero ou um • 1..* - um ou mais • 1, 3..5 - um ou três a 5 Professor ensina Aluno 1..* 1..* José Correia UML – Diagramas de Classes 32 Multiplicidade das Associações (cont.) ? muitos-para-muitos ? muitos-para-um ? um-para-um x x x x x x Partic. 1 Partic. 2* * x x x x x x Partic. 1 Partic. 2* 1 x x x x x x Partic. 1 Partic. 21 1 José Correia UML – Diagramas de Classes 33 Multiplicidade das Associações (cont.) ? A multiplicidade de uma associação define o nº de objectos de uma classe que se relacionam com um único objecto de outra classe ? Alguns exemplos: • Um para Um • Um para Muitos • Muitos para Muitos • Um para Dois ou Quatro País Cidadetem-como-capital 1 1 Segmento de recta Ponto cruza2..* * José Correia UML – Diagramas de Classes 34 Multiplicidade das Associações (cont.) ? A multiplicidade deve ser a última coisa a determinar depois dos objectos, classes, atributos e associações ? Muitas das vezes a multiplicidade expõe pressupostos escondidos no modelo => A relação ‘trabalha-para’, entre Pessoa e Empresa, tem multiplicidade N para 1 ou N para M? • tudo depende do contexto que se está a analisar José Correia UML – Diagramas de Classes 35 Associações n-árias ? Notação ? Multiplicidade • A cada par de objectos das restantes classes (1 e 2), correspondem 0 ou 1 objectos da classe 3 Nome da Associação Classe-1 Classe-2 Classe-3 0..1 Classe-1 Classe-2 Classe-3 papel-3 papel-2papel-1 José Correia UML – Diagramas de Classes 36 Navegabilidade de Associações ? As associações são classificadas quanto à navegabilidade em: • bidireccionais (normal) • unidirecionais um objecto da classe 1 tem a responsabilidade de dar o(s) objecto(s) correspondente(s) da classe 2 (nível de especificação) ou um objecto da classe 1 tem apontador(es) para o(s) objecto(s) correspondente(s) da classe 2 (nível de implementação) ? Pode-se indicar o sentido em que se lê o nome de uma associação Classe-1 Classe-2 Empresa Pessoa Trabalha-para Emprega Classe-1 Classe-2 empregador empregado José Correia UML – Diagramas de Classes 37 Generalização ? A generalização constitui uma abstracção através da qual as semelhanças entre classes são partilhadas, sendo no entanto preservadas as suas diferenças ? Generalização representa um relacionamento entre uma classe (a super-classe) e uma ou mais versões refinadas (as sub-classes) de si própria • por exemplo, Equipamento é a super-classe de Bomba e Tanque Super-classe Sub-classe generalização especialização Pessoa Aluno José Correia UML – Diagramas de Classes 38 Generalização (cont.) ? A generalização é muitas vezes conhecida como uma “is-a relationship” (“é um” / “é uma”) • por exemplo, um Aluno é uma Pessoa • a generalização também é encarada como uma “a-kind-of relationship” - as sub-classes constituem determinadas espécies da super-classe • cada instância de uma sub-classe também é uma instância da super- classe (e de todas as classes ascendentes) • todas as operações das classes ascendentes são aplicáveis às classes descendentes • o estado de um objecto inclui o valor dos seus atributos específicos e o valor de todos os atributos das classes ascendentes UoD super-classe sub-classe x xx x x objecto José Correia UML – Diagramas de Classes 39 Pessoa nome : st ring dataNascimento : Data Pessoa(st ring, Data) ge tNome() : st ring ge tDat aNascimento() : Data ge t Idade () : int se tNome(st ring) : vo id se tDataNasc imento(Data) : vo id imprime () : vo id A luno curso : str ing A luno(s t ring nm, Data , str ing c rs) ge tCurso() : st ring se t Curso(s tr ing ) : v o id imprime() : vo id Pro fessor cat egoria : st ring Pro fe ssor(st ring nm, Data, st ring ct g) ge tCat egoria() : st ring se tCategoria(st ring) : vo id imprime () : vo id A lunoDo utoram ento 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 a redundância, promove-se a reutilização! José Correia UML – Diagramas de Classes 40 Exemplo de Generalização em C++ class Pessoa { private: string nome; Data dataNascimento; public: Pessoa(string, Data); string getNome() const; Data getDataNascimento() const; int getIdade() const; void setNome(string); void setDataNascimento(Data); void imprime() const; }; class Aluno : public Pessoa { private: string curso; public: Aluno(string nm, Data, string crs); string getCurso() const; void setCurso(string); void imprime() const; }; Pe sso a no m e : st rin g dat aNasc im e n t o : Dat a Pe sso a(st ring , Dat a) ge t Nom e () : st ring ge t Dat aNasc im e n t o () : Dat a ge t Id ade () : in t se t Nom e (st rin g ) : vo id se t Dat aNasc im e n t o (Dat a) : vo id im p rim e () : vo id A luno cu rso : st rin g A luno (st rin g nm , Dat a, st rin g c rs) g e t Cu rso () : st ring se t Cu rso (st ring ) : vo id im p rim e () : vo id José Correia UML – Diagramas de Classes 41 Uso da Generalização ? Relação de herança nas propriedades • A sub-classe herda as propriedades (atributos, operações e relações) da super-classe, podendo acrescentar outras ? A generalização é uma construção de bastante utilidade, não somente para a modelação de conceitos, mas também para a implementação de programas • as classes são estruturadas de forma a identificar as suas semelhanças e diferenças • a herança de operações é uma forma óptima de se reutilizar código ? A generalização torna evidentes as propriedades (atributos e operações) que são comuns e distintas José Correia UML – Diagramas de Classes 42 Uso da Generalização (cont.) ? Generalização, Especialização e Herança referem a mesma ideia: • Generalização refere o seguinte relacionamento entre classes: a super- classe generaliza as subclasses • Especialização é o inverso de generalização; refere a relação entre as classes, mas do ponto de vista da subclasse: as subclasses constituem uma especialização da super-classe • Herança refere o mecanismo de partilha de atributos e operações através da relação de generalização José Correia UML – Diagramas de Classes 43 Generalização: Exemplo Figura Cor Posição do centro Mover Seleccionar Figura unidimensional Orientação Alterar Escala Figura bidimensional Orientação Tipo de preenchimento Alterar Escala Preencher interior Linha Pontos extremos Desenhar Arco Raio Ângulo inicial Ângulo final Desenhar Polígono Nº Vértices Desenhar Circulo Diâmetro Desenhar Rodar José Correia UML – Diagramas de Classes 44 Agregação ? A agregação é uma forma especial de associação entre objectos, representando o seguinte tipo de relacionamento entre objectos: • A é parte de B • Um objecto do tipo B é constituído por objectos do tipoA ? A é um componente de B ? B representa a agregação (o agregado, a montagem, a “assemblagem”) B (classe de agregados) A (classe de componentes) José Correia UML – Diagramas de Classes 45 Agregação (cont.) ? Exemplo: • um texto contém 0 ou mais parágrafos • um parágrafo faz parte de um texto • um parágrafo contém 0 ou mais palavras • uma palavra faz parte de um parágrafo ? A agregação obedece a algumas propriedades suplementares: • a agregação é transitiva - se A é parte de B e B é parte de C, então A é parte de C • a agregação é anti-simétrica - se A é parte de B, B não é parte de A • algumas das propriedades do agregado propagam-se para as suas partes constituintes, possivelmente com algumas modificações Texto Parágrafo * 1 Palavra * 1 José Correia UML – Diagramas de Classes 46 Computador pessoal Monitor 0..1 “Caixa” Rato Teclado Motherboard 0..1 Sistema arrefecimento Floppy drive CD- ROM Fonte alimentação Bus CPU RAM Agregação: Exemplo =>Diagrama das componentes de um ‘Computador pessoal’, usando agregações José Correia UML – Diagramas de Classes 47 Agregação (cont.) ? Uma agregação... ... é uma relação semântica do tipo “part of” ... traduz a criação de objectos mais complexos a partir de objectos mais simples ? A existência dos componentes pode depender da existência do agregado de que fazem parte • ver exemplo do ‘Texto’! José Correia UML – Diagramas de Classes 48 Agregação: Propagação das Operações ? Num agregado de objectos, a movimentação do agregado implica a movimentação de cada um dos seus componentes ? Exemplo: • a operação copiar, quando aplicada a um documento, propaga-se a todos os seus parágrafos e depois a todos os seus períodos • a operação não se propaga no sentido inverso ? A propagação de operações é um dos indicadores típicos de uma associação do tipo agregação • a propagação refere o disparo automático de uma operação a uma rede de objectos quando determinada operação é aplicada a um dado objecto Parágrafo copiar Documento copiar copiar Palavra copiar copiar * * José Correia UML – Diagramas de Classes 49 Agregação vs. Generalização ? Uma agregação relaciona objectos distintos (um deles é parte de outro) ... ... enquanto a generalização relaciona classes semelhantes (a generalização constitui uma forma de estruturar a descrição dos objectos) ? Através da generalização, um objecto é simultaneamente uma instância da sub-classe e uma instância da sua super-classe ? A agregação é muitas vezes denominada de “a-part-of relantionship” ? A generalização é muitas vezes conhecida sob o termo “is-a relantionship” José Correia UML – Diagramas de Classes 50 Agregação vs. Generalização: Exemplo • Um candeeiro é composto por uma base e uma tampa e uma lâmpada e um interruptor e fios (“and relationship”) • Uma lâmpada é incandescente ou fluorescente (“or relationship”) Candeeiro de mesa Base Tampa Interruptor Fios Lâmpada fluorescente Lâmpada incandescente Balastro Arrancador Encaixe Lâmpada José Correia UML – Diagramas de Classes 51 Exemplo: Recibo ? Um recibo tem um número, uma data de emissão, o nome e o número de contribuinte da empresa que passa o recibo e do cliente, um subtotal, um total de IVA, um total e um conjunto variável de linhas. ? Cada linha do recibo refere um só produto (podendo cada um destes ser referido por mais do que uma linha de recibo) e contém a quantidade do produto comprado, a sua descrição, a taxa de IVA (em percentagem) paga por esse produto, o seu preço unitário e o preço a pagar tendo em conta a quantidade comprada. ? Um recibo é passado por uma e uma só Empresa a um Cliente (que pode ter muitos recibos da mesma empresa passados em seu nome). ? A Empresa é identificada por um número de contribuinte, tem um nome, um endereço, um número de telefone e um número de fax. ? O recibo deve poder ser impresso. José Correia UML – Diagramas de Classes 52 Pessoa nome numeroBI numeroTelefone morada numeroCartaConducao dataNascimento numeroContribuinte Cliente Produto descricao : String precoUnitario : Currency IVA : Byte = 17% LinhasRecibo quantidade calculaPreco() 0..* 11 0..* Recibo numero : Integer dataEmissao : Date imprime() calculaTotal() calculaSubTotal() calculaTotalIVA() 1..*1 1..*1 contém * 1 * 1o Cliente em nome de Empresa nome endereco numeroContribuinte numeroTelefone numeroFax 1 * 1 *é passado por a Empresa refere Recibo: possível solução... José Correia UML – Diagramas de Classes 53 Agregação vs. Associação ? Dois objectos que, habitualmente, são considerados independentes, devem ser ligados por uma associação e não por uma agregação ? Quando em dúvida, levantar as seguintes questões: 1) A expressão “parte de” faz algum sentido? 2) Operações aplicadas ao todo são também automaticamente aplicadas aos seus membros constituintes? 3) Valores de atributos para o todo são propagados para os seus membros constituintes? 4) Existe alguma assimetria na relação, sendo uma das classes subordinada da outra? José Correia UML – Diagramas de Classes 54 Agregação vs. Associação: Exemplo => Uma empresa é um agregado de pessoas e/ou um agregado de departamentos? • uma empresa não deve ser vista como um agregado de pessoas • empresas e pessoas são objectos independentes de igual importância ? A decisão agregação versus associação é sempre matéria de discernimento do analista ou projectista Empresa Pessoa tem-como-empregado 1..* * Departamento José Correia UML – Diagramas de Classes 55 Multiplicidade da Agregação ? As partes (componentes) podem ser / são: partilhadas ou exclusivas repetidas ou únicas obrigatórias ou opcionais ..* ..1 ..* ..1 1.. 0.. José Correia UML – Diagramas de Classes 56 Tipos de Agregados ? Agregado fixo: tem uma estrutura fixa • o número e tipo de cada componente está pré-definido (exemplo: caso do candeeiro) ? Agregado variável: tem um número finito de níveis, mas o número de partes varia • Exemplo: uma empresa tem várias divisões e cada divisão tem vários departamentos ? Agregado recursivo: o agregado contém, directa ou indirectamente, uma instância do mesmo tipo da agregação • o número potencial de níveis é infinito Programa de Computador Bloco Instrução Composta Instrução Simples * * José Correia UML – Diagramas de Classes 57 Relação de Composição ? A composição, ou agregação composta, é uma variante à agregação simples ? É uma forma mais forte de agregação aplicável quando: • existe um forte grau de pertença das “partes” ao “todo” • as “partes” não podem existir sem o “todo” • o “todo” e as “partes” têm tempo de vida coincidente ou, pelo menos, as partes nascem e morrem dentro de um todo • a eliminação do todo propaga-se para as partes, em cascata ? Notação: losango cheio • “um Departamento não existe fora do contexto de uma Empresa” Empresa Departamento *1 “o todo” “a parte” José Correia UML – Diagramas de Classes 58 Exemplo de Agregação e Composição ? Este diagrama mostra que uma Bilheteira (BoxOffice) pertence a exactamente um Cinema (MovieTheater) • destruindo o Cinema e Bilheteira também é destruída ? A colecção de Filmes (Movies) não está tão ligada ao Cinema José Correia UML – Diagramas de Classes 59 Associação como Classe ? Exemplo: • um utilizador pode estar autorizado a usar vários computadores • cada autorização caracteriza a prioridade e privilégios de acesso de um utilizador a um computador ? É conveniente (ou necessário!) modelar uma associação por meio de uma classe – Classe-Associação – quando: • a associaçãotem os seus próprios atributos (e, eventualmente, operações) • se pretende que a associação participe em associações com outros objectos • as ligações entre objectos passam a ser instâncias da classe-associação Utilizador Computador Autorização prioridade privilégios iniciar sessão autorizado-a-usar* ** * José Correia UML – Diagramas de Classes 60 Classe-Associação (cont.) ? uma classe-associação reúne as propriedades de associação e classe ? Notação: • uma classe-associação é representada como qualquer classe, mas tem uma linha a tracejado a ligá-la à associação. • o nome pode ser colocado num sítio ou noutro, conforme interessa realçar a natureza de associação ou de classe, mas a semântica é a mesma - o nome também pode ser colocado nos dois sítios. Pessoa Empresa Tarefa Descrição Data de início ... Tarefa * empregadorempregado 1..*
Compartilhar