Projeto Orientado a Objetos

Documentos relacionados
Capítulo 2. Orientação a Objetos

Aula 7 Visibilidade entre objetos e Diagramas de Classes

Programação Orientada a Objetos

Engenharia de Software. Aula 10 Representação dos Conceitos de Orientação a Objetos. Prof. Me. Rogério Ferreira

MODELAGEM DE SISTEMAS Unidade 4 Modelo de Classes de Projeto. Luiz Leão

Modelo do Mundo Real. Abstração. Interpretação

Requisitos de sistemas

Orientação a Objetos (OO) LPG II - Java. Orientação a Objetos (OO) Programação Orientada a Objetos. Programação Procedimental

Orientação a Objetos (OO) Java Avançado Revisão do Paradigma de. Orientação a Objetos (OO) Programação Orientada a Objetos. Programação Procedimental

15/04/2013. Outro Diagrama de Classes. Primeiro Diagrama de Classes. Diagrama de Classes. Atributos. Eduardo Figueiredo

Laboratório de programação II

Notas de Aula 03: Introdução a Orientação a Objetos e a UML

Introdução ao Java. Prof. Herbert Rausch Fernandes

POO Paradigma Orientado a Objetos. POO Paradigma Orientado a Objetos. POO Paradigma Orientado a Objetos. POO Paradigma Orientado a Objetos

Linguagem de Programação I Apresentação da Disciplina

Programação Orientada a Objetos 2 Flávio de Oliveira Silva, M.Sc.

Diagramas de Colaboração e Padrões GRASP

Introdução à Orientação a Objetos. SSC Engenharia de Software I Profa. Dra. Elisa Yumi Nakagawa 2 o semestre de 2012

Daniel Wildt

Programação Orientada a Objetos. Prof. MsC Sílvio Bacalá Júnior

Introdução à Orientação a Objetos

Lista de Exercícios AV1

Orientação a Objetos (OO)

Linguagem de Programação II Programação Orientada a Objetos. Orientação a Objetos

Programação Orientada a Objetos

SEMINÁRIOS INTEGRADOS EM ADS PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS

SEMINÁRIOS INTEGRADOS EM SISTEMAS DE INFORMAÇÃO. Luiz Leão

CONCEITOS BÁSICOS E MODELO DE PROJETO

Introdução à Análise e Projeto de Sistemas

Tópicos da Aula. Diretrizes Gerais. Trabalho Prático (TP) Pontuação do TP. Tema do Trabalho. Projeto de Software Diagrama de Classes

Introdução Diagrama de Classes Diagrama de Seqüência Diagrama de Atividades. Diagramas UML. Classe, Seqüência e Atividades. Marcio E. F.

Modelagem Orientada a Objeto

Paradigmas de Linguagens de Programação. Suporte para Programação Orientada a Objeto

Programação Orientada a Objetos

A modelagem é tida como a parte central de todas as atividades para a construção de um bom sistema, com ela podemos:

ORIENTAÇÃO A OBJETOS Histórico:

FORMULÁRIO DE REGISTRO DE PLANO DE CURSO 2013.I

UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 15 PROFª BRUNO CALEGARO

Conceitos de Programação Orientada a Objetos

Fundamentos de Orientação à objetos

Modelagem de Software

Introdução à Orientação a Objetos

Linguagem de Modelagem Unificada UML

Os diagramas de use case capturam os requisitos funcionais do sistema.

DIAGRAMAS DE CLASSE UML

Introdução a Orientação a Objetos e UML

Programação Orientada a Objeto

Engenharia de Software

Programação Orientada a Objetos. Professor: André Luis Meneses Silva br.geocities.com/programacao2ufs

Como Modelar com UML 2

Análise Orientada a Objetos. Análise Orientada a Objetos; O Paradigma de Objetos; A UML.

Diagramas de Classes e O Paradigma da Orientação a Objetos usando UML. Prof. Ricardo A. Ramos

PROGRAMAÇÃO E SISTEMAS DE INFORMAÇÃO (PSI) 11ºANO

Visibilidade e Encapsulamento

POO Paradigma Orientado a Objetos. POO Paradigma Orientado a Objetos. POO Paradigma Orientado a Objetos. POO Paradigma Orientado a Objetos

Desenho de Software. Sumário

Aula 9 Herança. Prof. Jefersson Alex dos Santos

Análise de Sistemas 3º Bimestre (material 2)

UML. Diagrama de Classe

ARQUITETURA E DESENHO

ACH2002. Orientação a Objetos

O PARADIGMA ORIENTADO POR OBJETOS

PCS3413 Engenharia de Software e Banco de Dados

Linguagem de Programação I

Alguns Exercícios Resolvidos

Conceitos de Orientação a Objetos

Lista de exercícios 1. 1) Diga quais são as vantagens da modularização e explique cada uma delas.

Polimorfismo: aprendendo a prever o futuro. Polimorfismo: aprendendo a prever o futuro. Definições (2/5) Definições Tipos de Polimorfismo

AULA 02. OBJETIVO: Características da Linguagem Orientada a Objetos.

Programação em Comunicações. Programação Orientada por Objectos. Ademar Aguiar.

Objetivos. Explorar os conceitos fundamentais acerca do uso herança na linguagem Java

Introdução a UML (Unified Modeling Language)

Linguagem de Programação III

1 Introdução. 1.1 Teoria dos Sistemas 23/4/2010

Módulo III Padrões GOF

INF1012 MODELAGEM DE DADOS

INTRODUÇÃO À ORIENTAÇÃO A OBJETOS E UML

O Paradigma Orientado a Objetos

Modelagem de dados usando o modelo Entidade- Relacionamento (ER)

Programação Orientada a Objetos

Classes e Objetos. Sintaxe de classe em Java

PROJETO ARQUITETURAL PARTE II: PADRÕES DE PROJETO. Projeto de Programas PPR0001

Introdução à UML. Prof. Jesus José de Oliveira Neto

Complexidade do Software

Conceitos de Programação Orientada a Objetos

Diagrama de Classes. Régis Patrick Silva Simão. Régis Simão Diagrama de Classes 1/42

Análise de Sistemas AULA 05 BCC Noturno - EMA908915A

Levantamento, Análise e Gestão Requisitos. Aula 03

Herança. Herança. Herança. Herança. Herança. Programação Orientada a Objetos

Orientação a objetos. Objetos ou Instâncias I

Modelagem de Sistemas. Análise de Requisitos. Modelagem

Padrões de Projeto de Software

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

Introdução à orientação a objetos. João Tito Almeida Vianna 18/05/2013

PROGRAMAÇÃO ORIENTADA A OBJETOS II -TÉCNICAS DE OO. Prof. Angelo Augusto Frozza, M.Sc.

RUP Unified Process. Profª Jocelma Rios

Paradigmas de Programação

Linguagem de Programação. Diagrama de classes

Transcrição:

Projeto Orientado a Objetos Conjunto de atividades que têm como objetivo a criação de um modelo orientado a objetos de um sistema de software de acordo com os requisitos especificados Estratégia geral Projetistas pensam em termos de: Coisas ou objetos ( substantivos ), e depois operações ou funções ( verbos ) 2012 2

Paradigma de Orientação a Objetos (OO) decomposição orientada a objetos modularização objetos classes encapsulamento de dados e procedimentos 1960 1965 1970 1975 1980 1985 1990 1995 2000 2005 CLOS Simula 67 Smalltalk Eiffel C++ Java 3

Orientação a Objetos Modelo de Objetos Arcabouço conceitual objetos, classes herança, agregação troca de mensagens polimorfismo... Princípios [Booch] Abstração Encapsulamento Hierarquia Modularidade OCP, ISP,... Requisitos básicos [Cardelli & Wegner] objetos são abstrações de dados objetos possuem uma classe associada classes podem herdar propriedades de superclasses 2012 4

Modelo de Objetos Objetos são abstrações de entidades do mundo real ou do sistema Objetos encapsulam informação sobre seu estado e representação A funcionalidade do sistema é expressa em termos dos serviços de objetos Objetos se comunicam através de mensagens Objetos podem ser distribuídos e podem executar sequencialmente ou em paralelo 2012 5

Classes de objetos Classes são templates para criação de objetos. Objetos são criados de acordo com a definição da classe Classes podem herdar atributos e serviços de outras classes 2012 6

Herança Employee Classes podem herdar atributos e serviços de outras classes Ma nager budgetscontrolled dateappointed Programmer project proglanguage Project Manager projects Dept. Ma nager dept Strategic Manager responsibilities 2012 7

Generalização e herança Classes podem ser organizadas em hierarquia(s) uma classe (superclasse) é uma generalização de uma ou mais classes (subclasses) Uma subclasse pode herdar atributos e operações de superclasse(s) e pode: Adicionar novos atributos e operações Refinar operações herdadas Redefinir operações herdadas 2012 8

Herança e Projeto OO Há visões diferentes se a herança é fundamental ao projeto OO Visão 1. Identificar a hierarquia de herança é parte fundamental do OOD. A herança é um conceito útil para implementação que permite reutilizar definições de atributos e operações Visão 2. A herança introduz complexidade, o que não é desejável, especialmente em sistemas críticos. Identificar uma hierarquia de herança durante o projeto impõe restrições desnecessárias à implementação 2012 9

Associações Objetos e classes participam em relações com outros objetos e classes Associações são gerais, mas indicam que um atributo de um objeto é um objeto associado ou que um método depende de um objeto associado Employee is-member-of Department is-managed-by manages Manager 2012 10

Comunicação entre objetos Conceitualmente, objetos trocam mensagens para se comunicar v = circularbuffer.get () ; thermostat.settemp (20) ; 2012 11

Interação entre Objetos Objetos interagem e se comunicam através do envio de mensagens o1: C1 o3:c3 o4: C4 state o1 state o3 state o4 ops1() ops3 () ops4 () o2: C3 o6: C1 o5:c5 state o2 state o6 state o5 ops3 () ops1 () ops5 () 2012 12

Polimorfismo Mecanismo de uma LOO que permite algoritmos de alto nível sejam usados repetidas vezes com abstrações de nível mais baixo LOO: linguagens orientadas a objetos consequência natural da relação de herança. 2012 13

Orientação a Objetos Benefícios Expressividade + Legibilidade + Suporte à evolução + Potencial de reutilização + 2012 14

Herança versus Composição Técnicas de reuso e evolução Herança (entre classes) white-box reuse Composição (de objetos) black-box reuse 2012 15

Diagramas de Colaboração/Comunicação Diagrama de Classes de Projeto (DCP)

Projeto da Camada de Domínio Diagramas de Colaboração (Comunicação na UML 2) permitem realizar a modelagem dinâmica do sistema, ou seja, como os objetos que fazem parte da arquitetura trocam mensagens para realizar suas responsabilidades.

Em relação ao Modelo Conceitual, o DCP apresenta: Adição dos métodos Adição da direção das associações Possível detalhamento dos atributos e associações Possível alteração na estrutura das classes e associações Possível criação de atributos privados ou protegidos

Classe VideoLocadora fitas : Conjunto; clientecorrente : Cliente; Pseudocódigo concentrador Método emprestafita(fcodigo: String) fita : Fita; emprestimocorrente : Emprestimo; item : ItemDeEmprestimo; fita := fitas.get(fcodigo); emprestimocorrente := clientecorrente.getemprestimocorrente(); item := ItemDeEmprestimo.new(); item.associafita(fita); emprestimocorrente.associaitem(item); Fim Método; Fim Classe.

Diagrama de Colaboração

Código com Responsabilidades Distribuídas Classe VideoLocadora fitas : Conjunto ; clientecorrente : Cliente; Metodo emprestafita(fcodigo : String); fita : Fita; fita := fitas.get(fcodigo); clientecorrente.empresta(fita) Fim Metodo; Fim Classe. Classe Emprestimo itens : Conjunto; Metodo adiciona(fita : Fita); item : ItemDeEmprestimo; item := ItemDeEmprestimo.new(); self.associaitem(item); item.associafita(fita); Fim Metodo; Fim Classe. Classe Cliente emprestimocorrente : Emprestimo; Metodo empresta(fita : Fita); emprestimocorrente.adiciona(fita); Fim Metodo; Fim Classe.

Visibilidade Por associação. Quando as classes de dois objetos estão associadas no DCP Por parâmetro. Quando um objeto recebe outro como parâmetro em um método Localmente declarada. Quando um objeto recebe outro como retorno de um método Global. Quando um objeto é declarado globalmente

Visibilidade por Associação (para 1)

Visibilidade por Associação (para muitos)

Visibilidade por Parâmetro

Visibilidade Localmente Declarada

Visibilidade por Associação (qualificada sem qualificador)

Visibilidade por Associação (qualificada com qualificador)

Visibilidade por Associação (0..1)

Estabelecida por Pré-Condição de Contrato existe um Pagamento associado à Venda

Visibilidade de Classes de Associação

Do ponto de vista da classe de associação:

Com visibilidade para uma instância associada

Influência das Pré-Condições de Contrato nos Diagramas Garantia de Parâmetros (associação não qualificada)

Influência das Pré-Condições de Contrato nos Diagramas Garantia de Parâmetros (associação qualificada)

Realização das Pós-Condições dos Contratos nos Diagramas Mensagens básicas. São aquelas que efetivamente realizam aquilo que a pós-condição requer Mensagens delegadas. Passam adiante a responsabilidade de realizar uma operação básica quando o objeto que detém o controle da execução não possui visibilidade direta para o objeto que deve executar a operação

Mensagens Básicas Criação de instância Destruição de instância Criação de associação Destruição de associação Consulta de associação Alteração de valor de atributo Consulta de valor de atributo

Criação de Instância

Cria e imediatamente associa

Destruição de Instância

Criação de Associação Método implementado na origem da associação

Criação de Associação Associação bidirecional

Destruição de Associação Implementação na origem

Modificação de Valor de Atributo

Delegação Faculta o acoplamento fraco

Estilo de projeto sem delegação

Estilo de projeto com delegação

Pós-condição condicionada

Contribuições dos Diagramas de Colaboração ao DCP Métodos delegados. Sempre que um objeto receber uma mensagem delegada, a classe correspondente ao objeto deve registrar a implementação deste método Sentido das associações. O sentido das associações no DCP corresponderá ao sentido do envio das mensagens sobre as ligações de visibilidade baseadas em associações

Design Patterns Básicos Especialista Criador Acoplamento Fraco Coesão Alta

Especialista Quem implementa a consulta valortotaldavenda?

Pseudocódigo que não atende ao padrão Especialista Classe Supermercado clientecorrente : Cliente; consulta valortotaldavendacorrente(); venda : Venda; item : ItemDeVenda; total : Moeda = 0,00; venda := clientecorrente.getvendacorrente(); repita para cada item em venda.getitensdevenda(): total := total + (item.getquantidade() * item.getproduto().getpreco()); fim repita retorna total fim consulta Fim Classe.

Pseudocódigo que atende ao padrão especialista Classe Supermercado clientecorrente : Cliente; consulta valortotaldavendacorrente(); retorna clientecorrente.getvalortotaldavendacorrente(); fim consulta Fim Classe. Classe Cliente vendacorrente : Venda; consulta getvalortotaldavendacorrente(); retorna vendacorrente.getvalortotal(); fim consulta Fim Classe Classe Venda itens : Conjunto de ItemDeVenda; total : Moeda = 0,00; consulta getvalortotal() repita para cada item em itens: total := total + item.getsubtotal(); fim repita retorna total; fim consulta Fim Classe Classe ItemDeVenda produto : Produto; consulta getsubtotal() retorna getquantidade() * produto.getpreco(); fim consulta Fim Classe

Criador quem deve criar uma instância? Em primeiro lugar, verifique se o objeto é parte de uma agregação ou composição. Se for, o criador será o objeto agregador Caso contrário, verifique se alguma classe tem associação de 1 para * ou de 1 para 0..1 para a classe do objeto a ser criado. Se existir uma classe nessa situação e ela estiver em algum caminho possível na direção do controlador, então ela poderá ser a criadora Se houver empate, decida pela classe que parecer mais fortemente associada à classe a ser criada. Esse critério é subjetivo, mas é exatamente onde entra o julgamento o projetista sobre qual a opção mais adequada para fazer um caminho de delegação até a operação básica de criação de um objeto

Quem cria quem?

Acoplamento fraco Evite a criação de novos acoplamentos

Acoplamento definido pelo modelo conceitual e mantido pelo pseudocódigo que atende ao padrão especialista (anterior) Supermercado Cliente Produto Venda ItemDeVenda

Acoplamento definido pelo pseudocódigo que não atende ao padrão especialista (anterior) Supermercado Cliente Produto Venda ItemDeVenda

Coesão alta Verifique se o valor de algum atributo determina a possibilidade de outro atributo ser nulo ou não Verifique se existem subgrupos de atributos que estejam fortemente correlacionados Verifique se existem grupos de atributos que repetirão sempre os mesmos valores quando ocorrerem em diferentes instâncias

Exemplo de classe com baixa coesão

Solução com alta coesão