Capítulo 8. Introdução UML 1/42
Índice Indice 8.1 - Introdução UML 8.2 - Modelação estrutural 8.2.1 - Representação de classes e objectos 8.2.2 - Relações entre objectos 8.2-3 - Relações de associação 8.2.4 - Relações de agregação e composição 8.2.5 - Relações de generalização 8.3 - Modelação de comportamento 8.3.1 - Use cases 8.3.2 - Actividade 8.3.3 - Sequência de mensagens 2/42
Índice 8.1 Introdução UML 8.1 - Introdução UML 8.2 -- Modelação estrutural 8.2.1 -- Representação de classes e objectos 8.2.2 -- Relações entre objectos 8.2--3 -- Relações de associação 8.2.4 -- Relações de agregação e composição 8.2.5 -- Relações de generalização 8.3 -- Modelação de comportamento 8.3.1 -- Use cases 8.3.2 -- Actividade 8.3.3 -- Sequência de mensagens 3/42
8.1 Introdução UML UML Unified Modeling Language Resulta da fusão de vários sistemas de análise -Booch (G. Booch) -OOSE (I. Jacobson) -OMT (J.Rumbaugh) 1º proposta divulgada em 1997. -1999 -> V1.1 ; 2000 -> V1.3 ; 2001 -> V1.4 ; 2003 -> V1.5 ; Abril 2004 -> V2.0 Ferramentas -Rational Rose -Plug-in do eclipse (http://www.soyatec.com/euml2) -ArgoUML (http://argouml.tigris.org) 4/42
8.1 Introdução UML UML Unified Modeling Language UML V2 disponibiliza 13 diagramas agrupados em: -Modelação estrutural : Pacotes, Classes, Objectos, estrutura composicional, componentes, aplicação física -Modelação de comportamento -: Use Case, actividade, máquina de estados, comunicação, sequência de mensagens, temporização, enquadramento das interacções Em POO são abordados apenas os diagramas centrais do UML, na sequência: - Conceito => representação em UML => Implementação em Java 5/42
Índice 8.2 Modelação estrutural 8.1 -- Introdução UML 8.2 - Modelação estrutural 8.2.1 -- Representação de classes e objectos 8.2.2 -- Relações entre objectos 8.2--3 -- Relações de associação 8.2.4 -- Relações de agregação e composição 8.2.5 -- Relações de generalização 8.3 -- Modelação de comportamento 8.3.1 -- Use cases 8.3.2 -- Actividade 8.3.3 -- Sequência de mensagens 6/42
Índice 8.2.1 Representação de classes e objectos 8.1 -- Introdução UML 8.2 - Modelação estrutural 8.2.1 - Representação de classes e objectos 8.2.2 -- Relações entre objectos 8.2--3 -- Relações de associação 8.2.4 -- Relações de agregação e composição 8.2.5 -- Relações de generalização 8.3 -- Modelação de comportamento 8.3.1 -- Use cases 8.3.2 -- Actividade 8.3.3 -- Sequência de mensagens 7/42
8.2.1 Representação de classes e objectos Representação de classes As classes são representadas por um rectângulo dividido em 3 zonas Identificador da classe Atributos Métodos Conta # dono: Pessoa # quantia: float = 0 + Conta() + deposito (valor:float) + levantamento (valor: float) : void + saldo () : float Tipo do atributo Inicialização do atributo Construtor Visibilidade: Visibilidade Tipo do parâmetro Tipo de retorno - + public (visível e acessível por todas as classes) - # protected (visível e acessível pelas classes filhas noutro package ou pelas classes que compõem o package) - - private (visível e acessível apenas pela própria classe) - ~ package (visível e acessível apenas pelas classes dentro do package) 8/42
8.2.1 Representação de classes e objectos Representação de objectos Os objectos são representados por um rectângulo dividido em 2 zonas -Nome do objecto instanciado e inicialização dos atributos Id do Objecto : Id da Classe ou apenas Id da Classe Inicialização dos atributos (1 por linha): Id = init. Conta1: Conta Dono = Rui Silva quantia = 100000 9/42
8.2.1 Representação de classes e objectos Métodos e atributos de classe e de objecto Atributos e métodos podem ser: -De classe : Um para todas as instancias (objectos) da classe (STATIC) -De objecto: Um para cada instância da classe Conta Os atributos e métodos de classe (static) são representados com sublinhado no diagrama. - numproximaconta: int # dono: Pessoa # quantia: float = 0 # incnumproxconta() : void + deposito (valor:float) + levantamento (valor: float) : void + saldo () : float 10/42
8.2.1 Representação de classes e objectos Herança A sub-classe constitui uma especialização da super-classe É representada por uma seta não preenchida da sub-classe para a super-classe Super-classe Animal Especialização Mamífero Ovíparo Nota: Quando não é necessário definir os atributos e métodos estes podem ser omitidos e fica apenas o diagrama de relação de classes 11/42
8.2.1 Representação de classes e objectos Métodos e classes abstractas Um método abstracto não tem implementação (é apenas um protótipo) Uma classe abstracta é uma classe que não pode ser instanciada. Os métodos e classes abstractas são representados com o nome em itálico Classe abstracta Conta + levantamento (valor: float) Especialização ContaOrdem ContaPrazo + levantamento (valor: float) + levantamento (valor: float) 12/42
8.2.1 Representação de classes e objectos Notas, comentários e restrições Notas e comentários : Ilustram comentários e não têm impacto semântico Istoéumanota. Conta Classe que representa a conta bancária Restrições: Permitem adicionar ou alterar a semântica assumida por omissão no elemento UML -Especificação da condição delimitada pelos caracteres {} {Isto é uma condição} Conta - numproximaconta: int # dono: Pessoa # sexo: String # quantia: float = 0 { (sexo = F or sexo = M ) and quantia 0 } 13/42
8.2.1 Representação de classes e objectos Estereótipos Permitem adicionar semântica ao símbolo -Os estereótipos são texto entre << >> Para organizar listas longas de atributos e métodos, estes podem ser agrupados em categorias discriminadas por estereótipos << conta à ordem >> Conta <<contador>> -numproximaconta: int <<atributos de Conta>> # dono: Pessoa # quantia: float = 0 <<número próxima conta>> # incnumproxconta() : void <<operações sobre conta>> + deposito (valor:float) + levantamento (valor: float) : void + saldo () : float 14/42
Estereótipos Definição de interfaces em UML 8.2.1 Representação de classes e objectos -A interface é uma classe que tem somente operações publicas sem métodos nem atributos. -isto é, um tipo especial de classe representada pelo estereótipo <<interface>> -Uma interface, para além das operações oferecidas só pode conter atributos constantes, representados com a propriedade {readonly} << interface >> Teste + valor1: int = 0 {readonly} + valor1: int = 1 {readonly} + setatributo (float valor) + getatributo():float constantes 15/42
Índice 8.2.2 Relações entre objectos 8.1 -- Introdução UML 8.2 - Modelação estrutural 8.2.1 -- Representação de classes e objectos 8.2.2 - Relações entre objectos 8.2--3 -- Relações de associação 8.2.4 -- Relações de agregação e composição 8.2.5 -- Relações de generalização 8.3 -- Modelação de comportamento 8.3.1 -- Use cases 8.3.2 -- Actividade 8.3.3 -- Sequência de mensagens 16/42
8.2.2 Relações entre objectos Os objectos não vivem isolados e nos programas são estabelecidas relações de cooperação Uma relação é uma conexão entre elementos. Existem diferentes tipos de relações por exemplo: -Associação: relaciona objectos entre si. -Composição/Agregação: relação que denota o todo constituído por partes. -Herança: mecanismo de generalização-especialização de classes 17/42
Índice 8.2.3 Relações de associação 8.1 -- Introdução UML 8.2 - Modelação estrutural 8.2.1 -- Representação de classes e objectos 8.2.2 -- Relações entre objectos 8.2-3 - Relações de associação 8.2.4 -- Relações de agregação e composição 8.2.5 -- Relações de generalização 8.3 -- Modelação de comportamento 8.3.1 -- Use cases 8.3.2 -- Actividade 8.3.3 -- Sequência de mensagens 18/42
8.2.3 Relações de associação Associação Numa associação são definidos identificador, papeis e multiplicidade -Os dois últimos são opcionais -Não há o conceito de posse. Os tempos de vida dos objectos ligados entre si são independentes Empregado Chefe Empregado Multiplicidade: -(1) exactamente 1 -(0..1) Zero ou 1 -(0..* ou *) Zero ou mais -(1..*) 1 ou mais empregados Papeis chefe * Chefia 0..1 Identificador multiplicidade Chefe 1 Chefe pode chefiar entre 0 e muitos empregados 1 empregado pode ter apenas um ou nenhum chefe 19/42
8.2.3 Relações de associação Associação A associação é estabelecida quando os atributos forem inicializados Nas associações dirigidas, apenas a classe de partida da seta contêm o atributo para a classe de chegada. Empregado - chefe ÉChefiadoPor 0..1 Chefe public abstract class Empregado { // public abstract class Chefe { // String nome; } } private Chefe nome; public Empregado(Chefe nomechefe){ this.nome = nomechefe; } Associação. Classe de partida contêm atributo com referência para a classe de chegada Associação é definitivamente estabelecida quando os atributos forem inicializados 20/42
8.2.3 Relações de associação Multiplicidade das associações No JAVA, a multiplicidade (que não seja 0..1 e 1) é implementada por atributos do tipo array, vector, etc. nas classes associadas. Pessoa dono 1 contas 0..10 Conta public abstract class Pessoa { } int numproxconta=0; static final int nummaxconta=10; Conta[] conta; // Pessoa(){ } conta = new Conta[numMaxConta] void associarconta(conta conta) { } this.conta[nummaxconta++] = conta; Multiplicidade: Pessoa tem até 10 contas public abstract class Conta { } Pessoa dono; Conta (Pessoa dono){ this.dono=dono; 21/42 } Associação é definitivamente estabelecida quando ambos os atributos forem inicializados
Índice 8.2.4 Relações de agregação e composição 8.1 -- Introdução UML 8.2 - Modelação estrutural 8.2.1 -- Representação de classes e objectos 8.2.2 -- Relações entre objectos 8.2--3 -- Relações de associação 8.2.4 - Relações de agregação e composição 8.2.5 -- Relações de generalização 8.3 -- Modelação de comportamento 8.3.1 -- Use cases 8.3.2 -- Actividade 8.3.3 -- Sequência de mensagens 22/42
8.2.3 Relações de agregação e composição Agregação A agregação denota uma relação do todo ser formado por partes -É tida como uma relação has-a ou tem um ou mais Especificada por um losango vazio no extremo relativo ao todo Empresa 0..1 frota * Veículo Composição Na composição, o desaparecimento do todo conduz ao desaparecimento das partes Especificada por um losango preenchido no extremo relativo ao todo. Livro 0..1 Páginas Na composição é ainda necessário garantir que o desaparecimento do todo implica o desapareceimento das partes. * 23/42
8.2.3 Relações de agregação e composição Composição Exemplo: -Uma pessoa é composta por uma cabeça e dois braços Pessoa 1 1 Cabeça 1 2 Braço -Implementação JAVA public class Pessoa { // private Cabeça cabeça; private Braço braço_esquerdo; private Braço braço_direito; } Implementação da composição (ou associação) através da definição de atributos do tipo referência Multiplicidade: Pessoa tem 2 braços 24/42
Composição Exemplo 2 8.2.3 Relações de agregação e composição Empresa 1 1..10 Departamento public class Empresa { int numproxdepartamento = 0; static final int nummaxdepartamentos = 10; Departamento departamentos[]; // 1 para n Empresa() { //Construtor departamentos = new Departamento[numMaxDepartamentos]; } void novodepartamento() { if (numproxdepartamento < nummaxdepartamentos ) departamentos[] = new Departamento(this); }} Implementação da composição (ou associação) através da definição de atributos do tipo referência public class Departamento { } // Empresa empresa; // 1 para 1 Departamento(Empresa e) { } empresa = e; 1 departamento é parte de 1 empresa 1 empresa é composta por n dptos. 25/42
8.2.3 Relações de agregação e composição Composição Alternativa recorrendo a classes aninhadas 1 Empresa 1..10 Departamento -A classe Departamento é em alternativa definida como classe aninhada da classe Empresa -Deixa de ser necessário guardar um atributo com referência da classe Departamento para a classe Empresa, pois esta é disponibilizada implicitamente pelo Java através do this qualificado 26/42
8.2.3 Relações de agregação e composição Composição Alternativa recorrendo a classes aninhadas 1 Empresa 1..10 Departamento public class Empresa { int numproxdepartamento = 0; static final int nummaxdepartamentos = 10; Departamento departamentos[]; // 1 para n public class Departamento { } Empresa() { Classe aninhada //Construtor departamentos = new Departamento[numMaxDepartamentos]; } void novodepartamento() { if (numproxdepartamento < nummaxdepartamentos ) departamentos[] = new Departamento(this); }} 27/42
Índice 8.2.5 Relações generalização 8.1 -- Introdução UML 8.2 - Modelação estrutural 8.2.1 -- Representação de classes e objectos 8.2.2 -- Relações entre objectos 8.2--3 -- Relações de associação 8.2.4 -- Relações de agregação e composição 8.2.5 - Relações de generalização 8.3 -- Modelação de comportamento 8.3.1 -- Use cases 8.3.2 -- Actividade 8.3.3 -- Sequência de mensagens 28/42
8.2.5 Relações de generalização Generalização Um humano é um mamífero ou qualquer humano é um mamífero Mamífero Humano Exemplo em Java public class Humano extends Mamífero { // } 29/42
8.2.5 Relações de generalização Generalização (simulando herança múltipla) Um hidroavião é uma avião e também um veículo naval ou: Qualquer hidroavião é um avião e um veículo naval Avião << interface >> VeículoNaval Hidroavião Exemplo em Java public class Hidroavião extends Avião implements VeículoNaval { // } Herança multipla é simulada recorrendo a interfaces 30/42
Índice 8.3 Modelação de comportamento 8.1 -- Introdução UML 8.2 -- Modelação estrutural 8.2.1 -- Representação de classes e objectos 8.2.2 -- Relações entre objectos 8.2--3 -- Relações de associação 8.2.4 -- Relações de agregação e composição 8.2.5 -- Relações de generalização 8.3 - Modelação de comportamento 8.3.1 -- Use cases 8.3.2 -- Actividade 8.3.3 -- Sequência de mensagens 31/42
Índice 8.3.1 Use cases 8.1 -- Introdução UML 8.2 -- Modelação estrutural 8.2.1 -- Representação de classes e objectos 8.2.2 -- Relações entre objectos 8.2--3 -- Relações de associação 8.2.4 -- Relações de agregação e composição 8.2.5 -- Relações de generalização 8.3 - Modelação de comportamento 8.3.1 - Use cases 8.3.2 -- Actividade 8.3.3 -- Sequência de mensagens 32/42
8.3.1 Modelação de comportamento Diagrama de casos de utilização (Use cases) O elemento básico de representação de casos de utilização é o actor Exemplo diagrama de generelalização de casos de utilização para perfis de acesso a um sistema 33/42
8.3.1 Modelação de comportamento Diagrama de casos de utilização (Use cases) Exemplo II 34/42
Índice 8.3.2 Actividade 8.1 -- Introdução UML 8.2 -- Modelação estrutural 8.2.1 -- Representação de classes e objectos 8.2.2 -- Relações entre objectos 8.2--3 -- Relações de associação 8.2.4 -- Relações de agregação e composição 8.2.5 -- Relações de generalização 8.3 - Modelação de comportamento 8.3.1 -- Use cases 8.3.2 - Actividade 8.3.3 -- Sequência de mensagens 35/42
8.3.2 Modelação de comportamento Diagrama de actividade São Equivalentes ao fluxograma em linguagem procedimental: Fluxograma em Linguagem procedimental 36/42
8.3.2 Modelação de comportamento Diagrama de actividade Utilizado para modelar: -A dinâmica da sociedade de objectos -O controlo de fluxo de um método São o equivalente ao fluxograma para a POO -O fluxo simples é representado por setas -O estado inicial é representado por um circulo preenchido -O estado final é representado por um circulo preenchido dentro de outro circulo 37/42
8.3.2 Modelação de comportamento Diagrama de actividade O fluxo alternativo é representado por um diamante não preenchido de onde parte a ramificação: -A ramificação pode resultar em 2 ou mais fluxos simples -Cada fluxo tem uma expressão booleana 38/42
Índice 8.3.3 Sequência de mensagens 8.1 -- Introdução UML 8.2 -- Modelação estrutural 8.2.1 -- Representação de classes e objectos 8.2.2 -- Relações entre objectos 8.2--3 -- Relações de associação 8.2.4 -- Relações de agregação e composição 8.2.5 -- Relações de generalização 8.3 - Modelação de comportamento 8.3.1 -- Use cases 8.3.2 -- Actividade 8.3.3 - Sequência de mensagens 39/42
8.3.3 Modelação de comportamento Diagrama de sequência de mensagens Contêm objectos, ligações entre eles e as mensagens (métodos chamados) que deram origem a estas ligações Representa os objectos no eixo das abcossas e os métodos chamados entre os respectivos objectos ordenados temporalmente no eixo das ordenadas 40/42
8.3.3 Modelação de comportamento Diagrama de sequência de mensagens Nos diagramas de sequência de mensagens os objectos são criados e destruidos -A sua existência começa com uma seta com o estereótipo <<create>> ligando os objectos envolvidos -A sua existência termina com uma seta com o estereótipo <<destroy>> ligando os objectos envolvidos 41/42
FIM 42/42