Translate

Mostrando postagens com marcador objetos. Mostrar todas as postagens
Mostrando postagens com marcador objetos. Mostrar todas as postagens

18 de setembro de 2009

Padrões de projeto - Design Pattern

Design Pattern é uma forma padrão de organizar classes e objetos, nomes para soluções que você já modelou, uma forma de compartilhar conhecimentos sobre POO, soluções de POO para problemas que incidem em diversos cenários de desenvolvimento, etc.
Quando adotamos o uso de Design Patterns seu código fica mais organizado, aumenta a qualidade, menor complexidade, aumenta a comunicação dentro da equipe de desenvolvimento, etc.
A definição de um pattern pode conter:
            O nome: identifica o padrão;
            O problema: explica o problema e o seu contexto;
          A solução: descreve a maneira de melhorar o desenvolvimento, relacionamentos, responsabilidades, colaborações, de maneira ser implementada em diferentes situações;
     • As consequências: os resultados de aplicarmos o padrão;

Família de Patterns GoF
GoF (Quatro criadores) é uma familia de Design Patters, são 23 padrões, veja alguns:
            Criação: Abstract Factory, Builder, Factory Method, Prototype, Singleton
            Estrutura: Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy
          Comportamento: Chain Of Response, Command Interpreter, Mediator, Memento, Observer, State, Strategy, Template Method, Visitor.

Familia de Patterns J2EE
            • J2EE: Busness Delegate, Composite Entity, Composite View, Data Access Object, Fast Lane Reader, Front Controller, Intercepting Filter, Model-View-Controller, Service Locater, Session Facade, Transfer Object, Value List Handler, View Helper
Você pode consultar o catalogo de Patterns do J2EE no endereço abaixo.

Patterns e Certificação
As seguintes certificações Sun exigem conhecimentos de Patterns:
            • Sun Certified Web Component Developer
            • Sun Certified Enterprise Architect;

Para quem pretende tirar uma destas certificações é necessário estudar todos os patterns, aplicar na prática os principais GoF e conhecer a teoria básica;
Alguns Patterns
Service Locator
            Definição: simplifica o acesso a recursos J2EE em um aplicativo centralizando lookups com JNDI em classes específicas de localização de serviços.
            • Evita que sua solução tenha alto acoplamento com JNDI Naming Service;
            • Tomar cuidado com Service Locates e cluster!
            • Utilize sempre que possível ENC.
            • Exemplo no JAREF(J2EE Architecture, Research and Education Framework);

Data Access Object
            Definição: centraliza o serviço de persistência de objetos em um pequeno conjunto de classes, evitando por exemplo que o código SQL se espalhe pelo código da solução.
            • Mesmo utilizando framework de persistência, utilize Data Access Object
            • Exemplo no JAREF(J2EE Architecture, Research and Education Framework);

Model View Control
            Definição: divide o aplicativo em dados, comportamento e apresentação.
            • Aplicando o MVC podemos reaproveitar o mesmo dado para múltiplas visualizações;
            • Podemos reaproveitar o comportamento(eventos) da solução;
            • É um pattern de arquitetura, criado há muito tempo. Pode ser aplicado em qualquer linguagem, mais facilmente com OOP.
            • Struts, WebWork, Spring, PicoContainer são exemplos de frameworks J2EE.
            • Link comparativo de frameworks MVC: https://equinox.dev.java.net/framework-comparison/WebFrameworks.pdf

Front Controller
            Definição: centraliza requests em um ponto central na solução.
            • No lugar de um JSP submit para ouro JSP todos os JSP’s “subments” para um Servlet Controller que será responsável por processar as requisições.
            • Exemplo no JAREF(J2EE Architecture, Research and Education Framework);

Command / Action
            Definição: encapsula uma requisição ao software em um objeto.
            • Transforma métodos em classes
            • Facilita o desenvolvimento de undo/redo
            • Aumenta a granularidade do código, permitindo o reuso
            • Action do Struts é o principal exemplo de implementação deste pattern

Factory
            Definição: instancia classes conforme demanda, recebendo parâmetros indicativos do objeto a ser instanciado.
            • É comum o Controller “inchar”, pois nele incide todas as solicitações externas. Como uma maneira de resolver esse tipo de crescimento desordenado, é sugerido que o Command seja criado sob demanda, e deixa por conta de uma Factory a instanciação das classes Command necessárias.

Dispatcher to views
            Definição: gerencia a saída de informações para a interface desejada pelo cliente. Desatrela a forma de se enxergar os dados para múltiplas visões.
            • É uma maneira de se implementar M. V. C. na sua essência, como o Smalltalk pregava.

Intercepting Filter
            Definição: forma para executar pré e pós processamento em request da solução.
            • Um Servlet Filter é um exemplo de implementação de um Intercepting Filter para interceptar requests no Web Container;

View Helper
            Definição: simplifica a “redenrização” de objetivos em views com formatação.
            • Uma Custom Tag pode representar uma View Helper;
            • Uma simples classe convencional com métodos estáticos também;
            • Exemplo no JAREF(J2EE Architecture, Research and Education Framework);

Business Delegate
            Definição: em aplicações distribuídas, o acesso remoto/local a EJB’s via JNDI Naming Service e tratamento de erros podem se tornar complexo à medida que o projeto cresce.
            Solução: criar uma classe intermediaria para acessar os EJB’s que contempla as regras de nomes de componentes para lookups, propriedades do servidor J2EE, tratamento de exceptions, etc;
Conclusão
            • Os patterns (padrões) previnem erros comuns evitando problemas recorrentes;
        • Utilizando patterns você cria soluções padronizadas, facilitando a troca de programadores;
            • Você pode criar seus próprios patterns;

15 de setembro de 2009

Exemplo de herança e polimorfismo em java

Nível intermediário: herança de classes e polimorfismo em java.
Exemplo de programa que desenha figuras geométricas numa janela.

Forma.java

import java.awt.*;

public abstract class Forma {
   
    protected Graphics contextoGrafico;
   
    public abstract void exibir();
   
    public void setContextoGrafico(Graphics g) {
        contextoGrafico = g;
    }
   
}
Ponto.java
public class Ponto extends Forma {
    private int tamanho;
    private int x;
    private int y;
   
   
    public Ponto(int tamanho, int x, int y) {
        this.tamanho = tamanho;
        this.x = x;
        this.y = y;
    }
   
    public void exibir() {
        contextoGrafico.drawOval(x, y, tamanho, tamanho);
    }
   
    public int getTamanho() {
        return tamanho;
    }
   
    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }
   
}
Retangulo.java
public class Retangulo extends Forma {
    private Ponto pos;
    private int w; //largura
    private int h; //altura
   
    public Retangulo(Ponto pos, int w, int h) {
        this.pos = new Ponto(pos.getTamanho(), pos.getX(), pos.getY());
        this.w = w;
        this.h = h;
    }
   
    public void exibir() {
        contextoGrafico.drawRect(pos.getX(), pos.getY(), w, h);
    }   
}
Elipse.java
public class Elipse extends Forma {
    private Ponto pos;
    private int w; //largura
    private int h; //altura
   
    public Elipse(Ponto pos, int w, int h) {
        this.pos = new Ponto(pos.getTamanho(), pos.getX(), pos.getY());
        this.w = w;
        this.h = h;
    }
   
    public void exibir() {
        contextoGrafico.drawOval(pos.getX(), pos.getY(), w, h);
    }   
}
Poligono.java
public class Poligono extends Forma {
    private int x[];
    private int y[];
    private int n;
   
    public Poligono(int[] x, int[] y, int n) {
        this.n = n;
        this.x = x;
        this.y = y;
    }
   
    public void exibir() {
        contextoGrafico.drawPolygon(this.x, this.y, this.n);
    }   
}
Tela.java
import java.awt.*;
import java.util.ArrayList;

public class Tela extends Frame {

    private ArrayList formas;
   
    public Tela () {
        formas = new ArrayList();
    }
   
   
    public void atualizar() {
        update(getGraphics());
    }
   
    public void adicionar(Forma f) {
        f.setContextoGrafico(getGraphics());
        formas.add(f);
    }
   
    @Override
    public void paint(Graphics arg0) {
        for (int i = 0; i < formas.size(); i++){
            formas.get(i).exibir();
        }
    }
}
ProgramaPrincipal.java
public class ProgramaPrincipal {
    public static void main(String[] args) {
        Tela tela = new Tela();
        tela.setTitle("Primeira Janela");
        tela.setSize(300, 300);
        tela.setVisible(true);
       
        Ponto p = new Ponto(10, 50, 50);
        Retangulo r = new Retangulo(new Ponto(0, 100, 100), 40, 40);
       
        Elipse e = new Elipse(new Ponto(10, 150, 150), 60, 40);
       
        //triangulo
        int trix[] = { 40, 100, 70};
        int triy[] = { 260, 260, 200};
        Poligono tri = new Poligono(trix, triy, 3);
       
        //poligono de 5 lados
        int polix[] = { 140, 120, 170, 240, 210};
        int poliy[] = { 220, 260, 280, 260, 200};
        Poligono poli = new Poligono(polix, poliy, 5);
       
        tela.adicionar(p);
        tela.adicionar(r);
        tela.adicionar(e);
        tela.adicionar(tri);
        tela.adicionar(poli);
        tela.atualizar();
       
    }
}
Testado na IDE Eclipse.
Trabalho pedido com atividade da disciplina POO ministrado pelo prof. Gilzamir Gomes.

26 de julho de 2009

BoUML - editor de UML

A Unified Modeling Language (UML) é uma linguagem de modelagem, utilizada em engenharia de software, auxiliando a visualizar seu sistema: a comunicação entre objetos, classes, componentes, qualquer parte de seu planejamento.
Basicamente, a UML permite que desenvolvedores visualizem os produtos de seu trabalho em diagramas padronizados. Junto com uma notação gráfica, a UML também especifica significados, isto é, semântica. É uma notação independente de processos.
Os objetivos da UML são: o planejamento, especificação, documentação, e estruturação para sub-visualização e maior visualização lógica do desenvolvimento completo de um sistema de informação. A UML é um modo de padronizar as formas de modelagem.
UML na Wikipédia
Apostilas de UML na UNISul

BOUML é uma IDE para UML 2 que permite especificar e gerar código em C++, Java, Idl, Php e Python. BOUML está disponível em Unix/Linux/Solaris, MacOS X(Power PC and Intel) e Windows. Ela é muito rápida, e não necessita de muita memoria para administrar centenas de classes, ainda é extensível com plug-out que podem ser escritos em C++ ou Java, para usar BOUML para outros programas. O gerador de código é reversível e pode auxiliar muito na programação.
Características:
  • é uma ferramenta livre (Software Livre) disponível para MS-Windows, GNU/Linux(Binários para várias distribuições), Mac.
  • suporta diversas linguagens como: Java, C++, Php - grande suporte a linguagem C++, suportando toda(ou quase toda) suas particularidades como “enum”, “typedefs”, “struct”, “friend” e os tipos STL;
  • customização na geração do código fonte;
  • engenharia reversa (código fonte para o modelo);
  • é possível fazer os principais diagramas da UML:
  • Diagrama de Classe;
  • Diagrama de Seqüencia;
  • Diagrama de Caso de Uso com especificação;
  • Diagrama de Colaboração;
  • Diagrama de Objetos;
  • Diagrama de Atividade;
  • Diagrama de Estado;
  • geração de documentação;
Página oficial: bouml.free.fr (em inglês)
Screenshots, Ferramentas

25 de maio de 2008

Programação Orientada a Objeto em C++

Com o reaproveitamento de código em bibliotecas programar tornou-se muito mais rápido e dinâmico. Conheça nessa apostila as técnicas da programação orientada a objetos usando C++, com plataformas livres e sem depender de ambientes de programação caros.

Hoje, desenvolver um programa para ambiente de janelas ficou muito mais fácil, graças a bibliotecas de interfaces gráficas como a OWL, a VCL, a QT, entre outras, que fornecem toda uma hierarquia de classes e objetos que podem ser imediatamente herdados pelo seu programa. Podemos assim criar janelas, menus, botões, barras de ferramentas, entre outros objetos, com muita facilidade. Entretanto, para desenvolvermos programas em ambiente gráfico temos de saber programação orientada a objeto.

A programação orientada a objeto não é somente uma nova forma de programar, é uma nova forma de pensar em um problema, de forma abstrata, utilizando conceitos do mundo real, e não conceitos computacionais. O conceito de objetos deve acompanhar todo o ciclo de desenvolvimento do software.

Dono: andre
Categoria: Genérico
Formato: Documento PDF
Arquivo: ApostilaProgramacaoCppv045.pdf
Tamanho: 5226 Kb (5351543 bytes)
Clique aqui para baixar