pooemjava-herança programação orientada a objetos em java
TRANSCRIPT
POOemJava-Herança[[email protected]] 1
Programação Orientada a Objetos em JavaEncapsulamentoHerançaPolimorfismo
Os três pilares da POO
Herança => Reaproveitando códigoVimos que o Encapsulamento permite:
- escrever objetos bem definidos e independentes- que um objeto use outro objeto, através de mensagem
A herança é a segunda maneira de relacionamento entre objetos
Permite que você baseie a definição de uma novaclasse a partir de uma classe previamente existente.
Classe Ponto
double x;double y;
Ponto ( ) Ponto (double x, double y) void setPonto (double x, double y) String emPalavras ( )
double r;Circulo ( ) Circulo (int double, double y,double r) void setRaio(double r)
Classe Circulo
String emPalavras ( )
y
xx
raio SuperClasse
y
SubClasse
POOemJava-Herança[[email protected]] 2
public class Ponto{ protected double x, y;
public Ponto(){setPonto( 0, 0 );
} public Ponto( double a, double b ){
setPonto( a, b ); } public void setPonto( double a, double b ){
x = a; y = b;
} public String emPalavras( ){
return "[" + x + ", " + y + "]"; }
}
public class Circulo extends Ponto{ protected double r;
public Circulo(){setRaio( 0 );
} public Circulo( double a, double b, double r ){
super( a, b );setRaio( r );
} public void setRaio( double r ){
this.r = r; } public String emPalavras( ){
return super.emPalavras( ) + "[" + r + "]"; }
}
POOemJava-Herança[[email protected]] 3
Herança: é o meio pelo qual um objeto herda comportamento eatributos de outros objetos similares
através da herança pode-se criar uma nova classe de objetos definindo apenas as diferenças
class ends Mamifero {
}
superclasse
Dog ext
// aqui entra o código
subclasse
public class Mamifero {String name;
public void sleep ( ) {System.out.println(“ZZ ZZZ ZZ”);
}}
superclassepublic class Dog extends Mamifero {
public void speak ( ) {System.out.println(“Arf! Arf!”);
}}
subclasse
public class Pluto extends Mamifero {
public void speak( ) {System.out.println(“Cadê a minha Medalha?”);
}}
POOemJava-Herança[[email protected]] 4
Testando a HierarquiaSpeak.javaclass Speak {
public static void main( String arguments[ ] ) {Dog lessie = new Dog( ); // objeto lessie da classe DogPluto mutly = new Pluto(); // objeto mutly da classe Pluto
lessie.name = “Boby”;mutly.name = “Baco”;
System.out.println (“Primeiro vamos ouvir a Lessie: ”);lessie.speak();
System.out.println (“Agora é a vez do Mutly: ”);mutly.speak();
System.out.println (“Já é hora de ambos dormirem: ”);lessie.sleep();mutly.sleep();
}}
Java NÃO suporta Herança Múltipla
classes que herdam de mais de uma classe
Programas Orientados a Objetos são mais fáceis de serem depurados
permite a concentração em um Objeto específico
Saída: Primeiro vamos ouvir a Lessie:
Arf! Arf!Agora é a vez do Mutly
Cadê a minha Medalha?Já é hora de ambos dormirem:
ZZ ZZZ ZZZZ ZZZ ZZ
POOemJava-Herança[[email protected]] 5
Vamos modelar a classe Employee (empregado) que é uma pessoapublic class Employee {
private String first_name;private String last_name;private double wage;
public Employee (String first_name, String last_name, double wage) {this.first_name = first_name;this.last_name = last_name;this.wage = wage;
}public double getWage ( ) {
return wage;}public String getFirstName ( ) {
return first_name;}public String getLastName ( ) {
return last_name;}
}
Instâncias da classe Employee podem aparecer em um aplicativode banco de dados de folha de pagamento.
Supor: Modelar um funcionário comissionado que possui umsalário-base + comissão por venda
A classe CommissionedEmployee é exatamente igual àclasse Employee. Um objeto CommissionedEmployeeé um objeto Employee.
POOemJava-Herança[[email protected]] 6
public class CommissionedEmployee extends Employee {private double commission; // custo por unidadeprivate int units; // controle do # de unidades vendidas
public CommissionedEmployee (String first_name, String last_name,double wage, double commission ) {
super (first_name, last_name, wage); this.commission = commission;
}public double calculatePay ( ) {
return getWage( ) + (commission * units);}public void addSales (int units ) {
this.units = this.units + units;}public void resetSales( ) {
units = 0;}
}
A classe CommissionedEmployee baseia sua definiçãona classe Employee já existente.
Como CommissionedEmployee herda de Employee:- getFirstName( )- getLastName( )- getWage( )
Os atributos first_name, last_name e wage se tornarão todos parte de sua definição.
POOemJava-Herança[[email protected]] 7
Como a interface pública de Employee se torna parte da interfacede CommissionedEmployee, você pode enviar paraCommissionedEmployee qualquer mensagem que poderia enviar para Employee.
public class EmployeeExample { public static void main(String []args) {
CommissionedEmployee c =new CommissionedEmployee (“Mr.”,”Sales”,5.50,1.00);
c.addSales(5);System.out.println(“First Name: ” + c.getFirstName( ) );System.out.println(“Last Name: ” + c.getLastName( ) );System.out.println(“Base pay: $ ” + c.getWage( ) );System.out.println(“Total Pay: ” + c.calculatePay( ) );
}}
C:\aulas\java> javac EmployeeExample.javaC:\aulas\java> java EmployeeExampleFirst Name: Mr.Last Name: SalesBase Pay: $5.5Total Pay: $10.5
POOemJava-Herança[[email protected]] 8
Classes Abstratas
public class Animal{
private String nome;
public Animal(String n) {nome = n;
}public void imp( ) {
System.out.println("Nome: "+nome);}public String getName( ) {
return(nome); }public void talk( ) {
System.out.println("Eu nao falo");}
}
Ao implementar essahierarquia, percebemosque o código da classeanimal é muito genérico:
Na prática, nunca iremos instanciar um animal, pois ele serve apenas para a criação de pássaros e mamíferos. Seguindo a mesma lógica, essas duas classes também não serão instanciadas. Ou seja, somente as classes derivadas de Passaro (BemTeVi, Papagaio) e Mamifero(Cachorro, Vaca) é que serão usadas efetivamente.
POOemJava-Herança[[email protected]] 9
Para esse tipo de situação, Java suporta a criação de umaclasse abstrata. Esse tipo de classe não pode ser instanciado,e serve apenas para derivarmos novas classes.
Veja como a classe animal pode ser implementada dessa forma:
public abstract class Animal{
private String nome;
public Animal(String n) {nome = n;
}
public void imp() {System.out.println("Nome: "+nome);
}
public String getName() { return(nome); }
public abstract void talk();}
Observe que o método talk( ) também foi declarado como abstract:isso significa que esse método não foi implementado nesta classee deverá, obrigatoriamente, ser implementado nas classes derivadas.Conseqüentemente, as classes Passaro e Mamifero também serãoClasses abstratas:
POOemJava-Herança[[email protected]] 10
public abstract class Passaro extends Animal{
public Passaro(String n) {super(n);
}public void talk( ) {
System.out.println("Piu piu");}
}
Repare que o método talk( ) em Mamifero é abstract, poisnão possui implementação. Já em Passaro, há implementação.
public abstract class Mamifero extends Animal{
public Mamifero(String n) {super(n);
}public abstract void talk( );
}
Além de fornecer uma modelagem mais robusta ao programador,as classes abstratas também são representadas de forma maiseficiente, pois nunca precisarão ser instanciadas.
Finalize os exercícios:1- Super classe Ponto e Subclasse Círculo.2- Criar a classe Retangulo utilizando a Ponto como base.3- Classe de animais => utilizando classes abstratas.
POOemJava-Herança[[email protected]] 11
Orientação a Objetos (OO)
O termo Orientação a Objetos (OO) significa organizar omundo real como uma coleção de objetos que incorporam Estrutura de Dados e Comportamento.
Objetos são pacotes de software compostos de dados e procedimentosque atuam sobre estes dados. Os procedimentos são também conhecidoscomo Métodos e determinam o comportamento do objeto.
Objeto = Dado + Método
Objeto = Estado + Comportamento
Um Objeto Comportamento/Métodos/Procedimentos
Propriedades/Dados/ Variáveis
buzin
ar andar parar
gira
r
O Objeto Carro tamanho
capacidade
velocidade
Quilometragem
buzin
ar andar parar
gira
r
Todo o acesso aos dados ou propriedadesdo objeto é realizado através de sua interface
POOemJava-Herança[[email protected]] 12
Encapsulamento
O Encapsulamento é definido como uma técnica para minimizar interdependências entre módulos através da definição de interfacesexternas.
buzin
ar andar parar
gira
r
Mudanças na implementação de uma classeque preserve a interface externa não afetaoutras definições de classes.
Interface
Exemplo: o método parar sofreu alteração em seu algoritmomas, sua interface permanece a mesma.
MensagensObjetos interagem e se comunicam através de Mensagens
EmissorReceptor
Andar(...)
Mensagem para um Carro
As Mensagens identificam os Métodos a serem executadosno objeto Receptor.
POOemJava-Herança[[email protected]] 13
MétodosO que um determinado Método pode fazer com os Dados do Objeto?
Tipos de Métodos
ConstrutorDestrutorTransformadorAcesso
Exercícios:1- Dê três exemplos de Objetos2- Para cada um deles, sugira alguns Métodos pertinentes3- Vamos implementar esses exemplos em Java
class bibliX {int m,int z;float n;float s;
bibliX( ) { m=0; z=0; n=0.0; s=0.0; }bibliX(int a; int b; float c; float d) {
m=a; z = b; n = c; s = d;}int metodoA ( ){
return (m + n);}void metodoB ( ) {
System.out.println(“Valor de m: ” + m + “valor de s: ”+ s);}
}
metodo
AmetodoB m
z
n
s
class usaX ( ) {public static void main (String arg []) {
bibliX aux = new bibliX(10,20, 12.5, 22.8 ) // método Construtoraux.metodoA( );aux.metodoB( );
}}
javac bibliX.javajavac usaX.javajava usaX
bibliXbibliX
POOemJava-Herança[[email protected]] 14
Projeto: Implementar uma classe CDPlayer cuja interface é apresentadana Figura abaixo.Lembre-se: a cada interface, disponível ao usuário,
haverá um método correspondente.
Play ( )
Stop ( ) Pause ( ) Eject( )
Pense nos Atributos e Métodos necessários para implementar o projeto
class CDPlayer {// atributos
// métodosCDPlayer( ){ } // construtor Play ( ) {
}Eject ( ) {
}Pause ( ) {
}MetodoX ( ) { }
}
POOemJava-Herança[[email protected]] 15