0% acharam este documento útil (0 voto)
23 visualizações25 páginas

2024 Si tp6 Oop II

Enviado por

brunonaruto03
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
23 visualizações25 páginas

2024 Si tp6 Oop II

Enviado por

brunonaruto03
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 25

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

Você também pode gostar