Java B asico | Parte II

Propaganda
Apresentac~ao
Java { conceitos Basicos
Java Basico |
I
I
I
Parte II
Polimorsmo em Java
I denic~ao
I exemplos
I Qualicador abstract
Excep
co
~es
I throws, try, catch e nally
Interfaces
I implements
I \heranca multipla" em Java
Rui Camacho
Apresentac~ao
Java { conceitos Basicos
Complementos de Programac~ao e Algoritmos { LEIC
Polimorsmo em Java
Propriedade que permite tratar objectos de subclasses diferentes
como objectos de uma unica superclasse seleccionando
automaticamente os metodos apropiados a cada objecto.
Para obter um comportamento polimorco fazer:
I denir os metodos polimorcos numa superclasse comum
I utilizar a sobreposic~ao de metodos para sobrepor os metodos em
cada classe que os herda
Rui Camacho
Complementos de Programac~ao e Algoritmos { LEIC
Apresentac~ao
Java { conceitos Basicos
Polimorsmo
{ exemplo
{
public class Colorf
protected int intensity; // Intensity of color
public Color() f
System.out.println("In constructor Color():");
intensity = 0;
g
public Color(int intensity) f
System.out.println(\In constructor \+
\Color(int intensity):");
this.intensity = intensity;
g
// Convert to string
public String toString() f
System.out.println("In Color.toString():");
String s = "Color: intensity = " + intensity;
return s;
g
g
Rui Camacho
Apresentac~ao
Java { conceitos Basicos
exemplo do livro \Java for Engineers and Scientists" ,
S. J. Chapman (cap
tulo 9)
Polimorsmo
{ exemplo
(cont.)
Complementos de Programac~ao e Algoritmos { LEIC
{
public class Red extends Colorf
public Red() f
System.out.println("In constructor Red():");
g
public Red(int intensity) f
super(intensity);
System.out.println("In constructor Red(int intensity):");
g
public String toString() f
System.out.println("In Red.toString():");
String s = "Red: intensity = " + intensity;
return s;
g
g
exemplo do livro \Java for Engineers and Scientists" , S. J. Chapman (cap
tulo 9)
Rui Camacho
Complementos de Programac~ao e Algoritmos { LEIC
Apresentac~ao
Java { conceitos Basicos
Polimorsmo
{ exemplo
(cont.)
{
public class Green extends Colorf
public Green() f
System.out.println("In constructor Green():");
g
public Green(int intensity) f
super(intensity);
System.out.println("In constructor Green(int intensity):");
g
public String toString() f
System.out.println("In Green.toString():");
String s = "Green: intensity = " + intensity;
return s;
g
g
exemplo do livro \Java for Engineers and Scientists" , S. J. Chapman (cap
tulo 9)
Rui Camacho
Apresentac~ao
Java { conceitos Basicos
Polimorsmo
{ exemplo
(cont.)
Complementos de Programac~ao e Algoritmos { LEIC
{
public class Blue extends Colorf
public Blue() f
System.out.println("In constructor Blue():");
g
public Blue(int intensity) f
super(intensity);
System.out.println("In constructor Blue(int intensity):");
g
public String toString() f
System.out.println("In Blue.toString():");
String s = "Blue: intensity = " + intensity;
return s;
g
g
exemplo do livro \Java for Engineers and Scientists" , S. J. Chapman (cap
tulo 9)
Rui Camacho
Complementos de Programac~ao e Algoritmos { LEIC
Apresentac~ao
Java { conceitos Basicos
Polimorsmo
{ exemplo
(cont.)
{
public class TestColorf
public static void main(String[] args) f
Color c[] = new Color[3];
c[0] = new Red(120);
c[1] = new Green(255);
c[2] = new Blue();
g
g
System.out.println("nnColor values:");
for ( int i = 0; i < c.length; i++ )
System.out.println("Color = " + c[i]);
exemplo do livro \Java for Engineers and Scientists" , S. J. Chapman (cap
tulo 9)
Rui Camacho
Apresentac~ao
Java { conceitos Basicos
Polimorsmo
{ exemplo
In
In
In
In
In
In
Resultado:
(cont.)
constructor
constructor
constructor
constructor
constructor
constructor
Complementos de Programac~ao e Algoritmos { LEIC
{
Color(int intensity):
Red(int intensity):
Color(int intensity):
Green(int intensity):
Color():
Blue():
Color values:
In Red.toString():
Color = Red: intensity = 120
In Green.toString():
Color = Green: intensity = 255
In Blue.toString():
Color = Blue: intensity = 0
exemplo do livro \Java for Engineers and Scientists" , S. J. Chapman (cap
tulo 9)
Rui Camacho
Complementos de Programac~ao e Algoritmos { LEIC
Apresentac~ao
Java { conceitos Basicos
Modicador abstract
I
I
I
I
Metodo abstract n~ao tem corpo.
Declarac~ao de funcionalidades que as classes derivadas devem fornecer
Classe abstract n~ao tem inst^ancias
uma classe abstract pode implementar alguns dos metodos, especicando outros
como abstract
todas as subclasses de uma classe abstract t^em que reescrever todos os metodos
abstract da superclasse
public abstract class Formaf
public abstract void desenha();
g
public class Circulo extends Formaf
public void desenha()f
..... co digo aqui ...
g
g
Rui Camacho
Apresentac~ao
Java { conceitos Basicos
Complementos de Programac~ao e Algoritmos { LEIC
Excepco~es
Uma excepc~
ao e um evento que interrompe o normal uxo de
execuc~ao de um programa (geralmente um erro)
I quando um metodo n~ao consegue completar o seu processamento
normal atira (throws) uma excepc~ao
I excepc~oes s~ao objectos da classe Exception ou de suas subclasses
I s~ao essencialmente usadas para tratar erros que devem ser tratados
a um nvel diferente do nvel onde o erro ocorreu
Rui Camacho
Complementos de Programac~ao e Algoritmos { LEIC
Apresentac~ao
Java { conceitos Basicos
Excepco~es
{ exemplo {
public class InvalidDateException extends Exceptionf
public InvalidDateException()
g
g
f
super(\Data invalida");
public class Datef
private int year; // Year (0 - xxxx)
private int month; // Month (1 - 12)
private int day; // Day (1 - 31)
public Date(int day, int month, int year)
throws InvalidDateException f
g
setDate( day, month, year );
// Method to check for leap year
public boolean isLeapYear()
f
boolean leap year;
if ( year % 400 == 0 )
leap year = true;
else if ( year % 100 == 0 )
leap year = false;
else if ( year % 4 == 0 )
leap year = true;
else leap year = false;
g
return leap year;
public String toString()
g
Rui Camacho
Apresentac~ao
Java { conceitos Basicos
f
Complementos de Programac~ao e Algoritmos { LEIC
return (month + "/" + day + "/" + year);
Excepco~es
{ exemplo (cont) {
public void setDate(int day, int month, int year)
throws InvalidDateException f
int maxDays = 0; // Max days in a month
<
if ( year
0 ) throw new InvalidDateException();
else this.year = year;
if ( month
<
1
jj
month
>
12 )
throw new InvalidDateException();
else this.month = month;
switch ( month )
f
case 1: case 3: case 5: case 7:
case 8: case 10: case 12:
maxDays = 31;
break;
case 4: case 6: case 9: case 11:
maxDays = 30;
break;
case 2:
if ( isLeapYear()) maxDays = 29;
g
else maxDays = 28;
if ( day
<
1
jj
day
>
maxDays )
throw new InvalidDateException();
g
g
else this.day = day;
Rui Camacho
Complementos de Programac~ao e Algoritmos { LEIC
Apresentac~ao
Java { conceitos Basicos
Processamento de Excepc~oes
exemplo do livro \Java for Engineers and Scientists" , S. J. Chapman (cap
tulo 8)
Rui Camacho
Apresentac~ao
Java { conceitos Basicos
Complementos de Programac~ao e Algoritmos { LEIC
Processamento de Excepc~oes
I Todas as classes Java t^em que tratar (catch) qualquer
excepc~ao vericavel em tempo-de-compilac~ao que ocorra
dentro do seu domnio ou ent~ao explicitamente atira-la
(throw)
I as excepco~es s~ao atiradas incluindo a palavra throws na
denic~ao do metodo
public void setData(int dia, int mes, int ano) throws ExcepcaoDataInvalidaf
I criadas com new (s~ao objectos) e atiradas com throw
throw new InvalidDateException()
Rui Camacho
Complementos de Programac~ao e Algoritmos { LEIC
Apresentac~ao
Java { conceitos Basicos
Processamento de Excepc~oes
I
I
qualquer excepc~ao atirada por um metodo deve ser apanhada e tratada
ou re-atirada por todos os metodos acima na arvore de chamadas
se todos os metodos re-atirarem a excepc~ao ent~ao o programa mostra
uma mensagem de erro e aborta
tryf
g
... // codigo onde pode ocorrer um erro
catch(Excep1 e)f
... // executado caso ocorra excepcao da class Excep1 ou subclasse
g
catch(Excep2 e)f
... // executado caso ocorra excepcao da class Excep2 ou subclasse
g
....
nallyf
... // sempre executado ocorra ou nao excepcao
g
Rui Camacho
Apresentac~ao
Java { conceitos Basicos
Complementos de Programac~ao e Algoritmos { LEIC
Heranca multipla
Problema: como denir objectos que se enquadram em mais do que uma
hierarquia
public interface Noisyf
String noise();
g
public interface Movesf
String move();
g
Interface:
I
I
I
abstracta: n~ao pode ser implementada independentemente de uma classe
metodos s~ao public abstract
atributos s~ao public static nal
Rui Camacho
Complementos de Programac~ao e Algoritmos { LEIC
Apresentac~ao
Java { conceitos Basicos
Interfaces
public class Cat extends Animal
implements Noisy, Movesf
String name;
public Cat()f;
name = new String(\cat");
g
public String noise()f;
return \MEOW";
g
public String move()f;
return \feet";
g
g
public class Car extends Machine
implements Noisy, Movesf
String name;
public Cat()f;
name = new String(\car");
g
public String noise()f;
return \VROOM";
g
public String move()f;
return \wheels";
g
g
public class Earf
String heard;
void hear(Noisy n)f
heard = n.noise();
g
g
Rui Camacho
Apresentac~ao
Java { conceitos Basicos
Complementos de Programac~ao e Algoritmos { LEIC
Interfaces { exemplo
public interface Relationf
// Devolve true se a > b, em que a e' o ojecto corrente
public boolean isGreater( Object b );
Devolve true se a < b, em que a e' o ojecto corrente
public boolean isLess( Object b );
g
// Devolve true se a == b, em que a e' o objecto corrente
public boolean isEqual( Object b );
exemplo traduzido do livro \Java for Engineers and Scientists" , S. J. Chapman (cap
tulo 9)
Rui Camacho
Complementos de Programac~ao e Algoritmos { LEIC
Apresentac~ao
Java { conceitos Basicos
Interfaces { exemplo
public class SortObj f
public static Object[] sort(Object[] obj) f // Denicao do metodo de ordenacao
int i, j; // Indices para os ciclos for
int menor; // Guarda o valor mais pequeno
Object temp; // para trocar el. vector
for ( i = 0; i < obj.length-1; i++ ) f
menor = i;
for ( j = i+1; j < obj.length; j++ )
if (((Relation) obj[j]).isLess((Relation) obj[menor]))
menor = j;
if (i != menor) f
temp = obj[i];
obj[i] = obj[menor];
obj[menor] = temp;
g
g
g
g
return obj; // Devolve os objectos ordenados
Rui Camacho
Apresentac~ao
Java { conceitos Basicos
Complementos de Programac~ao e Algoritmos { LEIC
exemplo traduzido do livro \Java for Engineers and Scientists" , S. J. Chapman (cap
tulo 9)
Interfaces { exemplo
public class Line implements Relation f
private double x1; // First x value
private double x2; // Second x value
private double y1; // First y value
private double y2; // Second y value
public Line(double x1, double y1, double x2, double y2)
f
this.x1 = x1; this.x2 = x2;
g
this.y1 = y1; this.y2 = y2;
public double length( )
g
f
return Math.sqrt( (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1) );
// Returns true if current object
>
>
b
public boolean isGreater( Object b )
g
return length()
// Returns true if current object
<
public boolean isLess( Object b )
g
return length()
<
f
f
return length() == ((Line)b).length();
public String toString( )
g
b
((Line)b).length();
public boolean isEqual( Object b )
g
f
((Line)b).length();
f
g
return "Line from (" + x1 + "," + y1 + ") to (" + x2 + "," + y2 + "): Length = " + length();
traduzido de \Java for Engineers and Scientists" , S. J. Chapman (cap
tulo 9)
Rui Camacho
Complementos de Programac~ao e Algoritmos { LEIC
Apresentac~ao
Java { conceitos Basicos
Interfaces { exemplo
public class TestLine f
public static void main(String[] args) f
Object objecto[] = new Line[5];
objecto[0]
objecto[1]
objecto[2]
objecto[3]
objecto[4]
=
=
=
=
=
new
new
new
new
new
Line(0,0,2,1);
Line(0,0,1,-1);
Line(-1,1,1,1);
Line(2,0,0,0);
Line(0,2,-2,0);
// Sort the objects in ascending order
SortObj.sort( objecto );
for(int i = 0; i < objecto.length; i++ ) f
System.out.println(objecto[i].toString());
g
g
g
exemplo traduzido do livro \Java for Engineers and Scientists" , S. J. Chapman (cap
tulo 9)
Rui Camacho
Complementos de Programac~ao e Algoritmos { LEIC
Download