Princípios de Análise e Projeto Orientados a Objetos com UML

Slides:



Advertisements
Apresentações semelhantes
IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho
Advertisements

Modelagem de Classes do Domínio
UNICAMP Universidade Estadual de Campinas Centro Superior de Educação Tecnológica Divisão de Telecomunicações Propagação de Ondas e Antenas Prof.Dr. Leonardo.
Material pedagógico Multiplicar x 5 Clica!
Vamos contar D U De 10 até 69 Professor Vaz Nunes 1999 (Ovar-Portugal). Nenhuns direitos reservados, excepto para fins comerciais. Por favor, não coloque.
Desenvolvimento de Sistemas Baseado na Transformação de Modelos
Nome : Resolve estas operações começando no centro de cada espiral. Nos rectângulos põe o resultado de cada operação. Comprova se no final.
1 INQUÉRITOS PEDAGÓGICOS 2º Semestre 2003/2004 ANÁLISE GERAL DOS RESULTADOS OBTIDOS 1.Nº de RESPOSTAS ao inquérito 2003/2004 = (42,8%) 2.Comparação.
Orientação a Objetos: Encapsulamento e Classificação
Modelagem Orientada a Objetos
Resolução.
Relações Adriano Joaquim de O Cruz ©2002 NCE/UFRJ
Análise Orientada a Objetos
Árvores.
PERSPECTIVA CONCEITUAL
1 MODELAGEM COM A UML (UNIFIED MODELING LANGUAGE) BREVE HISTÓRICO CARACTERÍSTICAS CONCEITOS DE PROGRAMAÇÃO ORIENTADA A OBJETOS MODELAGEM DE ANÁLISE E DE.
1 Introdução aos padrões de projeto (GoF) Conceitos preliminares –Mecanismos de herança –Princípio de Substituição de Liskov –Acoplamento concreto x Acoplamento.
Introdução ao paradigma de programação: Orientado a Objetos
Introdução a diagrama de classes e UML
FUNÇÃO MODULAR.
Linguagem de Programação II
ANÁLISE E PROJETO ORIENTADAS A OBJETOS (parte 2) UFRJ/IM/DCC Lab PSI mai/1999.
Introdução à Modelagem Conceitual 1. Conceitos Básicos
Aula 4 Nomes, Vinculações, Tipos e Escopos
Aula 8 Orientação à Objetos
1 MAC 413/5715 – Seminário Prof. Fabio Kon Self: The Power of Simplicity David Ungar and Randall B. Smith OOPSLA 1987 Cristina Fang Eduardo Miyoshi Kasa.
Fases do desenvolvimento de software UML
Gerenciamento do Escopo
Classes e objetos Modelagem
Herança e Polimorfismo
Classes e objetos P. O. O. Prof. Grace.
Introdução a Programação Orientada a Objetos
AP 1.
Análise e Projetos de Sistemas UML-Linguagem de Modelagem Unificada Modelo de Dados com UML Diagrama de Classes Professor: Armando Hage.
Provas de Concursos Anteriores
TÉCNICAS DE PROGRAMAÇÃO II
DIAGRAMA DE COMPONENTES
Hamburgo, Alemanha Definir o caminho que irá permitir a Lions Clubs International alcançar o seu potencial pleno como organização.
Engenharia de Requisitos
Aluno: Mário Monteiro Orientador: Sérgio Soares 1.
Object Oriented Software Construction (MEYER, Bertrand)
DIAGRAMA DE CLASSE Modelagem de Software
Mapeamento de Objetos para o Modelo Relacional - Introdução
. Smalltalk HISTÓRICO . Década de 60 – POO . Dynabook (Alan Kay)
Coordenação Geral de Ensino da Faculdade
Modelagem Estatística
É u m e l e m e n t o f u n d a m e n t a l
Paradigmas da Programação – Semestre 1 – Aula 2 Professores: Eduardo Mantovani Fábio de Paula.
MATRICIAL CONSULTORIA LTDA. PREFEITURA MUNICIPAL DE GARIBALDI 23/10/ : ATENÇÃO Os locais descritos nas planilhas anexas não correspondem ao total.
Marcio de Carvalho Victorino
Olhe fixamente para a Bruxa Nariguda
Máquina de Turing Universal
INTRODUÇÃO À ORIENTAÇÃO A OBJETOS EM JAVA
UML Diagrama de classes.
Caminhos da Cana Relatório e show de imagens Marcos Fava Neves Prof. FEA/USP Ribeirão Preto Purdue University (2013)
UML - Unified Modeling Language
© Ricardo Pereira e Silva
Projeto Orientado aos Objetos Prof. Wolley W. Silva
Análise Orientado aos Objetos Prof. Wolley W. Silva
Marcio de Carvalho Victorino
Programação Orientada à Objetos
Interfaces e classes abstratas. Conceitos de Orientação a Objeto.
Generalização e herança Agregação e composição
Orientação a Objetos com UML
Orientação a Objetos com UML. Copyright © 2006 Qualiti. Todos os direitos reservados. Qualiti Software Processes Análise e Projeto OO com UML e Padrões|
20/04/2017 Orientação a Objetos 1 1.
Palavras-Chaves Linguagem gráficas e utilizações de símbolos.
Paradigmas da Programação – Semestre 1 – Aula 7 Professor: Eduardo Mantovani )
Engenharia de Software Orientada a Objetos Professor: Guilherme Timóteo Aula 3: – Modelagem de Classes (parte 2)
Análise e Projeto de Sistemas Análise & modelagem conceitual Prof. Edjandir Corrêa Costa
Transcrição da apresentação:

Princípios de Análise e Projeto Orientados a Objetos com UML Eduardo Bezerra Editora CAMPUS

Capítulo 9 Generalização Se eu vi mais longe que outros, é porque eu me apoiei nos ombros de gigantes. Isaac Newton

Introdução O modelo de classes também pode representar relacionamentos entre classes. Esses denotam relações de generalidade ou especificidade entre as classes envolvidas. o conceito mamífero é mais genérico que o conceito ser humano. o conceito carro é mais específico que o conceito veículo. Chamado de relacionamento de generalização.

Introdução Também pode ser chamado de relacionamento de especialização, pois a generalização e a especialização são dois pontos de vista do mesmo relacionamento. O termo herança também é comumente utilizado como sinônimo do relacionamento de generalização. (implementação) A generalização pode ser utilizada tanto no modelo de classes de domínio quanto no de especificação.

Introdução

Semântica de uma generalização, .

Terminologia subclasse X superclasse. supertipo X subtipo. classe base X classe herdeira. classe de especialização X classe de generalização. ancestral e descendente (generalização em vários níveis)

Notação para generalização

Generalização X Associação Importante: a generalização difere da associação (agregação, composição ) porque a primeira se trata de um relacionamento entre classes. “Gerentes são tipos especiais de funcionários”. “Gerentes chefiam departamentos”. Na associação, objetos específicos de uma classe se associam entre si ou com objetos específicos de outras classes.

Herança de associações Atributos e operações e associações são herdados pelas subclasses.

Hierarquias de generalização

Hierarquias de generalização A generalização pode ser aplicada em vários níveis (hierarquia de generalização). uma classe que herda propriedades de uma outra classe pode ela própria servir como superclasse. Características importantes: Transitividade: uma classe em uma hierarquia herda propriedades e relacionamentos de todos os seus ancestrais.. Assimetria: dadas duas classes A e B, se A for uma generalização de B, então B não pode ser uma generalização de A. Ou seja, não pode haver ciclos em uma hierarquia de generalização.

Hierarquias de generalização

Herança múltipla

Herança múltipla Herança múltipla: Uma classe pode ter mais de uma superclasse. Tal classe herda de todas a suas superclasses. O uso de herança múltipla deve ser evitado. Esse tipo de herança é difícil de entender. Algumas LPs não dão suporte à implementação desse tipo de herança (Java e Smalltalk).

Exemplo (Herança múltipla)

Classes abstratas

Relacionamentos de dependência Usualmente, a existência de uma classe se justifica pelo fato de haver a possibilidade de gerar instâncias (classes concretas). No entanto, podem existir classes que não geram instâncias diretas: classes abstratas. Utilizadas para organizar e simplificar uma hierarquia de generalização. Propriedades comuns a diversas classes podem ser organizadas e definidas em uma classe abstrata a partir da qual as primeiras herdam. Subclasses de uma classe abstrata também podem ser abstratas, mas a hierarquia deve terminar em uma ou mais classes concretas.

Notação para classes abstratas Na UML, uma classe abstrata é representada com o seu nome em itálico.

Definição de restrições sobre uma generalização

Restrições sobre generalizações Restrições sobre generalizações são representadas (entre chaves) no diagrama de classes próximas à linha do relacionamento. Restrições predefinidas pela UML: Sobreposta Disjunta Completa Incompleta

Exemplos (Restrições sobre generalizações)

Refinando o modelo de classes com generalização

Refinando o modelo de classes com generalização A generalização permite refinar o modelo de classes. Idéia básica: identificar abstrações mais genéricas ou mais específicas que outras. Refinamentos podem seguir segundo duas estratégias alternativas e complementares: Generalização: criar uma classe mais genérica, e definir as classes semelhantes como subclasses. Especialização: criar classes mais específicas a partir de uma classe preexistente.

Refinando o modelo de classes com generalização O seguinte teste pode ser realizado para identificar se duas classes X e Y se relacionam por generalização: Regra da substituição: seja a classe A uma generalização de outra B. Não pode haver diferenças entre utilizar instâncias de B ou de A, do ponto de vista dos usuários de A. Ou seja, é inadequado o uso de generalização onde nem todas as propriedades da superclasse fazem sentido para a subclasse. X é um tipo de Y?

Conformidade das subclasses à superclasse

Dicas Deve-se evitar a construção de hierarquias de generalização muito profundas (com mais de três níveis) dificultam a leitura do diagrama. Papéis e subclasses não devem ser confundidos. Um papel corresponde ao uso de uma certa classe em uma associação.Uma classe pode assumir vários papéis. O modelador deve evitar a criação de subclasses em situações que podem ser resolvidas através da utilização de papéis.

Papel X Subclasse

Herança de operações e polimorfismo

Herança de operações e polimorfismo Uma subclasse herda todas as propriedades de sua superclasse que tenham visibilidade pública ou protegida. Entretanto, pode ser que o comportamento de alguma operação herdada seja diferente para a subclasse. Nesse caso, a subclasse deve redefinir o comportamento da operação. A assinatura da operação pode ser reutilizada. A implementação da operação (método) é diferente.

Operações polimórficas Operações polimórficas são operações de mesma assinatura definidas em diversos níveis de uma hierarquia de generalização e que possuem comportamento diferente. assinatura é repetida na(s) subclasse(s) para enfatizar a redefinição de implementação. Operações polimórficas implementam o princípio do polimorfismo no qual duas ou mais classes respondem a mesma mensagem de formas diferentes. Objetivo: garantir que as subclasses tenham uma interface em comum.

Operações polimórficas Operações polimórficas facilitam a implementação. Se duas ou mais subclasses implementam a mesma operação polimórfica, a mensagem a ser passada é a mesma para todas elas. O remetente da mensagem não precisa saber qual a verdadeira classe de cada objeto, pois eles aceitam a mesma mensagem. A diferença é que o método que implementa a operação é diferente em cada classe.

Exemplo (Operações polimórficas)

Operações abstratas e polimorfismo Em termos de operações, uma classe é abstrata quando ela possui pelo menos uma operação abstrata. Uma operação abstrata não possui implementação. Uma classe pode possuir tanto operações abstratas quanto operações concretas. Uma classe que possui pelo menos uma operação abstrata é abstrata. Uma subclasse que herda uma operação abstrata e não fornece uma implementação é ela própria abstrata.

Operações abstratas e polimorfismo As classes Círculo e Quadrado são concretas, pois fornecem implementação para a operação abstrata herdada.

Operações abstratas e polimorfismo Classes ContaCorrente e ContaPoupança redefinem a operação aplicarJuros.

Reuso através de delegação

Reuso por generalização O reuso por generalização se baseia na noção de subclasses herdando comportamento de sua superclasse. Exemplo: um objeto ContaCorrente não tem como atender à mensagem para executar a operação debitar só com os recursos de sua classe. Ele, então, utiliza a operação herdada da superclasse. Vantagem: fácil de implementar. Desvantagem: Exposição dos detalhes da superclasse às subclasses (Princípio do encapsulamento). Possível violaçào do Princípio de Liskov (regra da substituição).

Reuso por delegação A delegação é outra forma de realizar o reuso. “Sempre que um objeto não pode realizar uma operação por si próprio, ele delega uma parte dela para outro(s) objeto(s)”. A delegação é mais genérica que a generalização. um objeto pode reutilizar o comportamento de outro sem que o primeiro precise ser uma subclasse do segundo.

Reuso por delegação O compartilhamento de comportamento e o reuso podem ser realizados em tempo de execução. Desvantagens: desempenho (implica em cruzar a fronteira de um objeto a outro para enviar uma mensagem). não pode ser utilizada quando uma classe parcialmente abstrata está envolvida.

Generalização X Delegação

Generalização X Delegação Há vantagens e desvantagens tanto na generalização quanto na delegação. De forma geral, não é recomendado utilizar generalização nas seguintes situações: Para representar papeis de uma superclasse. Quando a subclasse herda propriedades que não se aplicam a ela. Quando um objeto de uma subclasse pode se transformar em um objeto de outra subclasse. Por exemplo, um objeto Cliente se transforma em um objeto Funcionário (vide a seguir).

Classificação dinâmica

Classificação dinâmica Problema na especificação e implementação de uma generalização. Um mesmo objeto pode pertencer a múltiplas classes simultaneamente, ou passar de uma classe para outra. Considere uma empresa em que há empregados e clientes. Pode ser que uma pessoa, em um determinado momento, seja apenas cliente; depois pode ser que ela passe a ser também um empregado da empresa. A seguir essa pessoa é desligada da empresa, continuando a ser cliente.

Classificação dinâmica As principais LPOO (C++, Java, Smalltalk) não dão suporte direto à implementação da classificação dinâmica. se um objeto é instanciado como sendo de uma classe, ele não pode pertencer posteriormente a uma outra classe. Solução parcial: definir todas as possíveis subclasses em uma determinada situação. Exemplo (para a situação descrita há pouco): as classes Empregado, Cliente e EmpregadoCliente seriam criadas.

Classificação dinâmica Não resolve o problema todo: Pode ser que um objeto mude de classe! (metamorfose) A adição de novas classes à hierarquia torna o modelo ainda mais complexo. Uma melhor solução: utilizar a delegação. Uma generalização entre cada subclasse e a superclasse é substituída por uma composição. Exemplo no próximo slide.

Classificação dinâmica

Classificação dinâmica Comentário final: nada impede que haja uma hierarquia de classes em um modelo de domínio onde um objeto possa pertencer a mais de uma subclasse, ou possa mudar de subclasse. No modelo de especificação é que o modelador deve considerar a reestruturação da hierarquia de classes para resolver o problema.