Translate

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.

Nenhum comentário :

Postar um comentário