Análise e Projeto de Sistemas Introdução ao Projeto Orientado a Objeto com UML CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 1/58 Objetivos Revisar os princípios do paradigma de orientação a objetos Apresentar os conceitos de orientação a objetos com a notação UML correspondente Foco em aspectos estruturais: diagramas de classes CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 2/58 Características do projeto OO A funcionalidade do sistema é expressa em termos de serviços de objetos (agrupados em classes) Áreas de dados compartilhadas são eliminadas. Objetos se comunicam através de passagem de mensagens Pela própria natureza, objetos podem ser distribuídos Potencialmente, embutem características como abstração, encapsulamento, information hiding, modularidade e extensibilidade CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 3/58 Desenvolvimento orientado a objeto Análise, projeto e programação orientados a objeto são relacionados, mas são distintos Análise orientada a objeto trata do desenvolvimento de um modelo orientado a objeto do domínio da aplicação (independente da implementação) Projeto orientado a objeto trata do desenvolvimento de um modelo orientado a objeto voltado para a implementação dos requisitos Programação orientada a objeto trata da realização de um projeto orientado a objeto usando uma linguagem de programação OO, como Java ou C++ CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 4/58 Objeto Modelo de um objeto real entidade física, conceitual ou de software Possui comportamento, estado e identidade Exemplo: conta, funcionario, livro, ponto de venda, ... donut CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 5/58 Objetos em UML : Conta Apenas o nome da classe contaSaque contaSaque : Conta Apenas o nome do objeto Nome da classe e do objeto CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 6/58 Classe Descrições de objetos com propriedades e comportamento comuns Abstração que enfatiza o que é relevante suprime o que não interessa Classes são fábricas de objetos Objetos são agrupados em classes CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 7/58 Classes de Objetos Quantas classes temos aqui? Fonte: Rational CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 8/58 Classe em UML Conta Nome da Classe Atributos Operações Conta numero saldo credito() debito() getSaldo() estrutura comportamento getNumero() CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 9/58 Classes: mais exemplos Indivíduo Indivíduo código : long sexo : char nome : String CIn-UFPE Indivíduo incluir() atualizar() Indivíduo código : long sexo : char nome : String incluir() atualizar() ©2003, Alexandre Vasconcelos & Augusto Sampaio 10/58 Classes: atributos Um atributo representa alguma propriedade que é compartilhada por todos os objetos da classe Os atributos descrevem os dados contidos nas instâncias de uma classe Em um dado momento, um objeto de uma classe conterá valores para todos os atributos descritos na sua classe CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 11/58 Atributos: notação Atributos podem ser identificados apenas com nomes Conta numero: integer Saldo: real Atributos podem ter seus tipos (ou classes) especificados e terem valores padrão definidos Parede altura : real largura : real espessura : real viga : boolean = false CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 12/58 Objetos com atributos valorados Objeto Valor do Atributo Conta : Conta numero = 21.342-7 saldo = 875,32 numero saldo : Conta numero = 23.025-1 saldo = 500,00 CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 13/58 Classes: operações Uma operação é uma abstração de algum serviço que se pode requisitar a um objeto e que é compartilhado por todos os objetos da classe Um classe pode ter qualquer número de operações, inclusive nenhuma CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 14/58 Operações: notação Como para os atributos, pode-se especificar uma operação apenas com seu nome Especificação das operações Conta credito() debito() getSaldo() getNumero() Pode-se também especificar a assinatura da operação: seus parâmetros, o tipo desses parâmetros e o tipo de retorno CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 15/58 Classes: visibilidade + # - Marcações de acesso podem ser usadas para especificar o tipo de acesso permitido aos atributos e operações público: todos os objetos do sistema podem usar protegido: qualquer descendente da classe pode usar privado: somente a própria classe pode usar CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 16/58 Visibilidade no Rose público privado protegido CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 17/58 Comunicação entre objetos Conceitualmente, objetos se comunicam através da troca de mensagens. Componentes de uma mensagem Nome do serviço requisitado pelo objeto que está fazendo a chamada. Informação requerida para executar o serviço e o nome de um proprietário para o resultado do serviço. Na prática, mensagens são normalmente implementadas através de chamadas de procedimentos (operações) Nome = nome do procedimento. Informação = lista de parâmetros para o procedimento. CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 18/58 Exemplos de mensagem // Chama um método associado a um objeto buffer que // retorna o próximo valor no buffer v = circularBuffer.Get () ; // Chama o método associado ao objeto termostato // que define a temperatura a ser mantida thermostat.setTemp (20) ; CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 19/58 Componente Parte não trivial, quase independente, substituível de um sistema, que provê a realização de (uma/um conjunto de) interface(s) Exemplos um código fonte um componente executáve tabelas de bancos de dados CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 20/58 Componentes em UML Arquivo fonte CIn-UFPE <<EXE>> Arquivo executável ©2003, Alexandre Vasconcelos & Augusto Sampaio 21/58 Pacote Mecanismo para organizar elementos em grupos Facilita entendimento do sistema Favorece modularidade e reuso em larga escala Essencial para estruturar sistemas complexos nome do pacote CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 22/58 Subsistema União de pacote (agrupa outros elementos) classe (comportamento) CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 23/58 Subsistema em UML <<subsystem>> Nome do subsistema CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 24/58 Relacionamentos Objetos e classes de objetos participam de relacionamentos com outros objetos e classes de objetos Tipos de relacionamento Associação simples agregação composição Dependência Generalização Realização CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 25/58 Navegabilidade de um relacionamento Em geral a navegação entre as classes de um relacionamento é bi-direcional Porém é possível limitá-la a apenas uma direção Usuário CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio Senha 26/58 Multiplicidade de um relacionamento Define quantos objetos participam do relacionamento O número de instâncias de uma classe relacionada a uma instância de outra classe Especificado em cada uma das pontas do relacionamento CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 27/58 Tipos de multiplicidade Não especificada Exatamente um Zero ou mais Muitos (mesmo que 0..*) Um ou mais Zero ou um 1..* Intervalo determinado 0..1 Valores múltiplos 2..4 1 0..* * 2, 4..6 CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 28/58 Associação simples Relação estrutural entre classes Companhia * contrata 1..* Empregado 0..* 1 CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 29/58 Associação unária Quando há um relacionamento de uma classe consigo própria Funcionário 1..* 1 gerencia CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 30/58 Relacionamentos e papéis Nome de papéis são úteis para distinguir relacionamentos entre o mesmo par de classes Companhia * contrata 1..* Empregado +empregador +subordinado 0..* +chefe 1 CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 31/58 Relacionamentos com atributos Modela as propriedades associadas com um relacionamento Para indicar os atributos de um relacionamento, usamos uma linha tracejada para unir o relacionamento às suas propriedades As propriedades devem ser representadas por uma classe CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 32/58 Exemplo de relacionamento com atributo Companhia * 1..* Empregado +empregador Trabalho descrição salário CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 33/58 Agregação Uma forma especial de associação entre o todo e suas partes, no qual o todo é composto das partes Todo Parte Empresa Departamento Agregação CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 34/58 Composição Uma forma mais forte de agregação Há uma coincidência da vida das partes Uma vez criada a parte ela irá viver e morrer com o todo O “Todo” é responsável pelo gerenciamento da criação e destruição das partes CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 35/58 Exemplo de Composição Pedido -codigo: Integer -dataRecebido -total: Currency +confirmar() +cancelar() -calcularTotal():Currency gerarNovoCodigo: String * Item de Pedido -quantidade: Integer -preco: Currency * Produto CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 36/58 Exemplo de diagrama de classe: Escola CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 37/58 Associação x Agregação x Composição Composição ou agregação? Na dúvida, use agregação! Agregação ou associação? Na CIn-UFPE dúvida, use associação! ©2003, Alexandre Vasconcelos & Augusto Sampaio 38/58 Dependência Dependências são relações de uso mais fraco que associação Uma dependência indica que mudanças em um elemento (o “servidor”) podem afetar outro elemento (o “cliente”) Uma dependência entre classes indica que os objetos de uma classe usam serviços dos objetos de outra classe Cliente CIn-UFPE Servidor ©2003, Alexandre Vasconcelos & Augusto Sampaio 39/58 Dependência Pode existir relacionamento de dependência entre vários elementos de UML Classe Cliente Fornecedor Cliente Pacote PacoteCliente Componente PacoteFornecedor Fornecedor Dependência Fonte: Rational CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 40/58 Generalização (ou herança) Uma generalização (também conhecida como herança) é um relacionamento entre um elemento mais geral (chamado de superclasse ou pai) e um mais específico (chamado de subclasse ou filho) Classes são organizadas numa hierarquia onde uma super classe é uma generalização de uma ou mais sub classes Uma sub classe herda os atributos e operações de sua super classe e pode adicionar seus próprios métodos ou atributos CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 41/58 Herança simples Classes herdando de apenas uma outra classe Figura cor largura da linha desenhar() girar(graus) selecionar() Superclasse (pai) Subclasses Círculo raio centro desenhar() Relacionamento de Generalização Retângulo vertices desenhar() diagonal() Quadrado CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 42/58 Herança múltipla Classes herdando de mais de uma classe Mamífero AnimalVoador Herança múltipla Cachorro CIn-UFPE Gato Morcego Passarinho ©2003, Alexandre Vasconcelos & Augusto Sampaio Gaviao 43/58 Vantagens da herança É um mecanismo de abstração que pode ser usado para classificar entidades É um mecanismo de reuso tanto em nível de projeto como em nível de programação CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 44/58 Problemas com a herança Classes de objeto não são auto-contidas. Elas não podem ser entendidas sem a referência a suas super classes Herança introduz complexidade e isso é indesejável, especialmente em sistemas críticos Herança múltipla: conflito de nomes CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 45/58 Realização e Interfaces Realização é uma relação pela qual um elemento especifica o contrato que outro elemento deve implementar A realização é um relacionamento entre uma especificação de interface e sua implementação CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 46/58 Interface Interfaces definem um tipo especificando apenas a assinatura de seus métodos Interfaces não possuem atributos e seus métodos não têm corpo Diferentemente das classes, as interfaces não especificam nenhuma estrutura Classes implementam interfaces provêem implementação para os métodos especificados em uma interface CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 47/58 Realização: notação Realização <<interface>> Empregado Empregado_Impl verificarFicha() calcularSalário() Classe Subsistema Componente Realização CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 48/58 Realização: outro exemplo <<interface>> ChaveKit Apertar Afrouxar Porca8mm Porca6mm Porca4mm Relacionamentos de realização CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 49/58 Realização: outro exemplo Porca8mm Porca6mm ChaveKit Porca4mm Relacionamentos de realização CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 50/58 Subsistemas x Componentes Ambos encapsulam um comportamento modelado por interfaces Subsistemas representam componentes no modelo de projeto Componentes são a realização física dos subsistemas Projeto <<subsystem>> Nome do subsistema Implementação Nome do componente CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 51/58 Classe abstrata Classe abstrata é aquela que não possui instância Em geral, possui pelo menos um método abstrato Métodos abstratos não têm corpo subclasses não abstratas são obrigadas a fornecer uma implementação para eles CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 52/58 Classes, Interfaces e Classes Abstratas Interfaces • Assinaturas dos métodos Classes • Atributos • Métodos CIn-UFPE Classes Abstratas • Atributos • Métodos • Assinatura de Métodos ©2003, Alexandre Vasconcelos & Augusto Sampaio 53/58 Classes abstratas x Interfaces Herança de tipos x herança de código Classes descrevem propriedades fundamentais de um objeto Interfaces descrevem papéis desempenhados por um objeto em determinadas situações Interfaces são úteis para implementar herança múltipla CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 54/58 Mecanismos adicionais de UML Estereótipos Notas Propriedades (Tagged values) Restrições CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 55/58 Estereótipos Mecanismo utilizado para estender os elementos de UML Define um novo modelo de elemento em termos de outro já existente Como criando um novo ícone utilizando a notação <<novo_elemento>> CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 56/58 Estereótipos: exemplo Classes de fronteira: <<boundary>> ClasseFronteira ClasseFronteira CIn-UFPE ©2003, Alexandre Vasconcelos & Augusto Sampaio 57/58 Notas Anotação utilizada para adicionar informação a diagramas Pode ser afixada a qualquer elemento de UML Pode ser ligada a um elemento com uma linha tracejada Exemplo: LeitoraCartao CIn-UFPE Esta classe é uma abstração do dispositivo de hardware que será usado para ler efetivamente as informações do cartão magnético. ©2003, Alexandre Vasconcelos & Augusto Sampaio 58/58 Propriedades (Tagged Values) Servem para estender elementos UML, adicionando informações sobre eles Exemplos já definidos em UML: Persistence (valores: persistent, transient) Location (ex. de valores: client, server) Você pode criar suas próprias propriedades Cliente {persistence=persistent} CIn-UFPE : LeitoraCartao {location=server} ©2003, Alexandre Vasconcelos & Augusto Sampaio 59/58 Restrições Usadas para criação de novas regras sobre elementos do modelo Ou modificação de regras existentes Funcionário Pessoa 1..* Diretor 3 CIn-UFPE 1 Empresa {subset} 1 ©2003, Alexandre Vasconcelos & Augusto Sampaio 60/58