Os princípios do desenho orientado a objetos

Documentos relacionados
Princípio de POO (Programação Orientada a Objetos)

Requisitos de sistemas

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

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

Programação Orientada a Objetos. Vagner Luz do Carmo - Vluzrmos

Programação Orientada a Objetos

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

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

Conceitos de Programação Orientada a Objetos

Programação Orientada a Objetos

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

Programação para Games II. Professor Ariel da Silva Dias Orientação a Objetos

Lista de Exercícios AV1

Tema da aula Introdução ao paradigma de programação: Orientado a Objetos

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

Introdução. Programação Orientada a Objetos (POO) João Paulo Q. dos Santos

Capítulo 2. Orientação a Objetos

Java para Desktop. Programação Orientada à Objetos 2 JSE

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

Introdução à Orientação a Objetos

Computação II Orientação a Objetos

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

27) Em relação aos Projetos de Sistemas de Software, assinale a sequência correta de desenvolvimento de um sistema:

O PARADIGMA ORIENTADO POR OBJETOS

Aula 3 POO 1 Classe e Objeto. Profa. Elaine Faria UFU

Roteiro. Introdução. Uma Introdução à Programação Orientada a Objetos e JAVA usando NetBeans. Objetos. Princípios da Orientação a Objetos

UNIVERSIDADE PAULISTA - UNIP ICET INSTITUTO DE CIÊNCIAS EXATAS E TECNOLÓGIA

Especificação de Sistemas de Software e a UML

Interfaces e Classes Abstratas

Desenvolvimento de Aplicações Desktop

Linguagem de Programação Orientada a Objeto Abstração - Encapsulamento

Linguagem de Programação III

RUP Unified Process. Profª Jocelma Rios

Programação Orientada a Objetos (DPADF 0063)

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

Sumário. Capítulo 1 Introdução 29. Capítulo 2 Utilizando Objetos 59

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

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

Modelagem Orientada a Objeto

Aula 15 Modelagem de Classes de Análise. Análise de Sistemas Prof. Filipe Arantes Fernandes

2. Introdução à Programação e Análise. Orientada a Objetos. Programação Orientada a Objetos em C O que é a Programação Orientada a Objetos?

Plano de Aula - Lógica de Programação - cód Horas/Aula

Conceitos Básicos. SCC0504 Programação Orientada a Objetos. Luiz Eduardo Virgilio da Silva ICMC, USP

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

Linguagem de Programação III

Aula 2 POO 1 Introdução. Profa. Elaine Faria UFU

Daniel Wildt

Laboratório de programação II

1 Introdução e Conceitos básicos

No final deste curso, saberás criar programas através da linguagem de programação Java.

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

Encapsulamento. Alberto Costa Neto DComp - UFS

Como Modelar com UML 2

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

Programação Orientada a Objetos

Linguagem de Programação IV Introdução

Unidade: Introdução à POO (Programação Orientada a Objetos)

PCS3413 Engenharia de Software e Banco de Dados

Introdução à Programação Orientada a Objetos. Programação Estruturada vs Programação Orientada a Objetos

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Unidade: Classes Abstratas, Polimorfismo, Sobreposição e Interfaces

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

Aula 10 POO 1 Classes Abstratas. Profa. Elaine Faria UFU

Programação Java (nível intermediário) 4. Polimorfismo

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

MODELAGEM COM A UML (UNIFIED MODELING LANGUAGE)

Complexidade do Software

Classe Abstrata e Interface

TÉCNICAS DE ORIENTAÇÃO A OBJETOS

Ederson Luiz da Silva Ciência da Computação. Algoritmos e Programação

E N C A P S U L A M E N T O P R O F. M E. H É L I O E S P E R I D I Ã O

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

PROGRAMAÇÃO ORIENTADA A

DIAGRAMAS DE CLASSE UML

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

Programação Orientada a Objetos JAVA - NETBEANS

Introdução à Programação. Conceitos Básicos de Orientação a Objetos

Transcrição:

Os princípios do desenho orientado a objetos

Os princípios do desenho orientado a objetos Encapsulamento e congeneridade Domínios, grau de dependência e coesão Os perigos da herança e do polimorfismo

Encapsulamento e congeneridade A sub-rotina, inventada nos anos 40, introduziu o conceito de encapsulamento Encapsular - separar o programa em partes, o mais isoladas possível. Classes implementam o encapsulamento nível 2

http://www2.ic.uff.br/~anselmo/cursos/tpa/apresentacoes/poo.pdf Níveis de encapsulamento Encapsulamento nível 0: Completa inexistência de encapsulamento Linhas de código efetuando todas as ações Encapsulamento nível 1: Módulos procedimentais Procedimentos permitindo a criação de ações complexas Encapsulamento nível 2: Classes de objetos Métodos isolando o acesso às características da classe Encapsulamento nível 3: Pacotes de classes Conjunto de classes agrupadas, permitindo acesso diferenciado entre elas Encapsulamento nível 4: Componentes Interfaces providas e requeridas para fornecer serviços complexos

http://www2.ic.uff.br/~anselmo/cursos/tpa/apresentacoes/poo.pdf

Encapsulamento Com o uso da técnica de anéis de operações podem ser criados atributos virtuais Atributos virtuais, podem ser calculados pelos métodos get e set em função dos atributos reais Exemplo1: método double getvolume() na classe cubo retornando (lado ^ 3) Exemplo2: método void setnome(string nome) armazenando o argumento nome nos atributos primeironome, iniciaismeio, ultimonome http://www2.ic.uff.br/~anselmo/cursos/tpa/apresentacoes/poo.pdf

Congeneridade Terem nascido juntos

Congeneridade Terem nascido juntos int i; i = 7;

Congeneridade Terem nascido juntos int i; i = 7; Se A for modificado, B terá que ser modificado ou ao menos verificado Pode ocorrer uma modificação no sistema que obrigue modificações conjuntas em A e B

Congeneridade Congeneridade de tipo Congeneridade de nome

Congeneridade Congeneridade de tipo Congeneridade de nome int i; i = 7; char i; i = 7; (tipo) int j; i = 7; (nome)

Congeneridade Congeneridade de convenção ex: num positivos = pessoas e num negativos = empresas if ordem.numerodaconta>0 (trata-se de uma pessoa)

Congeneridade Congeneridade de convenção http://www2.ic.uff.br/~anselmo/cursos/tpa/apresentacoes/poo.pdf

Congeneridade Congeneridade de posição Ex: linhas de código devem aparecer na sequencia correta

http://www2.ic.uff.br/~anselmo/cursos/tpa/apresentacoes/poo.pdf

http://www2.ic.uff.br/~anselmo/cursos/tpa/apresentacoes/poo.pdf

http://www2.ic.uff.br/~anselmo/cursos/tpa/apresentacoes/poo.pdf

Congeneridade x Encapsulamento O encapsulamento é um tipo de policiamento sobre a congeneridade. A orientação a objetos elimina (pelo menos minimiza) uma parte da congeneridade (diferentemente de sistemas com encapsulamento nível 1)

Congeneridade x Manutenção Minimizar a congeneridade total Alguns exemplos de coisas a evitar: Ex: cliente.setnome( João ); cliente.nome = João ; Herança em excesso e mal projetada

Domínios, grau de dependência e coesão

Domínios de uma classe Uma classe pode pertencer a um dos quatro domínios: base arquitetura negócio aplicação

Domínios de uma classe Domínio de base: usualmente fazem parte das bibliotecas da linguagem de programação utilizáveis em várias aplicações Fundamentais: incluídas como tipos de dados convencionais, integrantes e simples. Ex: int, boolean Estruturais: implementam estruturas de dados consagradas, como Pilha, Fila Semânticas: ex: data, hora

Domínios de uma classe Domínio de arquitetura: fornece abstrações para a arquitetura de hardware ou software utilizada Classes de comunicação implementam mecanismos que possibilitam a comunicação com outros sistemas, como porta e máquina remota (ex.: Sockets e RMI) Classes de manipulação de banco de dados criam abstrações para acesso aos SGBDs (ex.: pacotes JDBC e JDO) Classes de interface humana incluem janela e botão de comando. (ex.: pacotes swing e awt)

Domínios de uma classe Domínio de negócio: dizem respeito a uma empresa em particular (ex: saldo, cliente, paciente). Domínio de aplicação: dizem respeito a uma aplicação dessa empresa (ex: relaçãopacientecirurgia).

http://www2.ic.uff.br/~anselmo/cursos/tpa/apresentacoes/poo.pdf

Reflexões Quais desses domínios de classe podemos comprar? base arquitetura negócio aplicação

Reflexões Quais desses domínios de classe podemos comprar? base arquitetura negócio aplicação A competitividade de sua companhia talvez dependa do período para implementação de novos sistemas de software. O sucesso estratégico da sua empresa vai eventualmente depender do quão bem você construa sua biblioteca de classes do domínio de negócio.

Grau de dependência Grau de dependência direto indica quantas classes são referenciadas diretamente por uma determinada classe Grau de dependência indireto indica quantas classes são referenciadas diretamente ou indiretamente (recursivamente) por uma determinada classe

Grau de dependência http://www2.ic.uff.br/~anselmo/cursos/tpa/apresentacoes/poo.pdf

Grau de dependência Uma classe A referencia diretamente uma classe B se: A é subclasse direta de B A tem atributo do tipo B A tem parâmetro de método do tipo B A tem variáveis em métodos do tipo B A chama métodos que retornam valores do tipo B Assume-se que as classes do domínio de base tem grau de dependência igual a zero

Grau de dependência O grau de dependência serve para verificar projetos orientados a objeto Espera-se que: Classes de domínios mais altos (negócio e aplicação) tenham alto grau de dependência indireto Classes de domínios mais baixos (arquitetura e base) tenham baixo grau de dependência indireto

Coesão medida da inter-relação das características (atributos e operações) localizadas na interface externa de uma classe Classes fracamente coesas apresentam características dissociadas Classes fortemente coesas apresentam características relacionadas, que contribuem para a abstração implementada pela classe

Coesão A coesão pode ser classificada em: Coesão de instância mista Coesão de domínio misto Coesão de papel misto Coesão alternada Coesão múltipla Coesão funcional

Coesão A coesão de instância mista ocorre quando algumas características são indefinidas para alguns objetos da classe

Coesão A coesão de instância mista ocorre quando algumas características são indefinidas para alguns objetos da classe fred.lancarporcentagemdecomissao();

Coesão Vendedor VendedorComissionado VendedorNaoComissionado

Coesão A coesão de papel misto ocorre quando algumas características ou comportamentos criam dependência entre classes de contextos distintos em um mesmo domínio Ex: fred.numerodecachorros

Os perigos da herança e do polimorfismo

Herança e polimorfismo constituem uma ferramenta poderosa para a modelagem OO Entretanto, seu uso excessivo ou equivocado pode ser nocivo à qualidade do modelo produzido O uso excessivo da assertiva goto provocou a sua má fama no paradigma estruturado Para que o paradigma OO não sofra do mesmo problema, é necessário o uso correto dessas estruturas

Abusos da herança Conjuntos equivocados http://www2.ic.uff.br/~anselmo/cursos/tpa/apresentacoes/poo.pdf

Abusos da herança Conjuntos equivocados http://www2.ic.uff.br/~anselmo/cursos/tpa/apresentacoes/poo.pdf

Abusos da herança Conjuntos equivocados http://www2.ic.uff.br/~anselmo/cursos/tpa/apresentacoes/poo.pdf

Abusos da herança Hierarquia invertida

Abusos da herança Hierarquia invertida

Abusos da herança Confundir classe com instância

Abusos da herança Utilização inadequada de herança

Polimorfismo Permite que referências de tipos de classes mais abstratas representem o comportamento das classes concretas. Permite tratar vários tipos de maneira homogênea (através da interface do tipo mais abstrato).

Polimorfismo Promove concisão na POO Tanto operações como variáveis podem exibir polimorfismo Em um desenho imperfeito, o polimorfismo traz perigos O desenhista não tem ideia da classe que efetivamente será passada para runtime. Um objeto pode receber uma mensagem não compreendida e provocar erro de runtime.