Universidade Federal de Uberlândia Faculdade de Computação Programação Orientada a Objetos 2 Prof. Fabiano Dorça. Padrões de Projeto.

Documentos relacionados
Universidade Federal de Uberlândia Faculdade de Computação Prof. Fabiano Azevedo Dorça Programação Orientada a Objetos II. Padrões de Projeto

Universidade Federal de Uberlândia Faculdade de Computação Programação Orientada a Objetos II Prof. Fabiano Dorça. Padrão Observer (Observador)

Universidade Federal de Uberlândia Faculdade de Computação Programação Orientada a Objetos II Prof. Fabiano Dorça. Padrão Observer (Observador)

Unidade Acadêmica: Faculdade de Computação FACOM Disciplina: Programação Orientada a Objetos I Professor: Fabiano Azevedo Dorça. Prática 02 Herança

Classe Abstrata e Interface

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

Padrões Fábrica. Simple Factory Factory Method

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

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

p Imagine que um Sistema de Controle do Banco pode ser acessado, além dos Gerentes, pelos Diretores do Banco

Universidade Federal de Uberlândia

Programação Orientada a Objetos Relacionamentos entre classes

Programação Java. Marco Fagundes. - Herança, Classes Abstratas e Interfaces Marco Fagundes -

Avançando em Java com

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

Universidade Federal de Uberlândia

Objetivo: Aplicar a técnica de encapsulamento no sistema de gestão acadêmica

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

Interfaces. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

POO29004 Programação Orientada a Objetos

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

9 Classes Abstractas e Interfaces

LEIC-T LERC MEIC-T 2011/2012 1º Semestre Programação com Objetos 2012/01/07 11h00m 3/10

Abstract Factory. Prover uma interface para criar uma família de objetos relacionados ou dependentes sem especificar suas classes concretas

Computação II Orientação a Objetos

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

Computação II Orientação a Objetos

Programação Orientada a Objetos

Computação II - Java - Prova 1 Prof. Adriano Joaquim de Oliveira Cruz /05/13. Questão: Total Pontos: Gráu:

PADRONIZAÇÃO 10. INTERFACES PADRONIZAÇÃO CONTRATOS

Padrões de Projeto de Software

Linguagem de Programação III

Visibilidade e Encapsulamento

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

Computação Paralela. Conceitos de Programação Orientada ao Objecto. João Luís Ferreira Sobral Departamento do Informática Universidade do Minho

Linguagem de programação Programação Orientada a objetos

Desenvolvimento de Software Baseado em Componentes. Paulo C. Masiero

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

Segunda Parte (3 valores) Primeira Parte (7 valores) Nome: Número: PERGUNTA NOTA PERGUNTA RESPOSTA

Linguagem de Programação III

Programação Orientada a Objetos. Prof. Diemesleno Souza Carvalho

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

Herança. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces

Engenharia de Software

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

15/04/2013. Pensar Orientado a Objetos. Projeto Orientado a Objetos. Características de Objetos. Classe de Objetos. Comunicação entre Objetos

Análise e Projeto Orientados por Objetos

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

Padrões de Projeto. Padrões de Projeto. Além dos 23 Padrões GoF. Os 23 Padrões de Projeto. Documentação de um Padrão. Classificação dos Padrões

Programação Orientada a Objetos II Java Décima primeira aula

Conceitos de Programação Orientada a Objetos

As classes Formatador e ElementosAFormatar

Aula 5 POO 1 Encapsulamento. Profa. Elaine Faria UFU

Orientação a Objetos AULA 09

Programação Orientada a Objetos

Programação com Objectos 1º Teste Tipo 1º Semestre (90 minutos)

Programação com Objectos 2º Teste Tipo 1º Semestre (120 minutos)

Lista de exercícios 2

PROGRAMAÇÃO ORIENTADA A

Java - Herança e Interface

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

Encapsulamento. Separa a interface de um objeto dos detalhes de seu funcionamento interno. Caixa preta 2/27

Orientação a objetos Disciplina: Linguagens de Programação. Prof. Alexandre Cassimiro Andreani

Interface vs. Implementação Herança vs. Composição

Introdução a Programação Orientada a Aspectos

POO29004 Programação Orientada a Objetos

Polimorfismo em Java TM. por Jorge H C Fernandes CESAR-DI-UFPE Recife, 1999

Sobrecarga, Sobreposição e Polimorfismo

extendsé usado para indicar herança em JAVA

Iteradores. Iteradores. Isabel Harb Manssour. Roteiro. Coleções

Usuários. Interface com Usuários. Programa Aplicativo. Interfaces de Programação. Sistema Operacional

Daniel Wildt

Composição e Herança. carro meucarro = new carro();

Aula 9 POO 1 Polimorfismo. Profa. Elaine Faria UFU

Interfaces e Classes Abstratas

Programação com Objectos Teste Teórico (repescagem) 24 de Janeiro de 2009, 09:00 (120 minutos)

Computação II Orientação a Objetos

Computação II Orientação a Objetos

Introdução a Padrões, GRASP. Nazareno Andrade (baseado no material de Hyggo Almeida e Jacques Sauvé)

Strategy e Template Method. Professor: Hyggo Almeida

A B Classe Genérica D A C. Classe Especializada. Classe Especializada. Características Herdadas

Programação Orientada a Objetos com Java. Prof. Júlio Machado

Prof. Fernando V. Paulovich 25 de julho de SCC Programação Orientada a Objetos

Classes, Herança e Interfaces

Linguagens de Programação Aula 12

LEIC-A / MEIC-A 2007/2008 (1º

Generics - Java. Fernando Santos. Programação Orientada a Objetos

Introdução a Programação Orientada a Objetos

PCS LABORATÓRIO DE PROGRAMAÇÃO ORIENTADA A OBJETOS PARA A ENGENHARIA ELÉTRICA

Tópicos da Aula. POO e Padrões de Projetos. Considere três classes... Reuso de Classes. Locadora de DVD. Sistema Acadêmico

Java 2 Standard Edition Classes internas

Programação Orientada a Objetos

Reuso de Software Aula Maio 2012

Transcrição:

Universidade Federal de Uberlândia Faculdade de Computação Programação Orientada a Objetos 2 Prof. Fabiano Dorça Padrões de Projeto

Permite definir famílias de comportamentos, que podem ser (re)utilizados de forma intercambiável.

Permite que o algoritmo varie independentemente dos clientes que o usam.

Cada comportamento é encapsulado em uma classe.

Deve-se perceber o que varia nas subclasses e encapsular à parte (famílias de comportamentos reutilizáveis).

É útil quando se tem-se operações comuns a uma série de sub-classes, mas não é possível o uso de herança de forma eficiente. Desta forma, o padrão strategy permite configurar em tempo de execução cada subclasse com os comportamentos adequados

O padrão Strategy nos conduz a seguinte orientação: 1 - Programe sempre para interfaces; 2 - Dê preferência a composição ao invés de herança. Desta forma consegue-se o reuso e intercâmbio de comportamentos entre diversas classes, facilitando a expansão e manutenção.

Benefícios Alto nível de reuso. Facilidade de expansão sem modificar o que está pronto (aberto para extensão, fechado para modificação). Alto nível de Flexibilidade.

Esse padrão tem como elementos participantes - Context, que tem seu "comportamento" ou parte dele definido pelo algoritmo implementado por uma Strategy; - Strategy, que define a interface comum para todos os comportamentos; - ConcreteStrategy, que implementa o comportamento definido pela interface Strategy.

Diagrama de Classes

Problema prático Diferentes personagens de um jogo que exibem diferentes ações e comportamentos. Os personagens A e B implementam o mesmo ataque. Mas os personagens C e D implementam ataques diferentes. Neste caso, herança não é interessante, pois seria necessário reescrever a mesma forma de ataque em dois personagens.

public abstract class Personagem{... public void atacar(){ //implementa ataque de A e B public class PersonagemA extends Personagem{... public class PersonagemB extends Personagem{...

public class PersonagemC extends Personagem{ public void atacar(){ //implementa ataque de C e D public class PersonagemD extends Personagem{ public void atacar(){ //implementa ataque de C e D

Então, é importante identificar os aspectos que variam e sapará-los do que é comum à todas as sub-classes. E usar composição ao invés da herança. Qual o aspecto que varia? Quantas variações temos?

Aplicando o Strategy public abstract class Ataque{ public abstract void atacar();

ConcreteStrategies public class Ataque1 extends Ataque{ public void atacar(){ System.out.println("Ataque tipo 1"); public class Ataque2 extends Ataque{ public void atacar(){ System.out.println("Ataque tipo 2");

Context public abstract class Personagem{ private Ataque a; public void setataque(ataque a){ this.a = a; public void atacar(){ a.atacar();

ConcreteContext public class PersonagemA extends Personagem{ public PersonagemA() { setataque(new Ataque1()); public class PersonagemB extends Personagem{ public PersonagemB() { setataque(new Ataque1());

public class PersonagemC extends Personagem{ public PersonagemC() { setataque(new Ataque2()); public class PersonagemD extends Personagem{ public PersonagemD() { setataque(new Ataque2());

Alto nível de reuso: Facilidade de expansão sem modificar o que está pronto: Implemente um novo personagem que utiliza o ataque do tipo 2 Implemente um novo personagem que utiliza um novo tipo de ataque, o ataque do tipo 3. Note que o código pronto não é mexido na expansão. Alto nível de Flexibilidade: Implemente um novo personagem que inicia com ataque do tipo 2, mas em determinado momento pode mudar para o ataque do tipo 3. Aaberto para extensão, fechado para modificação.

Deve-se produzir uma família de classes para cada comportamento que varia. Deve-se ter uma estrutura de herança em que cada subclasse implementa uma variação do algoritmo. Possibilita que um algortimo seja substituído por outro em tempo de execução. Possibilita alto nível de reuso (vários contexts utilizamento a mesma família de estratégias).

Exemplo (Freeman, Use a cabeça Padrões de Projeto):

Exercício Expanda o jogo de forma que além de variar o tipo de ataque os personagens variem também a forma de movimentar-se, sendo os personagens A e C de movimentação lenta, e os personagens B e D de movimentação rápida.

Exercício: A seguir é apresentado um conjunto de classes e interfaces para um jogo de aventura. Existem classes que implementam personagens do jogo e classes que implementam comportamentos das armas que podem ser utilizadas por estes personagens. Cada personagem pode utilizar uma arma de cada vez, mas pode alterar as armas a qualquer momento durante o jogo. Pede-se Utilizando estas classes e a interface disponibilizada, utilize o padrão strategy para projetar o jogo. Implemente em java (obs. Simule a implementação dos comportamentos utilizando saídas de texto).

Freeman, Use a cabeça Padrões de Projeto.

Fim.