Tópicos em Engenharia de Computação Introdução / Revisão UML e POO (JAVA) Prof. Ivan Prof. Zagari UML Linguagem Unificada. Não é metodologia, processo ou método. Versão atual 2.0 3 categorias de Diagramas Estruturais (Estáticos) De Classes; de Objetos; de Componentes; de Distribuição (Deployment) Comportamentais (Dinâmicos) Use Case; Seqüência; Colaboração (comunicação UML 2.0); Atividades; Estados; Gestão de Modelos De Pacotes; de Sub-Sistemas; 1
UML vs. Fases Eng. Software (Estáticos) Análise 1. Classes representam o do Domínio do Problema (entity) 2. Pacotes para facilitar compreensão do todo (dividir complexidade) Projeto 1. Classes representam ambos Domínios - Problema e Solução (entity, boundary, control) 2. Uso de Design Patterns e Frameworks 3. Pacotes como critérios para sub-divisão e compreensão de frameworks, sub-sistemas físicos e componentes 4. Sub-Sistemas Componentes Pacotes UML vs. Fases Eng. Software Diagramas Estruturais Diagramas Estruturais (Estáticos) Análise 5. Classes, herança de funcionalidade, associações simples 6. Diagrama de Classes de Visão Essencial 7. Coordenados e Modelados pelo Analista de Sistemas Projeto 5. Classes, Herança de funcionalidades, associações mais complexas, tipos, hierarquia de tipos, classes abstratas, interfaces (não é GUI) 6. Diagrama de Classes de Visão de Implementação 7. Coordenados e Modelados pelo arquiteto de aplicações (projetista). Incorporam-se informações de design. 2
UML vs. Fases Eng. Software (Dinâmicos) Análise 1. Casos de Uso Comportamento desejado (sem tecnologia) 2. Diagrama de seqüências expressam seqüência de mensagens (eventos entre objetos de análise) que modelam qual o comportamento desejado. Projeto 1. Realização de Casos de Uso (Use case realization). Casos de uso com todos os detalhes de design 2. Diagrama de seqüências expressam seqüência de mensagens (métodos) entre objetos e interfaces (não é GUI) que realizam (dão percepção de como é a solução) o caso de uso UML vs. Fases Eng. Software Diagramas Comportamentais Diagramas Comportamentais (Dinâmicos) Análise 3. Diagramas de Atividades modelam o workflow dos processos de negócios 4. Diagramas de Estados focados no comportamento geral (estados) dos objetos no contexto do problema Projeto 3. Diagramas de atividades modelam a solução algorítmica dos métodos das classes 4. Diagramas de atividades podem detalhar os estados associados ao comportamento da solução 5. Diagrama de Estados para objetos típicos da aplicação/solução (Forms, ODBC, etc..) 3
Classe Classe Interna Inner Class Especificadores de Acesso + Público - Privado # Protegido Atributos Operações Pacotes (Packages) Agrupamento de Classes Relacionadas Classes do Pacote Classes de outro Pacote Sub-Classes do Pacote Sub-Classes de outro Pacote Publico Pode Pode Pode Pode Protegido Pode Não Pode Pode Pode Privado Não Pode Não Pode Não Pode Não Pode 4
Construtor Construtor é método especial executado apenas uma vez, na hora da construção da instância. Usado quando o objeto que aciona a construção do objeto possui os dados da instância que se deseja criar e/ou para inicializar elementos internos ao objeto Construtores JAVA suportam sobrecarga (várias implementações), desde que cada um tenha assinaturas diferentes. Métodos também podem ter sobrecarga... Acessor Methods getters & setters Todo atributo é um característica da classe que se particulariza nas instâncias Em uma classe deve ter um método que permite recuperar o valor do atributo em uma dada instância (getter) e outro para estabelecer um valor de atributo em uma dada instância (setter) Outros métodos (não acessors) operam sobre o objeto 5
public class Conta { Exemplo: Acessors, Construtor e demais métodos private int numero; float saldo; Atributos public Conta(int numero) { this.numero = numero; this.saldo = 0; } public void depositar(float valordeposito) { this.saldo = this.saldo + valordeposito; } public boolean sacar(float valorsaque) { if (this.saldo>=valorsaque) { this.saldo = this.saldo - valorsaque; return true; } else return false; } public float getsaldo() { return saldo; } public void setnumero(int numero) { this.numero = numero; } public void setsaldo(float saldo) { this.saldo = saldo; }... } Construtor Demais Métodos Acessors (getter e setters) Comentário (Nota) Âncora (linha pontilhada, ligando um elemento UML com sua nota Exemplo: Método save() lança exceções usando objetos do pacote documentado na nota 6
Métodos Abstratos Métodos sem corpo e implementação Estereótipo <<abstract>> e/ou nome em itálico Classes Abstratas Aqueles que tem, pelo menos, um método abstrato; Estereótipo <<abstract>> e/ou nome em itálico Não podem ser Instanciadas Permitem herança dos métodos implementados e/ou métodos abstratos Herança (Generalização / Especialização) Permite que características (atributos e operações) de uma classe mais geral sejam herdadas por classe mais específicas. Herança de Métodos Permite que seja herdada a implementação de um método, que pode ser modificada na classe especializada; Herança de Métodos Abstratos Permite que seja herdada apenas a assinatura do método. A implementação fica localizada Assinatura Métodos: Nome + Parâmetros + Tipo de Retorno 7
Herança (Generalização / Especialização) E S P E C I A L I Z A Ç Ã O G E N E R A L I Z A Ç Ã O Dependência Relação entre dois elementos UML (origem destino). Se houver mudança no alvo (destino), há potencialmente um impacto na fonte (origem). Vice Versa aplicável se dependência for bidirecional (EVITE! Péssima Prática!!!!) Pode ser usado em diversos elementos UML: classes, pacotes, subsistemas, etc... 8
Dependência Classe6 oferece serviços à classe 5 Acoplamento entre componentes implementados Algum(ns) elemento(s) do pacote1 provocam dependência no pacote 0 Associações entre classes Denota uma relação estrutural entre classes Multiplicidade Denota o numero de instâncias de uma classe envolvida na associação com outra classe Navegabilidade (de A para B) Denota que uma classe A contém a informação necessária para que a classe B seja alcançada 9
Exemplo Herança / Associação Associação: Com navegabilidade Multiplicidade: Uma instância de acionador permite acesso a 0..N Instâncias de Conta Herança Corrente é um sub-tipo de conta acionador Acionador (from acionador) Exemplo Classe Abstrata folha main() 1 0..* Funcionario (from folha) nome : Logical View::java::lang::String pis : Logical View::java::lang::String Funcionario() getnome() setnome() getpis() setpis() tostring() calcularsalario() Horista (from folha) salariohora : double horastrabalhadas : double salariobruto : double Horista() gethorastrabalhadas() sethorastrabalhadas() getsalariohora() setsalariohora() calcularsalario() tostring() Mensalista (from folha) salariomensal : double descontofaltas : double Comissionado (from folha) totalvendasbruto : double percentile : double Mensalista() getdescontofaltas() setdescontofaltas() getsalariomensal() setsalariomensal() calcularsalario() tostring() Comissionado() getpercentile() setpercentile() gettotalvendasbruto() settotalvendasbruto() calcularsalario() tostring() 10
Classe que requisita o serviço é cliente Classe que provê o serviço é provedora (servidora) Existe uma dependência direta (explícita) entre cliente e provedor Funciona, se serviço provido apenas por 1 classe E se o mesmo serviço for implementado (provido) por duas classes diferentes??? Controle de qual classe deve ser instanciada caberá ao cliente Cliente deverá ter o controle de qual instância deve ser chamada. Aumenta complexidade da classe cliente. Diminui a reusabilidade das classes 11
Interface Descrevem um conjunto de operações visíveis (apenas a declaração/assinatura) que podem ser implementados por diversos objetos. Oferecem apenas parte do comportamento da operação (contrato), sem particularizar o método que será aplicado para sua implementação Interfaces descrevem serviços (contrato) que podem ser implementados de diferentes maneiras, por objetos de contextos completamente diferentes Não é herança. Trata-se de uma realização Representações da Interfaces Estereótipo <<interface>> Icônica 12
Realização Relação entre um elemento UML que define um contrato a ser seguido e outro elemento realizador, que aceita o contrato estabelecido e define os detalhes e particularidades Representado na UML com uma seta de herança, porém pontilhada. Por linha e circulo (pirulito - lollypop) quando o contratado é uma interface e o realizador (contratante) é uma classe UseCase UseCase-Realization 13
Classe cliente solicita serviços à interface Provê reusabilidade e Polimorfismo Cada classe provedora, implementa os serviços do contrato (interface) à sua maneira Classes provedoras podem ser de domínios e mesmo de pacotes diferentes Exemplo Interface (Visão Canônica - Lollypop) 14
Exemplo Interface (Visão Estereotipada) Exemplo Interface + Classe Abstrata 15
Associações Avançadas Composição: Classe A (agregadora, todo) contém a classeb (parte de). Vinculo indissociável. Agregação: Classe A (agregadora, todo) contém a classeb (parte de), porém a vinculação pode se desfazer. Composição Agregação 16