pooemjava-herança programação orientada a objetos em java

15
POOemJava-Herança[[email protected]] 1 Programação Orientada a Objetos em Java Encapsulamento Herança Polimorfismo Os três pilares da POO Herança => Reaproveitando código Vimos 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 nova classe 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 x x raio SuperClasse y SubClasse

Upload: ufvjm

Post on 28-Jan-2023

0 views

Category:

Documents


0 download

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