• Nenhum resultado encontrado

MÉTODOS E CLASSES ABSTRATAS + INTERFACES

N/A
N/A
Protected

Academic year: 2022

Share "MÉTODOS E CLASSES ABSTRATAS + INTERFACES"

Copied!
11
0
0

Texto

(1)

MÉTODOS E CLASSES ABSTRATAS + INTERFACES

Retrato do Dr. Gachet de Van Gogh

Revendo Revendo Revendo

Revendo 3 3 3 3 conceitosconceitosconceitos de POOconceitosde POOde POOde POO…………

As três graças

Revisando três conceitos de POO:

Classe

Herança Sobreposição

Nome Campos Métodos

(2)

O QUE É UMA CLASSE ?

O Pensador, A. Rodin

Uma classe de deve abarcar características e funcionalidades comuns a

todos os casos particulares (instâncias)!

Classes Classes Classes

Classes –––– Campos e Campos e Campos e Campos e MMMMéééétodostodostodostodos

Extraindo propriedades e funcionalidades comuns a todas as lâmpadas !

Propriedades

•ligada/desligada (estado)

Funcionalidades

•ligar

•desligar

É uma idéia geral de lâmpada ! Classes

Classes Classes

Classes –––– Campos e Campos e Campos e Campos e MMMMéééétodostodostodostodos

(3)

Obra de P. Mondrian

Como construir classes ? public classLampada

{ // Definição das propriedades: campos.

private intestado;

// Definição das funcionalidades: métodos.

publicLampada() {setLampada(0);}

publicvoid setLampada(inta) {setEstado(a);}

public voidsetEstado(intb) {estado = (b > 0)?1:0;}

public intgetEstado( ) {returnestado;}

public StringgetLampada()

{return“Estado atual = ”+ estado;}

public voidmostrarLampada() {System.out.println(“Estado atual = ” + getEstado());} } // Fim classe.

Como diria P. Mondrian:

cada um no seu quadrado ! Classes

Classes Classes

Classes –––– Campos e Campos e Campos e Campos e MMMMéééétodostodostodostodos

Como usar objetos ?

Obra de J. Beever Os objetos são casos particulares da classe e portanto são criados

a partir da mesma através da palavra reservada new. É

interessante criar objetos em uma classe

diferente da onde foi definida a classe.

public classTestaLampada

{ // Definição de método principal a partir // do qual o programa será executado.

public static void main(Stringargs[]) { // Criando um objeto da classe Lampada

Lampada l1 = newLampada();

// Manipulando o objeto por meio dos // métodos descritos na classe.

l1.mostrarLampada();

l1.setLampada(1);

System.out.println(“l1 = ”+ getLampada());

l1.setEstado(-1);

System.out.printf(“Estado atual de l1 = %d

\n”, l1.getEstado());

}

} // Fim classe.

Exercício 1: O que faz o trecho de código acima ? Exercício 2: Modificar o programa anterior de modo O campo estado da Classe Lampada seja do tipo boolean e não mais do tipo int.

Usando Usando Usando

Usando objetosobjetosobjetosobjetos

(4)

HERANÇA

Não, você não vai aprender a ganhar rios de dinheiro…

Segundo Segundo Segundo

Segundo ConceitoConceitoConceitoConceito de POOde POOde POOde POO…………

O QUE É UMA HERANÇA ?

O Pensador, A. Rodin A Herança é quando algo é legado a alguém ! No caso de POO implica que uma classe herda campos

e métodos de outra classe já existente !

Ou seja, herança é o relacionamento entre uma classe mais geral (superclasse) e uma classe mais específica (subclasse). A herança

é uma relação do tipo:

“é um”! Pensando

Pensando Pensando

Pensando um um um poucoum poucopouco…pouco………

(5)

Veiculo

Carro Caminhao

+ Geral

Carro “é um” Veiculo e também Caminhao “é um” Veiculo ! - Hierarquia

Hierarquia Hierarquia

Hierarquia de classesde classesde classesde classes

Veiculo

Caminhao

+ Geral

Carro “é um” Veiculo e também Caminhao “é um” Veiculo ! -

# double posicao

# double velocidade - void acelerar(double a) - void reduzir(double a) - void atualizarPosicao()

Carro

# double numPassageiros - void acelerar(double a) - void reduzir(double a) - void atualizarPosicao() Hierarquia

Hierarquia Hierarquia

Hierarquia de classesde classesde classesde classes

(6)

Veiculo + Geral

Carro “é um” Veiculo e também Caminhao “é um” Veiculo ! -

# double posicao

# double velocidade - void acelerar(double a) - void reduzir(double a) - void atualizarPosicao()

Carro

# double numPassageiros - void acelerar(double a) - void reduzir(double a) - void atualizarPosicao() Terceiro

Terceiro Terceiro

Terceiro ConceitoConceitoConceitoConceito……… Sobreposi…SobreposiSobreposiççççãoSobreposi ãoãoão

Redefinição do método !

Hierarquia com Métodos e Classes Abstratas Empregado - String nome - String getNome() - String toString()

- abstract double ganha()

PorSalario -double salario -void setSalario() -String toString()

-abstract double ganha()

PorComissao -double vendas -double taxa

-void setVendas(double v) -void setTaxa(double t) -String toString()

-abstract double ganha()

PorSalarioeComissao -double salario

-double vendas -double taxa

-void setSalario(double s) -void setVendas(double v) -void setTaxa(double t) -String toString()

-abstract double ganha()

(7)

public abstract class Empregado {

private String nome;

public Empregado() {this(“SemNome”);}

public Empregado(String n) {nome = n;}

public String getNome() {return nome;}

public String toString() {return “Nome: ”+ nome + “\n”;}

publicabstractdouble ganha();

}

Transformando em código Java...

Método abstrato, ou seja, sem implementação definida, que torna a classe, também, abstrata. Duas propriedades importantes:

(1) Não é possível instanciar objetos de uma classe abstrata.

(2) A subclasse, para ser concreta, deverá fornecer uma

implementação para este método.

Empregado.java

// Classe final Chefe, derivada de Empregado public class PorSalario extends Empregado {

private double salario;

public PorSalario(String n, double s) {

super(n);

setSalario(s);

}

public void setSalario( double s ) { salario = (s > 0 ? s : 0.0);

}

public double ganha() { return salario;

}

public String toString() {

return super.toString + “Salario: " + salario;

} }

Implementação do método abstrato da superclasse.

PorSalario.java

Transformando em código Java...

(8)

public class PorComissao extends Empregado {

private double vendas; // volume total de vendas

private double taxa; // percentual de ganho a partir das vendas public PorComissao(String n, double v, double t)

{

super(n);

setVendas(v);

setTaxa(t);

}

public void setVendas(double v) { vendas = (v > 0 ? v : 0.0); } public void setTaxa(double t) { taxa = (t > 0 ? t : 0.0); } public double ganha() {

return taxa*vendas;

}

public String toString() {

return "Por comissao: " + super.toString();

} }

Implementação do método abstrato da superclasse.

PorComissao.java

Transformando em código Java...

public class PorSalarioeComissao extends Empregado {

private double salario; // salario fixo mensal private double vendas; // montante de vendas private double taxa; // percentual das vendas public PorItem(String n, double s, double v, int t) {

super(n);

setSalario(s);

setVendas(p);

setTaxa(t);

}

public void setSalario(double s) { salario = (s > 0 ? s : 0.0); } public void setVendas(double v) { vendas = (v > 0 ? v : 0); } public void setTaxa(double t) {taxa = (t > 0) ? t : 0;}

public double ganha() { return salario + taxa*vendas;

}

public String toString() {

return "Por item: " + super.toString();

} }

Implementação do método abstrato da superclasse.

PorSalarioeComissao.java

Transformando em código Java...

(9)

Uma outra hierarquia de classes empregando Interface Empregado

- String nome - String getNome() - String toString()

- abstract double ganha()

PorSalario -double salario -void setSalario() -String toString()

-abstract double ganha()

PorComissao -double vendas

-void setVendas(double v) -String toString()

-abstract double ganha()

PorSalarioeComissao -double salario

-double vendas

-void setSalario(double s) -void setVendas(double v) -String toString()

-abstract double ganha()

<<Comissao>>

- double TAXA = 0.10

- void somarVendas(double v)

public interfaceclass Comissao {

double TAXA = 0.10;

void somarVendas(double v) }

Transformando em código Java...

Interface é uma classe que só possui métodos abstratos. Ou seja, se uma classe é definida como interface, então todos os seus métodos são automaticamente abstratos. Diferentes classes quenão estão relacionadas pela herançapodem:

(1) Implementar o método dado pela interface e que é comum as classes.

(2) Empregar as constantes definidas em uma interface.

(3) Para usar um método de uma interface (1) ou suas constantes (2), uma classe deve usar a palavra-chave implements.

(4) Uma classe só pode herdar campos e métodos de uma única classe, mas pode implementar métodos e empregar constantes de diferentes interfaces.

Desse modo através de interfaces é possível simular herança múltipla.

Comissao.java

(10)

public class PorComissao extends Empregado implements Comissao {

private double vendas = 0.0; // volume total de vendas public PorComissao(String n, double v)

{

super(n);

setVendas(v);

}

public void setVendas(double v) { vendas = (v > 0 ? v : 0.0); } public double ganha() {

return TAXA*vendas;

}

public void somarVendas(double v){

vendas = vendas + v;

}

public String toString() {

return "Por comissao: " + super.toString();

} }

Implementação do método abstrato da superclasse.

Usa TAXA da interface.

PorComissao.java

Transformando em código Java...

Implementação do método da interface.

public class PorSalarioeComissao extends Empregado implements Comissao {

private double salario; // salario fixo mensal private double vendas; // montante de vendas

public PorSalarioeComissao(String n, double s, double v, int t) {

super(n);

setSalario(s);

setVendas(p);

}

public void setSalario(double s) { salario = (s > 0 ? s : 0.0); } public void setVendas(double v) { vendas = (v > 0 ? v : 0); } public double ganha() {

return salario + TAXA*vendas;

}

public void somarVendas(double v){

vendas = vendas + v;

}

public String toString() {

return "Por item: " + super.toString();

} }

PorSalarioeComissao.java

Transformando em código Java...

Implementação do método abstrato da superclasse.

Usa TAXA da interface.

Implementação do método da interface.

(11)

public class FolhadePagamento // Classe que testa as demais classes.

{

public static void main(String args[])

{ // Criando um vetor de objetos da classe Empregado!

Empregado ve[];

// Demais variáveis auxiliares.

PorComissao p1;

int k, n = 1;

Scanner input = new Scanner(System.in);

System.out.println(“Insira n:”);

n = input.nextInt();

ve = new Empregado[n];

// Preenchendo o vetor de empregados de acordo com a remuneração.

for (int i=0; i < v.length; i++) {

System.out.println(“Digite 1-Salario, 2-Comissao”);

k = input.nextInt();

if (k == 1)

ve[i] = new PorSalario(“S”+i,3000.0);

else {

p1 = new PorComissao(“C”+i,2300.0);

p1.somarVendas(7000.0);

ve[i] = pe }

// Mostrando os objetos contidos no vetor com toString e polimorfismo.

System.out.println(ve[i]);

} }

}

Criando uma Folha de Pagamento

Referências

Documentos relacionados

Segundo Andrade (2006), a prescrição de anti-inflamatórios inibidores específicos da COX-2 devem ser contra-indicados nas seguintes situações: pacientes com

 A teoria da Utilidade esperada possibilita ao tomador de decisão incorporar ao processo decisório suas preferências em relação ao risco: aversão, neutralidade ou propensão

A PRESIDENTE da Assembleia da República, Verónica Macamo, defende que as mulheres devem ser solidárias umas com as outras e evitarem a tendência de se

Na atividade de hoje você irá fazer um desenho bem bonito desejando Feliz Natal a todos seus amiguinhos, depois com a ajuda de um adulto fotografe esse momento e envie para sua

A pesquisa resultante da utilização da palavra rede poderá devolver referências para documentos contendo assuntos relacionados com rede de computadores ou rede de pesca. A

A importância da ARPANET era tal que, em 1972, foi rebaptizada DARPANET em que o D significava Defense e lembrava que a rede dependia do Pentágono o qual financiava

Considerações Preliminares: O objeto do presente certame é a formação de “Registro de Preços para futura e eventual aquisição de dietas de sistema fechado(industrializada),

1.1 - O presente contrato tem por objeto o fornecimento, por parte da CONTRATADA à CONTRATANTE, de fornecer materiais de utensílios para cozinha, material permanente e