Você está na página 1de 69

Aspectos de Orientao a Objetos na Linguagem Java

PROF. THIAGO DRUMMOND R. G. MOREIRA

Estrutura de uma classe


Classe Propriedades

Mtodos

Classes
Declarao:
class Ponto { ... }

Propriedades: dados que as instncias da classe contero:


class Ponto { float x, y; }

Estrutura de uma classe


Propriedades
class Exemplo { int a; MinhaClasse b;

Mtodos

float Exemplo (int a) { } }

Instanciao de Objetos
Dada uma classe, pode ser criada uma nova instncia desta classe usando o comando new. Exemplo:
Ponto p = new Ponto();

Atribuio de valores
As propriedades dos objetos podem ser manipuladas diretamente:
Ponto p1 = new Ponto(); p1.x = 1; p1.y = 2; // p1 representa o ponto (1,2) Ponto p2 = new Ponto(); p2.x = 3; p1.y = 4; // p2 representa o ponto (3,4)

Referncia para Objetos


Toda vez que uma varivel recebe um objeto, ela est recebendo a sua referncia:
Ponto p1 = new Ponto(); Ponto p2 = p1; new Ponto(); P2

P1

Tipos de Mtodos
class Exemplo { int a; MinhaClasse b; Exemplo () { } float Exemplo (int a) { } }

Mtodos Construtores Mtodos Operacionais

Mtodos
Define o comportamento da classe. Declarao:
class Ponto { int x, y; void mover ( int dx, int dy) { x += dx; y += dy; } }

Chamadas de Mtodo
A troca de mensagens entre os objetos realizada atravs da chamada de mtodos com passagem de parmetros Exemplo
... p1.mover(10,l0); //deslocou p1 dez unidades, nos dois eixos ...

Palavra reservada this


As vezes necessrio que o objeto se autoreferencie. Existe uma palavra reservada this que significa a referncia ao prprio objeto
class Ponto { int x, y; void mover (int x, int y) { this.x = x; this.y = y; }

Mtodos Operacionais
Implementam as funes de uma classe Possuem sintaxe semelhante sintaxe de definio das funes de um programa procedural Determinam o comportamento da classe e a troca de mensagens com outras classes

Mtodos Operacionais
Class Funcionario { String nomefunc; float salario;

...
float CalcularSalario (int horas) { if (horas < 220) { salario = (salario/220)*horas; } return salario; } ... }

Assinatura

Corpo Retorno

Assinatura de um mtodo

float CalcularSalario (int horas)


Tipo de Retorno Nome Parmetro

Exemplo
Class ProgramaPrincipal { public void main (String arg[]) { Funcionario func; func = new Funcionario(Juca,102); func.CalcularSalario(20); } }
Executando o Mtodo

Mtodos Construtores
Devemos usar os mtodos construtores quando queremos atribuir valores aos atributos de um objeto no momento de sua criao
class Ponto { int x=0; int y=0; Ponto (int x, int y) { this.x = x; this.y = y; }

Uso de Construtores
Deve ser usado no momento da criao do objeto:
Ponto p1 = new Ponto(1,2); Ponto p2 = new Ponto(3,4);

Construtor Padro
A linguagem Java declara um construtor padro, vazio, que no recebe nenhum parmetro Quando declaramos um novo construtor, esse construtor padro deixa de existir e substitudo pelo novo construtor

Mtodos Construtores
Usados na criao de um objeto atravs do comando new Possuem o mesmo nome da classe Podem receber parmetros que serviro para incializao dos atributos da classe Uma classe pode ter vrios mtodos construtores

Mtodos Construtores de Classe


Class Funcionario { String nomefunc; float salario; Funcionario (String nome,float sal) { salario = sal; nomefunc = nome; } ...

Mtodo Construtor

Outros Mtodos

Exemplo
Class ProgramaPrincipal { public void main (String arg[]) { Funcionario func; func = new Funcionario(Juca,102); } }

Mtodo Construtor

Mtodo Finalizador
Quando um objeto vai ser detrudo, ele tem seu mtodo finalize chamado O mtodo finalize usado para a executar operaes antes da destruio do objeto. A linguagem Java possui um coletor de lixo, que possui a funo de destruir objetos que no esto sendo usados pelo programa

Membros de Classe
Pode-se definir num classe membros (atributos e mtodos) que sejam compartilhados por todas instncias daquela classe. Esses membros so chamados de membros de classe Todo membro de classe deve usar o qualificador static.

Membros de Classe
Exemplo:
class Pessoa { static int num_pessoa = 0; int id; Pessoa () { id = num_pessoa; num_pessoa++; } ... }

Membros de Classe
Membro de Classe Pessoa Num_pessoas

New Pessoa(); Id Joao

New Pessoa(); Id Maria

Membros de Classe
Exemplo:
Pessoa joao = new Pessoa (); // joao.id = 0; // joao.num_pessoa = 1; Pessoa ana = new Pessoa(); // ana.id = 1; // ana.num_pessoa = 2;

Membros de Classe
Os membros de classe podem ser acessados diretamente, sem necessidade da existncia de um objeto.
Pessoa.num_pessoas = 100; // Prxima pessoa criada ser 101

Encapsulamento
a caracterstica de definir os atributos e mtodos de uma classe. No entanto, necessrio definir o controle de acesso aos atributos e mtodos desta classe, de forma que no interfira no seu funcionamento.

Controle de Acesso
Os membros de uma classe podem ser protegidos de acessos indevidos Mtodos de acesso: public e private public: membros podem ser acessados livremente private: membros s podem ser acessados pela prpria classe

Controle de Acesso
Exemplo:
class Pessoa { private nome; private idade; public obs; Pessoa (String nome, int idade) { this.nome = nome; } }

Controle de Acesso
Exemplo:
Pessoa p1 = new Pessoa(Joao,10); p1.nome = Raul;//ERRO DE COMPILACAO p1.obs = bom garoto; //OK

Sobrecarga de Mtodos
Sobrecarregar um mtodo significa definir dois ou mais mtodos com o mesmo nome, porm com assinaturas diferentes: Assinatura diferente pode ser: tipo de retorno, nmero ou tipos de parmetros diferentes.

Sobrecarga de Mtodos Construtores


Exemplo:
Class Ponto { int x=0; int y=0; Ponto () { } Ponto (int x, int y) { this.x=x; this.y=y; } }

Sobrecarga de Mtodos Construtores


A sobrecarga de construtores visa definir formas diferentes de criar um objeto Exemplo:
Ponto p1 = new Ponto(); //p1 est em (0,0) Ponto p2 = new Ponto(1,2); //P2 est em (1,2)

Encadeamento de Mtodos Construtores


Um construtor pode chamar outro construtor, isto se chama encadeamento de mtodos construtores Para isto necessrio usar a seguinte construo: this(..). E esta chamada dever ser a primeira linha do construtor.

Encadeamento de Mtodos Construtores


Exemplo:
Class Ponto { int x=0; int y=0; Ponto () { this(0,0); } Ponto (int x, int y) { this.x=x; this.y=y; } }

Sobrecarga de Mtodos Operacionais


A sobrecarga pode ser feita igualmente aos mtodos construtores Uma boa prtica usar a sobrecarga, somente, em mtodos que possuam a mesma funcionalidade.

Sobrecarga de Mtodos Operacionais


Exemplo:
Class Ponto { ... void mover (int dx, int dy){ x += dx; y += dy; } void mover (int raio, float ang){ x += raio*Math.cos(ang); y += raio*Math.sen(ang); } }

Modularidade em Java: Pacotes


Um pacote um conjunto de classes e outros pacotes Pacotes permitem a criao de espaos de nomes, alm de mecanismo de controle de acesso

Implementao de Pacotes
Pacotes so 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

Empacotamento de Classes
Para criarmos uma classe como pertencente a um pacote, devemos:
declar-la em um arquivo dentro do diretrio que representa o pacote declarar, na primeira linha, que a classe pertence ao pacote

Empacotamento de Classes
Exemplo:
/* A classe Ponto pertence ao pacote MeuPacote O arquivo Ponto.java deve estar dentro do diretrio MeuPacote */ package MeuPacote; Class Ponto { ... }

Pacotes: Controle de Acesso


Podemos ter membros package, alm de pblicos e privados Um membro package 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 do tipo package

Importao de Pacotes
Para usarmos uma classe que est dentro de um pacote precisamos referenciar o nome desse pacote:
java.awt.buttom a = new java.awt.button(Alo);

Podemos usar o comando import, o que permite usarmos somente o nome da classe:
import java.awt.*; buttom a = new button(Alo);

Herana e Polimorfismo
Uma classe pode herdar propriedades e mtodos de outra classe Em Java, podemos ter herana de cdigo ou herana de interface Herana de Interface: herda todos mtodos declarados que no sejam privados Herana de Cdigo: herda mtodos com implementaes e campos que no so privados

Controle de Acesso: protected


Java permite declararmos um membro que, embora no seja acessvel por outras classes, herdado por suas sub-classes Para isso usamos o modificador de controle de acesso protected

Resumo de Visibilidade
Resumindo:
private: membros que so vistos s pela prpria classe e no so herdados por nenhuma outra package: membros que so vistos e herdados pelas classes do pacote protected: membros que so vistos pelas classes do pacote e herdados por qualquer outra classe public: membros so vistos e herdados por qualquer classe

Herana em Java
Quando uma classe A herda de B, diz-se que A a sub-classe e estende B, a superclasse Uma classe Java estende apenas uma outra classe- a essa restrio damos o nome de herana simples Para criar uma sub-classe, usamos a palavra reservada extends

Exemplo de Herana
Podemos criar uma classe PontoColorido a a partir da classe Ponto.
Class PontoColorido extends Ponto { int cor; PontoColorido(int x, int y, int c) { super(x,y); cor = c; } }

Herana de Cdigo
A classe PontoColorido herda a interface e o cdigo da classe Ponto. Ou seja, PontoColorido passa a ter tanto os campos quanto os mtodos (com suas implementaes) de Point.
PontoColorido p1 = new PontoColorido(1,2,0); p1.mover(1,0);

Palavra reservada super


Usada para referenciar o construtor da superclasse. PontoColorido precisa iniciar sua parte Ponto antes de iniciar sua parte estendida No caso de no haver chamada explcita, a linguagem Java chama o construtor padro da super classe (super())

Modelo de Herana
Java adota o modelo de rvore A classe Object a raiz da hierarquia de classes qual todas as classes existentes pertencem Quando no declaramos que uma classe estende outra, ela, implicitamente, estende Object

Especializao x Extenso
Uma classe pode herdar de outra para especializ-la redefinindo mtodos, sem ampliar sua interface Uma classe pode herdar de outra para estend-la declarando novos mtodos e, dessa forma, apliando sua interface. Ou as duas coisas podem acontecer simultaneamente

Polimorfismo
a capacidade de um objeto tomar vrias formas A capacidade polimrfica decorre diretamente do mecanismo de herana Ao estendermos ou especializarmos uma classe, no perdemos compatibilidade com a superclasse

Polimorfismo
A sub-classe de Ponto, PontoColorido, compatvel com ela, ou seja, um PontoColorido, alm de outras coisas, um Ponto Isso implica que, sempre que precisarmos de um Ponto, podemos usar um PontoColorido em seu lugar

Polimorfismo
Podemos criar um array de pontos. O array de pontos poder conter PontosColoridos:
Ponto[] pontos = new Ponto[5]; pontos[0] = new Ponto(); pontos[1] = new PontoColorido(1,2,0);

Polimorfismo
Polimorfismo o nome formal para o fato de que, quando precisamos de um objeto de determinado tipo, podemos usar uma verso mais especializada dele. Esse fato pode ser bem entendido analisando-se a rvore de hierarquia de classes.

Late Binding
a capacidade de adiar a resoluo de um mtodo at o momento no qual ele deve ser efetivamente chamado. A resoluo do mtodo ocorrer em tempo de execuo, ao invs de em tempo de compilao No momento da chamada, o mtodo utilizado ser o definido pela classe real do objeto

Mtodos Constantes
Mtodos cujas implementaes no podem ser redefinidas nas sub-classes. Objetivo evitar o processamento do Late Binding Devemos usar o modificador final
public class A{ public final int f ( ) {
... }

Classes Constantes
Uma classe constante no pode ser estendida.
public final class A{ ... }

Converso de Tipo
Podemos usar uma verso mais especializada quando precisamos de um objeto de certo tipo mas o contrrio no verdade. Por isso, se precisarmos fazer a converso de volta ao tipo mais especializado, teremos que faz-lo explicitamente.

Type Casting
A converso explcita de um objeto de um tipo para outro chamada de type casting.
Ponto pt = new PontoColorido(0,0,1); PontoColorido px = (PontoColorido)pt; pt = new Ponto(); px = (PontoColorido)pt; //ERRO pt = new PontoColorido(0,0,0); px = pt; //ERRO

Classes Abstratas
Ao criarmos uma classe para ser estendida. s vezes codificamos alguns mtodos para os quais no sabemos dar uma implementao, ou seja, um mtodo que s sub-classes sabero implementar Uma classe deste tipo no pode ser instanciada pois sua funcionalidade est incompleta. Tal classe dita abstrata.

Classes Abstratas em Java


Java suporta o conceito de classes abstratas: podemos declarar uma classe abstrata usando o modificador abstract Mtodos podem ser declarados abstratos para que suas implementaes sejam adiadas para as sub-classes. Da mesma forma, usamos o modificador abstract e omitimos a implementao desse mtodo.

Classes Abstratas
public abstract class Figura { Ponto pOrigem; public abstract void desenhar(); public abstract void apagar(); public abstract float calcularArea(); public abstract void mover(Ponto p) { origem.mover(pOrigem.x,pOrigem.y); } }

Interfaces
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 palvra implements

Exemplo de Interface
interface Localizavel { boolean ehVoce (Ponto p); void desenharMarcas (); } class Circulo extends figura implements Localizavel { Boolean ehVoce (Ponto p){ //procedimento de localizao } void desenharMarcas () { //procedimento desenhar marcas } }

Interfaces
Uma vez que uma interface no possui implementao, devemos notar que:
seus campos 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)

Verificao de Tipos
Java mantm informaes de tipo em tempo de execuo e nos permite consult-las atravs do comando instanceof
Ponto pt = new Ponto(); boolean b = pt instanceof PontoColorido; // b = false