Diagramas de classes Um diagrama de classes serve para modelar o vocabulário de um sistema Ponto de vista do utilizador/problema na fase de captura e análise de requisitos, em paralelo com a identificação dos casos de utilização Vocabulário do implementador/solução na fase de projeto (design) Construído e refinado ao longo das várias fases do desenvolvimento do software, por analistas, projectistas (designers) e implementadores Também serve para: Modelos lógicos de bases de dados Modelos interface de usuário (estrutura de dados de formulários, relatórios, etc.) Modelos de domínio, negócio, análise e design Classes Representam conceitos, i.e., abstrações de um conjunto de objetos Nome Atributos Distinguem e qualificam os objetos da classe Métodos Descrevem o comportamento de uma classe Não é utilizado em modelagem conceitual Atributo Atributo2 Atributo3 NomeDaClasse Atributos... Método( ) Método2( ) NomeDaClasse NomeDaClasse
Visibilidade de atributos e operações Visibilidade: + (public) : visível por todos - (private) : visível só por operações da própria classe # (protected): visível por operações da própria classe e descendentes (subclasses) Princípio do encapsulamento: esconder todos os detalhes de implementação que não interessam aos clientes (utilizadores) da classe Toolbar # currentselection: Tool # toolcount: Integer + gettool(i: Integer): Tool + addtool(t: Tool) + removetool(i: Integer) - compact() usada internamente por outras operações Modelo de domínio (Biblioteca) Autor nome nacionalidade Publicação isbn nº de património título ano editora data de aquisição custo contador de consultas / estado : (disponível,emprestada) Biblioteca nome morada telefone Sócio número nome morada telefone data de inscrição validade da inscrição estado : (activo,inactivo) Só se considera a existência dma instância Requisição número data de requisição prazo de devolução data de devolução
Classes Persistentes Classes em C++!"# $%& ' ( ) ) +,-)./ 0 2 354+. +6 2 (.789(, 69:)./ 0 2 2 (.4+.-+7+) ;0 89(., 69:4+.-+ < = >-? @BA@ = C DFEG H > I J KMLNO9J P-I KMQ R ST U9V WNRX I J KMYZK Z LZI [ R O9J S K-N PYZK-ZU9V WNRX \ ]_^ ` \ ]9a b c9d ef \ g hji k lm n k o p mrqp smo t l u hji k lm v p so t l uwlbxfyjz{s-{y p smo t l u n o p } ~ Bƒ - 9ˆ ƒ Š ~ - ƒ ƒ Š ~ 9ˆ Œ _Ž ƒ 9 9ˆ Œ Ferramenta: Microsoft Visual Modeler class { private: string nome; Data datanascimento; public: (string, Data); string getnome() const; Data getdatanascimento() const; int getidade() const; void setnome(string); void setdatanascimento(data); virtual void imprime() const; }; class Aluno : public { private: string curso; public: Aluno(string nm, Data, string crs); string getcurso() const; void setcurso(string); virtual void imprime() const; };
Objetos Um objeto é algo com fronteiras bem definidas, relevante para o problema em causa, com estado, modelado por valores de atributos (tamanho, forma, peso, etc.) e por ligações que num dado momento tem com outros objetos comportamento um objeto exibe comportamentos invocáveis (por resposta a chamadas de operações) ou reactivos (por resposta a eventos) e identidade no espaço: é possível distinguir dois objetos mesmo que tenham o mesmo estado no tempo: é possível saber que se trata do mesmo objeto mesmo que o seu estado mude Objetos do mundo real e objetos computacionais No desenvolvimento de software OO, procura-se imitar no computador o mundo real visto como um conjunto de objetos que interagem entre si Muitos objetos computacionais são imagens de objetos do mundo real Dependendo do contexto (análise ou projeto) podemos estar a falar em objetos do mundo real, em objetos computacionais ou nas duas coisas em simultâneo Exemplos de objetos do mundo real: o Sr. João a aula de ES no dia /0/2000 às horas Exemplos de objetos computacionais: o registo que descreve o Sr. João (imagem de objeto do mundo real) uma árvore de pesquisa binária (objeto puramente computacional)
Atributos de objetos O estado de um objeto é dados por valores de atributos (e por ligações que tem com outros objetos) Todos os objetos de uma classe são caracterizados pelos mesmos atributos (ou variáveis de instância) o mesmo atributo pode ter valores diferentes de objeto para objeto Atributos são definidos ao nível da classe, enquanto que os valores dos atributos são definidos ao nível do objeto Exemplos: uma pessoa (classe) tem os atributos nome, data de nascimento e peso João (objeto) é uma pessoa com nome João Silva, data de nascimento 8/3/973 e peso 68 Kg Atributos de objetos Atributos são listados num compartimento de atributos (opcional) a seguir ao compartimento com o nome da classe Uma classe não deve ter dois atributos com o mesmo nome Os nomes dos tipos não estão pré-definidos em UML, podendose usar os da linguagem de implementação alvo classe compartimento de atributos nome do atributo tipo de dados nome: string data de nascimento: date peso: real = 75 kg valor inicial por omissão
Operações de objetos Comportamento invocável de objetos é modelado por operações uma operação é algo que se pode pedir para fazer a um objeto de uma classe objetos da mesma classe têm as mesmas operações Operações são definidos ao nível da classe, enquanto que a invocação de uma operação é definida ao nível do objeto Princípio do encapsulamento: acesso e alteração do estado interno do objeto (valores de atributos e ligações) controlado por operações Nas classes que representam objetos do mundo real é mais comum definir responsabilidades em vez de operações compartimento de operações nome: string morada: string setmorada(novamorada:string): bool Atributos e operações estáticos ( de instância) Atributo estático: tem um único valor para todas as instâncias (objetos) da classe valor está definido ao nível da classe e não ao nível das instâncias Operação estática: não é invocada para um objeto específico da classe Notação: nome sublinhado Correspondem a membros estáticos (static) em C++, C# e Java Factura número: Long data: Date valor: Real últimonumero: Long = 0 criar(data:date, valor:real) destruir() valortotal(): Real retorna a soma dos valores de todas as facturas cria nova factura com a data e valor especificados, e um nº sequencial atribuído automaticamente com base em ultimonumero
Relacionamentos Dependência Associação Generalização Agregação Associação Uma associação é uma relação entre objetos das classes participantes (um objeto de cada classe em cada ligação) Assim como um objeto é uma instância de uma classe, uma ligação é uma instância de uma associação Pode haver mais do que uma associação (com nomes diferentes) entre o mesmo par de classes Nome da associação multiplicidade.. Trabalha para empregado empregador Empresa papeis direção
Multiplicidade - exactamente um 0.. - zero ou um (zero a ) - zero ou mais 0.. - zero ou mais.. - um ou mais, 3..5 - um ou três a 5 Muitos-para-Muitos Muitos-para- -para- Professor Curso Aluno Curso Curso Plano de Curso (sem restrições) Associação Reflexiva: pode-se associar uma classe com ela própria (em papéis diferentes) pai 0.. filho filho mãe 0.. O nome é indicado no meio da linha que une as classes participantes Pode-se indicar o sentido em que se lê o nome da associação Empresa empregador Trabalha-para Emprega empregado
Associações n-árias Notação Class- role- Association Name role-3 Class-3 role-2 Class-2 Multiplicidade Class- Class-2 0.. Class-3 a cada par de objetos das restantes classes ( e 2), correspondem 0 ou objetos da classe 3 Atributos versus Associações Uma propriedade que designa um objeto de uma classe presente no modelo, deve ser modelada como uma associação e não como um atributo Exemplo: País nome: string capital: string capital: Cidade 0.. Pertence a Cidade nome: string capital
Agregação Utilizado para representar classes que são parte (componentes) de uma outra Também conhecida como é-parte-de Relação parte-todo agregação Departamento Empresa parte todo Equipe 0.. Jogador Uma equipe contém 0 ou mais jogadores Um jogador faz parte de uma equipa (num dado momento), mas também pode estar desempregado Composição Forma mais forte de agregação aplicável quando: existe um forte grau de pertença das partes ao todo cada parte só pode fazer parte de um todo (i.e., a multiplicidade do lado do todo não excede ) o topo 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 ( ) ou notação encaixada Membros-objeto em C++
Composição: notações alternativas Window scrollbar 2 title body Slider Header Panel Window scrollbar: Slider 2 title: Header Window scrollbar[2]: Slider title: Header body: Panel body: Panel (sub-objetos no compartimento dos atributos) Generalização Utilizado para representar classes que são uma generalização de uma mais específica Também conhecida como é-um-tipo-de Aluno Professor super-classe especialização sub-classe curso Aluno nome e-mail Professor categoria {overlapping} Aluno Professor Notação alternativa Professor-Aluno redução de horário
Generalização e hierarquias de classes Aluno Professor super-classe especialização sub-classe curso Aluno nome e-mail Professor categoria {overlapping} Aluno Professor Notação alternativa Professor-Aluno redução de horário Hierarquias de classes!"# $ % & & ' () & +, -. /0( (2. % 3'45% ) 276 & +, -.. % 0( ( 3(& 8, 4%- ' ) 2960( ( : ; < = >?> ; @ A7BC D< E F G HIJF K E G L MN O P7Q RIMS E F G TUG UHUE V MJFN G I K TUG UWP9Q RWIMS XY9Z\[ XY5] ^ _7` abxc dfe g h i j g k l inm l o k p h q Œ Ž Ž Ž dfe g h i r l o k ph qsh t5uvwo w uxl o k p h q z { }~ ƒ7 z {\ }~ zxƒ ˆ Š9 \ Š5{ ƒ7 ˆ j k l y Œ Ž Ž š \œ7 ž x Ž š Ÿ \ Ž š Ÿ Ž œ9 \ œ5 š Ÿ Ž Ÿ f ŽžŽf Ž œ Ž (...)
Classes e operações abstratas ( concretas) Classe abstrata: classe que não pode ter instâncias directas pode ter instâncias indirectas pelas subclasses concretas Operação abstrata: operação com implementação a definir nas subclasses uma classe com operações abstractas tem de ser abstracta função virtual pura em C++ Notação : nome em itálico ou propriedade {abstract} RectangularIcon height: Integer width: Integer display() Button Icon origin: Point display() getid(): Integer ArbitraryIcon edge:linecollection display() isinside(p:point):bool Fonte: The UML User Guide, Booch et al Relação de dependência Relação de uso entre dois elementos (classes, componentes, etc.), em que uma mudança na especificação do elemento usado pode afetar o elemento utilizador Exemplo típico: classe- que depende de outra classe-2 porque usa operações ou definições da classe-2 Úteis para gestão de dependências cliente servidor
Dependência e realização Aparecem frequentemente combinados Cliente usa o servidor sem dele depender directamente (depende apenas da interface ou contrato que o servidor implementa) cliente contrato ou interface dependência realização servidor Restrições Uma restrição especifica uma condição que tem de se verificar no estado do sistema (objetos e ligações) Uma restrição é indicada por uma expressão ou texto entre chavetas ou por uma nota posicionada junto aos elementos a que diz respeito, ou a eles ligada por linhas a traço interrompido (sem setas, para não confundir com relação de dependência) Podem ser formalizadas em UML com a OCL - "Object Constraint Language" Também podem ser formalizadas (como invariantes) numa linguagem de especificação formal como VDM++
Restrições em classes nome datanascimento localnascimento datafalecimento {chave candidata: (nome, datanascimento, localnascimento)} {datafalecimento > datanascimento} Fatura número data {chave candidata: (número)} LinhaFatura número artigo quantidade valor {chave candidata: (fatura.número, número)} Restrições em associações Factura {ordered} Membro-de {subset} Director-de LinhaFactura Comité uma factura é constituída por um conjunto ordenado de 0 ou mais linhas Conta {xor} Empresa associações mutuamente exclusivas chefe 0.. empregado trabalhador empregador.empregador =.chefe.empregador Empresa
Interfaces Uma interface especifica um conjunto de operações (com sintaxe e semântica) externamente visíveis de uma classe de (ou componente, subsistema, etc.) semelhante a classe abstracta só com operações abstractas e sem atributos nem associações (em C++ é mesmo isso!) separação mais explícita entre interface e (classes de) implementação interfaces são mais importantes em linguagens como Java, C# e VB.NET que têm herança simples de implementação e herança múltipla de interface Vantagem em separar interface de implementação: os clientes de uma classe podem ficar a depender apenas da interface em vez da classe de implementação Notação: classe com estereótipo «interface» (ligada por relação de concretização à classe de implementação) ou círculo (ligado por linha simples à classe de implementação) Interfaces: notações alternativas! "#$ %'&( ) %') + #,-. ClientClass ClientClass InterfaceClass ImplementationClass attributes operations ou operations «interface» InterfaceClass ImplementationClass attributes operations / )( #,-.0") 2 34 56 7 8 9 :; 2
Utilitários Um utilitário é um agrupamento de variáveis globais e procedimentos como classe Pode ser implementado por classe em que todos os atributos e operações são estáticos Notação: classe com estereótipo «utility» pi: Real «utility» MathPack sin(ang: Real): Real cos(ang: Real): Real Estereótipos de classes em modelos de negócio prqq,st%uv st%uwuxyz{ s)t%u z} u~u{ q) v ü q,ü w ƒ st%s W } szu s Tt%u w uxyz{ s t%u) } s w u{ } % u ˆ% )ŠŒ Ž ŽŠ ŠWˆ% ) Ž šž œ ŠT Ž%š ŽŠWˆ%ŽŠ žÿ ŸžT ž business actor! " #%$ #%& ')(" (! +,$-'"!. $ /0& +&/20" &3 4 5 6 7 8 9:;7 : 9<8 business worker =>? @ A BC%>)D? EFE%B GE C%Ḧ?C%HI>JKLA H%MNA I D>?IHO IP H A I D >? EJ >)LḦ QRE L D Ḧ? >STC%HI>JKLA HUḦ VC%>@? Ḧ I D>A? E O A I D >? E J>LḦ QE L D Ḧ? >SWC%HI>JKLA HU X E L D Ḧ?A I D >?IH Y%Z [ \] Y^_ ``a byc_da ^ ef _ g%y^\hf Yì]j _Z%_%f k_ g%ÿ j \Ẁ\ _ l ] Ÿ j \`md_ Ẁ_ l ] a ba g%_ g%\ẁg%yẁ^ j Yl\``YẀg%\d\nola Y business entity
Estereótipos de classes em modelos de análise! " $# %& ' $# () (+, -.+'(/0 2-3+ 465/,87) (--, +9 :/3;5/,<3 + +=. +3>/ (!(+?(@3 + AB? ) () / (C4 -C3-7D (". + 5/9 -E /3 -FG + ("+=C3 +/ EH +/ (!. / ("(C+I?) =+ (>) < / (KJ -5L/3;+, 3+9 -FM/-/'(C) (+, -. +(/0 N- 3 +$O < /. +'(C+3 ) =+3=//?'+P+3C=/-/$=+IQ 5) /R actor S TU VWS'X V'YZ S[WV \ Z ]^ Y SZ_`a b Z \ S cu] [VBa ]c6vwd e f boundary m no pqm'r psmtqcu mv mlw smtqcu mv xyp zb{ ts} x r p ~ { ts} mtx ptqm BqCu x tycxs p yc 6pqs ƒ 6p yqxn pv p sp v } x mptqcu pm no pqm y!r p ~ u mtqp } u xpptq} r xr p yk control S TU VWSg ]hh\ is'jb`v'k`] Z X]V hw]x Sl_ ]\ h"s`l_ V[S h g VZ h\ hwv[wv entity