Vous êtes sur la page 1sur 21

Java First-Tier: Aplicaes

Grupo de Linguagens de Programao - DI/PUC-Rio

Programao Java Orientao a Objetos em Java (III)


Grupo de Linguagens de Programao Departamento de Informtica PUC-Rio

Herana: Simples ? Mltipla


?O

tipo de herana que usamos at agora chamado de herana simples pois cada classe herda de apenas uma outra. ? Existe tambm a chamada herana mltipla onde uma classe pode herdar de vrias classes.

Java First-Tier: Aplicaes

Grupo de Linguagens de Programao - DI/PUC-Rio

Herana Mltipla
? Herana

mltipla no suportada por todas as linguagens OO. ? Esse tipo de herana apresenta um problema quando construmos hierarquias de classes onde uma classe herda duas ou mais vezes de uma mesma superclasse. O que, na prtica, torna-se um caso comum.
3

Problemas de Herana Mltipla


?O

problema de herdar duas vezes de uma mesma classe vem do fato de existir uma herana de cdigo.
A

D
4

Java First-Tier: Aplicaes

Grupo de Linguagens de Programao - DI/PUC-Rio

Compatibilidade de Tipos
Inmeras vezes, quando projetamos uma hierarquia de classes usando herana mltipla, estamos, na verdade, querendo declarar que a classe compatvel com as classes herdadas. Em muitos casos, a herana de cdigo no utilizada.

Revendo Classes Abstratas


?O

uso de classe abstrata para expressar compatibilidade impe a restrio sobre herana de classes.

abstract class ItemCompra { public abstract float obtemPreo(); } class Processador extends ItemCompra { public float obtemPreo(); }

Como definir uma classes Processador que um Equipamento e um Item de Compra ao mesmo tempo?
6

Java First-Tier: Aplicaes

Grupo de Linguagens de Programao - DI/PUC-Rio

Interfaces
? Algumas

linguagens OO incorporam o conceito de duas classes serem compatveis atravs do uso de compatibilidade estrutural ou da implementao explcita do conceito de interface .

Em Java
? Java

no permite herana mltipla com herana de cdigo. ? Java implementa o conceito de interface. ? possvel herdar mltiplas interfaces. ? Em Java, uma classe estende uma outra classe e implementa zero ou mais interfaces. ? Para implementar uma interface em uma classe, usamos a palavra implements.
8

Java First-Tier: Aplicaes

Grupo de Linguagens de Programao - DI/PUC-Rio

Exemplo de Interface
? Ao

implementarmos o TAD Pilha, poderamos ter criado uma interface que definisse o TAD e uma ou mais classes que a implementassem.

interface Stack { boolean isEmpty(); void push(int n); int pop(); int top(); }
9

Membros de Interfaces
? Uma

vez que uma interface no possui implementao, devemos notar que:


seus atributos devem ser pblicos, estticos e constantes; seus mtodos devem ser pblicos e abstratos.

? Como

esses qualificadores so fixos, no precisamos declar-los (note o exemplo anterior).


10

Java First-Tier: Aplicaes

Grupo de Linguagens de Programao - DI/PUC-Rio

Membros de Interfaces (cont.)


? Usando

os modificadores explicitamente, poderamos ter declarado nossa interface da seguinte forma:


boolean isEmpty(); void push(int n); int pop(); int top();

interface Stack { public abstract public abstract public abstract public abstract }

11

Pilha revisitada
class StackImpl implements Stack { private int[] data; private int top_index; StackImpl(int size) { data = new int[size]; top_index = -1; } public public public public }
12

boolean isEmpty() { return (top_index < 0); } void push(int n) { data[++top_index] = n; } int pop() { return data[top_index--]; } int top() { return data[top_index]; }

Java First-Tier: Aplicaes

Grupo de Linguagens de Programao - DI/PUC-Rio

Resumindo Interfaces
? No

so classes ? Oferece compatibilidade de tipos de objetos


Comparable x; // Comparable uma interface x = new Pessoa(); // Pessoa implementa Comparable

? Permite

o uso de instanceof pode estender outra


13

if (x instanceof Comparable) {}

? Uma interface

public interface Compativel extends Comparable { }

Pacotes

14

Java First-Tier: Aplicaes

Grupo de Linguagens de Programao - DI/PUC-Rio

Modularidade em Java: Pacotes


? Alm

das classes, Java prov um recurso adicional que ajuda a modularidade: o uso de pacotes. ? Um pacote um conjunto de classes e outros pacotes. ? Pacotes permitem a criao de espaos de nomes, alm de mecanismos de controle de acesso.
15

Pacotes: Espaos de Nomes


? Pacotes,

a princpio, possuem nomes. ? O nome do pacote qualifica os nomes de todas as classes e outros pacotes que o compem. ? Exemplo: classe Math.
int a = java.lang.Math.abs(-10); // a = 10;

16

Java First-Tier: Aplicaes

Grupo de Linguagens de Programao - DI/PUC-Rio

Implementao de Pacotes
? Pacotes

so tipicamente implementados como diretrios. ? Os arquivos das classes pertencentes ao pacote devem ficar em seu diretrio. ? Hierarquias de pacotes so construdas atravs de hierarquias de diretrios.

17

Empacotando uma Classe


? Para

declararmos uma classe como pertencente a um pacote, devemos:


declar-la em um arquivo dentro do diretrio que representa o pacote; declarar, na primeira linha do arquivo, que a classe pertence ao pacote.

18

Java First-Tier: Aplicaes

Grupo de Linguagens de Programao - DI/PUC-Rio

Importao de Pacotes
? Podemos

usar o nome simples (no qualificado) de uma classe que pertena a um pacote se importarmos a classe. ? A importao de uma classe (ou classes de um pacote) pode ser feita no incio do arquivo, aps a declarao do pacote (se houver). ? As classes do pacote padro java.lang no precisam ser importadas (Ex.: Math).
19

Exemplo de Arquivo
package datatypes; // Stack pertence a datatypes. import java.math.*; // Importa todas as classes. import java.util.HashTable; // Importa HashTable. /* A partir desse ponto, posso usar o nome HashTable diretamente, ao invs de usar java.util.HashTable. Assim como posso usar diretamente o nome de qualquer classe que pertena ao pacote java.math. */ public class Stack { // Stack exportada. ... }
20

10

Java First-Tier: Aplicaes

Grupo de Linguagens de Programao - DI/PUC-Rio

Controle de Acesso

21

Encapsulamento
? Na

classe Stack, ns encapsulamos a definio de pilha que desejvamos, porm, por falta de controle de acesso , possvel forar situaes nas quais a pilha no se comporta como desejado.

Stack s = new Stack(10); s.push(6); s.top_index = -1; System.out.println(s.isEmpty()); // true!


22

11

Java First-Tier: Aplicaes

Grupo de Linguagens de Programao - DI/PUC-Rio

Controle de Acesso
? As

linguagens OO disponibilizam formas de controlar o acesso aos membros de uma classe. No mnimo, devemos poder fazer diferena entre o que pblico e o que privado. ? Membros pblicos podem ser acessados indiscriminadamente, enquanto os privados s podem ser acessados pela prpria classe.
23

Redefinio de Stack
class Stack { private int[] data; private int top_index; Stack(int size) { data = new int[size]; top_index = -1; } boolean isEmpty() { return (top_index < 0); } void push(int n) { data[++top_index] = n; } int pop() { return data[top_index--]; } int top() { return data[top_index]; } }
24

12

Java First-Tier: Aplicaes

Grupo de Linguagens de Programao - DI/PUC-Rio

Exemplo de Controle de Acesso


? Com

a nova implementao da pilha, o exemplo anterior no pode mais ser feito pois teremos um erro de compilao.

Stack s = new Stack(10); s.push(6); s.top_index = -1; // ERRO! A compilao pra aqui! System.out.println(s.isEmpty());

25

Pacotes: Controle de Acesso


? Alm

de membros pblicos e privados, temos tambm membros de pacote. ? Um membro de pacote s pode ser acessado por classes declaradas no mesmo pacote da classe que declara esse membro. ? Quando omitimos o modificador de controle de acesso, estamos dizendo que o membro de pacote.
26

13

Java First-Tier: Aplicaes

Grupo de Linguagens de Programao - DI/PUC-Rio

Mais sobre Visibilidade


Pelo que foi dito at agora, membros pblicos podem ser acessados indiscriminadamente, membros privados s podem ser acessados pela prpria classe, e membros de pacote so acessados por classes declaradas no mesmo pacote da classe.

27

Mais sobre Visibilidade


? s

vezes precisamos de um controle de acesso intermedirio: um membro que seja acessado somente nas sub-classes e nas classes declaradas no mesmo pacote. As linguagens OO tipicamente do suporte a esse tipo de acesso. ? Para isso usamos o modificador de controle de acesso protected em Java.
28

14

Java First-Tier: Aplicaes

Grupo de Linguagens de Programao - DI/PUC-Rio

Resumo de Visibilidade em Java


? Resumindo

todos os tipos de visibilidade:

private : membros que so acessados somente pela prpria classe; protected: membros que so acessados pelas suas sub-classes e pelas classes do pacote; public : membros so acessados por qualquer classe; sem modificador ou default: membros que so acessados pelas classes do pacote.
29

Visibilidade de Membros
Pacote P1 A int i;

int i;

30

15

Java First-Tier: Aplicaes

Grupo de Linguagens de Programao - DI/PUC-Rio

Visibilidade de Membros
Pacote P1 A int i; public int j;

int i; public int j;


31

Visibilidade de Membros
Pacote P1 A int i; public int j; protected int k;

int i; public int j; protected int k;


32

16

Java First-Tier: Aplicaes

Grupo de Linguagens de Programao - DI/PUC-Rio

Visibilidade de Membros
Pacote P1 A int i; public int j; protected int k; private int l;

int i; public int j; protected int k;


33

Visibilidade de Membros
Pacote P1 A int i; public int j; protected int k; private int l; C Pacote P2 P1.A

int i; public int j; protected int k;

public int j; protected int k;


34

17

Java First-Tier: Aplicaes

Grupo de Linguagens de Programao - DI/PUC-Rio

Aninhamento de Classes

35

Aninhamento de Classes
? Em

diversas circunstncias precisamos criar classes cujo nico objetivo auxiliar na implementao de uma outra classe. Nesses casos, podemos declarar uma classe aninhada, ou seja, declarar uma nova classe como um membro de uma outra. ? Diversas linguagens OO suportam esse recurso.
36

18

Java First-Tier: Aplicaes

Grupo de Linguagens de Programao - DI/PUC-Rio

Aninhamento em Java
? Java

permite dois tipos diferentes de aninhamento de tipos:


Aninhamento esttico; Aninhamento dinmico.

37

Aninhamento Esttico
? Gera

classes e interfaces normais, cuja nica singularidade o nome, que passa a ser qualificado pelo nome da classe que as declara. ? Em particular, sendo um membro de uma classe, uma interface ou classe aninhada est sujeita aos modificadores de controle de acesso .
38

19

Java First-Tier: Aplicaes

Grupo de Linguagens de Programao - DI/PUC-Rio

Exemplo de Aninhamento Esttico


package p; public class A { public static class B { ... } }

p.A a = new p.A(); p.A.B b = new p.A.B();


39

Aninhamento Dinmico
? Gera

classes associadas a objetos. ? Cada instncia da classe aninhada possui uma referncia para o objeto a partir do qual ela criada. ? Como ela est associada a um objeto, ela tem acesso a todos os membros desse objeto.
40

20

Java First-Tier: Aplicaes

Grupo de Linguagens de Programao - DI/PUC-Rio

Exemplo de Aninhamento Dinmico


class A { int i; class B { void g() {...} } void f() {...} } A void f() { B b = new B(); b.g(); }

B void g() { i = 1; }
41

Prxima Aula de Laboratrio


Ser aplicado o conceito de interfaces a um dicionrio. Um dicionrio um TAD que permite a armazenagem de valores associados a chaves. Alm deste exerccio, ser pedido para que se crie um pacote SistemaBancrio, a partir das implementaes desenvolvidas no laboratrio sobre heranas.
42

21

Vous aimerez peut-être aussi