Programação
LEB/LEF/MIEBIOM/MIEF
Orientada a Objetos
Sistemas Informáticos
Parte II
http://download.oracle.com/javase/tutorial/java/concepts
http://download.oracle.com/javase/tutorial/java/javaOO
http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html
1
Herança (1)
Sistemas Informáticos LEB/LEF/MIEBIOM/MIEF
2
Herança (1)
Sistemas Informáticos LEB/LEF/MIEBIOM/MIEF
3
Herança (2)
LEB/LEF/MIEBIOM/MIEF
• Uma classe pode ‘estender’ outra herdando atributos e
métodos da classe base (esta é também denominada de super
classe)
• Alguns atributos e métodos da classe base poderão não ser
herdados, dependendo da sua visibilidade.
Sistemas Informáticos
• Se uma classe contiver alguns atributos, então em geral uma
dada sub-classe irá herdar esses atributos e pode adicionar
mais alguns como parte da sua especialização
• Java suporta apenas herança simples. Uma dada classe pode
‘estender’ no máximo uma outra classe (não pode ‘estender’ 4
duas classes ao mesmo tempo).
public class Point
Herança – Exemplo {
public int x;
public int y;
LEB/LEF/MIEBIOM/MIEF
}
public class Point3d extends Point
{ // creates a sub-class of Point
public int z;
Point3d(int x, int y, int z)
{
Sistemas Informá7cos
this.x = x; // x and y do not need to be
this.y = y; // declared, since they are
this.z = z; // inherited from Point
}
Point3d()
{
this.x = -1;
this.y = -1;
this.z = -1;
} 5
}
public class Point {
Operador super
public int x;
public int y;
Point(int x, int y) {
LEB/LEF/MIEBIOM/MIEF
public class Point3Da extends Point this.x = x;
{ this.y = y;
public int z; }
}
Point3Da(int x, int y, int z)
{
super(x, y); // this calls the Point(x, y) constructor
Sistemas Informáticos
this.z = z;
}
public static void main(String args[])
{
Point3Da p = new Point3Da(10, 20, 30);
System.out.println(”x:" + p.x + “ y:" + p.y + “ z:" + p.z);
System.out.println("p = " + p);
}
6
}
Visibilidade e herança – private
public class Point
LEB/LEF/MIEBIOM/MIEF
{
private int x;
private int y;
}
public class Point3D extends Point
{
Sistemas Informáticos
// ...
public static void main(String[] args)
{
Point3D p = new Point3D();
System.out.println(p.x); Erro!
}
}
7
• Com a visibilidade típica private, em Point3D não temos
acesso direto aos atributos x e y. Soluções?
Visibilidade e herança – public
public class Point
LEB/LEF/MIEBIOM/MIEF
{
public int x;
public int y;
}
public class Point3D extends Point
{
Sistemas Informáticos
// ...
public static void main(String[] args)
{
Point3D p = new Point3D();
System.out.println(p.x);
}
}
• Problema? 8
• Os atributos agora são visíveis mesmo para classes não relacionadas
(e.g., classes que não herdam de Point)
Visibilidade e herança – protected
public class Point
LEB/LEF/MIEBIOM/MIEF
{
public int x;
protected int y;
} public class Point3D extends Point
{
// ...
Sistemas Informáticos
public static void main(String[] args)
{
Point3D p = new Point3D();
System.out.println(p.x);
System.out.println(p.y);
}
}
• protected 9
• Classes que herdam de Point terão acesso direto ao atributo y (e também ao x)
• Classes que não herdam de Point terão acesso apenas ao atributo x
Overloading
LEB/LEF/MIEBIOM/MIEF
• Um método pode ter várias implementações que são escolhidas
com base no(s) Bpo(s) de objeto que é passado como argumento na
invocação à Tal como já fizemos quando definimos múl7plos
construtores
• Também conhecido como method overloading
Sistemas Informáticos
10
Overloading: Exemplo
LEB/LEF/MIEBIOM/MIEF
public class Overloading
{
public static void main(String[] args)
{
duplicate(5);
duplicate("Hello!");
Sistemas Informáticos
}
private static void duplicate(int i)
{
System.out.println(5 * 2);
}
private static void duplicate(String string)
{
System.out.println(string + string);
} 11
}
Interfaces: Definição
• Um objeto define a sua interação com o meio exterior através
de métodos
LEB/LEF/MIEBIOM/MIEF
• Os métodos são assim a interface do objeto com o exterior
• Em alguns casos podemos querer definir apenas a interface
Sistemas Informáticos
de um objeto (e permitir diferentes implementações)
• Numa interface java apenas se declara a assinatura do
método. O corpo do método (i.e., a implementação) é vazio!
• Uma interface também pode estender uma outra (ou mais)
interface 12
Interfaces: Definição em Java
LEB/LEF/MIEBIOM/MIEF
public interface IList
{
public void addElement(int value);
public void remElement(int value);
Sistemas Informáticos
//outras operações...
}
13
Interfaces: Implementações
LEB/LEF/MIEBIOM/MIEF
public class SimpleList implements IList
{
public void addElement(int value)
{
// Código para adicionar um elemento ao fim da lista
}
Sistemas Informáticos
...
}
public class OrderedList implements IList
{
public void addElement(int value)
{
// Código que adiciona um elemento
// de uma forma ordenada na lista
}
... 14
}
Interfaces: Utilização
LEB/LEF/MIEBIOM/MIEF
public class TestLists
{
public static void main(String[] args)
{
IList lista = new SimpleList(); // or = new OrderedList();
lista.addElement(5);
Sistemas Informáticos
}
}
15
Exceções (1)
Decodes a String into an Integer. Accepts
LEB/LEF/MIEBIOM/MIEF
decimal, hexadecimal, and octal numbers
int val1 = Integer.decode("0xZ");
Sistemas Informáticos
Exception in thread "main" java.lang.NumberFormatException: For input string: "Z"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:449)
at java.lang.Integer.valueOf(Integer.java:528)
at java.lang.Integer.decode(Integer.java:958)
at ficha4.DoubleExample.main(DoubleExample.java:16)
16
Exceções (2)
LEB/LEF/MIEBIOM/MIEF
• Uma exceção é um evento que ocorre durante a execução de
um programa. Quebra o fluxo normal de execução das
instruções àse não for tratado
String str = "5";
Sistemas Informá7cos
Integer num = Integer.parseInt(str);
Execução do
int val1 = Integer.decode("0xZ");
programa é
String strBin = Integer.toBinaryString(5); interrompida!
System.out.println(strBin); // 101
int val = Integer.decode("0xF");
System.out.println(val); // 15
• Como saber que exceções são lançadas por um método 17
concreto? Por ex., consultando a documentação do
método…
Sistemas Informáticos LEB/LEF/MIEBIOM/MIEF
18
NumberFormatExcepJon ?
Sistemas Informáticos LEB/LEF/MIEBIOM/MIEF
19
Tratamento de Exceções
(simplificado)
LEB/LEF/MIEBIOM/MIEF
try
{
// block of code that might throw two different
// exceptions
}
catch (ExceptionType1 ex1)
Sistemas Informáticos
{
// exception handler for ExceptionType1
}
catch (ExceptionType2 ex2)
{
// exception handler for ExceptionType2
}
20
Tratamento de Exceções
LEB/LEF/MIEBIOM/MIEF
1. public static void main(String[] args)
2. {
3. try
4. {
5. String str = "10y0";
6. Integer num = Integer.parseInt(str);
Sistemas Informáticos
7. System.out.println("Não sou executado!");
8. }
9. catch (NumberFormatException ex1)
10. {
11. System.out.println("Número em Formato invalido!");
12. }
13. System.out.println("Assim o program continua...");
14.} 21
Tipos de exceções
• Unchecked (não declaradas)
• Não requerem obrigatoriamente um bloco try/catch
LEB/LEF/MIEBIOM/MIEF
• Indiciam tipicamente erros (bugs) na aplicação:
IndexOutOfBoundsException
• Faz mais sentido eliminar a causa do problema (e.g., o bug) do que
Sistemas Informáticos
permitir que o problema aconteça para depois ser tratado
• Checked (declaradas)
• Requerem obrigatoriamente um bloco try/catch
• Representam condições excecionais que uma aplicação deve
antecipar e recuperar (exemplo: abrir um ficheiro de nome
especificado pelo utilizador à FileNotFoundException)
22
• Quando se define o método também podemos indicar que exceções
ele pode lançar com a palavra throws
Javadocs
Sistemas Informáticos LEB/LEF/MIEBIOM/MIEF
23
Javadocs: Utilidade
Sistemas Informáticos LEB/LEF/MIEBIOM/MIEF
24
Para saber mais…
LEB/LEF/MIEBIOM/MIEF
• Kathy Sierra and Bert Bates, “Head first Java, 2nd Edition”,
O’Reilly, ISBN: ISBN-10: 0596009208, ISBN-13: 978-
0596009205, 2005.
Sistemas Informáticos
25