Sei sulla pagina 1di 19

Programao II

Introduo a Programao Orientada a Objetos Classes Abstratas e Interfaces


Prof.: caro Prado

Vimos: Fundamentos da POO 1. Objetos; 2. Classes; 3. Herana; 4. Polimorfismo.

Vamos ver: Princpios Bsicos da POO 1. Classes ou Mtodos Abstratos; 2. Interfaces; 3. Tratamento de Excees; 4. Interface Grfica.

I) Introduo Herana permite a reutilizao de cdigo atravs da criao de classes (subclasses) baseadas em outras classes j existentes (superclasses). Por sua vez, com o Polimorfismo, subclasses podem redefinir um mtodo de uma superclasse. Nem sempre isto desejvel. Em alguns casos interessante descrever os atributos e mtodos que as classes herdeiras devem implementar, mas no permitir a criao de objetos da classe ancestral, que passaria a ser somente um guia dos mtodos e atributos que devem ser implementados nas classes herdeiras.

Exemplo: Classes: Pessoa (superclasse), Funcionario e Gerente (subclasses). A classe Pessoa teria pouca utilidade, uma vez que somente objetos da classe Funcionario (ou herdeiras desta) seriam utilizadas. Por outro lado, no faz sentido eliminarmos completamente a classe Pessoa, transferindo para Funcionario a tarefa de ser a superclasse, uma vez que outra aplicao poderia usar Pessoa como superclasse

Java tem dois mecanismos que permitem a criao de classes que somente contm descries de campos e mtodos que devem ser implementados, mas sem efetivamente implementar estes mtodos.

Os dois mecanismos so:

Classes Abstratas;

Interfaces.

1. Classes Abstratas O primeiro mecanismo permite a criao de mtodos declarados como abstratos.

Exemplo 1: Hierarquia de classes para modelar seres vivos:

Exemplo 1: Hierarquia de classes para modelar seres vivos: A classe SerVivo pode ser declarada como abstrata pois no possui detalhes o suficiente para representar sozinha um objeto completo. O usurio no poder criar objetos da classe SerVivo pois esta apenas uma classe parcial e existe apenas para ser estendida por subclasses mais especializadas, tal como Animal e Vegetal.

abstract class SerVivo { String Alimentos; abstract void locomover(); abstract void nascer(); abstract void crescer(); abstract void alimentar(); abstract void respirar(); abstract void morrer(); }

Todos os diferentes tipos de seres vivos executam estas operaes de diferentes maneiras.

Regras para classes abstratas: - Mtodos abstratos so somente declarados. - Uma classe abstrata no pode ser instanciada. - Uma subclasse de uma classe abstrata pode ser instanciada somente se implementar todos os mtodos abstratos. - Se uma subclasse de uma classe abstrata no implementa todos os mtodos abstratos que herda, ento ela tambm uma classe abstrata. - Classes abstratas podem ter variveis e mtodos no abstrato. - Mtodos e classes abstratos so declarados com o modificador abstract. .

Exemplo 2: Superclasse: Forma. Mtodos: rea( ) e circunferncia( ). Subclasses: Retngulo e Crculo, com os mtodos herdados rea() e circunferncia( ). Esses mtodos no poderiam ser implementados na classe Forma, pois eles tm comportamentos diferentes. Por exemplo, a rea de um tringulo diferente da rea de um quadrado.

abstract class Forma { String cor; abstract double area(); abstract double circunferencia(); }
class Circulo extends Forma { double pi = 3.14; double r; double area() { return pi*r*r; }

class Retangulo extends Forma { double w, h; double area() { return w*h; } double circunferencia() { return 2*(w+h); } }

double circunferencia() { return 2*pi*r; }


}

class TestaForma { public static void main(String[] args) { Circulo f1 = new Circulo(); Retangulo f2 = new Retangulo();

f1.r = 5; System.out.println(f1.area()); System.out.println(f1.circunferencia()); f2.h = 20; f2.w = 30; System.out.println(f2.area()); System.out.println(f2.circunferencia()); }


}

2. Interfaces Classes abstratas podem conter mtodos no abstratos que sero herdados e podero ser utilizados por objetos de classes herdeiras. Interfaces so classes abstratas que contm apenas mtodos abstratos. Portanto, em uma interface no existe implementao alguma.

A definio de uma interface feita pela palavra-chave interface.


Para utilizar uma interface, uma classe deve especificar que implementa (implements) a interface e a classe deve definir cada mtodo da interface.

Se a classe deixar de implementar algum mtodo da interface, a classe se torna abstrata. Diversas classes, sem nenhum relacionamento, podem se relacionar com uma mesma interface, assim como uma classe pode implementar mais de uma interface. A principal utilizao de interfaces est em declarar mtodos que uma ou mais classes devem necessariamente implementar. Como a interface no apresenta o cdigo dos mtodos, ela pode ser utilizada para apresentar a interface pblica de uma classe sem revelar sua implementao.

Alm disto, todos os mtodos da interface devem ser obrigatoriamente pblicos (public).

Exemplo 1: Zoolgico com vrios tipos de animais, onde cada animal contm os seguintes mtodos nascer(), dormir(), etc. public interface Animal { public void nascer(); public void durma(); } public class Morcego implements Animal { public void nasca() { System.out.println("Nasce um morcego"); }

public void durma() { System.out.println("Dorme de ponta cabea"); }


}

public class Zebra implements Animal { double peso = 10; public void nasca() { System.out.println("Nasce uma zebra"); } public void durma() { System.out.println("Dorme em p"); } public double peso() { return peso; } }

public class Zoo { public static void main(String[] args) { Morcego m = new Morcego(); Zebra z = new Zebra(); m.nasca(); m.durma(); z.nasca(); z.durma(); } }

Exemplo 2: Escrever as classes Ponto, Circulo e Cilindro que implementam a interface Forma. Executar a classe UsaFormas para verificar se as classes foram implementadas corretamente.