SlideShare uma empresa Scribd logo
1 de 123
Baixar para ler offline
Aula 22 – M´etodos Abstratos e
Interfaces
Norton Trevisan Roman
27 de maio de 2020
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 1 / 39
M´etodos e Classes Abstratos
Vamos rever Casa
public class Casa {
private double valorM2 = 1500;
Casa(){}
Casa(double valorM2) {
this.valorM2 = valorM2;
}
double valor(double area) {
if (area >= 0)
return(this.valorM2*area);
return(-1);
}
public double area() {
return(-1);
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 2 / 39
M´etodos e Classes Abstratos
Vamos rever Casa
Por que fizemos isso?
public class Casa {
private double valorM2 = 1500;
Casa(){}
Casa(double valorM2) {
this.valorM2 = valorM2;
}
double valor(double area) {
if (area >= 0)
return(this.valorM2*area);
return(-1);
}
public double area() {
return(-1);
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 2 / 39
M´etodos e Classes Abstratos
Vamos rever Casa
Por que fizemos isso?
Para que pudessemos
trabalhar com objetos
de subclasses em
c´odigo que exige a
superclasse
public class Casa {
private double valorM2 = 1500;
Casa(){}
Casa(double valorM2) {
this.valorM2 = valorM2;
}
double valor(double area) {
if (area >= 0)
return(this.valorM2*area);
return(-1);
}
public double area() {
return(-1);
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 2 / 39
M´etodos e Classes Abstratos
Esse era o caso de
Residencia
class Residencia {
Casa casa;
AreaPiscina piscina;
public double area() {
double resp = 0;
if (this.casa != null)
resp += this.casa.area();
if (this.piscina != null)
resp += this.piscina.area();
return(resp);
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 3 / 39
M´etodos e Classes Abstratos
Esse era o caso de
Residencia
Bem coxambrado
class Residencia {
Casa casa;
AreaPiscina piscina;
public double area() {
double resp = 0;
if (this.casa != null)
resp += this.casa.area();
if (this.piscina != null)
resp += this.piscina.area();
return(resp);
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 3 / 39
M´etodos e Classes Abstratos
Esse era o caso de
Residencia
Bem coxambrado
Como fazer ent˜ao?
class Residencia {
Casa casa;
AreaPiscina piscina;
public double area() {
double resp = 0;
if (this.casa != null)
resp += this.casa.area();
if (this.piscina != null)
resp += this.piscina.area();
return(resp);
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 3 / 39
M´etodos e Classes Abstratos
Esse era o caso de
Residencia
Bem coxambrado
Como fazer ent˜ao?
Tornar area um
m´etodo abstrato
class Residencia {
Casa casa;
AreaPiscina piscina;
public double area() {
double resp = 0;
if (this.casa != null)
resp += this.casa.area();
if (this.piscina != null)
resp += this.piscina.area();
return(resp);
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 3 / 39
M´etodos e Classes Abstratos
public abstract class Casa {
private double valorM2 = 1500;
Casa()
Casa(double valorM2) {
this.valorM2 = valorM2;
}
double valor(double area) {
if (area >= 0)
return(this.valorM2*area);
return(-1);
}
public abstract double area();
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 4 / 39
M´etodos e Classes Abstratos
S˜ao m´etodos sem uma
implementa¸c˜ao definida
na classe
public abstract class Casa {
private double valorM2 = 1500;
Casa()
Casa(double valorM2) {
this.valorM2 = valorM2;
}
double valor(double area) {
if (area >= 0)
return(this.valorM2*area);
return(-1);
}
public abstract double area();
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 4 / 39
M´etodos e Classes Abstratos
S˜ao m´etodos sem uma
implementa¸c˜ao definida
na classe
Possuem apenas o
necess´ario para compilar:
sua assinatura
public abstract class Casa {
private double valorM2 = 1500;
Casa()
Casa(double valorM2) {
this.valorM2 = valorM2;
}
double valor(double area) {
if (area >= 0)
return(this.valorM2*area);
return(-1);
}
public abstract double area();
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 4 / 39
M´etodos e Classes Abstratos
S˜ao m´etodos sem uma
implementa¸c˜ao definida
na classe
Possuem apenas o
necess´ario para compilar:
sua assinatura
Quem os implementa
ent˜ao?
public abstract class Casa {
private double valorM2 = 1500;
Casa()
Casa(double valorM2) {
this.valorM2 = valorM2;
}
double valor(double area) {
if (area >= 0)
return(this.valorM2*area);
return(-1);
}
public abstract double area();
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 4 / 39
M´etodos e Classes Abstratos
S˜ao m´etodos sem uma
implementa¸c˜ao definida
na classe
Possuem apenas o
necess´ario para compilar:
sua assinatura
Quem os implementa
ent˜ao?
As subclasses
public abstract class Casa {
private double valorM2 = 1500;
Casa()
Casa(double valorM2) {
this.valorM2 = valorM2;
}
double valor(double area) {
if (area >= 0)
return(this.valorM2*area);
return(-1);
}
public abstract double area();
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 4 / 39
M´etodos e Classes Abstratos
Subclasses s˜ao
obrigadas a
implementar m´etodos
abstratos da
superclasse
public abstract class Casa {
private double valorM2 = 1500;
Casa()
Casa(double valorM2) {
this.valorM2 = valorM2;
}
double valor(double area) {
if (area >= 0)
return(this.valorM2*area);
return(-1);
}
public abstract double area();
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 5 / 39
M´etodos e Classes Abstratos
Subclasses s˜ao
obrigadas a
implementar m´etodos
abstratos da
superclasse
A existˆencia de
m´etodos abstratos
torna a classe abstrata
public abstract class Casa {
private double valorM2 = 1500;
Casa()
Casa(double valorM2) {
this.valorM2 = valorM2;
}
double valor(double area) {
if (area >= 0)
return(this.valorM2*area);
return(-1);
}
public abstract double area();
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 5 / 39
M´etodos e Classes Abstratos
Quando aplicado a
classes, abstract faz
com que n˜ao possam
ser instanciadas
public abstract class Casa {
private double valorM2 = 1500;
Casa()
Casa(double valorM2) {
this.valorM2 = valorM2;
}
double valor(double area) {
if (area >= 0)
return(this.valorM2*area);
return(-1);
}
public abstract double area();
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 6 / 39
M´etodos e Classes Abstratos
Quando aplicado a
classes, abstract faz
com que n˜ao possam
ser instanciadas
N˜ao podemos fazer new
Casa() (nesse exemplo)
public abstract class Casa {
private double valorM2 = 1500;
Casa()
Casa(double valorM2) {
this.valorM2 = valorM2;
}
double valor(double area) {
if (area >= 0)
return(this.valorM2*area);
return(-1);
}
public abstract double area();
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 6 / 39
M´etodos e Classes Abstratos
Todo m´etodo
abstract torna a
classe abstract
public abstract class Casa {
private double valorM2 = 1500;
Casa()
Casa(double valorM2) {
this.valorM2 = valorM2;
}
double valor(double area) {
if (area >= 0)
return(this.valorM2*area);
return(-1);
}
public abstract double area();
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 7 / 39
M´etodos e Classes Abstratos
Todo m´etodo
abstract torna a
classe abstract
Por´em nem toda classe
abstract possui
m´etodos abstract
public abstract class Casa {
private double valorM2 = 1500;
Casa()
Casa(double valorM2) {
this.valorM2 = valorM2;
}
double valor(double area) {
if (area >= 0)
return(this.valorM2*area);
return(-1);
}
public abstract double area();
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 7 / 39
M´etodos e Classes Abstratos
Todo m´etodo
abstract torna a
classe abstract
Por´em nem toda classe
abstract possui
m´etodos abstract
Basta que n˜ao desejemos
que seja instanciada
public abstract class Casa {
private double valorM2 = 1500;
Casa()
Casa(double valorM2) {
this.valorM2 = valorM2;
}
double valor(double area) {
if (area >= 0)
return(this.valorM2*area);
return(-1);
}
public abstract double area();
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 7 / 39
M´etodos e Classes Abstratos
Nesse caso, Casa foi
escolhida como
abstrata pelo fato de,
neste sistema, existirem
apenas casas quadradas
e retangulares.
public abstract class Casa {
private double valorM2 = 1500;
Casa()
Casa(double valorM2) {
this.valorM2 = valorM2;
}
double valor(double area) {
if (area >= 0)
return(this.valorM2*area);
return(-1);
}
public abstract double area();
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 8 / 39
M´etodos e Classes Abstratos
Nesse caso, Casa foi
escolhida como
abstrata pelo fato de,
neste sistema, existirem
apenas casas quadradas
e retangulares.
N˜ao deveria ser poss´ıvel
criar uma casa gen´erica
public abstract class Casa {
private double valorM2 = 1500;
Casa()
Casa(double valorM2) {
this.valorM2 = valorM2;
}
double valor(double area) {
if (area >= 0)
return(this.valorM2*area);
return(-1);
}
public abstract double area();
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 8 / 39
M´etodos e Classes Abstratos
Nesse caso, Casa foi
escolhida como
abstrata pelo fato de,
neste sistema, existirem
apenas casas quadradas
e retangulares.
N˜ao deveria ser poss´ıvel
criar uma casa gen´erica
Por isso usamos
abstract
public abstract class Casa {
private double valorM2 = 1500;
Casa()
Casa(double valorM2) {
this.valorM2 = valorM2;
}
double valor(double area) {
if (area >= 0)
return(this.valorM2*area);
return(-1);
}
public abstract double area();
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 8 / 39
M´etodos e Classes Abstratos
E podemos ter
parˆametros em
m´etodos abstratos?
public abstract class Casa {
private double valorM2 = 1500;
Casa()
Casa(double valorM2) {
this.valorM2 = valorM2;
}
double valor(double area) {
if (area >= 0)
return(this.valorM2*area);
return(-1);
}
public abstract double area();
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 9 / 39
M´etodos e Classes Abstratos
E podemos ter
parˆametros em
m´etodos abstratos?
Sim. Nesse exemplo n˜ao
foi preciso, mas o m´etodo
abstrato ´e idˆentico `a
assinatura de sua vers˜ao
normal, exceto pelo
modificador abstract
public abstract class Casa {
private double valorM2 = 1500;
Casa()
Casa(double valorM2) {
this.valorM2 = valorM2;
}
double valor(double area) {
if (area >= 0)
return(this.valorM2*area);
return(-1);
}
public abstract double area();
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 9 / 39
M´etodos e Classes Abstratos
E como fica o
c´odigo das
subclasses de Casa?
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 10 / 39
M´etodos e Classes Abstratos
E como fica o
c´odigo das
subclasses de Casa?
Idˆenticos. Nada
muda. Apenas
consertamos um
coxambre.
public class CasaQuad extends Casa {
double lateral = 10;
CasaQuad() {}
CasaQuad(double lateral) {
this.lateral = lateral;
}
public CasaQuad(double lateral, double
valorM2) {
super(valorM2);
this.lateral = lateral;
}
public double area() {
double areat=-1;
if (this.lateral>=0) {
areat = this.lateral*this.lateral;
}
return(areat);
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 10 / 39
M´etodos e Classes Abstratos
Em suma, use classes abstratas quando:
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 11 / 39
M´etodos e Classes Abstratos
Em suma, use classes abstratas quando:
Quiser impedir a existˆencia de objetos dela
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 11 / 39
M´etodos e Classes Abstratos
Em suma, use classes abstratas quando:
Quiser impedir a existˆencia de objetos dela
Somente as subclasses poder˜ao ter objetos
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 11 / 39
M´etodos e Classes Abstratos
Em suma, use classes abstratas quando:
Quiser impedir a existˆencia de objetos dela
Somente as subclasses poder˜ao ter objetos
Necessitar que algum m´etodo seja conhecido na
superclasse
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 11 / 39
M´etodos e Classes Abstratos
Em suma, use classes abstratas quando:
Quiser impedir a existˆencia de objetos dela
Somente as subclasses poder˜ao ter objetos
Necessitar que algum m´etodo seja conhecido na
superclasse
Mas que n˜ao possa/precise ter c´odigo nela
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 11 / 39
M´etodos e Classes Abstratos
Em suma, use classes abstratas quando:
Quiser impedir a existˆencia de objetos dela
Somente as subclasses poder˜ao ter objetos
Necessitar que algum m´etodo seja conhecido na
superclasse
Mas que n˜ao possa/precise ter c´odigo nela
Apenas faz sentido o c´odigo nas subclasses
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 11 / 39
Interfaces
Voltemos agora ao
m´etodo da bolha
(ordena¸c˜ao), usado
em Projeto
class Projeto {
...
static void bolha(Residencia[] v) {
for (int ult = v.length-1; ult>0; ult--)
for (int i=0; i<ult; i++)
if (v[i].comparaRes(v[i+1]) > 0) {
Residencia aux = v[i];
v[i] = v[i+1];
v[i+1] = aux;
}
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 12 / 39
Interfaces
Voltemos agora ao
m´etodo da bolha
(ordena¸c˜ao), usado
em Projeto
Depende do m´etodo
comparaRes de
Residencia
class Projeto {
...
static void bolha(Residencia[] v) {
for (int ult = v.length-1; ult>0; ult--)
for (int i=0; i<ult; i++)
if (v[i].comparaRes(v[i+1]) > 0) {
Residencia aux = v[i];
v[i] = v[i+1];
v[i+1] = aux;
}
}
}
class Residencia {
...
public int comparaRes(Residencia outra) {
if (outra == null) return(1);
return((int)(this.area() -
outra.area()));
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 12 / 39
Interfaces
Voltemos agora ao
m´etodo da bolha
(ordena¸c˜ao), usado
em Projeto
Depende do m´etodo
comparaRes de
Residencia
Compara as
residˆencias pela ´area
class Projeto {
...
static void bolha(Residencia[] v) {
for (int ult = v.length-1; ult>0; ult--)
for (int i=0; i<ult; i++)
if (v[i].comparaRes(v[i+1]) > 0) {
Residencia aux = v[i];
v[i] = v[i+1];
v[i+1] = aux;
}
}
}
class Residencia {
...
public int comparaRes(Residencia outra) {
if (outra == null) return(1);
return((int)(this.area() -
outra.area()));
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 12 / 39
Interfaces
E se quisermos
tamb´em poder
comparar por valor?
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 13 / 39
Interfaces
E se quisermos
tamb´em poder
comparar por valor?
Teremos que
implementar cada um
dos comparadores
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 13 / 39
Interfaces
E se quisermos
tamb´em poder
comparar por valor?
Teremos que
implementar cada um
dos comparadores
class Residencia {
...
public int comparaRes(Residencia outra) {
if (outra == null) return(1);
return((int)(this.area() -
outra.area()));
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 13 / 39
Interfaces
E se quisermos
tamb´em poder
comparar por valor?
Teremos que
implementar cada um
dos comparadores
class Residencia {
...
public int comparaRes(Residencia outra) {
if (outra == null) return(1);
return((int)(this.area() -
outra.area()));
}
public int comparaResP(Residencia outra) {
if (outra == null) return(1);
return((int)(this.casa.valor(
this.casa.area())
- outra.casa.valor(
outra.casa.area())));
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 13 / 39
Interfaces
Al´em de mudar o
m´etodo de
ordena¸c˜ao (e alguns
especificadores em
outras classes)
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 14 / 39
Interfaces
Al´em de mudar o
m´etodo de
ordena¸c˜ao (e alguns
especificadores em
outras classes)
class Projeto {
...
static void bolha(Residencia[] v) {
for (int ult = v.length-1; ult>0; ult--)
for (int i=0; i<ult; i++)
if (v[i].comparaRes(v[i+1]) > 0) {
Residencia aux = v[i];
v[i] = v[i+1];
v[i+1] = aux;
}
}
static void bolhaP(Residencia[] v) {
for (int ult = v.length-1; ult>0; ult--)
for (int i=0; i<ult; i++)
if (v[i].comparaResP(v[i+1]) > 0) {
Residencia aux = v[i];
v[i] = v[i+1];
v[i+1] = aux;
}
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 14 / 39
Interfaces
O que h´a de errado
com esse c´odigo?
class Residencia {
...
public int comparaRes(Residencia outra) {
if (outra == null) return(1);
return((int)(this.area() - outra.area()));
}
public int comparaResP(Residencia outra) {
if (outra == null) return(1);
return((int)(this.casa.valor(
this.casa.area())
- outra.casa.valor(outra.casa.area())));
}
}
class Projeto {
...
static void bolha(Residencia[] v) {
for (int ult = v.length-1; ult>0; ult--)
for (int i=0; i<ult; i++)
if (v[i].comparaRes(v[i+1]) > 0) {
Residencia aux = v[i];
v[i] = v[i+1];
v[i+1] = aux;
}
}
static void bolhaP(Residencia[] v) {
for (int ult = v.length-1; ult>0; ult--)
for (int i=0; i<ult; i++)
if (v[i].comparaResP(v[i+1]) > 0) {
Residencia aux = v[i];
v[i] = v[i+1];
v[i+1] = aux;
}
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 15 / 39
Interfaces
O que h´a de errado
com esse c´odigo?
Muita duplicidade!
class Residencia {
...
public int comparaRes(Residencia outra) {
if (outra == null) return(1);
return((int)(this.area() - outra.area()));
}
public int comparaResP(Residencia outra) {
if (outra == null) return(1);
return((int)(this.casa.valor(
this.casa.area())
- outra.casa.valor(outra.casa.area())));
}
}
class Projeto {
...
static void bolha(Residencia[] v) {
for (int ult = v.length-1; ult>0; ult--)
for (int i=0; i<ult; i++)
if (v[i].comparaRes(v[i+1]) > 0) {
Residencia aux = v[i];
v[i] = v[i+1];
v[i+1] = aux;
}
}
static void bolhaP(Residencia[] v) {
for (int ult = v.length-1; ult>0; ult--)
for (int i=0; i<ult; i++)
if (v[i].comparaResP(v[i+1]) > 0) {
Residencia aux = v[i];
v[i] = v[i+1];
v[i+1] = aux;
}
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 15 / 39
Interfaces
Como resolver?
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 16 / 39
Interfaces
Como resolver?
Interfaces
interface Teste {
int x(int y);
void y();
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 16 / 39
Interfaces
Como resolver?
Interfaces
interface Teste {
int x(int y);
void y();
}
class Testando {
public static void main(
String[] args) {
Teste t = new Teste();
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 16 / 39
Interfaces
Como resolver?
Interfaces
Sa´ıda
$ javac Testando.java
Testando.java:4: Teste is abstract;
cannot be instantiated
Teste t = new Teste();
^
1 error
interface Teste {
int x(int y);
void y();
}
class Testando {
public static void main(
String[] args) {
Teste t = new Teste();
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 16 / 39
Interfaces
Interfaces s˜ao como classes contendo apenas as
assinaturas de m´etodos
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 17 / 39
Interfaces
Interfaces s˜ao como classes contendo apenas as
assinaturas de m´etodos
N˜ao possuem c´odigo
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 17 / 39
Interfaces
Interfaces s˜ao como classes contendo apenas as
assinaturas de m´etodos
N˜ao possuem c´odigo
Todos os m´etodos implicitamente p´ublicos
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 17 / 39
Interfaces
Interfaces s˜ao como classes contendo apenas as
assinaturas de m´etodos
N˜ao possuem c´odigo
Todos os m´etodos implicitamente p´ublicos
N˜ao precisamos usar public
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 17 / 39
Interfaces
Interfaces s˜ao como classes contendo apenas as
assinaturas de m´etodos
N˜ao possuem c´odigo
Todos os m´etodos implicitamente p´ublicos
N˜ao precisamos usar public
N˜ao podemos criar objetos das interfaces
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 17 / 39
Interfaces
Interfaces s˜ao como classes contendo apenas as
assinaturas de m´etodos
N˜ao possuem c´odigo
Todos os m´etodos implicitamente p´ublicos
N˜ao precisamos usar public
N˜ao podemos criar objetos das interfaces
S˜ao como classes abstratas em que todos os
m´etodos s˜ao abstratos e p´ublicos
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 17 / 39
Interfaces
Interfaces s˜ao como classes contendo apenas as
assinaturas de m´etodos
N˜ao possuem c´odigo
Todos os m´etodos implicitamente p´ublicos
N˜ao precisamos usar public
N˜ao podemos criar objetos das interfaces
S˜ao como classes abstratas em que todos os
m´etodos s˜ao abstratos e p´ublicos
Por isso, n˜ao h´a static em m´etodos de interfaces – eles
n˜ao tˆem um corpo implementado, ent˜ao n˜ao devem poder
ser acessados de forma est´atica
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 17 / 39
Interfaces
Se n˜ao podemos criar
objetos, como us´a-las? interface Teste {
int x(int y);
void y();
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 18 / 39
Interfaces
Se n˜ao podemos criar
objetos, como us´a-las?
Necessitam de classes que
as implementem
interface Teste {
int x(int y);
void y();
}
class Testando implements Teste {
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 18 / 39
Interfaces
Se n˜ao podemos criar
objetos, como us´a-las?
Necessitam de classes que
as implementem
Como o extends de
subclasses
interface Teste {
int x(int y);
void y();
}
class Testando implements Teste {
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 18 / 39
Interfaces
Se n˜ao podemos criar
objetos, como us´a-las?
Necessitam de classes que
as implementem
Como o extends de
subclasses
Vai compilar?
interface Teste {
int x(int y);
void y();
}
class Testando implements Teste {
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 18 / 39
Interfaces
Se n˜ao podemos criar
objetos, como us´a-las?
Necessitam de classes que
as implementem
Como o extends de
subclasses
Vai compilar?
Sa´ıda
$ javac Testando.java
Testando.java:1: Testando is not abstract
and does not override abstract method y()
in Teste
class Testando implements Teste {
^
1 error
interface Teste {
int x(int y);
void y();
}
class Testando implements Teste {
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 18 / 39
Interfaces
Assim como classes
abstratas exigem que
suas subclasses
implementem seus
m´etodos abstratos,
tamb´em interfaces
exigem que as classes
que as implementam
implementem seus
m´etodos
interface Teste {
int x(int y);
void y();
}
class Testando implements Teste {
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 19 / 39
Interfaces
Assim como classes
abstratas exigem que
suas subclasses
implementem seus
m´etodos abstratos,
tamb´em interfaces
exigem que as classes
que as implementam
implementem seus
m´etodos
interface Teste {
int x(int y);
void y();
}
class Testando implements Teste {
int x(int y) {
return(y);
}
void y() {
System.out.println();
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 19 / 39
Interfaces
As classes s˜ao for¸cadas
a prover c´odigo para os
m´etodos das interfaces.
interface Teste {
int x(int y);
void y();
}
class Testando implements Teste {
int x(int y) {
return(y);
}
void y() {
System.out.println();
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 20 / 39
Interfaces
E agora? Vai compilar?
interface Teste {
int x(int y);
void y();
}
class Testando implements Teste {
int x(int y) {
return(y);
}
void y() {
System.out.println();
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 21 / 39
Interfaces
E agora? Vai compilar?
Sa´ıda
$ javac Testando.java
Testando.java:6: y() in Testando cannot implement y()
in Teste; attempting to assign weaker access
privileges; was public
void y() {
^
Testando.java:2: x(int) in Testando cannot implement
x(int) in Teste; attempting to assign weaker access
privileges; was public
int x(int y) {
^
2 errors
interface Teste {
int x(int y);
void y();
}
class Testando implements Teste {
int x(int y) {
return(y);
}
void y() {
System.out.println();
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 21 / 39
Interfaces
E agora? Vai compilar?
Sa´ıda
$ javac Testando.java
Testando.java:6: y() in Testando cannot implement y()
in Teste; attempting to assign weaker access
privileges; was public
void y() {
^
Testando.java:2: x(int) in Testando cannot implement
x(int) in Teste; attempting to assign weaker access
privileges; was public
int x(int y) {
^
2 errors
Lembre-se que m´etodos
em uma interface s˜ao
implicitamente p´ublicos
interface Teste {
int x(int y);
void y();
}
class Testando implements Teste {
int x(int y) {
return(y);
}
void y() {
System.out.println();
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 21 / 39
Interfaces
E agora? Vai compilar?
Sa´ıda
$ javac Testando.java
Testando.java:6: y() in Testando cannot implement y()
in Teste; attempting to assign weaker access
privileges; was public
void y() {
^
Testando.java:2: x(int) in Testando cannot implement
x(int) in Teste; attempting to assign weaker access
privileges; was public
int x(int y) {
^
2 errors
Lembre-se que m´etodos
em uma interface s˜ao
implicitamente p´ublicos
interface Teste {
int x(int y);
void y();
}
class Testando implements Teste {
public int x(int y) {
return(y);
}
public void y() {
System.out.println();
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 21 / 39
Interfaces
Particularmente ´uteis
quando queremos
for¸car o programador
a manter a assinatura
de m´etodos, para usar
classes por n´os
desenvolvidas
interface Teste {
int x(int y);
void y();
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 22 / 39
Interfaces
Particularmente ´uteis
quando queremos
for¸car o programador
a manter a assinatura
de m´etodos, para usar
classes por n´os
desenvolvidas
Para isso, basta usar a
interface como se fosse
uma classe
interface Teste {
int x(int y);
void y();
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 22 / 39
Interfaces
Particularmente ´uteis
quando queremos
for¸car o programador
a manter a assinatura
de m´etodos, para usar
classes por n´os
desenvolvidas
Para isso, basta usar a
interface como se fosse
uma classe
interface Teste {
int x(int y);
void y();
}
public class Minha {
public int calculo(Teste t,
int y) {
return(2*t.x(y));
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 22 / 39
Interfaces
Particularmente ´uteis
quando queremos
for¸car o programador
a manter a assinatura
de m´etodos, para usar
classes por n´os
desenvolvidas
Para isso, basta usar a
interface como se fosse
uma classe
interface Teste {
int x(int y);
void y();
}
public class Minha {
public int calculo(Teste t,
int y) {
return(2*t.x(y));
}
}
Como quando us´avamos a superclasse em lugar das
subclasses
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 22 / 39
Interfaces
Como n˜ao h´a como
criar um objeto
Teste, quem quiser
usar a classe Minha
ter´a que criar uma
classe que
implemente Teste e
us´a-la no lugar
class Testando implements Teste {
public int x(int y) {
return(y);
}
public void y() {
System.out.println();
}
public static void main(String[]
args) {
Minha m = new Minha();
System.out.println(m.calculo(
new Testando(),2));
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 23 / 39
Interfaces
Como n˜ao h´a como
criar um objeto
Teste, quem quiser
usar a classe Minha
ter´a que criar uma
classe que
implemente Teste e
us´a-la no lugar
Ideal para trabalhos
em equipe
class Testando implements Teste {
public int x(int y) {
return(y);
}
public void y() {
System.out.println();
}
public static void main(String[]
args) {
Minha m = new Minha();
System.out.println(m.calculo(
new Testando(),2));
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 23 / 39
Interfaces
Voltemos ao nosso
c´odigo
class Projeto {
...
static void bolha(Residencia[] v) {
for (int ult = v.length-1; ult>0; ult--)
for (int i=0; i<ult; i++)
if (v[i].comparaRes(v[i+1]) > 0) {
Residencia aux = v[i];
v[i] = v[i+1];
v[i+1] = aux;
}
}
static void bolhaP(Residencia[] v) {
for (int ult = v.length-1; ult>0; ult--)
for (int i=0; i<ult; i++)
if (v[i].comparaResP(v[i+1]) > 0) {
Residencia aux = v[i];
v[i] = v[i+1];
v[i+1] = aux;
}
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 24 / 39
Interfaces
Voltemos ao nosso
c´odigo
A ´unica coisa que
muda ´e o modo de
compararmos os
objetos Residencia
class Projeto {
...
static void bolha(Residencia[] v) {
for (int ult = v.length-1; ult>0; ult--)
for (int i=0; i<ult; i++)
if (v[i].comparaRes(v[i+1]) > 0) {
Residencia aux = v[i];
v[i] = v[i+1];
v[i+1] = aux;
}
}
static void bolhaP(Residencia[] v) {
for (int ult = v.length-1; ult>0; ult--)
for (int i=0; i<ult; i++)
if (v[i].comparaResP(v[i+1]) > 0) {
Residencia aux = v[i];
v[i] = v[i+1];
v[i+1] = aux;
}
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 24 / 39
Interfaces
Seria interessante
termos uma esp´ecie
de comparador
universal, que
impedisse essa
duplicidade de
c´odigo
class Projeto {
...
static void bolha(Residencia[] v) {
for (int ult = v.length-1; ult>0; ult--)
for (int i=0; i<ult; i++)
if (v[i].comparaRes(v[i+1]) > 0) {
Residencia aux = v[i];
v[i] = v[i+1];
v[i+1] = aux;
}
}
static void bolhaP(Residencia[] v) {
for (int ult = v.length-1; ult>0; ult--)
for (int i=0; i<ult; i++)
if (v[i].comparaResP(v[i+1]) > 0) {
Residencia aux = v[i];
v[i] = v[i+1];
v[i+1] = aux;
}
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 25 / 39
Interfaces
Assim, se
quis´essemos
comparar por ´area,
usar´ıamos sua vers˜ao
´area
class Projeto {
...
static void bolha(Residencia[] v) {
for (int ult = v.length-1; ult>0; ult--)
for (int i=0; i<ult; i++)
if (v[i].comparaRes(v[i+1]) > 0) {
Residencia aux = v[i];
v[i] = v[i+1];
v[i+1] = aux;
}
}
static void bolhaP(Residencia[] v) {
for (int ult = v.length-1; ult>0; ult--)
for (int i=0; i<ult; i++)
if (v[i].comparaResP(v[i+1]) > 0) {
Residencia aux = v[i];
v[i] = v[i+1];
v[i+1] = aux;
}
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 26 / 39
Interfaces
Assim, se
quis´essemos
comparar por ´area,
usar´ıamos sua vers˜ao
´area
Se quis´essemos
comparar valor,
usar´ıamos sua vers˜ao
valor
class Projeto {
...
static void bolha(Residencia[] v) {
for (int ult = v.length-1; ult>0; ult--)
for (int i=0; i<ult; i++)
if (v[i].comparaRes(v[i+1]) > 0) {
Residencia aux = v[i];
v[i] = v[i+1];
v[i+1] = aux;
}
}
static void bolhaP(Residencia[] v) {
for (int ult = v.length-1; ult>0; ult--)
for (int i=0; i<ult; i++)
if (v[i].comparaResP(v[i+1]) > 0) {
Residencia aux = v[i];
v[i] = v[i+1];
v[i+1] = aux;
}
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 26 / 39
Interfaces
Algo assim...
class Projeto {
...
static void bolha(Residencia[] v,
Comparador c) {
for (int ult = v.length-1; ult>0; ult--)
for (int i=0; i<ult; i++)
if (c.compara(v[i],v[i+1]) > 0) {
Residencia aux = v[i];
v[i] = v[i+1];
v[i+1] = aux;
}
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 27 / 39
Interfaces
Algo assim...
class Projeto {
...
static void bolha(Residencia[] v,
Comparador c) {
for (int ult = v.length-1; ult>0; ult--)
for (int i=0; i<ult; i++)
if (c.compara(v[i],v[i+1]) > 0) {
Residencia aux = v[i];
v[i] = v[i+1];
v[i+1] = aux;
}
}
}
Ent˜ao...
interface Comparador {
int compara(Residencia a, Residencia b);
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 27 / 39
Interfaces
Tamb´em temos que
implementar os
comparadores
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 28 / 39
Interfaces
Tamb´em temos que
implementar os
comparadores
class ComparaArea implements Comparador {
public int compara(Residencia a,
Residencia b) {
if (a == null) return(-1);
if (b == null) return(1);
return((int)(a.area() - b.area()));
}
}
class ComparaValor implements Comparador {
public int compara(Residencia a,
Residencia b) {
if (a == null) return(-1);
if (b == null) return(1);
return((int)(a.casa.valor(a.casa.area())
- b.casa.valor(b.casa.area())));
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 28 / 39
Interfaces
Tamb´em temos que
implementar os
comparadores
Dever˜ao substituir
os m´etodos
comparaRes e
comparaResP de
Residencia
class ComparaArea implements Comparador {
public int compara(Residencia a,
Residencia b) {
if (a == null) return(-1);
if (b == null) return(1);
return((int)(a.area() - b.area()));
}
}
class ComparaValor implements Comparador {
public int compara(Residencia a,
Residencia b) {
if (a == null) return(-1);
if (b == null) return(1);
return((int)(a.casa.valor(a.casa.area())
- b.casa.valor(b.casa.area())));
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 28 / 39
Interfaces
E como usamos
isso?
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 29 / 39
Interfaces
E como usamos
isso?
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
AreaPiscina p = new AreaPiscina();
Residencia r1 = new Residencia(cr, p);
Residencia r2 = new Residencia(cq, p);
System.out.println("´Area r1: "+r1.area());
System.out.println("´Area r2: "+r2.area());
Comparador c = new ComparaArea();
System.out.println("Compara¸c~ao: "+
c.compara(r1,r2));
System.out.println();
System.out.println("Valor casa r1: "+
r1.casa.valor(r1.casa.area()));
System.out.println("Valor casa r2: "+
r2.casa.valor(r2.casa.area()));
c = new ComparaValor();
System.out.println("Compara¸c~ao: "+
c.compara(r1,r2));
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 29 / 39
Interfaces
E como usamos
isso?
Sa´ıda
$ java Projeto
´Area r1: 150.0
´Area r2: 100.0
Compara¸c~ao: 50
Valor casa r1: 198000.0
Valor casa r2: 152300.0
Compara¸c~ao: 45700
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
AreaPiscina p = new AreaPiscina();
Residencia r1 = new Residencia(cr, p);
Residencia r2 = new Residencia(cq, p);
System.out.println("´Area r1: "+r1.area());
System.out.println("´Area r2: "+r2.area());
Comparador c = new ComparaArea();
System.out.println("Compara¸c~ao: "+
c.compara(r1,r2));
System.out.println();
System.out.println("Valor casa r1: "+
r1.casa.valor(r1.casa.area()));
System.out.println("Valor casa r2: "+
r2.casa.valor(r2.casa.area()));
c = new ComparaValor();
System.out.println("Compara¸c~ao: "+
c.compara(r1,r2));
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 29 / 39
Interfaces
Sabemos 3 m´etodos de
ordena¸c˜ao
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 30 / 39
Interfaces
Sabemos 3 m´etodos de
ordena¸c˜ao
Bolha,
static void bolha(Residencia[] v, Comparador c) {
for (int ult = v.length-1; ult>0; ult--) {
for (int i=0; i<ult; i++) {
if (c.compara(v[i],v[i+1]) > 0) {
Residencia aux = v[i];
v[i] = v[i+1];
v[i+1] = aux;
}
}
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 30 / 39
Interfaces
Sabemos 3 m´etodos de
ordena¸c˜ao
Bolha, sele¸c˜ao
static int posMenorEl(Residencia[] v, int inicio,
int fim, Comparador c) {
int posMenor = -1;
if ((v!=null) && (inicio>=0) && (fim <= v.length)
&& (inicio < fim)) {
posMenor = inicio;
for (int i=inicio+1; i<fim; i++) {
if (c.compara(v[i],v[posMenor]) < 0)
posMenor = i;
}
}
return(posMenor);
}
static void selecao(Residencia[] v, Comparador c) {
for (int i=0; i<v.length-1; i++) {
int posMenor = posMenorEl(v,i,v.length,c);
if (c.compara(v[posMenor],v[i]) < 0) {
Residencia aux = v[i];
v[i] = v[posMenor];
v[posMenor] = aux;
}
}
}
static void bolha(Residencia[] v, Comparador c) {
for (int ult = v.length-1; ult>0; ult--) {
for (int i=0; i<ult; i++) {
if (c.compara(v[i],v[i+1]) > 0) {
Residencia aux = v[i];
v[i] = v[i+1];
v[i+1] = aux;
}
}
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 30 / 39
Interfaces
Sabemos 3 m´etodos de
ordena¸c˜ao
Bolha, sele¸c˜ao e inser¸c˜ao
static int posMenorEl(Residencia[] v, int inicio,
int fim, Comparador c) {
int posMenor = -1;
if ((v!=null) && (inicio>=0) && (fim <= v.length)
&& (inicio < fim)) {
posMenor = inicio;
for (int i=inicio+1; i<fim; i++) {
if (c.compara(v[i],v[posMenor]) < 0)
posMenor = i;
}
}
return(posMenor);
}
static void selecao(Residencia[] v, Comparador c) {
for (int i=0; i<v.length-1; i++) {
int posMenor = posMenorEl(v,i,v.length,c);
if (c.compara(v[posMenor],v[i]) < 0) {
Residencia aux = v[i];
v[i] = v[posMenor];
v[posMenor] = aux;
}
}
}
static void bolha(Residencia[] v, Comparador c) {
for (int ult = v.length-1; ult>0; ult--) {
for (int i=0; i<ult; i++) {
if (c.compara(v[i],v[i+1]) > 0) {
Residencia aux = v[i];
v[i] = v[i+1];
v[i+1] = aux;
}
}
}
}
static void insercao(Residencia[] v,Comparador c){
for (int i=1; i<v.length; i++) {
Residencia aux = v[i];
int j = i;
while ((j > 0) &&
(c.compara(aux,v[j-1]) < 0)) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 30 / 39
Interfaces
Sabemos 3 m´etodos de
ordena¸c˜ao
Bolha, sele¸c˜ao e inser¸c˜ao
static int posMenorEl(Residencia[] v, int inicio,
int fim, Comparador c) {
int posMenor = -1;
if ((v!=null) && (inicio>=0) && (fim <= v.length)
&& (inicio < fim)) {
posMenor = inicio;
for (int i=inicio+1; i<fim; i++) {
if (c.compara(v[i],v[posMenor]) < 0)
posMenor = i;
}
}
return(posMenor);
}
static void selecao(Residencia[] v, Comparador c) {
for (int i=0; i<v.length-1; i++) {
int posMenor = posMenorEl(v,i,v.length,c);
if (c.compara(v[posMenor],v[i]) < 0) {
Residencia aux = v[i];
v[i] = v[posMenor];
v[posMenor] = aux;
}
}
}
static void bolha(Residencia[] v, Comparador c) {
for (int ult = v.length-1; ult>0; ult--) {
for (int i=0; i<ult; i++) {
if (c.compara(v[i],v[i+1]) > 0) {
Residencia aux = v[i];
v[i] = v[i+1];
v[i+1] = aux;
}
}
}
}
static void insercao(Residencia[] v,Comparador c){
for (int i=1; i<v.length; i++) {
Residencia aux = v[i];
int j = i;
while ((j > 0) &&
(c.compara(aux,v[j-1]) < 0)) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Note que usamos Comparador
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 30 / 39
Interfaces
Qual o problema?
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 31 / 39
Interfaces
Qual o problema?
O usu´ario (programador)
ter´a que explicitamente
optar por um dos
ordenadores
public static void main(String[] args) {
Residencia[] cond = new Residencia[5];
AreaPiscina p = new AreaPiscina();
for (int i=0; i<5; i++) {
CasaQuad c = new CasaQuad(
Math.random()*100,1500);
Residencia r=new Residencia(c,p);
cond[i] = r;
}
for (Residencia r : cond)
System.out.println(r.area());
System.out.println();
Comparador c = new ComparaArea();
bolha(cond,c);
for (Residencia r : cond)
System.out.println(r.area());
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 31 / 39
Interfaces
Qual o problema?
O usu´ario (programador)
ter´a que explicitamente
optar por um dos
ordenadores
Que fazer?
public static void main(String[] args) {
Residencia[] cond = new Residencia[5];
AreaPiscina p = new AreaPiscina();
for (int i=0; i<5; i++) {
CasaQuad c = new CasaQuad(
Math.random()*100,1500);
Residencia r=new Residencia(c,p);
cond[i] = r;
}
for (Residencia r : cond)
System.out.println(r.area());
System.out.println();
Comparador c = new ComparaArea();
bolha(cond,c);
for (Residencia r : cond)
System.out.println(r.area());
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 31 / 39
Interfaces
Qual o problema?
O usu´ario (programador)
ter´a que explicitamente
optar por um dos
ordenadores
Que fazer?
Antes de mais nada,
transformamos cada
m´etodo em uma classe
diferente
public static void main(String[] args) {
Residencia[] cond = new Residencia[5];
AreaPiscina p = new AreaPiscina();
for (int i=0; i<5; i++) {
CasaQuad c = new CasaQuad(
Math.random()*100,1500);
Residencia r=new Residencia(c,p);
cond[i] = r;
}
for (Residencia r : cond)
System.out.println(r.area());
System.out.println();
Comparador c = new ComparaArea();
bolha(cond,c);
for (Residencia r : cond)
System.out.println(r.area());
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 31 / 39
Interfaces
Qual o problema?
O usu´ario (programador)
ter´a que explicitamente
optar por um dos
ordenadores
Que fazer?
Antes de mais nada,
transformamos cada
m´etodo em uma classe
diferente
Implementando uma
interface comum a todos
public static void main(String[] args) {
Residencia[] cond = new Residencia[5];
AreaPiscina p = new AreaPiscina();
for (int i=0; i<5; i++) {
CasaQuad c = new CasaQuad(
Math.random()*100,1500);
Residencia r=new Residencia(c,p);
cond[i] = r;
}
for (Residencia r : cond)
System.out.println(r.area());
System.out.println();
Comparador c = new ComparaArea();
bolha(cond,c);
for (Residencia r : cond)
System.out.println(r.area());
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 31 / 39
Interfaces
public class Selecao implements Ordenador {
public int posMenorEl(Residencia[] v, int inicio,
int fim, Comparador c) {
int posMenor = -1;
if ((v!=null) && (inicio>=0) &&
(fim <= v.length) && (inicio < fim)) {
posMenor = inicio;
for (int i=inicio+1; i<fim; i++)
if (c.compara(v[i],v[posMenor]) < 0)
posMenor = i;
}
return(posMenor);
}
public void ordena(Residencia[] v, Comparador c) {
for (int i=0; i<v.length-1; i++) {
int posMenor = posMenorEl(v,i,v.length,c);
if (c.compara(v[posMenor],v[i]) < 0) {
Residencia aux = v[i];
v[i] = v[posMenor];
v[posMenor] = aux;
}
}
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 32 / 39
Interfaces
Note que os
m´etodos n˜ao s˜ao
mais static (por
conta da interface)
public class Selecao implements Ordenador {
public int posMenorEl(Residencia[] v, int inicio,
int fim, Comparador c) {
int posMenor = -1;
if ((v!=null) && (inicio>=0) &&
(fim <= v.length) && (inicio < fim)) {
posMenor = inicio;
for (int i=inicio+1; i<fim; i++)
if (c.compara(v[i],v[posMenor]) < 0)
posMenor = i;
}
return(posMenor);
}
public void ordena(Residencia[] v, Comparador c) {
for (int i=0; i<v.length-1; i++) {
int posMenor = posMenorEl(v,i,v.length,c);
if (c.compara(v[posMenor],v[i]) < 0) {
Residencia aux = v[i];
v[i] = v[posMenor];
v[posMenor] = aux;
}
}
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 32 / 39
Interfaces
Fazemos o mesmo
com os demais
m´etodos de
ordena¸c˜ao
public class Bolha implements Ordenador {
public void ordena(Residencia[] v,Comparador c) {
for (int ult = v.length-1; ult>0; ult--)
for (int i=0; i<ult; i++)
if (c.compara(v[i],v[i+1]) > 0) {
Residencia aux = v[i];
v[i] = v[i+1];
v[i+1] = aux;
}
}
}
public class Insercao implements Ordenador {
public void ordena(Residencia[] v,Comparador c) {
for (int i=1; i<v.length; i++) {
Residencia aux = v[i];
int j = i;
while ((j > 0) && (c.compara(aux,v[j-1]) < 0))
{
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 33 / 39
Interfaces
E como fica a
interface
propriamente dita?
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 34 / 39
Interfaces
E como fica a
interface
propriamente dita?
public interface Ordenador {
void ordena(Residencia[] v,
Comparador c);
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 34 / 39
Interfaces
E como fica a
interface
propriamente dita?
public interface Ordenador {
void ordena(Residencia[] v,
Comparador c);
}
E o c´odigo que faz a
chamada?
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 34 / 39
Interfaces
E como fica a
interface
propriamente dita?
public interface Ordenador {
void ordena(Residencia[] v,
Comparador c);
}
E o c´odigo que faz a
chamada?
class X {
public static void main(String[] args) {
Residencia[] cond = new Residencia[5];
AreaPiscina p = new AreaPiscina();
for (int i=0; i<5; i++) {
CasaQuad c = new CasaQuad(
Math.random()*100,1500);
Residencia r = new Residencia(c,p);
cond[i] = r;
}
for (Residencia r : cond)
System.out.println(r.area());
System.out.println();
Comparador c = new ComparaArea();
Ordenador ord = new Selecao();
ord.ordena(cond,c);
for (Residencia r : cond)
System.out.println(r.area());
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 34 / 39
Interfaces
E como fica a
interface
propriamente dita?
public interface Ordenador {
void ordena(Residencia[] v,
Comparador c);
}
E o c´odigo que faz a
chamada?
Ficou mais geral, por
permitir que o
ordenador seja passado
por parˆametro, por
exemplo.
class X {
public static void main(String[] args) {
Residencia[] cond = new Residencia[5];
AreaPiscina p = new AreaPiscina();
for (int i=0; i<5; i++) {
CasaQuad c = new CasaQuad(
Math.random()*100,1500);
Residencia r = new Residencia(c,p);
cond[i] = r;
}
for (Residencia r : cond)
System.out.println(r.area());
System.out.println();
Comparador c = new ComparaArea();
Ordenador ord = new Selecao();
ord.ordena(cond,c);
for (Residencia r : cond)
System.out.println(r.area());
}
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 34 / 39
Interfaces – Vantagens
Se objetos referenciarem interfaces e n˜ao classes:
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 35 / 39
Interfaces – Vantagens
Se objetos referenciarem interfaces e n˜ao classes:
Fica mais f´acil alterar as classes de um sistema sem
ter que alterar aquelas que as utilizam (se a
assinatura do m´etodo se mantiver igual);
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 35 / 39
Interfaces – Vantagens
Se objetos referenciarem interfaces e n˜ao classes:
Fica mais f´acil alterar as classes de um sistema sem
ter que alterar aquelas que as utilizam (se a
assinatura do m´etodo se mantiver igual);
Fica f´acil implementar polimorfismo de
comportamento
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 35 / 39
Interfaces – Vantagens
Se objetos referenciarem interfaces e n˜ao classes:
Fica mais f´acil alterar as classes de um sistema sem
ter que alterar aquelas que as utilizam (se a
assinatura do m´etodo se mantiver igual);
Fica f´acil implementar polimorfismo de
comportamento
Classes que mudam de comportamento
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 35 / 39
Interfaces – Vantagens
Se objetos referenciarem interfaces e n˜ao classes:
Fica mais f´acil alterar as classes de um sistema sem
ter que alterar aquelas que as utilizam (se a
assinatura do m´etodo se mantiver igual);
Fica f´acil implementar polimorfismo de
comportamento
Classes que mudam de comportamento
O chaveamento de comportamento pode ser feito durante
compila¸c˜ao ou durante execu¸c˜ao
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 35 / 39
Interfaces – Vantagens
Se objetos referenciarem interfaces e n˜ao classes:
Facilita-se o desenvolvimento de sistemas grandes,
envolvendo muitos programadores
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 36 / 39
Interfaces – Vantagens
Se objetos referenciarem interfaces e n˜ao classes:
Facilita-se o desenvolvimento de sistemas grandes,
envolvendo muitos programadores
Definem-se as interfaces
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 36 / 39
Interfaces – Vantagens
Se objetos referenciarem interfaces e n˜ao classes:
Facilita-se o desenvolvimento de sistemas grandes,
envolvendo muitos programadores
Definem-se as interfaces
Todos as obedecem
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 36 / 39
Interfaces – Vantagens
Se objetos referenciarem interfaces e n˜ao classes:
Facilita-se o desenvolvimento de sistemas grandes,
envolvendo muitos programadores
Definem-se as interfaces
Todos as obedecem
Integra¸c˜ao posterior mais f´acil;
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 36 / 39
Interfaces – Vantagens
Se objetos referenciarem interfaces e n˜ao classes:
Facilita-se o desenvolvimento de sistemas grandes,
envolvendo muitos programadores
Definem-se as interfaces
Todos as obedecem
Integra¸c˜ao posterior mais f´acil;
Elimina-se o c´odigo repetido.
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 36 / 39
Interfaces
Em java, classes podem
estender uma ´unica classe
class C { ... }
class D extends C
{ ... }
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 37 / 39
Interfaces
Em java, classes podem
estender uma ´unica classe
N˜ao h´a heran¸ca m´ultipla
class C { ... }
class D extends C
{ ... }
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 37 / 39
Interfaces
Em java, classes podem
estender uma ´unica classe
N˜ao h´a heran¸ca m´ultipla
Contudo, podem
implementar quantas
interfaces quiserem:
interface A { ... }
interface B { ... }
class C { ... }
class D extends C
implements A, B { ... }
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 37 / 39
Interfaces
Em java, classes podem
estender uma ´unica classe
N˜ao h´a heran¸ca m´ultipla
Contudo, podem
implementar quantas
interfaces quiserem:
interface A { ... }
interface B { ... }
class C { ... }
class D extends C
implements A, B { ... }
Al´em disso, quem implementa a interface pode
adicionar m´etodos extras
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 37 / 39
Interfaces
Em java, classes podem
estender uma ´unica classe
N˜ao h´a heran¸ca m´ultipla
Contudo, podem
implementar quantas
interfaces quiserem:
interface A { ... }
interface B { ... }
class C { ... }
class D extends C
implements A, B { ... }
Al´em disso, quem implementa a interface pode
adicionar m´etodos extras
Que n˜ao necessariamente ser˜ao vistos pelo compilador
(como na rela¸c˜ao subclasse/superclasse)
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 37 / 39
Interfaces
Interfaces Java tamb´em
podem definir
constantes de classe
(atributos static
final)
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 38 / 39
Interfaces
Interfaces Java tamb´em
podem definir
constantes de classe
(atributos static
final)
interface Cores {
int branco = 255;
int preto = 0;
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 38 / 39
Interfaces
Interfaces Java tamb´em
podem definir
constantes de classe
(atributos static
final)
Na interface n˜ao ´e preciso
colocar o static final,
isso est´a impl´ıcito
interface Cores {
int branco = 255;
int preto = 0;
}
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 38 / 39
Videoaula
N˜ao h´a.
Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 39 / 39

Mais conteúdo relacionado

Mais procurados

Função exponencial exercícios resolvidos
Função exponencial   exercícios resolvidosFunção exponencial   exercícios resolvidos
Função exponencial exercícios resolvidosjorgehenriqueangelim
 
EQUAÇÃO EXPONENCIAL - Conceito e resolução
EQUAÇÃO EXPONENCIAL - Conceito e resoluçãoEQUAÇÃO EXPONENCIAL - Conceito e resolução
EQUAÇÃO EXPONENCIAL - Conceito e resoluçãobetontem
 
Mapa mental todas as materias
Mapa mental todas as materiasMapa mental todas as materias
Mapa mental todas as materiasCleuvânia Dias
 
Apostila de potenciacao 001
Apostila de potenciacao  001Apostila de potenciacao  001
Apostila de potenciacao 001con_seguir
 
Resolução I - Polinômios e números complexos
Resolução I - Polinômios e números complexosResolução I - Polinômios e números complexos
Resolução I - Polinômios e números complexosFeefelipeeRS
 
Álgebra básica, potenciação, notação científica, radiciação, polinômios, fato...
Álgebra básica, potenciação, notação científica, radiciação, polinômios, fato...Álgebra básica, potenciação, notação científica, radiciação, polinômios, fato...
Álgebra básica, potenciação, notação científica, radiciação, polinômios, fato...Carlos Campani
 
Potenciação radiciação e fatoração aula 1
Potenciação radiciação e fatoração aula 1Potenciação radiciação e fatoração aula 1
Potenciação radiciação e fatoração aula 1Daniela F Almenara
 
www.AulasDeMatematicaApoio.com - Matemática - Frações Algébricas
 www.AulasDeMatematicaApoio.com  - Matemática -  Frações Algébricas www.AulasDeMatematicaApoio.com  - Matemática -  Frações Algébricas
www.AulasDeMatematicaApoio.com - Matemática - Frações AlgébricasAulas De Matemática Apoio
 
Matematica 1EM 1BIM
Matematica  1EM 1BIM Matematica  1EM 1BIM
Matematica 1EM 1BIM Alice MLK
 
Www.uff.br gma informacoes disciplinas_calc 03 -a- 2012-2_lista 7
Www.uff.br gma informacoes disciplinas_calc 03 -a- 2012-2_lista 7Www.uff.br gma informacoes disciplinas_calc 03 -a- 2012-2_lista 7
Www.uff.br gma informacoes disciplinas_calc 03 -a- 2012-2_lista 7Bowman Guimaraes
 
(ACH2001) Introdução à Programação - Aula 06
(ACH2001) Introdução à Programação - Aula 06(ACH2001) Introdução à Programação - Aula 06
(ACH2001) Introdução à Programação - Aula 06Norton Trevisan Roman
 

Mais procurados (20)

Função exponencial exercícios resolvidos
Função exponencial   exercícios resolvidosFunção exponencial   exercícios resolvidos
Função exponencial exercícios resolvidos
 
EQUAÇÃO EXPONENCIAL - Conceito e resolução
EQUAÇÃO EXPONENCIAL - Conceito e resoluçãoEQUAÇÃO EXPONENCIAL - Conceito e resolução
EQUAÇÃO EXPONENCIAL - Conceito e resolução
 
05 regra de cramer
05   regra de cramer05   regra de cramer
05 regra de cramer
 
Mapa mental todas as materias
Mapa mental todas as materiasMapa mental todas as materias
Mapa mental todas as materias
 
Apostila de potenciacao 001
Apostila de potenciacao  001Apostila de potenciacao  001
Apostila de potenciacao 001
 
Resolução I - Polinômios e números complexos
Resolução I - Polinômios e números complexosResolução I - Polinômios e números complexos
Resolução I - Polinômios e números complexos
 
Matematica
MatematicaMatematica
Matematica
 
Espaços metricos
Espaços metricosEspaços metricos
Espaços metricos
 
2 metodos de discretizacao
2   metodos de discretizacao2   metodos de discretizacao
2 metodos de discretizacao
 
Gab potenciaraiz2010
Gab potenciaraiz2010Gab potenciaraiz2010
Gab potenciaraiz2010
 
Álgebra básica, potenciação, notação científica, radiciação, polinômios, fato...
Álgebra básica, potenciação, notação científica, radiciação, polinômios, fato...Álgebra básica, potenciação, notação científica, radiciação, polinômios, fato...
Álgebra básica, potenciação, notação científica, radiciação, polinômios, fato...
 
Pascal
PascalPascal
Pascal
 
AV1 MA14 Gabarito
AV1 MA14 GabaritoAV1 MA14 Gabarito
AV1 MA14 Gabarito
 
Polinomios
PolinomiosPolinomios
Polinomios
 
Potenciação radiciação e fatoração aula 1
Potenciação radiciação e fatoração aula 1Potenciação radiciação e fatoração aula 1
Potenciação radiciação e fatoração aula 1
 
Gabarito av2 ma14_2016
Gabarito av2 ma14_2016Gabarito av2 ma14_2016
Gabarito av2 ma14_2016
 
www.AulasDeMatematicaApoio.com - Matemática - Frações Algébricas
 www.AulasDeMatematicaApoio.com  - Matemática -  Frações Algébricas www.AulasDeMatematicaApoio.com  - Matemática -  Frações Algébricas
www.AulasDeMatematicaApoio.com - Matemática - Frações Algébricas
 
Matematica 1EM 1BIM
Matematica  1EM 1BIM Matematica  1EM 1BIM
Matematica 1EM 1BIM
 
Www.uff.br gma informacoes disciplinas_calc 03 -a- 2012-2_lista 7
Www.uff.br gma informacoes disciplinas_calc 03 -a- 2012-2_lista 7Www.uff.br gma informacoes disciplinas_calc 03 -a- 2012-2_lista 7
Www.uff.br gma informacoes disciplinas_calc 03 -a- 2012-2_lista 7
 
(ACH2001) Introdução à Programação - Aula 06
(ACH2001) Introdução à Programação - Aula 06(ACH2001) Introdução à Programação - Aula 06
(ACH2001) Introdução à Programação - Aula 06
 

Mais de Norton Trevisan Roman

(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05Norton Trevisan Roman
 

Mais de Norton Trevisan Roman (20)

(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24
 
(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23
 
(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22
 
(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21
 
(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20
 
(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19
 
(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18
 
(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17
 
(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16
 
(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15
 
(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14
 
(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13
 
(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12
 
(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11
 
(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10
 
(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09
 
(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08
 
(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07
 
(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06
 
(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05
 

Último

Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Ilda Bicacro
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdfLeloIurk1
 
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfPRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfprofesfrancleite
 
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptxSlides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptxLuizHenriquedeAlmeid6
 
Atividade - Letra da música Esperando na Janela.
Atividade -  Letra da música Esperando na Janela.Atividade -  Letra da música Esperando na Janela.
Atividade - Letra da música Esperando na Janela.Mary Alvarenga
 
apostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médioapostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médiorosenilrucks
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMHELENO FAVACHO
 
A QUATRO MÃOS - MARILDA CASTANHA . pdf
A QUATRO MÃOS  -  MARILDA CASTANHA . pdfA QUATRO MÃOS  -  MARILDA CASTANHA . pdf
A QUATRO MÃOS - MARILDA CASTANHA . pdfAna Lemos
 
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕESCOMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕESEduardaReis50
 
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdfPROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdfMarianaMoraesMathias
 
Slides sobre as Funções da Linguagem.pptx
Slides sobre as Funções da Linguagem.pptxSlides sobre as Funções da Linguagem.pptx
Slides sobre as Funções da Linguagem.pptxMauricioOliveira258223
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãIlda Bicacro
 
ATIVIDADE PARA ENTENDER -Pizzaria dos Descritores
ATIVIDADE PARA ENTENDER -Pizzaria dos DescritoresATIVIDADE PARA ENTENDER -Pizzaria dos Descritores
ATIVIDADE PARA ENTENDER -Pizzaria dos DescritoresAnaCarinaKucharski1
 
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃOFASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃOAulasgravadas3
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...IsabelPereira2010
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...Rosalina Simão Nunes
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdfLeloIurk1
 
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptxJOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptxTainTorres4
 

Último (20)

Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
 
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfPRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
 
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptxSlides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
 
Atividade - Letra da música Esperando na Janela.
Atividade -  Letra da música Esperando na Janela.Atividade -  Letra da música Esperando na Janela.
Atividade - Letra da música Esperando na Janela.
 
apostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médioapostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médio
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
 
A QUATRO MÃOS - MARILDA CASTANHA . pdf
A QUATRO MÃOS  -  MARILDA CASTANHA . pdfA QUATRO MÃOS  -  MARILDA CASTANHA . pdf
A QUATRO MÃOS - MARILDA CASTANHA . pdf
 
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕESCOMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
 
Aula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIXAula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIX
 
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdfPROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
 
Slides sobre as Funções da Linguagem.pptx
Slides sobre as Funções da Linguagem.pptxSlides sobre as Funções da Linguagem.pptx
Slides sobre as Funções da Linguagem.pptx
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! Sertã
 
ATIVIDADE PARA ENTENDER -Pizzaria dos Descritores
ATIVIDADE PARA ENTENDER -Pizzaria dos DescritoresATIVIDADE PARA ENTENDER -Pizzaria dos Descritores
ATIVIDADE PARA ENTENDER -Pizzaria dos Descritores
 
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃOFASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
 
Bullying, sai pra lá
Bullying,  sai pra láBullying,  sai pra lá
Bullying, sai pra lá
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
 
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptxJOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
 

(ACH2001) Introdução à Programação - Aula 22

  • 1. Aula 22 – M´etodos Abstratos e Interfaces Norton Trevisan Roman 27 de maio de 2020 Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 1 / 39
  • 2. M´etodos e Classes Abstratos Vamos rever Casa public class Casa { private double valorM2 = 1500; Casa(){} Casa(double valorM2) { this.valorM2 = valorM2; } double valor(double area) { if (area >= 0) return(this.valorM2*area); return(-1); } public double area() { return(-1); } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 2 / 39
  • 3. M´etodos e Classes Abstratos Vamos rever Casa Por que fizemos isso? public class Casa { private double valorM2 = 1500; Casa(){} Casa(double valorM2) { this.valorM2 = valorM2; } double valor(double area) { if (area >= 0) return(this.valorM2*area); return(-1); } public double area() { return(-1); } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 2 / 39
  • 4. M´etodos e Classes Abstratos Vamos rever Casa Por que fizemos isso? Para que pudessemos trabalhar com objetos de subclasses em c´odigo que exige a superclasse public class Casa { private double valorM2 = 1500; Casa(){} Casa(double valorM2) { this.valorM2 = valorM2; } double valor(double area) { if (area >= 0) return(this.valorM2*area); return(-1); } public double area() { return(-1); } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 2 / 39
  • 5. M´etodos e Classes Abstratos Esse era o caso de Residencia class Residencia { Casa casa; AreaPiscina piscina; public double area() { double resp = 0; if (this.casa != null) resp += this.casa.area(); if (this.piscina != null) resp += this.piscina.area(); return(resp); } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 3 / 39
  • 6. M´etodos e Classes Abstratos Esse era o caso de Residencia Bem coxambrado class Residencia { Casa casa; AreaPiscina piscina; public double area() { double resp = 0; if (this.casa != null) resp += this.casa.area(); if (this.piscina != null) resp += this.piscina.area(); return(resp); } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 3 / 39
  • 7. M´etodos e Classes Abstratos Esse era o caso de Residencia Bem coxambrado Como fazer ent˜ao? class Residencia { Casa casa; AreaPiscina piscina; public double area() { double resp = 0; if (this.casa != null) resp += this.casa.area(); if (this.piscina != null) resp += this.piscina.area(); return(resp); } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 3 / 39
  • 8. M´etodos e Classes Abstratos Esse era o caso de Residencia Bem coxambrado Como fazer ent˜ao? Tornar area um m´etodo abstrato class Residencia { Casa casa; AreaPiscina piscina; public double area() { double resp = 0; if (this.casa != null) resp += this.casa.area(); if (this.piscina != null) resp += this.piscina.area(); return(resp); } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 3 / 39
  • 9. M´etodos e Classes Abstratos public abstract class Casa { private double valorM2 = 1500; Casa() Casa(double valorM2) { this.valorM2 = valorM2; } double valor(double area) { if (area >= 0) return(this.valorM2*area); return(-1); } public abstract double area(); } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 4 / 39
  • 10. M´etodos e Classes Abstratos S˜ao m´etodos sem uma implementa¸c˜ao definida na classe public abstract class Casa { private double valorM2 = 1500; Casa() Casa(double valorM2) { this.valorM2 = valorM2; } double valor(double area) { if (area >= 0) return(this.valorM2*area); return(-1); } public abstract double area(); } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 4 / 39
  • 11. M´etodos e Classes Abstratos S˜ao m´etodos sem uma implementa¸c˜ao definida na classe Possuem apenas o necess´ario para compilar: sua assinatura public abstract class Casa { private double valorM2 = 1500; Casa() Casa(double valorM2) { this.valorM2 = valorM2; } double valor(double area) { if (area >= 0) return(this.valorM2*area); return(-1); } public abstract double area(); } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 4 / 39
  • 12. M´etodos e Classes Abstratos S˜ao m´etodos sem uma implementa¸c˜ao definida na classe Possuem apenas o necess´ario para compilar: sua assinatura Quem os implementa ent˜ao? public abstract class Casa { private double valorM2 = 1500; Casa() Casa(double valorM2) { this.valorM2 = valorM2; } double valor(double area) { if (area >= 0) return(this.valorM2*area); return(-1); } public abstract double area(); } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 4 / 39
  • 13. M´etodos e Classes Abstratos S˜ao m´etodos sem uma implementa¸c˜ao definida na classe Possuem apenas o necess´ario para compilar: sua assinatura Quem os implementa ent˜ao? As subclasses public abstract class Casa { private double valorM2 = 1500; Casa() Casa(double valorM2) { this.valorM2 = valorM2; } double valor(double area) { if (area >= 0) return(this.valorM2*area); return(-1); } public abstract double area(); } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 4 / 39
  • 14. M´etodos e Classes Abstratos Subclasses s˜ao obrigadas a implementar m´etodos abstratos da superclasse public abstract class Casa { private double valorM2 = 1500; Casa() Casa(double valorM2) { this.valorM2 = valorM2; } double valor(double area) { if (area >= 0) return(this.valorM2*area); return(-1); } public abstract double area(); } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 5 / 39
  • 15. M´etodos e Classes Abstratos Subclasses s˜ao obrigadas a implementar m´etodos abstratos da superclasse A existˆencia de m´etodos abstratos torna a classe abstrata public abstract class Casa { private double valorM2 = 1500; Casa() Casa(double valorM2) { this.valorM2 = valorM2; } double valor(double area) { if (area >= 0) return(this.valorM2*area); return(-1); } public abstract double area(); } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 5 / 39
  • 16. M´etodos e Classes Abstratos Quando aplicado a classes, abstract faz com que n˜ao possam ser instanciadas public abstract class Casa { private double valorM2 = 1500; Casa() Casa(double valorM2) { this.valorM2 = valorM2; } double valor(double area) { if (area >= 0) return(this.valorM2*area); return(-1); } public abstract double area(); } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 6 / 39
  • 17. M´etodos e Classes Abstratos Quando aplicado a classes, abstract faz com que n˜ao possam ser instanciadas N˜ao podemos fazer new Casa() (nesse exemplo) public abstract class Casa { private double valorM2 = 1500; Casa() Casa(double valorM2) { this.valorM2 = valorM2; } double valor(double area) { if (area >= 0) return(this.valorM2*area); return(-1); } public abstract double area(); } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 6 / 39
  • 18. M´etodos e Classes Abstratos Todo m´etodo abstract torna a classe abstract public abstract class Casa { private double valorM2 = 1500; Casa() Casa(double valorM2) { this.valorM2 = valorM2; } double valor(double area) { if (area >= 0) return(this.valorM2*area); return(-1); } public abstract double area(); } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 7 / 39
  • 19. M´etodos e Classes Abstratos Todo m´etodo abstract torna a classe abstract Por´em nem toda classe abstract possui m´etodos abstract public abstract class Casa { private double valorM2 = 1500; Casa() Casa(double valorM2) { this.valorM2 = valorM2; } double valor(double area) { if (area >= 0) return(this.valorM2*area); return(-1); } public abstract double area(); } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 7 / 39
  • 20. M´etodos e Classes Abstratos Todo m´etodo abstract torna a classe abstract Por´em nem toda classe abstract possui m´etodos abstract Basta que n˜ao desejemos que seja instanciada public abstract class Casa { private double valorM2 = 1500; Casa() Casa(double valorM2) { this.valorM2 = valorM2; } double valor(double area) { if (area >= 0) return(this.valorM2*area); return(-1); } public abstract double area(); } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 7 / 39
  • 21. M´etodos e Classes Abstratos Nesse caso, Casa foi escolhida como abstrata pelo fato de, neste sistema, existirem apenas casas quadradas e retangulares. public abstract class Casa { private double valorM2 = 1500; Casa() Casa(double valorM2) { this.valorM2 = valorM2; } double valor(double area) { if (area >= 0) return(this.valorM2*area); return(-1); } public abstract double area(); } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 8 / 39
  • 22. M´etodos e Classes Abstratos Nesse caso, Casa foi escolhida como abstrata pelo fato de, neste sistema, existirem apenas casas quadradas e retangulares. N˜ao deveria ser poss´ıvel criar uma casa gen´erica public abstract class Casa { private double valorM2 = 1500; Casa() Casa(double valorM2) { this.valorM2 = valorM2; } double valor(double area) { if (area >= 0) return(this.valorM2*area); return(-1); } public abstract double area(); } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 8 / 39
  • 23. M´etodos e Classes Abstratos Nesse caso, Casa foi escolhida como abstrata pelo fato de, neste sistema, existirem apenas casas quadradas e retangulares. N˜ao deveria ser poss´ıvel criar uma casa gen´erica Por isso usamos abstract public abstract class Casa { private double valorM2 = 1500; Casa() Casa(double valorM2) { this.valorM2 = valorM2; } double valor(double area) { if (area >= 0) return(this.valorM2*area); return(-1); } public abstract double area(); } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 8 / 39
  • 24. M´etodos e Classes Abstratos E podemos ter parˆametros em m´etodos abstratos? public abstract class Casa { private double valorM2 = 1500; Casa() Casa(double valorM2) { this.valorM2 = valorM2; } double valor(double area) { if (area >= 0) return(this.valorM2*area); return(-1); } public abstract double area(); } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 9 / 39
  • 25. M´etodos e Classes Abstratos E podemos ter parˆametros em m´etodos abstratos? Sim. Nesse exemplo n˜ao foi preciso, mas o m´etodo abstrato ´e idˆentico `a assinatura de sua vers˜ao normal, exceto pelo modificador abstract public abstract class Casa { private double valorM2 = 1500; Casa() Casa(double valorM2) { this.valorM2 = valorM2; } double valor(double area) { if (area >= 0) return(this.valorM2*area); return(-1); } public abstract double area(); } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 9 / 39
  • 26. M´etodos e Classes Abstratos E como fica o c´odigo das subclasses de Casa? Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 10 / 39
  • 27. M´etodos e Classes Abstratos E como fica o c´odigo das subclasses de Casa? Idˆenticos. Nada muda. Apenas consertamos um coxambre. public class CasaQuad extends Casa { double lateral = 10; CasaQuad() {} CasaQuad(double lateral) { this.lateral = lateral; } public CasaQuad(double lateral, double valorM2) { super(valorM2); this.lateral = lateral; } public double area() { double areat=-1; if (this.lateral>=0) { areat = this.lateral*this.lateral; } return(areat); } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 10 / 39
  • 28. M´etodos e Classes Abstratos Em suma, use classes abstratas quando: Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 11 / 39
  • 29. M´etodos e Classes Abstratos Em suma, use classes abstratas quando: Quiser impedir a existˆencia de objetos dela Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 11 / 39
  • 30. M´etodos e Classes Abstratos Em suma, use classes abstratas quando: Quiser impedir a existˆencia de objetos dela Somente as subclasses poder˜ao ter objetos Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 11 / 39
  • 31. M´etodos e Classes Abstratos Em suma, use classes abstratas quando: Quiser impedir a existˆencia de objetos dela Somente as subclasses poder˜ao ter objetos Necessitar que algum m´etodo seja conhecido na superclasse Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 11 / 39
  • 32. M´etodos e Classes Abstratos Em suma, use classes abstratas quando: Quiser impedir a existˆencia de objetos dela Somente as subclasses poder˜ao ter objetos Necessitar que algum m´etodo seja conhecido na superclasse Mas que n˜ao possa/precise ter c´odigo nela Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 11 / 39
  • 33. M´etodos e Classes Abstratos Em suma, use classes abstratas quando: Quiser impedir a existˆencia de objetos dela Somente as subclasses poder˜ao ter objetos Necessitar que algum m´etodo seja conhecido na superclasse Mas que n˜ao possa/precise ter c´odigo nela Apenas faz sentido o c´odigo nas subclasses Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 11 / 39
  • 34. Interfaces Voltemos agora ao m´etodo da bolha (ordena¸c˜ao), usado em Projeto class Projeto { ... static void bolha(Residencia[] v) { for (int ult = v.length-1; ult>0; ult--) for (int i=0; i<ult; i++) if (v[i].comparaRes(v[i+1]) > 0) { Residencia aux = v[i]; v[i] = v[i+1]; v[i+1] = aux; } } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 12 / 39
  • 35. Interfaces Voltemos agora ao m´etodo da bolha (ordena¸c˜ao), usado em Projeto Depende do m´etodo comparaRes de Residencia class Projeto { ... static void bolha(Residencia[] v) { for (int ult = v.length-1; ult>0; ult--) for (int i=0; i<ult; i++) if (v[i].comparaRes(v[i+1]) > 0) { Residencia aux = v[i]; v[i] = v[i+1]; v[i+1] = aux; } } } class Residencia { ... public int comparaRes(Residencia outra) { if (outra == null) return(1); return((int)(this.area() - outra.area())); } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 12 / 39
  • 36. Interfaces Voltemos agora ao m´etodo da bolha (ordena¸c˜ao), usado em Projeto Depende do m´etodo comparaRes de Residencia Compara as residˆencias pela ´area class Projeto { ... static void bolha(Residencia[] v) { for (int ult = v.length-1; ult>0; ult--) for (int i=0; i<ult; i++) if (v[i].comparaRes(v[i+1]) > 0) { Residencia aux = v[i]; v[i] = v[i+1]; v[i+1] = aux; } } } class Residencia { ... public int comparaRes(Residencia outra) { if (outra == null) return(1); return((int)(this.area() - outra.area())); } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 12 / 39
  • 37. Interfaces E se quisermos tamb´em poder comparar por valor? Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 13 / 39
  • 38. Interfaces E se quisermos tamb´em poder comparar por valor? Teremos que implementar cada um dos comparadores Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 13 / 39
  • 39. Interfaces E se quisermos tamb´em poder comparar por valor? Teremos que implementar cada um dos comparadores class Residencia { ... public int comparaRes(Residencia outra) { if (outra == null) return(1); return((int)(this.area() - outra.area())); } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 13 / 39
  • 40. Interfaces E se quisermos tamb´em poder comparar por valor? Teremos que implementar cada um dos comparadores class Residencia { ... public int comparaRes(Residencia outra) { if (outra == null) return(1); return((int)(this.area() - outra.area())); } public int comparaResP(Residencia outra) { if (outra == null) return(1); return((int)(this.casa.valor( this.casa.area()) - outra.casa.valor( outra.casa.area()))); } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 13 / 39
  • 41. Interfaces Al´em de mudar o m´etodo de ordena¸c˜ao (e alguns especificadores em outras classes) Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 14 / 39
  • 42. Interfaces Al´em de mudar o m´etodo de ordena¸c˜ao (e alguns especificadores em outras classes) class Projeto { ... static void bolha(Residencia[] v) { for (int ult = v.length-1; ult>0; ult--) for (int i=0; i<ult; i++) if (v[i].comparaRes(v[i+1]) > 0) { Residencia aux = v[i]; v[i] = v[i+1]; v[i+1] = aux; } } static void bolhaP(Residencia[] v) { for (int ult = v.length-1; ult>0; ult--) for (int i=0; i<ult; i++) if (v[i].comparaResP(v[i+1]) > 0) { Residencia aux = v[i]; v[i] = v[i+1]; v[i+1] = aux; } } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 14 / 39
  • 43. Interfaces O que h´a de errado com esse c´odigo? class Residencia { ... public int comparaRes(Residencia outra) { if (outra == null) return(1); return((int)(this.area() - outra.area())); } public int comparaResP(Residencia outra) { if (outra == null) return(1); return((int)(this.casa.valor( this.casa.area()) - outra.casa.valor(outra.casa.area()))); } } class Projeto { ... static void bolha(Residencia[] v) { for (int ult = v.length-1; ult>0; ult--) for (int i=0; i<ult; i++) if (v[i].comparaRes(v[i+1]) > 0) { Residencia aux = v[i]; v[i] = v[i+1]; v[i+1] = aux; } } static void bolhaP(Residencia[] v) { for (int ult = v.length-1; ult>0; ult--) for (int i=0; i<ult; i++) if (v[i].comparaResP(v[i+1]) > 0) { Residencia aux = v[i]; v[i] = v[i+1]; v[i+1] = aux; } } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 15 / 39
  • 44. Interfaces O que h´a de errado com esse c´odigo? Muita duplicidade! class Residencia { ... public int comparaRes(Residencia outra) { if (outra == null) return(1); return((int)(this.area() - outra.area())); } public int comparaResP(Residencia outra) { if (outra == null) return(1); return((int)(this.casa.valor( this.casa.area()) - outra.casa.valor(outra.casa.area()))); } } class Projeto { ... static void bolha(Residencia[] v) { for (int ult = v.length-1; ult>0; ult--) for (int i=0; i<ult; i++) if (v[i].comparaRes(v[i+1]) > 0) { Residencia aux = v[i]; v[i] = v[i+1]; v[i+1] = aux; } } static void bolhaP(Residencia[] v) { for (int ult = v.length-1; ult>0; ult--) for (int i=0; i<ult; i++) if (v[i].comparaResP(v[i+1]) > 0) { Residencia aux = v[i]; v[i] = v[i+1]; v[i+1] = aux; } } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 15 / 39
  • 45. Interfaces Como resolver? Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 16 / 39
  • 46. Interfaces Como resolver? Interfaces interface Teste { int x(int y); void y(); } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 16 / 39
  • 47. Interfaces Como resolver? Interfaces interface Teste { int x(int y); void y(); } class Testando { public static void main( String[] args) { Teste t = new Teste(); } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 16 / 39
  • 48. Interfaces Como resolver? Interfaces Sa´ıda $ javac Testando.java Testando.java:4: Teste is abstract; cannot be instantiated Teste t = new Teste(); ^ 1 error interface Teste { int x(int y); void y(); } class Testando { public static void main( String[] args) { Teste t = new Teste(); } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 16 / 39
  • 49. Interfaces Interfaces s˜ao como classes contendo apenas as assinaturas de m´etodos Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 17 / 39
  • 50. Interfaces Interfaces s˜ao como classes contendo apenas as assinaturas de m´etodos N˜ao possuem c´odigo Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 17 / 39
  • 51. Interfaces Interfaces s˜ao como classes contendo apenas as assinaturas de m´etodos N˜ao possuem c´odigo Todos os m´etodos implicitamente p´ublicos Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 17 / 39
  • 52. Interfaces Interfaces s˜ao como classes contendo apenas as assinaturas de m´etodos N˜ao possuem c´odigo Todos os m´etodos implicitamente p´ublicos N˜ao precisamos usar public Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 17 / 39
  • 53. Interfaces Interfaces s˜ao como classes contendo apenas as assinaturas de m´etodos N˜ao possuem c´odigo Todos os m´etodos implicitamente p´ublicos N˜ao precisamos usar public N˜ao podemos criar objetos das interfaces Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 17 / 39
  • 54. Interfaces Interfaces s˜ao como classes contendo apenas as assinaturas de m´etodos N˜ao possuem c´odigo Todos os m´etodos implicitamente p´ublicos N˜ao precisamos usar public N˜ao podemos criar objetos das interfaces S˜ao como classes abstratas em que todos os m´etodos s˜ao abstratos e p´ublicos Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 17 / 39
  • 55. Interfaces Interfaces s˜ao como classes contendo apenas as assinaturas de m´etodos N˜ao possuem c´odigo Todos os m´etodos implicitamente p´ublicos N˜ao precisamos usar public N˜ao podemos criar objetos das interfaces S˜ao como classes abstratas em que todos os m´etodos s˜ao abstratos e p´ublicos Por isso, n˜ao h´a static em m´etodos de interfaces – eles n˜ao tˆem um corpo implementado, ent˜ao n˜ao devem poder ser acessados de forma est´atica Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 17 / 39
  • 56. Interfaces Se n˜ao podemos criar objetos, como us´a-las? interface Teste { int x(int y); void y(); } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 18 / 39
  • 57. Interfaces Se n˜ao podemos criar objetos, como us´a-las? Necessitam de classes que as implementem interface Teste { int x(int y); void y(); } class Testando implements Teste { } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 18 / 39
  • 58. Interfaces Se n˜ao podemos criar objetos, como us´a-las? Necessitam de classes que as implementem Como o extends de subclasses interface Teste { int x(int y); void y(); } class Testando implements Teste { } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 18 / 39
  • 59. Interfaces Se n˜ao podemos criar objetos, como us´a-las? Necessitam de classes que as implementem Como o extends de subclasses Vai compilar? interface Teste { int x(int y); void y(); } class Testando implements Teste { } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 18 / 39
  • 60. Interfaces Se n˜ao podemos criar objetos, como us´a-las? Necessitam de classes que as implementem Como o extends de subclasses Vai compilar? Sa´ıda $ javac Testando.java Testando.java:1: Testando is not abstract and does not override abstract method y() in Teste class Testando implements Teste { ^ 1 error interface Teste { int x(int y); void y(); } class Testando implements Teste { } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 18 / 39
  • 61. Interfaces Assim como classes abstratas exigem que suas subclasses implementem seus m´etodos abstratos, tamb´em interfaces exigem que as classes que as implementam implementem seus m´etodos interface Teste { int x(int y); void y(); } class Testando implements Teste { } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 19 / 39
  • 62. Interfaces Assim como classes abstratas exigem que suas subclasses implementem seus m´etodos abstratos, tamb´em interfaces exigem que as classes que as implementam implementem seus m´etodos interface Teste { int x(int y); void y(); } class Testando implements Teste { int x(int y) { return(y); } void y() { System.out.println(); } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 19 / 39
  • 63. Interfaces As classes s˜ao for¸cadas a prover c´odigo para os m´etodos das interfaces. interface Teste { int x(int y); void y(); } class Testando implements Teste { int x(int y) { return(y); } void y() { System.out.println(); } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 20 / 39
  • 64. Interfaces E agora? Vai compilar? interface Teste { int x(int y); void y(); } class Testando implements Teste { int x(int y) { return(y); } void y() { System.out.println(); } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 21 / 39
  • 65. Interfaces E agora? Vai compilar? Sa´ıda $ javac Testando.java Testando.java:6: y() in Testando cannot implement y() in Teste; attempting to assign weaker access privileges; was public void y() { ^ Testando.java:2: x(int) in Testando cannot implement x(int) in Teste; attempting to assign weaker access privileges; was public int x(int y) { ^ 2 errors interface Teste { int x(int y); void y(); } class Testando implements Teste { int x(int y) { return(y); } void y() { System.out.println(); } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 21 / 39
  • 66. Interfaces E agora? Vai compilar? Sa´ıda $ javac Testando.java Testando.java:6: y() in Testando cannot implement y() in Teste; attempting to assign weaker access privileges; was public void y() { ^ Testando.java:2: x(int) in Testando cannot implement x(int) in Teste; attempting to assign weaker access privileges; was public int x(int y) { ^ 2 errors Lembre-se que m´etodos em uma interface s˜ao implicitamente p´ublicos interface Teste { int x(int y); void y(); } class Testando implements Teste { int x(int y) { return(y); } void y() { System.out.println(); } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 21 / 39
  • 67. Interfaces E agora? Vai compilar? Sa´ıda $ javac Testando.java Testando.java:6: y() in Testando cannot implement y() in Teste; attempting to assign weaker access privileges; was public void y() { ^ Testando.java:2: x(int) in Testando cannot implement x(int) in Teste; attempting to assign weaker access privileges; was public int x(int y) { ^ 2 errors Lembre-se que m´etodos em uma interface s˜ao implicitamente p´ublicos interface Teste { int x(int y); void y(); } class Testando implements Teste { public int x(int y) { return(y); } public void y() { System.out.println(); } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 21 / 39
  • 68. Interfaces Particularmente ´uteis quando queremos for¸car o programador a manter a assinatura de m´etodos, para usar classes por n´os desenvolvidas interface Teste { int x(int y); void y(); } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 22 / 39
  • 69. Interfaces Particularmente ´uteis quando queremos for¸car o programador a manter a assinatura de m´etodos, para usar classes por n´os desenvolvidas Para isso, basta usar a interface como se fosse uma classe interface Teste { int x(int y); void y(); } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 22 / 39
  • 70. Interfaces Particularmente ´uteis quando queremos for¸car o programador a manter a assinatura de m´etodos, para usar classes por n´os desenvolvidas Para isso, basta usar a interface como se fosse uma classe interface Teste { int x(int y); void y(); } public class Minha { public int calculo(Teste t, int y) { return(2*t.x(y)); } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 22 / 39
  • 71. Interfaces Particularmente ´uteis quando queremos for¸car o programador a manter a assinatura de m´etodos, para usar classes por n´os desenvolvidas Para isso, basta usar a interface como se fosse uma classe interface Teste { int x(int y); void y(); } public class Minha { public int calculo(Teste t, int y) { return(2*t.x(y)); } } Como quando us´avamos a superclasse em lugar das subclasses Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 22 / 39
  • 72. Interfaces Como n˜ao h´a como criar um objeto Teste, quem quiser usar a classe Minha ter´a que criar uma classe que implemente Teste e us´a-la no lugar class Testando implements Teste { public int x(int y) { return(y); } public void y() { System.out.println(); } public static void main(String[] args) { Minha m = new Minha(); System.out.println(m.calculo( new Testando(),2)); } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 23 / 39
  • 73. Interfaces Como n˜ao h´a como criar um objeto Teste, quem quiser usar a classe Minha ter´a que criar uma classe que implemente Teste e us´a-la no lugar Ideal para trabalhos em equipe class Testando implements Teste { public int x(int y) { return(y); } public void y() { System.out.println(); } public static void main(String[] args) { Minha m = new Minha(); System.out.println(m.calculo( new Testando(),2)); } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 23 / 39
  • 74. Interfaces Voltemos ao nosso c´odigo class Projeto { ... static void bolha(Residencia[] v) { for (int ult = v.length-1; ult>0; ult--) for (int i=0; i<ult; i++) if (v[i].comparaRes(v[i+1]) > 0) { Residencia aux = v[i]; v[i] = v[i+1]; v[i+1] = aux; } } static void bolhaP(Residencia[] v) { for (int ult = v.length-1; ult>0; ult--) for (int i=0; i<ult; i++) if (v[i].comparaResP(v[i+1]) > 0) { Residencia aux = v[i]; v[i] = v[i+1]; v[i+1] = aux; } } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 24 / 39
  • 75. Interfaces Voltemos ao nosso c´odigo A ´unica coisa que muda ´e o modo de compararmos os objetos Residencia class Projeto { ... static void bolha(Residencia[] v) { for (int ult = v.length-1; ult>0; ult--) for (int i=0; i<ult; i++) if (v[i].comparaRes(v[i+1]) > 0) { Residencia aux = v[i]; v[i] = v[i+1]; v[i+1] = aux; } } static void bolhaP(Residencia[] v) { for (int ult = v.length-1; ult>0; ult--) for (int i=0; i<ult; i++) if (v[i].comparaResP(v[i+1]) > 0) { Residencia aux = v[i]; v[i] = v[i+1]; v[i+1] = aux; } } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 24 / 39
  • 76. Interfaces Seria interessante termos uma esp´ecie de comparador universal, que impedisse essa duplicidade de c´odigo class Projeto { ... static void bolha(Residencia[] v) { for (int ult = v.length-1; ult>0; ult--) for (int i=0; i<ult; i++) if (v[i].comparaRes(v[i+1]) > 0) { Residencia aux = v[i]; v[i] = v[i+1]; v[i+1] = aux; } } static void bolhaP(Residencia[] v) { for (int ult = v.length-1; ult>0; ult--) for (int i=0; i<ult; i++) if (v[i].comparaResP(v[i+1]) > 0) { Residencia aux = v[i]; v[i] = v[i+1]; v[i+1] = aux; } } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 25 / 39
  • 77. Interfaces Assim, se quis´essemos comparar por ´area, usar´ıamos sua vers˜ao ´area class Projeto { ... static void bolha(Residencia[] v) { for (int ult = v.length-1; ult>0; ult--) for (int i=0; i<ult; i++) if (v[i].comparaRes(v[i+1]) > 0) { Residencia aux = v[i]; v[i] = v[i+1]; v[i+1] = aux; } } static void bolhaP(Residencia[] v) { for (int ult = v.length-1; ult>0; ult--) for (int i=0; i<ult; i++) if (v[i].comparaResP(v[i+1]) > 0) { Residencia aux = v[i]; v[i] = v[i+1]; v[i+1] = aux; } } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 26 / 39
  • 78. Interfaces Assim, se quis´essemos comparar por ´area, usar´ıamos sua vers˜ao ´area Se quis´essemos comparar valor, usar´ıamos sua vers˜ao valor class Projeto { ... static void bolha(Residencia[] v) { for (int ult = v.length-1; ult>0; ult--) for (int i=0; i<ult; i++) if (v[i].comparaRes(v[i+1]) > 0) { Residencia aux = v[i]; v[i] = v[i+1]; v[i+1] = aux; } } static void bolhaP(Residencia[] v) { for (int ult = v.length-1; ult>0; ult--) for (int i=0; i<ult; i++) if (v[i].comparaResP(v[i+1]) > 0) { Residencia aux = v[i]; v[i] = v[i+1]; v[i+1] = aux; } } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 26 / 39
  • 79. Interfaces Algo assim... class Projeto { ... static void bolha(Residencia[] v, Comparador c) { for (int ult = v.length-1; ult>0; ult--) for (int i=0; i<ult; i++) if (c.compara(v[i],v[i+1]) > 0) { Residencia aux = v[i]; v[i] = v[i+1]; v[i+1] = aux; } } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 27 / 39
  • 80. Interfaces Algo assim... class Projeto { ... static void bolha(Residencia[] v, Comparador c) { for (int ult = v.length-1; ult>0; ult--) for (int i=0; i<ult; i++) if (c.compara(v[i],v[i+1]) > 0) { Residencia aux = v[i]; v[i] = v[i+1]; v[i+1] = aux; } } } Ent˜ao... interface Comparador { int compara(Residencia a, Residencia b); } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 27 / 39
  • 81. Interfaces Tamb´em temos que implementar os comparadores Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 28 / 39
  • 82. Interfaces Tamb´em temos que implementar os comparadores class ComparaArea implements Comparador { public int compara(Residencia a, Residencia b) { if (a == null) return(-1); if (b == null) return(1); return((int)(a.area() - b.area())); } } class ComparaValor implements Comparador { public int compara(Residencia a, Residencia b) { if (a == null) return(-1); if (b == null) return(1); return((int)(a.casa.valor(a.casa.area()) - b.casa.valor(b.casa.area()))); } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 28 / 39
  • 83. Interfaces Tamb´em temos que implementar os comparadores Dever˜ao substituir os m´etodos comparaRes e comparaResP de Residencia class ComparaArea implements Comparador { public int compara(Residencia a, Residencia b) { if (a == null) return(-1); if (b == null) return(1); return((int)(a.area() - b.area())); } } class ComparaValor implements Comparador { public int compara(Residencia a, Residencia b) { if (a == null) return(-1); if (b == null) return(1); return((int)(a.casa.valor(a.casa.area()) - b.casa.valor(b.casa.area()))); } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 28 / 39
  • 84. Interfaces E como usamos isso? Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 29 / 39
  • 85. Interfaces E como usamos isso? public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); AreaPiscina p = new AreaPiscina(); Residencia r1 = new Residencia(cr, p); Residencia r2 = new Residencia(cq, p); System.out.println("´Area r1: "+r1.area()); System.out.println("´Area r2: "+r2.area()); Comparador c = new ComparaArea(); System.out.println("Compara¸c~ao: "+ c.compara(r1,r2)); System.out.println(); System.out.println("Valor casa r1: "+ r1.casa.valor(r1.casa.area())); System.out.println("Valor casa r2: "+ r2.casa.valor(r2.casa.area())); c = new ComparaValor(); System.out.println("Compara¸c~ao: "+ c.compara(r1,r2)); } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 29 / 39
  • 86. Interfaces E como usamos isso? Sa´ıda $ java Projeto ´Area r1: 150.0 ´Area r2: 100.0 Compara¸c~ao: 50 Valor casa r1: 198000.0 Valor casa r2: 152300.0 Compara¸c~ao: 45700 public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); AreaPiscina p = new AreaPiscina(); Residencia r1 = new Residencia(cr, p); Residencia r2 = new Residencia(cq, p); System.out.println("´Area r1: "+r1.area()); System.out.println("´Area r2: "+r2.area()); Comparador c = new ComparaArea(); System.out.println("Compara¸c~ao: "+ c.compara(r1,r2)); System.out.println(); System.out.println("Valor casa r1: "+ r1.casa.valor(r1.casa.area())); System.out.println("Valor casa r2: "+ r2.casa.valor(r2.casa.area())); c = new ComparaValor(); System.out.println("Compara¸c~ao: "+ c.compara(r1,r2)); } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 29 / 39
  • 87. Interfaces Sabemos 3 m´etodos de ordena¸c˜ao Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 30 / 39
  • 88. Interfaces Sabemos 3 m´etodos de ordena¸c˜ao Bolha, static void bolha(Residencia[] v, Comparador c) { for (int ult = v.length-1; ult>0; ult--) { for (int i=0; i<ult; i++) { if (c.compara(v[i],v[i+1]) > 0) { Residencia aux = v[i]; v[i] = v[i+1]; v[i+1] = aux; } } } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 30 / 39
  • 89. Interfaces Sabemos 3 m´etodos de ordena¸c˜ao Bolha, sele¸c˜ao static int posMenorEl(Residencia[] v, int inicio, int fim, Comparador c) { int posMenor = -1; if ((v!=null) && (inicio>=0) && (fim <= v.length) && (inicio < fim)) { posMenor = inicio; for (int i=inicio+1; i<fim; i++) { if (c.compara(v[i],v[posMenor]) < 0) posMenor = i; } } return(posMenor); } static void selecao(Residencia[] v, Comparador c) { for (int i=0; i<v.length-1; i++) { int posMenor = posMenorEl(v,i,v.length,c); if (c.compara(v[posMenor],v[i]) < 0) { Residencia aux = v[i]; v[i] = v[posMenor]; v[posMenor] = aux; } } } static void bolha(Residencia[] v, Comparador c) { for (int ult = v.length-1; ult>0; ult--) { for (int i=0; i<ult; i++) { if (c.compara(v[i],v[i+1]) > 0) { Residencia aux = v[i]; v[i] = v[i+1]; v[i+1] = aux; } } } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 30 / 39
  • 90. Interfaces Sabemos 3 m´etodos de ordena¸c˜ao Bolha, sele¸c˜ao e inser¸c˜ao static int posMenorEl(Residencia[] v, int inicio, int fim, Comparador c) { int posMenor = -1; if ((v!=null) && (inicio>=0) && (fim <= v.length) && (inicio < fim)) { posMenor = inicio; for (int i=inicio+1; i<fim; i++) { if (c.compara(v[i],v[posMenor]) < 0) posMenor = i; } } return(posMenor); } static void selecao(Residencia[] v, Comparador c) { for (int i=0; i<v.length-1; i++) { int posMenor = posMenorEl(v,i,v.length,c); if (c.compara(v[posMenor],v[i]) < 0) { Residencia aux = v[i]; v[i] = v[posMenor]; v[posMenor] = aux; } } } static void bolha(Residencia[] v, Comparador c) { for (int ult = v.length-1; ult>0; ult--) { for (int i=0; i<ult; i++) { if (c.compara(v[i],v[i+1]) > 0) { Residencia aux = v[i]; v[i] = v[i+1]; v[i+1] = aux; } } } } static void insercao(Residencia[] v,Comparador c){ for (int i=1; i<v.length; i++) { Residencia aux = v[i]; int j = i; while ((j > 0) && (c.compara(aux,v[j-1]) < 0)) { v[j] = v[j-1]; j--; } v[j] = aux; } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 30 / 39
  • 91. Interfaces Sabemos 3 m´etodos de ordena¸c˜ao Bolha, sele¸c˜ao e inser¸c˜ao static int posMenorEl(Residencia[] v, int inicio, int fim, Comparador c) { int posMenor = -1; if ((v!=null) && (inicio>=0) && (fim <= v.length) && (inicio < fim)) { posMenor = inicio; for (int i=inicio+1; i<fim; i++) { if (c.compara(v[i],v[posMenor]) < 0) posMenor = i; } } return(posMenor); } static void selecao(Residencia[] v, Comparador c) { for (int i=0; i<v.length-1; i++) { int posMenor = posMenorEl(v,i,v.length,c); if (c.compara(v[posMenor],v[i]) < 0) { Residencia aux = v[i]; v[i] = v[posMenor]; v[posMenor] = aux; } } } static void bolha(Residencia[] v, Comparador c) { for (int ult = v.length-1; ult>0; ult--) { for (int i=0; i<ult; i++) { if (c.compara(v[i],v[i+1]) > 0) { Residencia aux = v[i]; v[i] = v[i+1]; v[i+1] = aux; } } } } static void insercao(Residencia[] v,Comparador c){ for (int i=1; i<v.length; i++) { Residencia aux = v[i]; int j = i; while ((j > 0) && (c.compara(aux,v[j-1]) < 0)) { v[j] = v[j-1]; j--; } v[j] = aux; } } Note que usamos Comparador Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 30 / 39
  • 92. Interfaces Qual o problema? Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 31 / 39
  • 93. Interfaces Qual o problema? O usu´ario (programador) ter´a que explicitamente optar por um dos ordenadores public static void main(String[] args) { Residencia[] cond = new Residencia[5]; AreaPiscina p = new AreaPiscina(); for (int i=0; i<5; i++) { CasaQuad c = new CasaQuad( Math.random()*100,1500); Residencia r=new Residencia(c,p); cond[i] = r; } for (Residencia r : cond) System.out.println(r.area()); System.out.println(); Comparador c = new ComparaArea(); bolha(cond,c); for (Residencia r : cond) System.out.println(r.area()); } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 31 / 39
  • 94. Interfaces Qual o problema? O usu´ario (programador) ter´a que explicitamente optar por um dos ordenadores Que fazer? public static void main(String[] args) { Residencia[] cond = new Residencia[5]; AreaPiscina p = new AreaPiscina(); for (int i=0; i<5; i++) { CasaQuad c = new CasaQuad( Math.random()*100,1500); Residencia r=new Residencia(c,p); cond[i] = r; } for (Residencia r : cond) System.out.println(r.area()); System.out.println(); Comparador c = new ComparaArea(); bolha(cond,c); for (Residencia r : cond) System.out.println(r.area()); } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 31 / 39
  • 95. Interfaces Qual o problema? O usu´ario (programador) ter´a que explicitamente optar por um dos ordenadores Que fazer? Antes de mais nada, transformamos cada m´etodo em uma classe diferente public static void main(String[] args) { Residencia[] cond = new Residencia[5]; AreaPiscina p = new AreaPiscina(); for (int i=0; i<5; i++) { CasaQuad c = new CasaQuad( Math.random()*100,1500); Residencia r=new Residencia(c,p); cond[i] = r; } for (Residencia r : cond) System.out.println(r.area()); System.out.println(); Comparador c = new ComparaArea(); bolha(cond,c); for (Residencia r : cond) System.out.println(r.area()); } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 31 / 39
  • 96. Interfaces Qual o problema? O usu´ario (programador) ter´a que explicitamente optar por um dos ordenadores Que fazer? Antes de mais nada, transformamos cada m´etodo em uma classe diferente Implementando uma interface comum a todos public static void main(String[] args) { Residencia[] cond = new Residencia[5]; AreaPiscina p = new AreaPiscina(); for (int i=0; i<5; i++) { CasaQuad c = new CasaQuad( Math.random()*100,1500); Residencia r=new Residencia(c,p); cond[i] = r; } for (Residencia r : cond) System.out.println(r.area()); System.out.println(); Comparador c = new ComparaArea(); bolha(cond,c); for (Residencia r : cond) System.out.println(r.area()); } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 31 / 39
  • 97. Interfaces public class Selecao implements Ordenador { public int posMenorEl(Residencia[] v, int inicio, int fim, Comparador c) { int posMenor = -1; if ((v!=null) && (inicio>=0) && (fim <= v.length) && (inicio < fim)) { posMenor = inicio; for (int i=inicio+1; i<fim; i++) if (c.compara(v[i],v[posMenor]) < 0) posMenor = i; } return(posMenor); } public void ordena(Residencia[] v, Comparador c) { for (int i=0; i<v.length-1; i++) { int posMenor = posMenorEl(v,i,v.length,c); if (c.compara(v[posMenor],v[i]) < 0) { Residencia aux = v[i]; v[i] = v[posMenor]; v[posMenor] = aux; } } } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 32 / 39
  • 98. Interfaces Note que os m´etodos n˜ao s˜ao mais static (por conta da interface) public class Selecao implements Ordenador { public int posMenorEl(Residencia[] v, int inicio, int fim, Comparador c) { int posMenor = -1; if ((v!=null) && (inicio>=0) && (fim <= v.length) && (inicio < fim)) { posMenor = inicio; for (int i=inicio+1; i<fim; i++) if (c.compara(v[i],v[posMenor]) < 0) posMenor = i; } return(posMenor); } public void ordena(Residencia[] v, Comparador c) { for (int i=0; i<v.length-1; i++) { int posMenor = posMenorEl(v,i,v.length,c); if (c.compara(v[posMenor],v[i]) < 0) { Residencia aux = v[i]; v[i] = v[posMenor]; v[posMenor] = aux; } } } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 32 / 39
  • 99. Interfaces Fazemos o mesmo com os demais m´etodos de ordena¸c˜ao public class Bolha implements Ordenador { public void ordena(Residencia[] v,Comparador c) { for (int ult = v.length-1; ult>0; ult--) for (int i=0; i<ult; i++) if (c.compara(v[i],v[i+1]) > 0) { Residencia aux = v[i]; v[i] = v[i+1]; v[i+1] = aux; } } } public class Insercao implements Ordenador { public void ordena(Residencia[] v,Comparador c) { for (int i=1; i<v.length; i++) { Residencia aux = v[i]; int j = i; while ((j > 0) && (c.compara(aux,v[j-1]) < 0)) { v[j] = v[j-1]; j--; } v[j] = aux; } } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 33 / 39
  • 100. Interfaces E como fica a interface propriamente dita? Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 34 / 39
  • 101. Interfaces E como fica a interface propriamente dita? public interface Ordenador { void ordena(Residencia[] v, Comparador c); } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 34 / 39
  • 102. Interfaces E como fica a interface propriamente dita? public interface Ordenador { void ordena(Residencia[] v, Comparador c); } E o c´odigo que faz a chamada? Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 34 / 39
  • 103. Interfaces E como fica a interface propriamente dita? public interface Ordenador { void ordena(Residencia[] v, Comparador c); } E o c´odigo que faz a chamada? class X { public static void main(String[] args) { Residencia[] cond = new Residencia[5]; AreaPiscina p = new AreaPiscina(); for (int i=0; i<5; i++) { CasaQuad c = new CasaQuad( Math.random()*100,1500); Residencia r = new Residencia(c,p); cond[i] = r; } for (Residencia r : cond) System.out.println(r.area()); System.out.println(); Comparador c = new ComparaArea(); Ordenador ord = new Selecao(); ord.ordena(cond,c); for (Residencia r : cond) System.out.println(r.area()); } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 34 / 39
  • 104. Interfaces E como fica a interface propriamente dita? public interface Ordenador { void ordena(Residencia[] v, Comparador c); } E o c´odigo que faz a chamada? Ficou mais geral, por permitir que o ordenador seja passado por parˆametro, por exemplo. class X { public static void main(String[] args) { Residencia[] cond = new Residencia[5]; AreaPiscina p = new AreaPiscina(); for (int i=0; i<5; i++) { CasaQuad c = new CasaQuad( Math.random()*100,1500); Residencia r = new Residencia(c,p); cond[i] = r; } for (Residencia r : cond) System.out.println(r.area()); System.out.println(); Comparador c = new ComparaArea(); Ordenador ord = new Selecao(); ord.ordena(cond,c); for (Residencia r : cond) System.out.println(r.area()); } } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 34 / 39
  • 105. Interfaces – Vantagens Se objetos referenciarem interfaces e n˜ao classes: Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 35 / 39
  • 106. Interfaces – Vantagens Se objetos referenciarem interfaces e n˜ao classes: Fica mais f´acil alterar as classes de um sistema sem ter que alterar aquelas que as utilizam (se a assinatura do m´etodo se mantiver igual); Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 35 / 39
  • 107. Interfaces – Vantagens Se objetos referenciarem interfaces e n˜ao classes: Fica mais f´acil alterar as classes de um sistema sem ter que alterar aquelas que as utilizam (se a assinatura do m´etodo se mantiver igual); Fica f´acil implementar polimorfismo de comportamento Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 35 / 39
  • 108. Interfaces – Vantagens Se objetos referenciarem interfaces e n˜ao classes: Fica mais f´acil alterar as classes de um sistema sem ter que alterar aquelas que as utilizam (se a assinatura do m´etodo se mantiver igual); Fica f´acil implementar polimorfismo de comportamento Classes que mudam de comportamento Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 35 / 39
  • 109. Interfaces – Vantagens Se objetos referenciarem interfaces e n˜ao classes: Fica mais f´acil alterar as classes de um sistema sem ter que alterar aquelas que as utilizam (se a assinatura do m´etodo se mantiver igual); Fica f´acil implementar polimorfismo de comportamento Classes que mudam de comportamento O chaveamento de comportamento pode ser feito durante compila¸c˜ao ou durante execu¸c˜ao Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 35 / 39
  • 110. Interfaces – Vantagens Se objetos referenciarem interfaces e n˜ao classes: Facilita-se o desenvolvimento de sistemas grandes, envolvendo muitos programadores Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 36 / 39
  • 111. Interfaces – Vantagens Se objetos referenciarem interfaces e n˜ao classes: Facilita-se o desenvolvimento de sistemas grandes, envolvendo muitos programadores Definem-se as interfaces Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 36 / 39
  • 112. Interfaces – Vantagens Se objetos referenciarem interfaces e n˜ao classes: Facilita-se o desenvolvimento de sistemas grandes, envolvendo muitos programadores Definem-se as interfaces Todos as obedecem Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 36 / 39
  • 113. Interfaces – Vantagens Se objetos referenciarem interfaces e n˜ao classes: Facilita-se o desenvolvimento de sistemas grandes, envolvendo muitos programadores Definem-se as interfaces Todos as obedecem Integra¸c˜ao posterior mais f´acil; Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 36 / 39
  • 114. Interfaces – Vantagens Se objetos referenciarem interfaces e n˜ao classes: Facilita-se o desenvolvimento de sistemas grandes, envolvendo muitos programadores Definem-se as interfaces Todos as obedecem Integra¸c˜ao posterior mais f´acil; Elimina-se o c´odigo repetido. Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 36 / 39
  • 115. Interfaces Em java, classes podem estender uma ´unica classe class C { ... } class D extends C { ... } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 37 / 39
  • 116. Interfaces Em java, classes podem estender uma ´unica classe N˜ao h´a heran¸ca m´ultipla class C { ... } class D extends C { ... } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 37 / 39
  • 117. Interfaces Em java, classes podem estender uma ´unica classe N˜ao h´a heran¸ca m´ultipla Contudo, podem implementar quantas interfaces quiserem: interface A { ... } interface B { ... } class C { ... } class D extends C implements A, B { ... } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 37 / 39
  • 118. Interfaces Em java, classes podem estender uma ´unica classe N˜ao h´a heran¸ca m´ultipla Contudo, podem implementar quantas interfaces quiserem: interface A { ... } interface B { ... } class C { ... } class D extends C implements A, B { ... } Al´em disso, quem implementa a interface pode adicionar m´etodos extras Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 37 / 39
  • 119. Interfaces Em java, classes podem estender uma ´unica classe N˜ao h´a heran¸ca m´ultipla Contudo, podem implementar quantas interfaces quiserem: interface A { ... } interface B { ... } class C { ... } class D extends C implements A, B { ... } Al´em disso, quem implementa a interface pode adicionar m´etodos extras Que n˜ao necessariamente ser˜ao vistos pelo compilador (como na rela¸c˜ao subclasse/superclasse) Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 37 / 39
  • 120. Interfaces Interfaces Java tamb´em podem definir constantes de classe (atributos static final) Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 38 / 39
  • 121. Interfaces Interfaces Java tamb´em podem definir constantes de classe (atributos static final) interface Cores { int branco = 255; int preto = 0; } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 38 / 39
  • 122. Interfaces Interfaces Java tamb´em podem definir constantes de classe (atributos static final) Na interface n˜ao ´e preciso colocar o static final, isso est´a impl´ıcito interface Cores { int branco = 255; int preto = 0; } Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 38 / 39
  • 123. Videoaula N˜ao h´a. Norton Trevisan Roman Aula 22 – M´etodos Abstratos e Interfaces 27 de maio de 2020 39 / 39