Professional Documents
Culture Documents
RoboABateria;
class DemoRobos {
2
Interfaces
3
Introduo
A POO tem dois mecanismos de criao de
classes com descries de campos e mtodos
que devem ser implementados:
Classes abstratas;
Interfaces.
4
Introduo
A POO tem dois mecanismos de criao de
classes com descries de campos e mtodos
que devem ser implementados:
Classes abstratas;
Interfaces.
5
Interfaces
Classes abstratas podem ter mtodos no
abstratos
Esses mtodos so herdados e podem ser
utilizados por subclasses;
Se a classe no tiver nenhum mtodo no-
abstrato, podemos cri-la como uma interface;
Uma interface segue um modelo de declarao
diferente das classes;
Possui funcionalidade similar de classes
abstratas.
6
Interfaces
Assim como uma classe abstrata, uma interface
no pode ser instanciada;
Todos os mtodos de uma interface so
implicitamente abstract e public;
No podem ser declarados com seus corpos, i.e.
possuem apenas a descrio;
Se a interface tiver campos, estes so
implicitamente considerados como static e
final
Devem ser, portanto, inicializados na sua declarao.
7
Classes Abstratas vs Interfaces
Uma classe s pode herdar de uma nica
classe (abstrata ou no);
Uma classe pode implementar vrias interfaces
simultaneamente
Interfaces so um mecanismo simplificado de
herana mltipla em Java
Mais de uma interface determina os mtodos que
uma classe herdeira deve implementar.
8
Classes Abstratas vs Interfaces
Interfaces tambm podem ser teis para
implementar biblioteca de constantes
Uma vez que todos os campos de uma interface
devem ser declarados como static e final;
Pode-se escrever interfaces que somente tenham
campos
Qualquer classe que implementar essa interdace ter
acesso a estes campos.
9
Exemplo: ObjetoGeometrico
No exemplo a seguir iremos criar uma interface
para representar objetos gemtricos;
Nesse cenrio simplificado, todo objeto
geomtrico tem um centro e um permetro;
Criaremos uma interface chamada
ObjetoGeometrico que descrever quais
mtodos um objeto geomtrico deve ter;
10
Exemplo: ObjetoGeometrico
Antes disso, considere uma classe chamada
Ponto2D como se segue:
/**
* A classe Ponto2D encapsula um ponto no espao cartesiano de duas dimenses.
*/
class Ponto2D // declarao da classe
{
/**
* Declarao dos campos da classe
*/
private double x,y; // as coordenadas do ponto no espao bidimensional
/**
* O mtodo inicializaPonto2D recebe dois argumentos para inicializar os respectivos
* campos da classe Ponto2D. No existem restries aos valores que os dados podem
* receber, ento a inicializao se limita a copiar os argumentos para os campos.
* @param _x o argumento correspondente coordenada horizontal
* @param _y o argumento correspondente coordenada vertical
*/
public void inicializaPonto2D(double _x,double _y)
{
x = _x;
y = _y;
} // fim do mtodo inicializaPonto2D
11
Exemplo: ObjetoGeometrico
/**
* O mtodo Igual recebe uma instncia da prpria classe Ponto2D como argumento e
* verifica se as coordenadas encapsuladas na classe e na instncia que foi passada
* so exatamente iguais, e retorna o valor booleano true se forem.
* @param outroPonto2D outra instncia da prpria classe Ponto2D
/**
* O mtodo origem retorna uma nova instncia da classe Ponto2D, que contm as
* coordenadas (0,0) (origem das coordenadas). Esta instncia criada por este
* mtodo, e pode ser usada diretamente por aplicaes ou classes que executem
* este mtodo sem necessidade de usar a palavra-chave new.
* @return uma nova instncia da classe Ponto2D representando a coordenada (0,0)
*/
public Ponto2D origem()
{
Ponto2D temporrio = new Ponto2D(); // a inicializao da instncia feita aqui
temporrio.inicializaPonto2D(0,0);
return temporrio; // retornamos a referncia inicializada
} // fim do mtodo origem
12
Exemplo: ObjetoGeometrico
/**
* O mtodo clona retorna uma nova instncia da classe Ponto2D, que contm as
* mesmas coordenadas encapsuladas na classe, ou seja, quando este mtodo for
* executado a partir de uma instncia desta classe, ele retornar uma nova
* instncia com os mesmos valores encapsulados.
Antes disso, considere uma classe chamada
* @return uma nova instncia da classe Ponto2D contendo os valores encapsulados
*/
public Ponto2D clona()
/**
* O mtodo toString um mtodo "mgico" que no recebe argumentos, e retorna uma
* string contendo os valores dos campos da classe formatados.
* @return uma string com os valores dos campos formatados como (x,y)
*/
public String toString()
{
String resultado = "("+x+","+y+")";
return resultado;
} // fim do mtodo toString
13
Exemplo: ObjetoGeometrico
class Ponto2D {
14
Exemplo: ObjetoGeometrico
/**
* O mtodo calculaArea calcula a rea do objeto geomtrico e retorna a rea
* como um valor do tipo double.
*/
double calculaArea();
/**
* O mtodo calculaPerimetro calcula o permetro do objeto geomtrico e retorna o
* permetro como um valor do tipo double.
*/
double calculaPermetro();
15
Exemplo: ObjetoGeometrico
/**
A declarao dos mtodos em uma
interface eretorna
* O mtodo calculaArea calcula a rea do objeto geomtrico feita como
a reaa declarao
* como um valor do tipo double.
*/
de mtodos em uma classe
double calculaArea(); abstrata, mas sem o modificador
/**
abstract;
* O mtodo calculaPerimetro calcula o permetro doNenhum mtodo em
objeto geomtrico uma ointerface
e retorna
* permetro como um valor do tipo double.
*/
pode ter corpo;
double calculaPermetro();
16
Exemplo: ObjetoGeometrico
17
Exemplo: ObjetoGeometrico
/**
* O mtodo calculaPerimetro calcula o permetro do objeto geomtrico e retorna o
* permetro como um valor do tipo double.
*/
double calculaPermetro();
18
Exemplo: ObjetoGeometrico
/**
* O mtodo calculaPerimetro calcula o permetro do objeto geomtrico e retorna o
* permetro como um valor do tipo double.
*/
double calculaPermetro();
19
Exemplo: ObjetoGeometrico
/**
* O construtor para a classe Circulo, que recebe argumentos para inicializar todos
* os campos da classe. Este o construtor "completo".
*/
Circulo(Ponto2D centro,double raio)
{
this.centro = centro; // Note o uso da palavra-chave this para marcar os campos
this.raio = raio; // da classe que tm o mesmo nome dos argumentos
}
20
Exemplo: ObjetoGeometrico
/**
* O mtodo centro retorna o ponto em duas dimenses que corresponde ao centro do
* crculo. Neste caso, basta retornar a instncia da classe Ponto2D que representa
* o prprio centro.
*/
public Ponto2D centro(){
ObjetoGeometrico:
/**
* O mtodo calcularea calcula a rea do crculo e retorna a rea como um valor do
* tipo double.
*/
public double calcularea(){
return Math.PI*raio*raio; // pi vezes o quadrado do raio
}
/**
* O mtodo calculaPermetro calcula o permetro do crculo e retorna o permetro
* como um valor do tipo double.
*/
public double calculaPermetro(){
return 2.0*Math.PI*raio; // dois vezes pi vezes o raio
}
/**
* O mtodo toString retorna os valores dos campos do crculo formatados em uma
* string.
*/
public String toString(){
// Retorna diretamente uma string criada com os valores dos campos. O mtodo
// toString da classe Ponto2D chamado implicitamente.
return "Crculo com centro em "+centro+" e raio "+raio;
}
} // fim da classe Circulo
21
Exemplo: ObjetoGeometrico
22
Exemplo: ObjetoGeometrico
Uma classe implementa uma interface
usando-se a palavra-chave
implements.
A classe Circulo implementa a interface Quando isso feito, se torna obrigatrio
que a classe Circulo implemente
ObjetoGeometrico:
class Circulo implements ObjetoGeometrico { TODOS os mtodos declarados em
private Ponto2D centro;
private double raio; ObjetoGeometrico.
Se a classe que implementa uma
Circulo(Ponto2D centro,double raio){
this.centro = centro; interface no implementa algum
this.raio = raio; mtodo da interface, essa classe pode
}
ser declarada como abstrata.
public Ponto2D centro(){
return centro;
}
23
Exerccio (1)
Implemente uma classe Retangulo que
implementa ObjetoGeometrico;
Crie uma classe que seja capaz de instanciar
objetos de Circulo e de Retangulo
Faa essa classe imprimir os dados dos objetos
geomtricos instanciados.
24