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

Tamanho: px
Começar a partir da página:

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

Transcrição

1 Padrões Um padrão de é uma maneira de documentar uma solução conhecida para um problema usualmente encontrado O objetivo do padrão é permitir que boas soluções sejam reutilizadas em diferentes projetos Um padrão de projeto possui 3 partes distintas: Contexto Problema recorrente neste contexto Solução para o problema Características dos Padrões de Projeto São observados através da experiência São descritos de uma forma estruturada Previnem contra a reinvenção da roda Existem em diferentes níveis de abstração Estão em desenvolvimento contínuo São artefatos reutilizáveis Transmitem melhores práticas Permitem o uso de um vocabulário comum Podem ser utilizadas em conjunto para resolver um problema mais amplo 56 Classificação de Padrões Padrões Os padrões de projeto podem ser classificados de acordo com a fase de desenvolvimento em que são mais adequados: Padrões de Análise (Analysis patterns) Seu foco é na fase de análise ou modelamento de negócio Muita das vezes os padrões estão ligados ao domínio do problema o que pode Padrões de Arquitetura (Architectural patterns) Seu foco é na arquitetura do software Padrões de Projeto (Design patterns) Foco no projeto de componentes do software Muitas das vezes os padrões podem estar muito ligados tanto ao domínio da solução, quanto do problema 57 1

2 Classificação de Padrões Padrões Padrões de Análise (Analysis patterns) Martin Fowler, 1996 Padrões de Arquitetura (Architectural patterns) Apresentado inicialmente por Frank Buschmann et al., 1996 Computação Distribuída - Frank Buschmann et al., 2007 Padrões de Projeto (Design patterns) GOF (Gang of Four) E. Gamma, R. Helm, R. Johnson, J. Vlissides 1995 Aplicações Concorrentes e em Rede - Frank Buschmann et al Enterprise Integration Patterns Gregor Hohpe, 2003 Real-time Design Patterns Bruce Douglass, 2003.Net Design Patterns - Christian Thilmany, 2003 J2EE Design Patterns - Deepak Alur, 2003 Web Services Patterns Paul Monday, 2003 Ajax Design Patterns - Michael Mahemoff, 2006 SOA Design Patterns Thomas Erl, Padrões de Análise (Analysis Patterns) Proposto por Martin Fowler, em livro publicado em 1996 Notação do Livro não é baseada em UML Baseada em áreas (domínios) específicas como: manufatura; financeira e saúde Mesmo assim, padrões podem apresentados podem ser úteis em outros domínios Alguns princípios apresentados Um modelo não está certo ou errado, eles podem ser mais ou menos úteis Modelos conceituais estão ligados a tipos (interfaces) e não implementações (classes) Padrões são o ponto de partida, não o destino Sempre que possível, quando existir um tipo e um supertipo, considere colocar os recursos no supertipo, desde que isto faça sentido Quando múltipos atributos possuam um comportamento relacionado e presente em muitos tipos, combine estes atributos em um novo tipo fundamental 59 2

3 Padrões de Análise (Analysis Patterns) Exemplos de alguns padrões de projeto Quantity (3.1) Conversion Ratio (3.2) Compound Units (3.3) 3) Measurement (3.4) Observation (3.5) Range (4.3) Name (5.1) Account (6.1) Transaction (6.2) Summary Account (6.3) Plan (8.4) Contract (9.1) Product (10.3) Associative Type (15.1) 60 Padrões de Projeto GoF Trabalho proposto inicialmente por Erich Gamma, Richard Helm, Ralph Jonhson, John Vlissides (Gang of Four) em 1995 Famílias de Padrões De Criação Responsáveis pela criação de objetos Permitem que o sistema fique independente da forma como os objetos são criados Estruturais Relacionados com a forma com que classes e objetos são compostos a fim de formar estruturas maiores Comportamentais Relacionados com a atribuição de responsabilidades entre objetos Descrevem a comunicação entre objetos 61 3

4 Padrões de Criação Factory Fornece uma interface para criar um objeto, porém a decisão de qual classe será instanciada é decidida pelas subclasses Abstract Factory Fornecem uma interface para criação de objetos sem especificar sua classe concreta Singleton Garante que apenas uma classe possua uma única instância e oferece um acesso global à mesma Builder Permite separar a construção de um objeto complexo de sua representação a fim de que diferentes objetos sejam criados através do mesmo processo Prototype Permite que um objeto seja criado a partir de uma instância existente copiando suas propriedades 62 Factory Permite que um objeto seja criado sem que seja necessário informar a classe exata que será criada Separa a complexidade de criação do objeto Uma interface define um método padrão para criação Subclasses implentam este método e devolvem o objeto desejado A fábrica implementa o método criando o objeto conforme necessário class GOF - Factory «interface» ImageReader + getdecodedimage() : DecodedImage ImageReaderFactory + getimagereader(inputstream) : ImageReader GifReader + getdecodedimage() : DecodedImage JpegReader + getdecodedimage() : DecodedImage 63 4

5 Factory Exemplo public interface ImageReader { public DecodedImage getdecodedimage(); public class GifReader implements ImageReader { public DecodedImage getdecodedimage() { //... return decodedimage; public class JpegReader implements ImageReader { public DecodedImage getdecodedimage() { //... return decodedimage; 64 Factory Exemplo public class ImageReaderFactory { public static ImageReader getimagereader(inputstream is) { int imagetype = determineimagetype(is); switch(imagetype) { ( g yp ) { case ImageReaderFactory.GIF: return new GifReader(is); case ImageReaderFactory.JPEG: return new JpegReader(is); // etc. 65 5

6 Abstract Factory Permite que objetos sejam criados de forma transparente caso exista um grupo de diferente fábricas class Design Pattern - Abstract Factory ApplicationRunner + main(string[]) : void + createosspecificfactory() : GUIFactory Application + Application(GUIFactory) «interface» GUIFactory «interface» Button + createbutton() : Button + paint() : void WinFactory OSXFactory WinButton OSXButton + createbutton() : Button + createbutton() : Button + paint() : void + paint() : void 66 Abstract Factory interface GUIFactory { public Button createbutton(); class WinFactory implements GUIFactory { y p y { public Button createbutton() { return new WinButton(); class OSXFactory implements GUIFactory { public Button createbutton() { return new OSXButton(); 67 6

7 Abstract Factory interface Button { public void paint(); class WinButton implements Button { bli id i t() { public void paint() { System.out.println("I'm a WinButton"); class OSXButton implements Button { public void paint() { System.out.println("I'm an OSXButton"); 68 Abstract Factory class Application { public Application(GUIFactory factory) { Button button = factory.createbutton(); button.paint(); public class ApplicationRunner { public static void main(string[] args) { new Application(createOsSpecificFactory()); public static GUIFactory createosspecificfactory() { int sys = readfromconfigfile("os_type"); Fil if (sys == 0) { return new WinFactory(); else { return new OSXFactory(); 69 7

8 Singleton Objetivo Garante que existirá uma única instância de um objeto de uma classe e permite um acesso global ao mesmo Motivação Em muitas situações é necessário um único objeto. Exemplos: O objeto que representa um sistema de arquivos do Sistema Operacional Um objeto que representa um arquivo de configuração de uma aplicação Um objeto que representa uma conexão com um banco de dados 70 Singleton Exemplo public class Singleton { //instância de um objeto da classe Singleton //inicializada com a chamada do construtor private static Singleton instance = new Singleton(); //Construtor privado impede criação de objetos desta classe private Singleton() { //lógica para criação do objeto //método estático que retorna a única instância i da classe public static Singleton getinstance() { return instance; 71 8

9 Singleton Exemplo - Outra abordagem public class Singleton { // Private constructor prevents instantiation from other classes private Singleton() { /** * SingletonHolder is loaded on the first execution of Singleton.getInstance() * or the first access to SingletonHolder.INSTANCE, not before. */ private static class SingletonHolder { public static ti final Singleton instance = new Singleton(); public static Singleton getinstance() { return SingletonHolder.instance; 72 Padrões Estruturais Adapter Bridge Composite Decorator Facade Proxy 73 9

10 Adapter Objetivo Converter uma interface de uma classe para uma interface compatível com a esperada Permite que classes possam cooperar o que não seria possível pela incompatibilidade entre as interfaces Traduz as chamadas de sua interface para chamadas da interface da classe adaptada Também conhecida como Wrapper Uso Este padrão de projeto é útil em situações onde uma classe já existente possui serviços que serão utilizados, porém não na Interface necessária Por exemplo, uma classe que espera valores boleanos 74 Adapter Exemplo Um novo método para adicionar inteiros será utilizado em uma implementação O código disponível porém apenas permite a adição de números binários (BinaryCalulator) A classe CalculatorAdapter permitirá o uso da implementação disponível (BinaryCalculator), porém adatapada o class GOF-Adapter «interface» ICalculator + add(int, int) : int CalculatorAdapter - bcalc: BinaryCalculator + CalculatorAdapter(bcalc) + add(int, int) : int BinaryCalculator + add(string, String) : string 75 10

11 Adapter Exemplo public interface ICalculator{ public int add(int ia, int ib); public class BinaryCalculator { public static string add(string sa,string sb){ // public class CalculatorAdapter implements ICalculator { private BinaryCalculator bcalc; public CalculatorAdapter(bcalc c){ bcalc = c; public int add(int ia, int ib){ String result; result = bcalc.add(integer.tobinarystring(ia), Integer.toBinaryString(ib), //converts binary string to a decimal representation return is value return Integer.valueOf(result,10).intValue(); 76 Adapter Outro Exemplo Dois exemplos de classes adptadoras. Uma baseada em uso (DListToStackAdapter) e outra em herança múltipla (DListStackAdapter) class GOF-Adapter T «interface» Stack + push(t) : void + pop() : T + top() : T DList + insert(dnode, T) : void + remove(dnode, T) : void + inserthead(t) : void + inserttail(t) : void + removehead() : T + removetail() : T + gethead() : T + gettail() : T T DListToStackAdapter - m_list: DList<T> + DListToStackAdapter(DList<T>) + push(t) : void + pop() : T + top() : T T DListStackAdapter + push(t) : void + pop() : T + top() : T 77 11

12 Decorator Objetivo Permite adicionar responsabilidades a um objeto de forma dinâmica Desta forma não é necessário criar subclasses a fim de estender a funcionalidade dos objetos Motivação Em alguns casos deseja-se adicionar responsabilidades a um objeto e não a uma classe inteira Exemplo Considere a modelagem de um cardápio de cafés onde é possível acrescentar diversos acompanhamentos a um café Como calcular o custo de cada item disponível no cardápio? Criar uma classe para cada opção não é melhor alternativa Neste caso o Decorator pode ser uma opção para a modelagem 78 Decorator Exemplo Baseado Capítulo 3, do livro Head First Design Pattern Neste exemplos as bedidas (DarkRoast, Decaf, Espresso, HouseBlend) pode ser decoradas com diferentes acompanhamentos (Milk, Chocolate, Sugar, Cream) class GOF-Decorator StarbuzzCoffee + main(string[]) : void Beverage # description: String = "Unknown Beverage" + getdescription() : String + cost() : double CondimentDecorator + getdescription() : String DarkRoast + DarkRoast() + cost() : double Cream Milk - beverage: Beverage Decaf + Decaf() + cost() : double Espresso + Espresso() + cost() : double HouseBlend + HouseBlend() + cost() : double - beverage: Beverage + Milk(Beverage) + getdescription() : String + cost() : double Chocolate - beverage: Beverage + Cream(Beverage) + getdescription() : String + cost() : double + Chocolate(Beverage) + getdescription() : String + cost() : double Sugar - beverage: Beverage + Sugar(Beverage) + getdescription() : String + cost() : double 79 12

13 Decorator Exemplo - Código public abstract class Beverage { protected String description = "Unknown Beverage ; public String getdescription() { return description; p ; public abstract double cost(); public abstract class CondimentDecorator extends Beverage { public abstract String getdescription(); 80 Decorator Exemplo - Código public class DarkRoast extends Beverage { public DarkRoast() { description = "Dark Roast Coffee ; public double cost() { return.99; public class Decaf extends Beverage { public Decaf() {description = "Decaf Coffee"; public double cost() { return 1.05; public class Espresso extends Beverage { public Espresso() { description = "Espresso ; public double cost() { return 1.99; public class HouseBlend extends Beverage { public HouseBlend() { description = "House Blend Coffee"; public double cost() { return.89; 81 13

14 Decorator Exemplo - Código public class Milk extends CondimentDecorator { private Beverage beverage; public Milk(Beverage beverage) { this.beverage = beverage; public String getdescription() {return beverage.getdescription() g + ", Milk"; public double cost() { return.10 + beverage.cost(); public class Chocolate extends CondimentDecorator { private Beverage beverage; public Chocolate(Beverage beverage) { this.beverage = beverage; public String getdescription() { return beverage.getdescription() + ", Chocolate ; public double cost() { return.20 + beverage.cost(); public class Sugar extends CondimentDecorator { private Beverage beverage; public Sugar(Beverage beverage) { this.beverage = beverage; public String getdescription() { return beverage.getdescription() + ", Sugar"; public double cost() { return.15 + beverage.cost(); 82 Decorator Exemplo - Código public class Cream extends CondimentDecorator { private Beverage beverage; public Cream(Beverage beverage) { this.beverage = beverage; public String getdescription() { return beverage.getdescription() + ", Cream"; public double cost() { return.10 + beverage.cost(); 83 14

15 Decorator Exemplo - Código public class StarbuzzCoffee { public static void main(string args[]) { Beverage beverage = new Espresso(); System.out.println(beverage.getDescription() g p () + " $" + beverage.cost()); Beverage beverage2 = new DarkRoast(); beverage2 = new Chocolate(beverage2); beverage2 = new Milk(beverage2); beverage2 = new Cream(beverage2); System.out.println(beverage2.getDescription()+ " $" + beverage2.cost()); Beverage beverage3 = new HouseBlend(); beverage3 = new Sugar(beverage3); beverage3 = new Chocolate(beverage3); beverage3 = new Cream(beverage3); System.out.println(beverage3.getDescription() + " $" + beverage3.cost()); 84 Facade Objetivo Fornece uma interface comum para um grupo de classes de um subsistema, facilitando o seu uso Motivação Reduzir o acomplamento entre sistemas class GOF-FACADE class GOF-FACADE Class6 Class7 Class6 Class7 Facade Subsistema Subsistema Class1 Class3 Class5 Class1 Class3 Class5 Class4 Class2 Class4 Class

16 Facade Exemplo - UML A facade (TravelFacade) esconde a complexidade para integrar com o sistema de viagem (TravelSystem) Facade implementa todo o código necessário para integrar com o sistema O ideal é definir a fachada como uma interface e então criar sua implementação concreta class GOF-Facade Sample «interface» ITravelFacade + getflightsandhotels(date, Data) : void Client + main(string[]) : void TravelFacadeImpl - hotelbooker: HotelBooker - flightbooker: FlightBooker + getflightsandhotels(date, Data) : void Trav elsystem -flightbooker -hotelbooker FlightBooker + getflightsfor(date, Date) : ArrayList<Flight> HotelBooker + gethotelnamesfor(date, Date) : ArrayList<Hotel> 86 Façade Exemplo - Código public class HotelBooker{ public ArrayList<Hotel> gethotelnamesfor(date from, Date to) { //returns hotels available in the particular date range public class FlightBooker{ public ArrayList<Flight> getflightsfor(date from, Date to){ //returns flights available in the particular date range public interface ITravelFacade { public void getflightsandhotels(date from, Data to); 87 16

17 Façade Exemplo - Código public class TravelFacadeImpl implements ITravelFacade{ private HotelBooker hotelbooker; private FlightBooker flightbooker; public void getflightsandhotels(date g from, Data to) { ArrayList<Flight> flights = flightbooker.getflightsfor(from, to); ArrayList<Hotel> hotels = hotelbooker.gethotelsfor(from, to); //process and return public class Client { public static void main(string[] args) { TravelFacadeImpl facade = new TravelFacade(); facade.getflightsandhotels(from, to); 88 Bridge Objetivo Desacoplar a abstração da implementação Cada um pode ser estendido de forma independente Motivação Quando é possível a presença de mais de uma implementação para uma determinada abstração Aplicação Evitar uma ligação forte entre a abstração e a implementação Permitir que uma implementação seja escolhida em tempo de execução 89 17

18 Bridge Exemplo Abstração (Shape) e implementação (DrawingAPI) podem evoluir de forma independente class GOF-Bridge BridgePatternClient + main(string[]) : void «interface» Shape + draw() : void + resizebypercentage(double) : void «interface» DrawingAPI -drawingapi + drawcircle(double, double, double) : void CircleShape - x: double - y: double - radius: double - drawingapi: DrawingAPI + CircleShape(double, double, double, DrawingAPI) + draw() : void + resizebypercentage(double) : void Draw ingapi2 + drawcircle(double, double, double) : void DrawingAPI1 + drawcircle(double, double, double) : void 90 Bridge Exemplo - Código /** "Implementor" */ interface DrawingAPI { public void drawcircle(double x, double y, double radius); /** "ConcreteImplementor" 1/2 */ class DrawingAPI1 implements DrawingAPI { public void drawcircle(double x, double y, double radius) { System.out.printf("API1.circle at %f:%f radius %f\n", x, y, radius); /** "ConcreteImplementor" 2/2 */ class DrawingAPI2 implements DrawingAPI { public void drawcircle(double x, double y, double radius) { System.out.printf("API2.circle at %f:%f radius %f\n", x, y, radius); /** "Abstraction" */ 91 18

19 Bridge Exemplo - Código /** "Implementor" */ interface DrawingAPI { public void drawcircle(double x, double y, double radius); /** "ConcreteImplementor" 1/2 */ class DrawingAPI1 implements DrawingAPI { public void drawcircle(double x, double y, double radius) { System.out.printf("API1.circle at %f:%f radius %f\n", x, y, radius); /** "ConcreteImplementor" 2/2 */ class DrawingAPI2 implements DrawingAPI { public void drawcircle(double x, double y, double radius) { System.out.printf("API2.circle at %f:%f radius %f\n", x, y, radius); 92 Bridge Exemplo - Código interface Shape {/** "Abstraction" */ public void draw(); public void resizebypercentage(double pct); // low-level // high-level class CircleShape implements Shape {/** "Refined Abstraction" */ private double x, y, radius; private DrawingAPI drawingapi; public CircleShape(double x, double y, double radius, DrawingAPI drawingapi) { this.x = x; this.y = y; this.radius = radius; this.drawingapi = drawingapi; public void draw() {// low-levellevel i.e. Implementation specific drawingapi.drawcircle(x, y, radius); public void resizebypercentage(double pct) {// high-level i.e. Abstraction specific radius *= pct; 93 19

20 Bridge Exemplo - Código /** "Client" */ class BridgePatternClient { public static void main(string[] args) { Shape[] shapes = new Shape[] { p [] p p [] { new CircleShape(1, 2, 3, new DrawingAPI1()), new CircleShape(5, 7, 11, new DrawingAPI2()), ; for (Shape shape : shapes) { shape.resizebypercentage(2.5); shape.draw(); 94 Composite Objetivo Compor objetos de forma que partes e estruturas, formadas por estas partes possam ser tratadas de maneira uniforme Motivação Em muitas situações objetos podem ser compostos para gerar outros objetos Caso o código trate as partes e os objetos compostos de forma diferenciada acarretando em uma aplicação mais complexa Uso Representar hierarquias do tipo todo-parte de objetos Tratar tanto objetos individuais, quanto composições destes objetos de maneira uniforme 95 20

21 Composite Exemplo O diagrama mostra o uso deste padrão de projeto Um Menu é composto é composto de elementos MenuItem, porém o tratamento do todo (Menu) como das suas partes (MenuItem) será mesmo pois ambos representam herança de MenuComponent class GOF-Composite Client MenuComponent 0..* é composto MenuItem {leaf Menu 96 Composite Exempo Aplicação Gráfica Uma Ellipse ou um Circle é um elemento gráfico É possível ter grupos de elementos gráficos que devem ser tratados de maneira uniforme maneira uniforme class GOF-Composite Sample Client + main(string[]) : void «interface» Graphic + print() : void Ellipse {leaf + print() : void Circle {leaf + print() : void Group - mchildgraphics: List<Graphic> = new ArrayList<G... + print() : void + add(graphic) : void + remove(graphic) : void 97 21

22 Composite Exemplo Código import java.util.list; import java.util.arraylist; interface Graphic {/** "Component" */ //Prints the graphic. public void print(); public final class Ellipse implements Graphic {/** "Leaf" */ public void print() { System.out.println("Ellipse"); public final class Circle implements Graphic {/** "Leaf" */ public void print() { System.out.println("Circle"); 98 Composite Exemplo Código class Group implements Graphic {/** "Composite" */ //Collection of child graphics. private List<Graphic> mchildgraphics = new ArrayList<Graphic>(); public void print() { p p () { for (Graphic graphic : mchildgraphics) { graphic.print(); public void add(graphic graphic) {//Adds the graphic to the composition. mchildgraphics.add(graphic); public void remove(graphic graphic) {//Removes the graphic from the composition. mchildgraphics.remove(graphic); 99 22

23 Composite Exemplo Código public class Client {/** Client */ public static void main(string[] args) { Ellipse ellipse1 = new Ellipse(); //Initialize single graphics Ellipse ellipse2 = new Ellipse(); p p p (); Circle circle1 = new Circle (); Circle circle2 = new Circle (); Group = new Group(); //Initialize three composite graphics Group graphic1 = new Group(); Group graphic2 = new Group(); graphic1.add(ellipse1); //Composes the graphics graphic1.add(ellipse2); graphic1.add(circle1); add(circle1); graphic2.add(circle2); graphic.add(graphic1); graphic.add(graphic2); //Prints the complete graphic components graphic.print(); 100 Proxy Objetivo Fornece um substituto para um outro objeto permitindo o controle de acesso a este objeto Motivação Em muitas situações é necessário controlar o acesso a um objeto a fim de adiar o custo de sua criação e inicialização Por exemplo: Uso Um documento que contém várias fotos. Abrir todos os arquivos de forma simultânea poderia ser ineficiente O proxy fornece uma representação para a imagem e sua exibição somente ocorrerá no momento em que a página que contiver a respectiva foto seja exibida Proxy Remoto Oferece uma representação local para um objeto remoto, por exemplo, em outro espaço de endereçamento Proxy Virtual Oferece uma representação para um objeto cuja criação será feita por demanda Protection Proxy Controla o acesso a um determinado objeto

24 Proxy Estrutura A classe ProxySubject representa a classe Subject. Neste caso o cliente (Client) utilizará uma instância de ProxySubject e não de subject A classe ProxySubject pode por exemplo: restringir o acesso ao subject; ser uma representação local; conter um cache para um subject remoto class GOF-Proxy Client «interface» ISubject + operation() : void ProxySubj ect - subject: Subject Subject + operation() : void + operation() : void 102 Proxy Exemplo A classe ProxyImage representa uma imagem Neste caso trata-se de um proxy virtual, o cliente do proxy (ProxyClient) não precisa criar objetos da classe RealImage, mas apenas da classe ProxyClient que representará um objeto da classe RealImage class GOF-Proxy ProxyClient + main(string[]) : void «interface» Image + displayimage() : void ProxyImage - filename: String - image: RealImage + ProxyImage(String) + displayimage() : void -image RealImage - filename: String + RealImage(String) - loadimagefromdisk() : void + displayimage() : void

25 Proxy Exemplo Código interface Image { void displayimage(); class RealImage implements Image { private String filename; public RealImage(String filename) { this.filename = filename; loadimagefromdisk(); private void loadimagefromdisk() { System.out.println( println("loading " + filename); public void displayimage() { System.out.println("Displaying " + filename); 104 Proxy Exemplo Código class ProxyImage implements Image { private String filename; private RealImage image; public ProxyImage(String filename) { p y g ( g ) { this.filename = filename; public void displayimage() { if (image == null) { image = new RealImage(filename); image.displayimage();

26 Proxy Exemplo Código class ProxyClient { public static void main(string[] args) { Image image1 = new ProxyImage("HiRes_10MB_Photo1"); Image image2 = new ProxyImage("HiRes _ 10MB_ Photo2"); image1.displayimage(); // loading necessary image2.displayimage(); // loading necessary image1.displayimage(); // loading unnecessary 106 Padrões Comportamentais Representam e descrevem padrões de comunicação entre objetos a fim de realizar um comportamento específico Seu objetivo é que foco do projeto seja a interconexão entre os objetos a fim de obter este comportamento Padrões definidos por Gamma et. al. (GoF) Chain of Responsibility Command Flyweigth Interpreter Iterator Mediator Memento Observer State Strategy Template Visitor

27 Padrões Comportamentais Observer Command Strategy Template Iterator Visitor Mediator 108 Observer Objetivo Define uma dependência entre objeto e vários outros(um-para-muitos) sendo que em uma alteração neste objeto, todos os outros são notificados Motivação Em muitas situações um objeto pode ter vários outros dependentes. Neste caso sempre que este objeto (sujeito) for alterado é interessante que outros sejam notificados Isto porém pode levar a um forte acoplamento entre os mesmos Uso Quando uma abstração (Classe) possuir dois ou mais aspectos estes podem ser encapsulados em diferentes classes Em situações onde a alteração de um objeto pode afetar um grupo de outros objetos não conhecidos previamente Permitir que um objeto seja capaz de notificar outros sem que estejam acoplados

28 Observer Estrutura O sujeito (subject) é observado por uma lista de observadores (Observer) Um método notify() invoca o método update() nos observadores class GOF-Observer Subject - observers: Li st<observer> Observer + update() : void + attach(observer) : void + detach(observer) : void + notfiy() : void ConcreteSubject - subejctstate: Object + attach(observer) : void + detach(observer) : void + notfiy() : void «property get» + getsubejctstate() : Object «property set» + setsubejctstate(object) : void ConcreteObserv er - observerstate: Object + update() : void 110 Observer Exemplo A medida que as ações de uma empresa (Stock) forem alteradas os investirores (Inverstor) serão notificados class GOF-Observer Stock - symbol: String - price: double - investors: List<IInvestor> = new List<IInves... + Stock(String, double) + attach(iinvestor) : void + detach(iinvestor) : void + notify() : void + getprice() : double + setprice(double) : void + getsymbol() : String -stock «interface» IInvestor + update(stock) : void MainApplication + Main() : void Petrobras + Petrobras(String, double) Inv estor - name: String - stock: Stock + Investor(String) + update(stock) : void + getstock() : Stock + setstock(stock) : void

29 Observer Exemplo - Código /// MainApp startup class for Real-World public class MainApplication { public static void Main(){ // Create Petrobras stock and attach investors Petrobras petro = new Petrobras("Petrobras", ); petro.attach(new Investor("Sorros")); petro.attach(new Investor("Berkshire")); // Fluctuating prices will notify investors petro.setprice(120.10); petro.setprice(121.00); petro.setprice(120.50); petro.setprice(120.75); 112 Observer Exemplo - Código /// The 'Subject' abstract class public abstract class Stock { private String symbol; private double price; private List<IInvestor> investors = new List<IInvestor>(); public Stock(String symbol, double price){ this.symbol = symbol; this.price = price; public void attach(iinvestor investor){ investors.add(investor); public void detach(iinvestor investor){ investors.remove(investor); public void notify() { for (IInvestor investor : investors){ investor.update(this); System.out.println("");

30 Observer Exemplo - Código public double getprice(){ return price; public void setprice(double nprice){ if (price!= nprice){ price = nprice; p p ; notify(); // Gets the symbol public String getsymbol(){ return symbol; 114 Observer Exemplo - Código // The 'ConcreteSubject' class public class Petrobras extends Stock { // Constructor public Petrobras(String symbol, double price) { super(symbol, price)

31 Observer Exemplo - Código // The 'Observer' interface interface Iinvestor { void update(stock stock); // The 'ConcreteObserver' class public class Investor implements IInvestor { private String name; private Stock stock; public Investor(String name){ this.name = name; public void update(stock stock){ System.out.println( println("notificando " + this.name + "que " + stock.getsymbol() + " alterou para " + stock.getprice(); public Stock getstock() { return stock; public void setstock(stock value){ stock = value; 116 Command Objetivo Motivação Uso Estrutura Exemplo Código

32 Command Exemplo - Estrutura class GOF-Command -flipupcommand - flipdowncommand «interface» Command + execute() : void Switch PressSwitch + main(string[]) : void - flipupcommand: Command - flipdowncommand: Command + Switch(Command, Command) + flipup() : void + flipdown() : void FlipUpCommand - thelight: Light + FlipUpCommand(Light) + execute() : void FlipDownCommand - thelight: Light + FlipDownCommand(Light) + execute() : void -thelight -thelight Light + Light() + turnon() : void + turnoff() : void 118 Command Código /* The Invoker class */ public class Switch { private Command flipupcommand; private Command flipdowncommand; public Switch(Command flipupcmd, Command flipdowncmd) { this.flipupcommand = flipupcmd; this.flipdowncommand = flipdowncmd; public void flipup() { flipupcommand.execute(); public void flipdown() { flipdowncommand.execute();

33 Command Código /* The Receiver class */ public class Light { public Light() { public void turnon() { p () { System.out.println("The light is on"); public void turnoff() { System.out.println("The light is off"); 120 Command Código /* The Command interface */ public interface Command { void execute(); /* The Command for turning the light on in North America, or turning the light off in most other places */ public class FlipUpCommand implements Command { private Light thelight; public FlipUpCommand(Light light) { this.thelight = light; public void execute(){ thelight.turnon();

34 Command Código /* The Command for turning the light off in North America, or turning the light on in most other places */ public class FlipDownCommand implements Command { private Light thelight; public FlipDownCommand(Light light) { this.thelight = light; public void execute() { thelight.turnoff(); 122 Command Código public class PressSwitch { // The test class or client public static void main(string[] args) { Light lamp = new Light(); Command switchup = new FlipUpCommand(lamp); p p); Command switchdown = new FlipDownCommand(lamp); Switch s = new Switch(switchUp, switchdown); try { if (args[0].equalsignorecase("on")) { s.flipup(); else if (args[0].equalsignorecase("off")) { s.flipdown(); else{ System.out.println("Argument \"ON\" or \"OFF\" is required."); catch (Exception e) { System.out.println("Arguments required.");

35 Command Código /* The Invoker class */ public class Switch { private Command flipupcommand; p private Command flipdowncommand; public Switch(Command flipupcmd, Command flipdowncmd) { this.flipupcommand = flipupcmd; this.flipdowncommand = flipdowncmd; public void flipup() { flipupcommand.execute(); public void flipdown() { flipdowncommand.execute(); 124 Strategy Objetivo Definir uma família de algoritmos que podem ser intercambiáveis sendo possível alterar os algoritmos sem alterar o cliente que os utiliza Motivação Considere a existência de vários algoritmos para uma mesma tarefa, por exemplo, ordenar uma lista de objetos Uma aplicação que deve suportar diferentes algoritmos pode tornar-se complexa e no geral não permite a adição de novos que possam ser desenvolvidos Uso Configurar o uso considerando que existem classes relacionadas com diferentes comportamentos Existência de diferentes algoritmos ou métodos que podem ser implementados e que devem ser selecionados em tempo de execução Impedir que o cliente tenha que manter dados específicos para diferentes algoritmos Remover o uso de estruturas de seleção, como um switch, em uma operação. Neste caso cada possibilidade de código a ser executado se transforma em uma diferente estratégia

36 Strategy Estrutura Um mesma mesma estratégia (Strategy) pode ser implementada de diversas formas (AConcreteStategy, BConcreteStategy, CConcreteStategy) Em um contexto (Context) contém uma estratégia genérica O contexto é utlizado por um cliente (Client). Uma alteração no contexto pode indicar o uso de uma nova estratégia class GOF-Strategy Context - strategy: Strategy «interface» Strategy + callalgorithm() : void Client AConcreteStrategy + callalgorithm() : void BConcreteStrategy + callalgorithm() : void CConcreteStrategy + callalgorithm() : void 126 Strategy Exemplo Neste caso a estratégia permite que o cliente (StrategyExample) utilize diferentes operações aritméticas conforme o contexto (Context) utilizado class GOF-Strategy Sample Context - strategy: Strategy + Context(Strategy) + executestrategy(int, int) : int -strategy «interface» Strategy + execute(int, int) : int ConcreteStrategyAdd ConcreteStrategySubtract ConcreteStrategyMultiply StrategyExample + execute(int, int) : int + execute(int, int) : int + execute(int, int) : int + main(string[]) : void

37 Strategy Exemplo - Código interface Strategy { int execute(int a, int b); class ConcreteStrategyAdd implements Strategy { public int execute(int a, int b) { System.out.println("Called ConcreteStrategyAdd's execute()"); return a + b; class ConcreteStrategySubtract implements Strategy { public int execute(int a, int b) { System.out.println("Called ConcreteStrategySubtract's execute()"); return a - b; class ConcreteStrategyMultiply implements Strategy { public int execute(int a, int b) { System.out.println("Called ConcreteStrategyMultiply's execute()"); return a * b; 128 Strategy Exemplo - Código class Context { private Strategy strategy; // Constructor public Context(Strategy strategy) { p ( gy gy) { this.strategy = strategy; public int executestrategy(int a, int b) { return strategy.execute(a, b); class StrategyExample { public static void main(string[] args) { Context context; context = new Context(new ConcreteStrategyAdd()); int resulta = context.executestrategy(3,4); context = new Context(new ConcreteStrategySubtract()); int resultb = context.executestrategy(3,4); context = new Context(new ConcreteStrategyMultiply()); int resultc = context.executestrategy(3,4);

38 Template Objetivo Define um modelo (template) de um algoritmo em deixando alguns passos para suas subclasses Motivação Uso Implementar as partes invariantes de um algoritmo na superclasse, deixando para a subclasse o comportamento que pode variar Evitar a duplicação de código, localizado o comportamento comum na superclasse Estrutura Exemplo Código 130 Template Estrutura A classe abstrata (AbstractClass) possui um conjunto de operações e um método (templatemethod) que é responsável por invocar as operaçoes que são especializadas nas subclasses (ConcreteClass1 e ConcreteClass2) ConcreteClass2) class GOF-Template AbstractClass + templatemethod() : void + baseoperation() : void + primitiveoperation1() : void + primitiveoperation2() : void templatemethod(){... baseoperation();... primitiveoperation1();... primitiveoperation2(); ConcreteClass1 + primitiveoperation1() : void + primitiveoperation2() : void ConcreteClass2 + primitiveoperation1() : void + primitiveoperation2() : void

39 Template Exemplo Um jogo contém operações básicas que serão especializadas O template method aqui é playonegame() class GOF-Template Game # playerscount: int + initializegame() : void + makeplay(int) : void + endofgame() : boolean + printwinner() : void + playonegame(int) : void Monopoly + initializegame() : void + makeplay(int) : void + endofgame() : boolean + printwinner() : void Chess + initializegame() : void + makeplay(int) : void + endofgame() : boolean + printwinner() : void 132 Template Exemplo Código public abstract class Game { protected int playerscount; public abstract void initializegame(); public abstract void makeplay(int player); p y( p y ); public abstract boolean endofgame(); public abstract void printwinner(); /* A template method : */ public final void playonegame(int playerscount) { this.playerscount = playerscount; initializegame(); int j = 0; while (!endofgame()) { makeplay(j); j = (j + 1) % playerscount; printwinner();

40 Template Exemplo Código //Now we can extend this to implement other games public class Monopoly extends Game { /* Implementation of necessary concrete methods */ public void initializegame() { p () { // Initialize players // Initialize money public void makeplay(int player) { // Process one turn of player public boolean endofgame() { // Return true if game is over // according to Monopoly rules public void printwinner() { // Display who won 134 Template Exemplo Código public class Chess extends Game { /* Implementation of necessary concrete methods */ public void initializegame() { // Initialize players // Put the pieces on the board public void makeplay(int player) { // Process a turn for the player public boolean endofgame() { // Return true if in Checkmate or // Stalemate has been reached public void printwinner() { // Display the winning player

41 Template Exemplo Código public class Monopoly extends Game { /* Implementation of necessary concrete methods */ public void initializegame() { // Initialize players // Initialize money public void makeplay(int player) { // Process one turn of player public boolean endofgame() { // Return true if game is over // according to Monopoly rules public void printwinner() { // Display who won 136 Iterator Objetivo Fornece uma maneira de acessar os componentes de um objeto sem expor a sua representação interna Motivação Uso Estrutura Exemplo Código

42 Iterator Estrutura O iterator (ListIterator) permite o acesso ao objeto da lista em que seja necessário conhecer o seu interior 138 Iterator Exemplo Em uma televisão (ConcreteTV) existe um Iterator (ChannelIterator) sobre os canais desta televisão Idepentende de como o acesso aos canais é feito é possível obtê-los através do Iterator class GOF-Iterator «interface» TV + getiterator() : ChannelIterator ChannelIterator - channels: List<String> - currentpos: int = 0 + ChannelIterator(List<String>) + hasnext() : boolean + next() : void + currentitem() : String «interface» Iterator + hasnext() : boolean + next() : void + currentitem() : String -iterator ConcreteTV - iterator: ChannelIterator - channels: List<String> + ConcreteTV() + getiterator() : ChannelIterator

43 Iterator Código //Iterator interface public interface Iterator { public boolean hasnext(); public void next(); p (); public String currentitem(); //Aggregate interface public interface TV { public ChannelIterator getiterator(); //other TV methods 140 Iterator Código //Concrete Aggregator public class ConcreteTV implements TV{ private ChannelIterator iterator; private List<String> channels; p g ; public ConcreteTV() { iterator = new ConcreteChannelIterator(channels); public ChannelIterator getiterator() { return iterator;

44 Iterator Código //Concrete Iterator public class ChannelIterator implements Iterator { private List<String> channels; private int currentpos = 0; p ; public ChannelIterator(List<String> channels){ this.channels = channels; public boolean hasnext(){ if(currentpos + 1 < channels.size()){ return true; return false; public void next() { currentpos++; public String currentitem() { return channels.get(currentpos); 142 Visitor Objetivo Permite que uma ou mais operações seja aplicada a um conjunto ou estrutura de objetos, desacoplando as operações desta estrutura A operação visita o conjunto de objetos e é executada sobre o mesmo Motivação Para calcular o total de uma compra, diferentes operações devem ser executadas sobre o produto. Em alguns caso é necessário pesar o produto para obter seu preço, em outros é necessário apenas ler seu código de barras, em outro finalmente é aplicado um desconto por compras em quantidade Ao passar no caixa, o atendente será o Visitor, que irá obter um produto e então calculará o seu preço. Uso Desacoplar a lógica de uma operação dos objetos que são submetidos a esta o operação Permitir que operações diferentes e não relacionadas seja aplicadas em uma estrutura de objetos

45 Visitor Estrutura A interface Visitor define uma operação sobre um elemento (ConcreteElement). Um elemento por sua vez possui uma operação que permite aceitar um visitante (accept), associando-se ao vistante 144 Visitor Estrutura

46 Visitor Estrutura 146 Visitor Exemplo Utilizando um visitor (PostageVisitor) será possível implementar o cálculo do frente para diferentes produtos (Book, CD, DVD) e então calcular o valor do frete (calculatepostage) class GOF - Visitor ShoppingCart - items: ArrayList<Visitable> + calculatepostage() : double «interface» Visitable + accept(visitor) : void PostageVisitor - totalpostageforcart: double + visit(book) : void + visit(cd) : void + visit(dvd) : void + gettotalpostage() : double «interface» Visitor + visit(book) : void + visit(cd) : void + visit(dvd) : void Element + accept(visitor) : void Book - price: double - weight: double CD DVD + getprice() : double + getweight() : double

47 Visitor Exemplo - Código //Element interface public interface Visitable { public void accept(visitor visitor); //abstract element public abstract class Element implements Visitable { //accept the visitor public void accept(visitor visitor) { visitor.visit(this); //concrete element public class CD extends Element{ //concrete element public class DVD extends Element{ 148 Visitor Exemplo - Código //concrete element public class Book extends Element { private double price; private double weight; p g ; public double getprice() { return price; public double getweight() { return weight;

48 Visitor Exemplo - Código public interface Visitor { public void visit(book book); //visit other concrete items public void visit(cd cd); p ( ); public void visit(dvd dvd); 150 Visitor Exemplo - Código public class PostageVisitor implements Visitor { private double totalpostageforcart; //collect data about the book public void visit(book book) { p ( ) { //assume we have a calculation here related to weight and price //free postage for a book over 10 if(book.getprice() < 10.0) { totalpostageforcart += book.getweight() * 2; //add other visitors here public void visit(cd cd){... public void visit(dvd dvd){... //return the internal state public double gettotalpostage() { return totalpostageforcart;

49 Visitor Exemplo - Código public class ShoppingCart { //normal shopping cart stuff private ArrayList<Visitable> items; public double calculatepostage() { p g () { //create a visitor PostageVisitor visitor = new PostageVisitor(); //iterate through all items for(visitable item: items) { item.accept(visitor); double postage = visitor.gettotalpostage(); return postage; 152 Mediator Objetivo Permite criar um baixo acoplamento entre um conjunto de objetos que se comunica e interage O mediator é o objeto que realiza a comunicação com cada objeto permitindo que esta comunicação entre estes objetos ocorra de forma independende uma das outras Motivação Uma torre de controle em um aeroporto é o mediator entre os aviões e o aeroporto Ao invés dos aviões comunicarem entre si cada um comunica diretamente com a torre Uso Quando existe uma comunicação complexa, porém bem definida, entre objetos Em situações onde existem vários relacionamentos entres objetos produzindo uma diagrama de classes que indica alto acoplamento

50 Mediator Estrutura O mediator define uma interface para a comunicação entre diferentes partes (Colleage). Um mediator é então criado (ConcreteMediator) a fim de implementar o comportamento para a comunicação 154 Mediator Exemplo A comunicação entre as entidades (FixedEntity e MobileEntity) é realizada através do mediator (ApplicationMediator) associado a cada entidade class GOF - Mediator «interface» Mediator + send(string, Entity) : void -mediator Entity - mediator: Mediator + Entity(Mediator) + send(string) : void + getmediator() : Mediator + receive(string) : void Client + main(string[]) : void ApplicationMediator - entitys: ArrayList<Entity> + ApplicationMediator() + addentity(entity) : void + send(string, Entity) : void MobileEntity + receive(string) : void FixedEntity + receive(string) : void

51 Mediator Código //Mediator interface public interface Mediator { public void send(string message, Entity entity); public abstract class Entity {//Entity Abstract Base Class private Mediator mediator; public Entity(Mediator m){ mediator = m; public void send(string message){ //send a message via the mediator mediator.send(message, this); public Mediator getmediator(){ //get access to the mediator return mediator; public abstract void receive(string message); 156 Mediator Código public class ApplicationMediator implements Mediator { private ArrayList<Entity> entitys; public ApplicationMediator(){ entitys = new ArrayList<Entity>(); y y y (); public void addentity(entity entity) { entitys.add(entity); public void send(string message, Entity originator) { //let all other screens know that this screen has changed for(entity entity: entitys){ //don't tell ourselves if(entity!= originator){ entity.receive(message);

52 Mediator Código public class FixedEntity extends Entity { public void receive(string message){ System.out.println("FixedEntity Received: " + message); public class MobileEntity extends Entity { public void receive(string message) { System.out.println("MobileEntity Received: " + message); 158 Mediator Código //Client shows the use public class Client { public static void main(string[] args) { ApplicationMediator mediator = new ApplicationMediator(); FixedEntity desktop = new FixedEntity(mediator) FixedEntity mobile = new MobileEntity(mediator) mediator.addentity(desktop); mediator.addentity(mobile); desktop.send( send("hello World"); mobile.send("hello");

Padrões Comportamentais. Padrões Comportamentais

Padrões Comportamentais. Padrões Comportamentais Padrões Comportamentais Representam e descrevem padrões de comunicação entre objetos a fim de realizar um comportamento específico Seu objetivo é que foco do projeto seja a interconexão entre os objetos

Leia mais

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

Programação Orientada a Objetos 2 Flávio de Oliveira Silva, M.Sc. Padrões Estruturais Adapter Bridge Composite Decorator Facade Proxy 74 Adapter Objetivo Converter uma interface de uma classe para uma interface compatível com a esperada Permite que classes possam cooperar

Leia mais

Análise e Projeto. Padrões de Análise, Arquitetura e Projeto

Análise e Projeto. Padrões de Análise, Arquitetura e Projeto Análise e Projeto Padrões de Análise, Arquitetura e Projeto 33 Padrões de Arquitetura Padrões Nome do padrão Problema: quando aplicar o padrão? Descreve o problema e seu contexto. Solução: elementos que

Leia mais

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

Programação Orientada a Objetos 2 Flávio de Oliveira Silva, M.Sc. Padrões Um padrão de é uma maneira de documentar uma solução conhecida para um problema usualmente encontrado O objetivo do padrão é permitir que boas soluções sejam reutilizadas em diferentes projetos

Leia mais

Programação Orientada a Objetos. Padrões de Criação

Programação Orientada a Objetos. Padrões de Criação Programação Orientada a Objetos Padrões de Criação Cristiano Lehrer, M.Sc. Objetivos Apresentar cada um dos 23 padrões clássicos descrevendo: O problema que solucionam. A solução. Diagramas UML (Unified

Leia mais

Análise e Projeto Orientados por Objetos

Análise e Projeto Orientados por Objetos Análise e Projeto Orientados por Objetos Aula 07 Padrões GoF (Command e Template Method) Edirlei Soares de Lima Padrões GoF Criação: Abstract Factory Builder Factory Method Prototype

Leia mais

Programação Avançada. Padrões de Projeto de Software. Fonte: Oswaldo B. Peres e K19 Treinamentos

Programação Avançada. Padrões de Projeto de Software. Fonte: Oswaldo B. Peres e K19 Treinamentos Programação Avançada Padrões de Projeto de Software 1 Fonte: Oswaldo B. Peres e K19 Treinamentos Introdução Projetar software OO reusável e de boa qualidade é uma tarefa difícil; Para realizar essa tarefa

Leia mais

Programação com Objectos

Programação com Objectos Programação com Objectos PADRÕES DE DESENHO Classificaçã Objectivo Criação Estrutura Comportamento Introdução Alguns Padrões de Desenho Classe Factory Method Adapter Interpreter Template Method O que é

Leia mais

Testes com Design Patterns

Testes com Design Patterns Helder da Rocha (helder.darocha@gmail.com) 31 de março de 2005 71. Que padrão de design pode ser usado para permitir que uma implementação específica e uma hierarquia de abstrações possa variar independentemente?

Leia mais

Padrões GoF. Leonardo Gresta Paulino Murta leomurta@ic.uff.br

Padrões GoF. Leonardo Gresta Paulino Murta leomurta@ic.uff.br Padrões GoF Leonardo Gresta Paulino Murta leomurta@ic.uff.br Agenda Introdução Padrões de Criação Padrões de Estrutura Padrões de comportamento Leonardo Murta Padrões GoF 2 Introdução Os padrões GoF (Gamma

Leia mais

Padrões de Projeto. Prof. Jefersson Alex dos Santos (jefersson@dcc.ufmg.br) http://www.dcc.ufmg.br/~jefersson

Padrões de Projeto. Prof. Jefersson Alex dos Santos (jefersson@dcc.ufmg.br) http://www.dcc.ufmg.br/~jefersson Padrões de Projeto Prof. Jefersson Alex dos Santos (jefersson@dcc.ufmg.br) http://www.dcc.ufmg.br/~jefersson Apresentação Conceitos Definição Ponto de vista prático História Padrões de Projeto Conhecidos

Leia mais

Prototype, um Design Patterns de Criação

Prototype, um Design Patterns de Criação Prototype, um Design Patterns de Criação José Anízio Pantoja Maia Este artigo tem como finalidade compreender o funcionamento do padrão de projeto prototype, serão abordados os participantes que compõe

Leia mais

1Introdução Helder da Rocha (helder@acm.org)

1Introdução Helder da Rocha (helder@acm.org) J930 Padrões Projeto de 1Introdução Helder da Rocha (helder@acm.org) argonavis.com.br O que é um padrão? Maneira testada ou documentada de alcançar um objetivo qualquer Padrões são comuns em várias áreas

Leia mais

Design Patterns. Viviane Torres da Silva viviane.silva@ic.uff.br. http://www.ic.uff.br/~viviane.silva/2012.1/es1

Design Patterns. Viviane Torres da Silva viviane.silva@ic.uff.br. http://www.ic.uff.br/~viviane.silva/2012.1/es1 Design Patterns Viviane Torres da Silva viviane.silva@ic.uff.br http://www.ic.uff.br/~viviane.silva/2012.1/es1 Sumário Reuso de Software Introdução Benefícios e Desvantagens Visão do Reuso Padrões de Projeto

Leia mais

J930. Padrões. Projeto. Introdução. argonavis.com.br. Helder da Rocha (helder@acm.org)

J930. Padrões. Projeto. Introdução. argonavis.com.br. Helder da Rocha (helder@acm.org) Padrões de J930 Projeto Introdução Helder da Rocha (helder@acm.org) argonavis.com.br O que é um padrão? Maneira testada ou documentada de alcançar um objetivo qualquer Padrões são comuns em várias áreas

Leia mais

Curso - Padrões de Projeto Módulo 1: Introdução

Curso - Padrões de Projeto Módulo 1: Introdução Curso - Padrões de Projeto Módulo 1: Introdução Vítor E. Silva Souza vitorsouza@gmail.com http://www.javablogs.com.br/page/engenho http://esjug.dev.java.net Sobre o Instrutor Formação: Java: Graduação

Leia mais

Arquiteturas baseadas em camadas

Arquiteturas baseadas em camadas Arquiteturas baseadas em camadas Por Sergio Crespo Email: crespo@unisinos.br http://www.inf.unisinos.br/~crespo Prof. Dr. Sergio Crespo C S Pinto 2010/01 Introdução O problema fundamental a ser resolvido

Leia mais

PADRÕES DE SOFTWARE. Jerffeson Teixeira de Souza, Ph.D. Tarciane de Castro Andrade. Grupo de Padrões de Software da UECE (GPS.

PADRÕES DE SOFTWARE. Jerffeson Teixeira de Souza, Ph.D. Tarciane de Castro Andrade. Grupo de Padrões de Software da UECE (GPS. PADRÕES DE SOFTWARE 1 Jerffeson Teixeira de Souza, Ph.D. Tarciane de Castro Andrade Grupo de Padrões de Software da UECE (GPS.UECE) Julho-2009 CONTEÚDO Introdução aos Padrões de Software O quê são padrões?

Leia mais

Uma Introdução aos Padrões de Projeto com Java. Roberto Willrich INE-CTC-UFSC

Uma Introdução aos Padrões de Projeto com Java. Roberto Willrich INE-CTC-UFSC Uma Introdução aos Padrões de Projeto com Java Roberto Willrich INE-CTC-UFSC 1 Introdução aos Padrões de Projeto Programação Introdução Motivação, Definição, Características, Histórico Descrição de um

Leia mais

Universidade Federal de Itajubá Instituto de Engenharia de Sistemas e Tecnologias da Informação-IESTI PCO203 Tópicos Especiais em Programação

Universidade Federal de Itajubá Instituto de Engenharia de Sistemas e Tecnologias da Informação-IESTI PCO203 Tópicos Especiais em Programação UNIFEI Disciplina Professor Universidade Federal de Itajubá Instituto de Engenharia de Sistemas e Tecnologias da Informação-IESTI PCO203 Tópicos Especiais em Programação Enzo Seraphim 1 Padrões de Projeto

Leia mais

Universidade Federal de Itajubá Instituto de Engenharia de Sistemas e Tecnologias da Informação-IESTI PCO203 Tópicos Especiais em Programação

Universidade Federal de Itajubá Instituto de Engenharia de Sistemas e Tecnologias da Informação-IESTI PCO203 Tópicos Especiais em Programação UNIFEI Disciplina Professor Universidade Federal de Itajubá Instituto de Engenharia de Sistemas e Tecnologias da Informação-IESTI PCO203 Tópicos Especiais em Programação Enzo Seraphim 1 Padrões de Operação

Leia mais

Design Pattern Implementation in Java and AspectJ

Design Pattern Implementation in Java and AspectJ Design Pattern Implementation in Java and AspectJ Jan Hannemann Gregor Kiczales In Proceedings of 2002 ACM SIGPLAN conference on OOPSLA. NY, USA. Introdução 2 Introdução 3 Introdução 4 Introdução 5 Introdução

Leia mais

Prof.ª Esp. Talita Pagani

Prof.ª Esp. Talita Pagani Especialização em Engenharia de Software Prof.ª Esp. Talita Pagani talita.cpb@gmail.com @talitapagani 21/02/2014 Design Patterns Aula 1 Prof.ª Esp. Talita Pagani 1 Informações gerais 1. Definição de Design

Leia mais

Flexibilidade e Reusabilidade em Sistemas Orientados a Objetos - Uma Proposta para Implementação no EB

Flexibilidade e Reusabilidade em Sistemas Orientados a Objetos - Uma Proposta para Implementação no EB Flexibilidade e Reusabilidade em Sistemas Orientados a Objetos - Uma Proposta para Implementação no EB GLAUBER VOLKMER SILVIO DANILO DE OLIVEIRA MARÇAL DE LIMA HOKAMA Resumo. Os padrões de projetos tratam

Leia mais

Padrões clássicos ou padrões GoF O livro "Design Patterns (1994) de Erich Gamma, John Vlissides, Ralph Jonhson e Richard Helm, descreve 23 padrões de

Padrões clássicos ou padrões GoF O livro Design Patterns (1994) de Erich Gamma, John Vlissides, Ralph Jonhson e Richard Helm, descreve 23 padrões de Padrões de Projeto Disciplina: Engenharia de Software - 2009.1 Professora: Rossana Maria de Castro Andrade Assistente da disciplina: Ricardo Fernandes de Almeida 1 O que é um Padrão? Um padrão descreve

Leia mais

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

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 DCC / ICEx / UFMG Padrões de Projeto Padrões de Projeto Eduardo Figueiredo http://www.dcc.ufmg.br/~figueiredo Um padrão é uma descrição do problema e a essência da sua solução Documenta boas soluções para

Leia mais

Pasteur Ottoni de Miranda Junior. Alguns Padrões de Projeto Gamma

Pasteur Ottoni de Miranda Junior. Alguns Padrões de Projeto Gamma Pasteur Ottoni de Miranda Junior Alguns Padrões de Projeto Gamma Padrões Gamma de Projeto(ou Gang-of-Four, gof) Os padrões gof foram publicados por Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides

Leia mais

Java. Marcio de Carvalho Victorino www.dominandoti.eng.br

Java. Marcio de Carvalho Victorino www.dominandoti.eng.br Java Marcio de Carvalho Victorino www.dominandoti.eng.br 3. Considere as instruções Java abaixo: int cont1 = 3; int cont2 = 2; int cont3 = 1; cont1 += cont3++; cont1 -= --cont2; cont3 = cont2++; Após a

Leia mais

Profa. Thienne Johnson

Profa. Thienne Johnson Profa. Thienne Johnson E. Gamma and R. Helm and R. Johnson and J. Vlissides. Design Patterns - Elements of Reusable Object-Oriented Software. Addison- Wesley, 1995. Conhecido como GoF (Gang of Four) Versão

Leia mais

Orientação a Objetos com Java

Orientação a Objetos com Java Orientação a Objetos com Java Julio Cesar Nardi julionardi@yahoo.com.br 2011/2 Apresentação 3: Orientação Objetos: Conceitos Básicos Objetivos: Compreender os Conceitos Básicos da Orientação a Objetos;

Leia mais

Padrões de Projeto de Software Orientado a Objetos

Padrões de Projeto de Software Orientado a Objetos Padrões de Projeto de Software Orientado a Objetos Ricardo Argenton Ramos [Baseado nos slides do professor Fabio Kon - USP] 1 Padrões de Projeto de Software OO Também conhecidos como Padrões de Desenho

Leia mais

Padrões Comportamentais

Padrões Comportamentais Padrões Comportamentais Formulário para Descrição de Padrões Nome e Classificação Intenção Também Conhecido Como Motivação Aplicabilidade Estrutura Participantes Colaboradores Conseqüências Implementação

Leia mais

Curso - Padrões de Projeto Módulo 2: Padrões de Criação

Curso - Padrões de Projeto Módulo 2: Padrões de Criação Curso - Padrões de Projeto Módulo 2: Padrões de Criação Vítor E. Silva Souza vitorsouza@gmail.com http://www.javablogs.com.br/page/engenho http://esjug.dev.java.net Sobre o Instrutor Formação: Java: Graduação

Leia mais

Análise e Projeto Orientados por Objetos

Análise e Projeto Orientados por Objetos Análise e Projeto Orientados por Objetos Aula 11 Padrões GoF (Bridge e Decorator) Edirlei Soares de Lima Padrões GoF Criação: Abstract Factory Builder Factory Method Prototype Singleton

Leia mais

Módulo 07 Características Avançadas de Classes

Módulo 07 Características Avançadas de Classes Módulo 07 Características Avançadas de Classes Última Atualização: 15/06/2010 1 Objetivos Descrever variáveis, métodos e iniciadores static Descrever a semântica do modificador final em classes, métodos

Leia mais

Técnicas de Programação II

Técnicas de Programação II Técnicas de Programação II Aula 06 Orientação a Objetos e Classes Edirlei Soares de Lima Orientação a Objetos O ser humano se relaciona com o mundo através do conceito de objetos.

Leia mais

Padrões de Desenho. ---------Engenharia de Software---------

Padrões de Desenho. ---------Engenharia de Software--------- Padrões de Desenho Objectivos: Compreender o que são os padrões de desenho? Vantagens e desvantagens em usar os padrões de desenho? Qual o formato de um padrão de desenho? Conhecer as varias secções de

Leia mais

Decorator Pattern. SISMO - Sistemas e Mobilidade http://www.sismo.deinf.ufma.br. Junho de 2008. Departamento de Informática / UFMA

Decorator Pattern. SISMO - Sistemas e Mobilidade http://www.sismo.deinf.ufma.br. Junho de 2008. Departamento de Informática / UFMA Decorator Pattern SISMO - Sistemas e Mobilidade http://www.sismo.deinf.ufma.br Departamento de Informática / UFMA Junho de 2008 Revisando os conceitos Herança é poderosa mas não é flexível Comportamento

Leia mais

Padrões de Projeto. Singleton

Padrões de Projeto. Singleton Padrões de Projeto Padrões de Criação Singleton Singleton Assegura que uma classe tenha apenas uma instância e provê um ponto de acesso global a ela 2 Livro Texto: Design Pattern - Elements 1 Motivação

Leia mais

Diagrama de Classes. Um diagrama de classes descreve a visão estática do sistema em termos de classes e relacionamentos entre as classes.

Diagrama de Classes. Um diagrama de classes descreve a visão estática do sistema em termos de classes e relacionamentos entre as classes. 1 Diagrama de Classes Um diagrama de classes descreve a visão estática do sistema em termos de classes e relacionamentos entre as classes. Um dos objetivos do diagrama de classes é definir a base para

Leia mais

Padrões de Projeto. Bibliografia. Nomenclatura

Padrões de Projeto. Bibliografia. Nomenclatura Padrões de Projeto Prof. Maria Augusta Vieira Nelson PUC Minas Prof. Torsten Paul Nelson 1 Bibliografia LARMAN, Graig. Utilizando UML e Padroes:Uma introdução a análise e ao projeto orientados a objetos.

Leia mais

UML Aspectos de projetos em Diagramas de classes

UML Aspectos de projetos em Diagramas de classes UML Aspectos de projetos em Diagramas de classes Após ser definido o contexto da aplicação a ser gerada. Devemos pensar em detalhar o Diagrama de Classes com informações visando uma implementação Orientada

Leia mais

Tópicos em Engenharia de Computação

Tópicos em Engenharia de Computação Tópicos em Engenharia de Computação Introdução / Revisão UML e POO (JAVA) Prof. Ivan Prof. Zagari UML Linguagem Unificada. Não é metodologia, processo ou método. Versão atual 2.0 3 categorias de Diagramas

Leia mais

Guia de Fatores de Qualidade de OO e Java

Guia de Fatores de Qualidade de OO e Java Qualiti Software Processes Guia de Fatores de Qualidade de OO e Java Versã o 1.0 Este documento só pode ser utilizado para fins educacionais, no Centro de Informática da Universidade Federal de Pernambuco.

Leia mais

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

Programação com Objectos Teste Teórico 04 de Janeiro de 2010, 09:00 (120 minutos) LEIC-A LEIC-T LERC MEE MEIC-A 2009/2010 (1º Semestre) Teste Teórico (201001040900) 1/10 LEIC-A LEIC-T LERC MEE MEIC-A 2009/2010 (1º Semestre) Teste Teórico 04 de Janeiro de 2010, 09:00 (120 minutos) Nome:

Leia mais

Conteúdo. Disciplina: INF 02810 Engenharia de Software. Monalessa Perini Barcellos. Centro Tecnológico. Universidade Federal do Espírito Santo

Conteúdo. Disciplina: INF 02810 Engenharia de Software. Monalessa Perini Barcellos. Centro Tecnológico. Universidade Federal do Espírito Santo Universidade Federal do Espírito Santo Centro Tecnológico Departamento de Informática Disciplina: INF 02810 Prof.: (monalessa@inf.ufes.br) Conteúdo 1. Introdução 2. Processo de Software 3. Gerência de

Leia mais

Eduardo Bezerra. Editora Campus/Elsevier

Eduardo Bezerra. Editora Campus/Elsevier Princípios de Análise e Projeto de Sistemas com UML 2ª edição Eduardo Bezerra Editora Campus/Elsevier Capítulo 8 Modelagem de classes de projeto A perfeição (no projeto) é alcançada, não quando não há

Leia mais

Introdução à Programação. Interface, Polimorfismo e Dynamic Binding

Introdução à Programação. Interface, Polimorfismo e Dynamic Binding Introdução à Programação Interface, Polimorfismo e Dynamic Binding Interface Programador Java PLENO Possuir sólida experiência em programação Desenvolvimento na linguagem JAVA Webservice, Struts ou JSF(desejável)

Leia mais

Universidade Federal de Uberlândia Disciplina: POO2 Prof. Fabiano Dorça. Padrões de Projeto. Padrão Command

Universidade Federal de Uberlândia Disciplina: POO2 Prof. Fabiano Dorça. Padrões de Projeto. Padrão Command Universidade Federal de Uberlândia Disciplina: POO2 Prof. Fabiano Dorça Padrões de Projeto Padrão Command O padrão Command encapsula um comando em um objeto. Tem como premissa desacoplar o objeto cliente

Leia mais

Padrão Arquitetura em Camadas

Padrão Arquitetura em Camadas Padrão Arquitetura em Camadas Universidade Católica de Pernambuco Ciência da Computação Prof. Márcio Bueno poonoite@marciobueno.com Fonte: Material da Profª Karina Oliveira Definição Estimula a organização

Leia mais

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS Campus Cachoeiro de Itapemirim Curso Técnico em Informática Disciplina: Análise e Projeto de Sistemas Professor: Rafael Vargas Mesquita Este exercício deve ser manuscrito e entregue na próxima aula; Valor

Leia mais

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

Curso Adonai QUESTÕES Disciplina Linguagem JAVA 1) Qual será o valor da string c, caso o programa rode com a seguinte linha de comando? > java Teste um dois tres public class Teste { public static void main(string[] args) { String a = args[0]; String

Leia mais

Programação Orientada a Objetos em Java

Programação Orientada a Objetos em Java Programação Orientada a Objetos em Java Rone Ilídio da Silva Universidade Federal de São João del-rei Campus Alto Paraopeba 1:14 1 Objetivo Apresentar os principais conceitos de Programção Orientada a

Leia mais

Análise e Projeto Orientados por Objetos

Análise e Projeto Orientados por Objetos Análise e Projeto Orientados por Objetos Aula 05 Padrões GoF (Singleton e Iterator) Edirlei Soares de Lima Padrões GoF Criação: Abstract Factory Builder Factory Method Prototype

Leia mais

Análise e Projeto Orientados por Objetos

Análise e Projeto Orientados por Objetos Análise e Projeto Orientados por Objetos Aula 10 Padrões GoF (Protoype e Façade) Edirlei Soares de Lima Padrões GoF Criação: Abstract Factory Builder Factory Method Prototype Singleton

Leia mais

Programação Orientada a Objetos. Encapsulamento

Programação Orientada a Objetos. Encapsulamento Programação Orientada a Objetos Encapsulamento de Dados Ocultação de dados Garante a transparência de utilização dos componentes do software, facilitando: Entendimento Reuso Manutenção Minimiza as interdependências

Leia mais

Um objeto é uma instância de uma 'classe'. Você define uma classe utilizando o trecho de código abaixo;

Um objeto é uma instância de uma 'classe'. Você define uma classe utilizando o trecho de código abaixo; um objeto; é definido; Um objeto é uma instância de uma 'classe'. Você define uma classe utilizando o trecho de código abaixo; class ClasseBase{ é instanciado; $objetobase = new ClasseBase; Caso queira,

Leia mais

Programação por Objectos. Java

Programação por Objectos. Java Programação por Objectos Java Parte 2: Classes e objectos LEEC@IST Java 1/24 Classes (1) Sintaxe Qualif* class Ident [ extends IdentC] [ implements IdentI [,IdentI]* ] { [ Atributos Métodos ]* Qualif:

Leia mais

PADRÕES DE PROJETO. Cleviton Monteiro (cleviton@gmail.com)

PADRÕES DE PROJETO. Cleviton Monteiro (cleviton@gmail.com) PADRÕES DE PROJETO Cleviton Monteiro (cleviton@gmail.com) Roteiro Atributos de qualidade Boas práticas de projeto Code Smell Padrões de Projeto Atributos de qualidade Coesão Acoplamento Atributos de qualidade

Leia mais

Programação de Computadores - I. Profª Beatriz Profº Israel

Programação de Computadores - I. Profª Beatriz Profº Israel Programação de Computadores - I Profª Beatriz Profº Israel As 52 Palavras Reservadas O que são palavras reservadas São palavras que já existem na linguagem Java, e tem sua função já definida. NÃO podem

Leia mais

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 Prof. Fabiano Azevedo Dorça Programação Orientada a Objetos II. Padrões de Projeto Universidade Federal de Uberlândia Faculdade de Computação Prof. Fabiano Azevedo Dorça Programação Orientada a Objetos II Padrões de Projeto Padrão Decorator (Decorador) Adiciona responsabilidades de forma

Leia mais

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição Lista de Contas Lista de Contas: Assinatura null Quais são os métodos necessários? class ListaDeContas { void inserir (Conta c) { void retirar (Conta c) { Conta procurar (String num) { Listas de Contas:

Leia mais

Programação Orientada a Objetos em java. Polimorfismo

Programação Orientada a Objetos em java. Polimorfismo Programação Orientada a Objetos em java Polimorfismo Polimorfismo Uma característica muito importante em sistemas orientados a objetos Termo proveniente do grego, e significa muitas formas Em POO, significa

Leia mais

Programação Orientada a Objetos e Java - Introdução. Carlos Lopes

Programação Orientada a Objetos e Java - Introdução. Carlos Lopes Programação Orientada a Objetos e Java - Introdução Carlos Lopes POO e Java Objetivo: proporcionar uma visão dos conceitos de POO e do seu uso na estruturação dos programas em Java. Classes e objetos em

Leia mais

Programação Concorrente em java - Exercícios Práticos Abril 2004

Programação Concorrente em java - Exercícios Práticos Abril 2004 Programação Concorrente em java - Exercícios Práticos Abril 2004 1. Introdução As threads correspondem a linhas de controlo independentes no âmbito de um mesmo processo. No caso da linguagem JAVA, é precisamente

Leia mais

Arquitectura de Sistemas de Software Mestrado em Engenharia Informática Licenciatura em Engenharia Informática e Computação

Arquitectura de Sistemas de Software Mestrado em Engenharia Informática Licenciatura em Engenharia Informática e Computação Arquitectura de Sistemas de Software Mestrado em Engenharia Informática Licenciatura em Engenharia Informática e Computação Ademar Aguiar Universidade do Porto & INESC Porto ademar.aguiar at fe.up.pt FEUP

Leia mais

Capítulo 4. Packages e interfaces

Capítulo 4. Packages e interfaces Capítulo 4. Packages e interfaces 1/17 Índice Indice 4.1 - Package 4.2 - Interface 2/17 Índice 4.1 Package 4.1 - Package 4.2 -- Interface 3/17 4.1 Package Package ou pacote está para o Java como as directorias

Leia mais

Padrões de Desenho (Design Patterns)

Padrões de Desenho (Design Patterns) Padrões de Desenho (Design Patterns) O que são padrões de desenho Porque são úteis Conhecer alguns padrões 1 Padrões (Patterns) Design Patterns Explained: A New Perspective on Object-Oriented Design, Alan

Leia mais

Padrões de Software (Software Patterns)

Padrões de Software (Software Patterns) Padrões de Software (Software Patterns) Cleidson de Souza - cdesouza@ufpa.br Departamento de Informática Universidade Federal do Pará Agenda! Definição! Histórico! Motivação! Exemplo Estratégia MVC! Forma

Leia mais

Prof. Jhonatan Fernando

Prof. Jhonatan Fernando Prof. Jhonatan Fernando Métodos Programação OO Instâncias de variáveis (objetos) Mensagens Classes Herança Polimorfismo Encapsulamento Abstração Programação Estruturada Procedimentos e funções Variáveis

Leia mais

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

Tópicos da Aula. POO e Padrões de Projetos. Considere três classes... Reuso de Classes. Locadora de DVD. Sistema Acadêmico Reuso de Software Aula 03 Tópicos da Aula POO e Padrões de Projetos Eduardo Figueiredo http://www.dcc.ufmg.br/~figueiredo reuso.software@gmail.com 12 Março 2012 Programação orientada a objetos Reuso de

Leia mais

Padrões. Identificando padrões

Padrões. Identificando padrões Padrões Padrões são soluções para problemas específicos que ocorrem de forma recorrente em um determinado contexto que foram identificados a partir da experiência coletiva de desenvolvedores de software.

Leia mais

Orientação a Objeto e UML Questões 2014 Prof. Felipe Leite

Orientação a Objeto e UML Questões 2014 Prof. Felipe Leite Orientação a Objeto e UML Questões 2014 Prof. Felipe Leite Pessoal, fiz uma coletânea das questões mais recentes de concursos públicos de TODO o Brasil de várias bancas diferentes sobre os assuntos Orientação

Leia mais

Orientação a Objetos

Orientação a Objetos 1. Domínio e Aplicação Orientação a Objetos Um domínio é composto pelas entidades, informações e processos relacionados a um determinado contexto. Uma aplicação pode ser desenvolvida para automatizar ou

Leia mais

A ) O cliente terá que implementar uma interface remota. . Definir a interface remota com os métodos que poderão ser acedidos remotamente

A ) O cliente terá que implementar uma interface remota. . Definir a interface remota com os métodos que poderão ser acedidos remotamente Java RMI - Remote Method Invocation Callbacks Folha 9-1 Vimos, na folha prática anterior, um exemplo muito simples de uma aplicação cliente/ servidor em que o cliente acede à referência remota de um objecto

Leia mais

7 RTTI e Interfaces. Desenvolvimento OO com Java. Vítor E. Silva Souza (vitorsouza@inf.ufes.br) http://www.inf.ufes.

7 RTTI e Interfaces. Desenvolvimento OO com Java. Vítor E. Silva Souza (vitorsouza@inf.ufes.br) http://www.inf.ufes. Desenvolvimento OO com Java 7 RTTI e Interfaces Vítor E. Silva Souza (vitorsouza@inf.ufes.br) http://www.inf.ufes.br/ ~ vitorsouza Departamento de Informática Centro Tecnológico Universidade Federal do

Leia mais

Categorias de Padrões

Categorias de Padrões Categorias de Padrões Padrão Arquitetural ou Estilo Arquitetural Padrão de Design (Design Patterns) Idiomas Categorias de Padrões ESTILOS ARQUITETURAIS PADRÕES DE DESIGN IDIOMAS Padrões de Design Os subsistemas

Leia mais

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

Programação Orientada a Objetos em Java. Herança Universidade Federal do Amazonas Departamento de Ciência da Computação IEC481 Projeto de Programas Programação Orientada a Objetos em Java Herança Professor: César Melo Slides baseados em materiais preparados

Leia mais

Relacionamentos entre objetos. Relacionamentos entre objetos. Relacionamentos entre objetos. Relacionamentos entre objetos

Relacionamentos entre objetos. Relacionamentos entre objetos. Relacionamentos entre objetos. Relacionamentos entre objetos Programação Orientada a Objetos Relacionamentos entre objetos Associação, composição e agregação Construtores e sobrecarga Variáveis de classe e de instância Reinaldo Gomes reinaldo@cefet-al.br Objetos

Leia mais

Como foi exposto anteriormente, os processos podem ter mais de um fluxo de execução. Cada fluxo de execução é chamado de thread.

Como foi exposto anteriormente, os processos podem ter mais de um fluxo de execução. Cada fluxo de execução é chamado de thread. 5 THREADS Como foi exposto anteriormente, os processos podem ter mais de um fluxo de execução. Cada fluxo de execução é chamado de thread. 5.1 VISÃO GERAL Uma definição mais abrangente para threads é considerá-lo

Leia mais

Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP

Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP 1) Introdução Programação Orientada a Objetos é um paradigma de programação bastante antigo. Entretanto somente nos últimos anos foi aceito realmente

Leia mais

Noções sobre Objetos e Classes

Noções sobre Objetos e Classes Noções sobre Objetos e Classes Prof. Marcelo Cohen 1. Elementos de programação Revisão de programação variáveis, tipos de dados expressões e operadores cadeias de caracteres escopo de variáveis Revisão

Leia mais

Reuso com Herança a e Composiçã

Reuso com Herança a e Composiçã Java 2 Standard Edition Reuso com Herança a e Composiçã ção Helder da Rocha www.argonavis.com.br 1 Como aumentar as chances de reuso Separar as partes que podem mudar das partes que não mudam. Exemplo:

Leia mais

CURSO DE PROGRAMAÇÃO EM JAVA

CURSO DE PROGRAMAÇÃO EM JAVA CURSO DE PROGRAMAÇÃO EM JAVA Introdução para Iniciantes Prof. M.Sc. Daniel Calife Índice 1 - A programação e a Linguagem Java. 1.1 1.2 1.3 1.4 Linguagens de Programação Java JDK IDE 2 - Criando o primeiro

Leia mais

SISTEMA TYR DIAGRAMAS DE CLASSE E SEQUÊNCIA Empresa: Academia Universitária

SISTEMA TYR DIAGRAMAS DE CLASSE E SEQUÊNCIA Empresa: Academia Universitária SISTEMA TYR DIAGRAMAS DE CLASSE E SEQUÊNCIA Empresa: Academia Universitária Cascavel Novembro de 2009 Pedro Patitucci Finamore Daniel Bordignon Cassanelli Marco Antonio da Rosa DIAGRAMAS DE CLASSE E SEQUÊNCIA

Leia mais

15-09-2009. Membros de classe e de instância. PARTE III: Java e OO - detalhes. Exemplo 1: método. Exercício. Exemplo 1 corrigido

15-09-2009. Membros de classe e de instância. PARTE III: Java e OO - detalhes. Exemplo 1: método. Exercício. Exemplo 1 corrigido PARTE III: Java e OO - detalhes Membros de classe e instâncias Pacotes Visibilidade Classes aninhadas Membros de classe e de instância De classe Static Método não necessita de objeto para ser chamado.

Leia mais

2 Diagrama de Caso de Uso

2 Diagrama de Caso de Uso Unified Modeling Language (UML) Universidade Federal do Maranhão UFMA Pós Graduação de Engenharia de Eletricidade Grupo de Computação Assunto: Diagrama de Caso de Uso (Use Case) Autoria:Aristófanes Corrêa

Leia mais

Encapsulamento de Dados

Encapsulamento de Dados Encapsulamento de Dados Universidade Católica de Pernambuco Ciência da Computação Prof. Márcio Bueno poonoite@marciobueno.com Fonte: Material da Profª Karina Oliveira Modificadores de Visibilidade Especificam

Leia mais

Especialização em web com interfaces ricas. Padrões de Projeto - Estruturais

Especialização em web com interfaces ricas. Padrões de Projeto - Estruturais Especialização em web com interfaces ricas Padrões de Projeto - Estruturais Prof. Fabrízzio Alphonsus A. M. N. Soares fabrizzio@inf.ufg.br professor.fabrizzio@gmail.com Instituto de Informática Universidade

Leia mais

Construção de novas Classes em Java. Classes Atributos Métodos Herança...

Construção de novas Classes em Java. Classes Atributos Métodos Herança... Construção de novas Classes em Java Classes Atributos Métodos Herança... 1 Exemplo Representação em UML Java (Unified Modeling Language) Stack items : Vector Stack( ) push( ) pop( ) isempty( ) finalize(

Leia mais

Herança. Alberto Costa Neto DComp - UFS

Herança. Alberto Costa Neto DComp - UFS Herança Alberto Costa Neto DComp - UFS 1 Motivação Vimos como se faz encapsulamento e a importância de fazê-lo... Contudo, também é possível fazer encapsulamento em algumas linguagens não OO O que mais

Leia mais

Universidade da Beira Interior. Sistemas Distribuídos

Universidade da Beira Interior. Sistemas Distribuídos Folha 6-1 Sincronização de Threads A sincronização de Threads em Java é baseada no conceito do Monitor (de Hoare). Cada objecto Java tem associado um monitor (ou lock ) que pode ser activado se a palavra

Leia mais

Sistemas Distribuídos

Sistemas Distribuídos Sistemas Distribuídos Marcelo Lobosco DCC/UFJF Comunicação em Sistemas Distribuídos Aula 06 Agenda Modelo Cliente-Servidor (cont.) Invocação Remota de Método (Remote Method Invocation RMI) Visão Geral

Leia mais

Padrões de projeto 1

Padrões de projeto 1 Padrões de projeto 1 Design Orientado Objeto Encapsulamento Herança Polimorfismo Design Patterns 2 Responsabilidades Booch e Rumbaugh Responsabilidade é um contrato ou obrigação de um tipo ou classe. Dois

Leia mais