Engenharia de Software Orientada a Objetos Professor: Guilherme Timóteo Aula 3: – Modelagem de Classes (parte 2)

Slides:



Advertisements
Apresentações semelhantes
Orientação a objetos identidade abstração classificação encapsulamento
Advertisements

Análise e Projeto Orientado a Objetos
Desenvolvimento de aplicativos Orientados a Objetos: Definição e Características THIAGO IDEALI.
Princípios da Orientação a Objetos e a Linguagem UML
Projeto 1.
Diagrama de Classes.
UML Material retirado da apostila do Professor Cesar Augusto Tacla
UML - Diagrama de Classes e objetos
UML – MODELAÇÃO DA ESTRUTURA Professor Sandro Carvalho.
Modelagem Orientada a Objetos
Modelagem Orientada a Objetos Relacionamentos. Conteúdo n Ligação entre objetos n Associação entre classes n Agregação n Multiplicidade e Papel n Atributo.
UML Diagrama de Classes elementos básicos. Contexto Os diagramas de classes fazem parte do da visão estática da UML. Os elemento desta visão são conceitos.
Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones.
Análise Orientada a Objetos
Introdução ao paradigma de programação: Orientado a Objetos
Introdução a diagrama de classes e UML
Diagrama de Classes.
(Linguagem de Modelagem Unificada)
Análise Estruturada O mais amplamente usado dos métodos de modelagem de requisitos Modelos que retratam fluxo e o conteúdo da informação (dados e controle)
Paradigmas da Programação – Semestre 1 – Aula 5
Engenharia de Requisitos Requisito – sistema Caso de uso - usuário
Análise e Projetos de Sistemas UML-Linguagem de Modelagem Unificada Modelo de Dados com UML Diagrama de Classes Professor: Armando Hage.
TÉCNICAS DE PROGRAMAÇÃO II
DIAGRAMA DE COMPONENTES
Diagrama de Classes e Diagrama de Objetos
SQL Server 2012 Introdução a Modelagem de Dados
Diagrama de Classes e Colaboração
Introdução UML, Diagrama de Classes e Comunicação/Colabaração
DIAGRAMA DE CASO DE USO Prof. Fabíola Gonçalves C. Ribeiro.
DIAGRAMA DE CLASSE Modelagem de Software
Oberdan B. Ferreira Polimorfismo Oberdan B. Ferreira
PHP Orientado a Objetos Análise e Desenvolvimento de Sistemas Prof
Marcio de Carvalho Victorino
Programação Orientada à Objetos
Análise e Projeto de Sistemas
Programação Orientada a Objetos - Java
Princípios de Análise e Projeto Orientados a Objetos com UML
UML Diagrama de classes.
Curso de Aprendizado Industrial Desenvolvedor WEB Disciplina: Programação Orientada a Objetos I Professora: Cheli Mendes Costa Classes e Objetos em Java.
SISTEMAS DISTRIBUIDOS Aula 4
© Ricardo Pereira e Silva
Projeto Orientado aos Objetos Prof. Wolley W. Silva
UML – Engenharia de Software 1
Análise Orientado aos Objetos Prof. Wolley W. Silva
Programação Orientada à Objetos
Modelagem de Entidade/Objetos de Domínio com Diagrama de Classes
Modelagem de Entidade/Objetos de Domínio com Diagrama de Classes
Interfaces e classes abstratas. Conceitos de Orientação a Objeto.
Prof. Gilberto Irajá Müller
1 - Lafayette B. Melo – Análise e Projeto de Sistemas para a Internet – COINFO – CEFET-PB 7. Análise e projeto orientados a objetos 7.1 Técnica de modelagem.
POO Aula 03 Projeto OO com UML Eduardo Figueiredo 11 de Março de 2010.
Laboratório de Programação
Generalização e herança Agregação e composição
Análise e Projeto de Sistemas
Modelando Sistemas em UML
Tarciane Andrade Análise de Casos de Uso Tarciane Andrade
Introdução a Orientação a Objetos
20/04/2017 Orientação a Objetos 1 1.
Projeto de Banco de Dados
Módulo II Capítulo 1: Orientação a Objetos
Relacionamentos UML e Polimorfismo
Engenharia de Software Orientada a Objetos
Paradigmas da Programação – Semestre 1 – Aula 7 Professor: Eduardo Mantovani )
Aula 04 – Analise de Sistemas Profª Rita de Cassia Gaieski
Diagrama de Classes Herança Dependências.
Projeto de Arquitetura de Software
1 Especificação de Sistemas de Software e a UML. 2 Modelagem de sistema A modelagem de sistema auxilia o analista a entender a funcionalidade do sistema.
Análise e Design de Software Site:
Herança em Java Curso: Informática Disciplina: Programação Orientada a Objetos Prof. Abrahão Lopes
Análise e Projeto de Sistemas Análise & modelagem conceitual Prof. Edjandir Corrêa Costa
Transcrição da apresentação:

Engenharia de Software Orientada a Objetos Professor: Guilherme Timóteo Aula 3: – Modelagem de Classes (parte 2)

Agenda Conceitos de Ligação e Associação Generalização Herança Dicas Práticas para Modelagem de Classes

Conceitos de Ligação e Associação Ligação é uma conexão física ou conceitual entre objetos – Ex: João da Silva trabalha para a Empresa X A maioria das ligações se relaciona com dois objetos, embora existam ligações relacionando mais de dois objetos Associação é a descrição de um grupo de ligações com estrutura semelhantes – Ex: Uma Pessoa trabalha para uma empresa

Exemplo de Associação Na bolsa de valores, uma pessoa pode ter uma ou mais ações de uma determinada empresa. Por outro lado, as ações de uma empresa podem pertencer a diversas pessoas. Abaixo a modelagem do caso acima citado: O relaciomento acima citado correspondente a um relacionamento muitos para muitos. Nota que existe um “*” ao lado de cada classe envolvida no exemplo Pessoa nome: string Empresa nome: string PossuiAcao ** Diagrama de Classe

Implementação de uma associação A implementação é muito simples. Normalmente os desenvolvedores implementam associações como referências de um objeto para outro. Um referência é um atributo de um objeto que se refere a outro. Veja o exemplo abaixo: Pessoa nome: string Cargo nome: string Possui 1* Diagrama de Classe Pessoa nome: string cargo: Cargo Note que a classe Pessoa agora tem um atributo representando a associação com a classe Cargo.

Multiplicidade Especifica o número de instâncias de uma classe que se podem relacionar com outra. A notação UML prevê a multiplicidade como um intervalo: – 1 = Exatamente 1 instância – 1..* = 1 ou mais instâncias – 3..5 = de 3 a 5 instâncias – * = 0 ou muitas instâncias

Multiplicidade Abaixo um relacionamento exemplo “um para muitos”: Abaixo um relacionamento exemplo “muitos para muitos”: Pessoa nome: string Cargo nome: string Possui 1* Pessoa nome: string Empresa nome: string PossuiAcao **

Multiplicidade Abaixo um relacionamento exemplo “um para um”: Abaixo um relacionamento exemplo “um para um intervalo especificado”: Pais nome: string Capital nome: string Possui 11 Pessoa nome: string Dependente nome: string Possui 11..3

Multiplicidade Primeiramente devemos nos preocupar em identificar as classes e seus relacionamentos. Os detalhes sobre a multiplicidade deverão ser investigados quando o trabalho de identificação dos objetos estiver concluído. O tipo de multiplicidade mais comum é o “um para muitos”. A determinação da multiplicidade vai depender da análise do contexto da aplicação. Em alguns casos, uma pessoa poderá trabalhar em vários cargos nas empresas e desta forma, a multiplicidade será de muitos para muitos. Em outros casos, a pessoa poderá trabalhar somente em um cargo. Neste caso, a multiplicidade será de um para muitos.

Nome das extremidades Para tornar o modelo mais claro é importante indicar os nomes das extremidades. O nomes das extremidades normalmente aparecem como substântivos que irão descrever de alguma forma a função daquele extremidade no relacionamento entre as classes. Pessoa nome: string Empresa nome: string TrabalhaPara*0..1 EmpregadoEmpregador

Nome das extremidades Ao colocar os nomes nas extremidades você poderá ter uma noção dos possíveis erros de modelagem. Vamos abaixo a um exemplo: Pai 2 pai filho Filho * Errado Pessoa * 2 Certo

Classes de associação Classe de associação é um classe que representa uma associação entre outras classes. As classes de associação são utilizadas quando o relacionamento entre as classes é composto por mais de um atributo. Abaixo um exemplo: Pessoa nome: string Empresa nome: string ** EmpregadoEmpregador TrabalhaPara cargo: string salario: float Salario e cargo são os atributos que relacionam uma Pessoa com uma Empresa

Generalização e Herança É o relacionamento entre a superclasse e suas respectivas subclasses. A generalização organiza as classes de acordo com suas semelhanças e diferenças, estruturando a descrição dos objetos. O relacionamento entre superclasses e subclasses pode ser definido da seguinte forma: – Uma subclasse herda as características de uma superclasse – Um superclasse generaliza as características comuns às subclasses

Notação UML - Herança Abaixo um exemplo da notação UML para a característica de herança: Equipamento nome: string Fabricante: string Peso: float Bomba pressaoSucao: float pressaoDescarga:float Tanque volume: float TanqueEsferico diametro: float TanqueTeto altura: float

Termos utilizados Ancestral é o termo que se refere a classe pai na hierarquia de classes Descendente é o termo que se refere a classe herdeira na hierarquia de classes Cada classe descendente herda os atributos e operações das classes ancestrais Geralmente não se recomenda um modelo de classes com muitas classes descendentes aninhadas, porque isto torna o modelo difícil de ser entendido.

Uso da Generalização A generalização tem 3 objetivos principais: – Dar suporte a operação de polimorfismo para aumentar a flexibilidade do software – Gerar uma estrutura de objetos que se encaixe nos requerimentos de sistema indicados pelo usuário – Permitir a reutilização de códigos, ou seja, você pode herdar uma funcionalidade que já foi desenvolvida anteriormente.

Enumerações Uma enumeração é um conjunto de dados que possui um conjunto finito de valores – Ex: tipo de linha: Sólida Tracejada Pontilhada Ao se projetar um sistema é necessário visualizar as possíveis enumerações, já que elas são importantes durante a fase de implementação (pois assim é possível criar uma lista representando o conjunto enumerado)

Enumerações – Notação UML A notação UML é descrita abaixo: Note que é necessário indicar todos os valores possíveis para o enumeration em questão. > TipoDeLinha solida tracejada pontilhada

Erros de modelagem Abaixo um erro muito frequente na modelagem de classes: Criar classes descedentes para cada valor possível de um conjunto finito dificulta a implementação e manuntenção do sistema > TipoDeLinha solida tracejada pontilhada Linha Solida Tracejada Pontilhada Errado Certo

Classe Abstrata Classe abstrata é uma classe que não pode ser instanciada por um objeto. Isto quer dizer que você não pode criar um objeto que referencie uma classe abstrata Classe concreta é uma classe que pode ser instanciada por um objeto A classe abstrata pode ser utilizada para definir métodos que precisam ser herdados pelas classes descendentes É possível se definir uma operação abstrata, ou seja, uma operação que precisa ser implementada pela classe descendente Criar classes descedentes para cada valor possível de um conjunto finito dificulta a implementação e manuntenção do sistema

Classe Abstrata – Notação UML A classe Trabalhador está em itálico e por isso é definida como uma classe abstrata A operação calcularCusto também está em itálico e é considerada uma operação abstrata Não se pode criar objetos a partir da classe Trabalhador, já que ela é uma classe abstrata É possível se criar objetos a partir das classes Pedreiro e Serralheiro As classes Pedreiro e Serralheiro são obrigadas a implementar a operação abstrata calcularCusto. A operação verificarSituacao não é uma operação abstrata e por isso, as classes Pedreiro e Serralheiro não a precisa implementar Trabalhador calcularCusto verificarSituacao PedreiroSerralheiro

Pacotes Quando o sistema a ser modelado possui um grande número de classes é interessante agrupar as classes com finalidades semelhantes. Para agrupar as classes podemos criar um pacote. O pacote nada mais é do que um artificio para organizar as classes de maneira que facilite o entendimento do modelo. A notação UML para pacotes é descrita abaixo: Pacote 2Pacote1 Neste pacote poderão estar disponíveis as classes responsáveis pelos cadastros básicos do sistema Neste pacote poderão estar disponíveis as classes responsáveis pelos cálculos financeiros do sistema

Dicas práticas Para facilitar a modelagem de classes é interessante mencionar algumas dicas práticas: – Escopo: Primeiro procure entender o problema do usuário antes de tentar modelar as classes – Simplicidade: O simples é belo. Tente simplificar o modelo, pois assim ele será melhor entendido e de mais fácil manutenção no futuro – Referências: Não coloque atributos referenciando objetos. Ao invés disso, modele as associações assim como descrevemos nesta aula – Layout do diagrama: Tente centralizar as principais classes no centro do diagrama de classes e evite o cruzamento de linhas, pois isto dificulta o entendimento do modelo – Generalização: Tente evitar generalizações aninhadas profundamente – Revisões: Solicite que outro projetista valide o seu modelo de classes e principalmente verifique se ele entendeu o modelo que você projetou – Enumerações: Identifique cuidadosamente as possíveis enumerações do sistema – Pacotes: Tente organizar as classes em pacotes. Isto facilitará o entendimento do modelo – Documentação: Documente o seu modelo de classes. Acredite!! Você mesmo precisará desta documentação

Dúvidas ?