Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
2
Fundamentos da POO
Prof. Fausto Maranho Ayres
Princpios
Orientado a
procedimento
Orientado a
funo
Funo metemtica
Lisp,
Orientado a
texto
Casamento de padres
textuais
Snobol
Orientado a
lgica
Prolog
Orientado a
objeto
Abstrao de Dados e
de Processo
CEFETPB
CEFET-PB
Paradigma
Abstrao
Linguagem
Abstrao
Abstrao de processos:
visa dividir um problema em subproblemas menores e mais
Abstrao de dados:
visa identificar as estruturas de dados (relacionamentos) e
CEFETPB
CEFET-PB
CEFETPB
CEFET-PB
suas operaes.
Onibus o = emp.getOnibus(Natal);
Cadeira cad = o.getCadeira(2);
if (cad.livre())
cad.setPassageiro( new Passageiro(maria) );
Fausto Maranho Ayres
Objeto
Classe de Objeto
O que OBJETO?
domnio do problema
instanciados
Joao
0413702
Nome
Matricula
Nome
CH
Maria
0113788
POO
100
concluiu()
cursou(d)
nota(d)
Objeto
Aluno
Objeto
Aluno
Prerequisitos()
Objeto
Disciplina
CEFETPB
CEFET-PB
CEFETPB
CEFET-PB
1
concluiu()
cursou(d)
nota(d)
Etapas do Desenvolvimento OO
Objeto
Instanciao, Estado, Ciclo de vida
Classe
mtodos
Objetos Instanciados
1.
Modelagem
2.
Classe
Construtor
Propriedades e Mtodos
Encapsulamento
Identificar as classes
de objetos e seus
relacionamentos
em Java
3.
Herana e Polimorfismo
Fausto Maranho Ayres
CEFETPB
CEFET-PB
CEFETPB
CEFET-PB
Teste
Modelagem de Classes
Exemplo de Domnio: Polgonos
objetos do mundo real
Classe
Propriedade
r
mtodos
c1
Retangulo.java
Circulo
c
Propriedades
CEFETPB
CEFET-PB
l
mtodos
Retangulo
largura
comprimento
Retangulo(l,c)
area()
r2
Fausto Maranho Ayres
Circulo(r)
area()
chamada de mtodo
Pacote
java.lang
11
CEFETPB
CEFET-PB
}
CEFETPB
CEFET-PB
Tipo de objeto
varivel de referncia
operador de instanciao
construtor
Retangulo r = new Retangulo(5,30);
System.out.println(r.area());
// 150.0
construtor
mtodos
public double area()
{
return Math.PI * Math.pow(raio,2);
}
// ...demais mtodos
10
Propriedade
Circulo
Teste
Circulo.java
public class Circulo
{ private double raio;
mtodos
public double area()
{
return largura*comprimento;
}
// ...demais mtodos
Implementao de Classes
raio
Retangulo(l,c)
area()
Diagrama
UML
Classe
largura
comprimento
Circulo(r)
area()
c2
r1
Retangulo
raio
CEFETPB
CEFET-PB
Implementao de Classes
// 314.15
12
Instanciao de Objetos
Exerccio
1.
2.
Estado do
objeto
largura: 5
comprimento:
30
CEFETPB
CEFET-PB
objeto
Retangulo
referncia
raio:10
objeto
Circulo
13
CEFETPB
CEFET-PB
referncia
Convenes de Nomes
14
Encapsulamento
Constantes (maisculas)
LIMITE_MAX = 20
Fausto Maranho Ayres
15
CEFETPB
CEFET-PB
CEFETPB
CEFET-PB
16
Encapsulamento em Java
Encapsulamento em Java
CEFETPB
CEFET-PB
...
Retangulo r = new Retangulo(5,30);
r.largura = 8;
r.comprimento = 10;
System.out.println(r.largura);
System.out.println(r.comprimento);
Fausto Maranho Ayres
17
CEFETPB
CEFET-PB
Encapsulamento em Java
Codifique os mtodos get()/set()
18
Encapsulamento em Java
19
CEFETPB
CEFET-PB
CEFETPB
CEFET-PB
{...}
20
Exerccio
Anel
Circulo cinterno
Circulo cexterno
e
r
21
a2
a1
Circulo
raio
...
Composio:
Um anel s existe se
existir os 2 crculos
CEFETPB
CEFET-PB
CEFETPB
CEFET-PB
Anel(r,e)
area()
operaes
22
Anel.java
Anel
Circulo cinterno
Circulo cexterno
CEFETPB
CEFET-PB
Anel(r,e)
area()
Anel
public double area()
{
return cexterno.area()cinterno.area();
}
...
raio:
}
Fausto Maranho Ayres
23
CEFETPB
CEFET-PB
UML
cinterno
cexterno
raio:
10
Fausto Maranho Ayres
Circulo
Circulo
24
Exerccio
Mensagens
Ex:
r.area();
r.setLargura(2);
c.setRaio( c.getRaio() + 10);
getRaio()
25
Objeto Anel
area()
cint.
cext.
ar ea(
)
raio:
8
raio:
10
Composio de Mensagens
Anel a = new Anel(10, 2);
println(a.getCirculoInterno().getDiametro()); 10
Objeto
Circulo
Objeto
Circulo
getCirculoInterno()
getRaio()
getDiametro()
getEspessura()
CEFETPB
CEFET-PB
cint
cext
getRaio()
getR
a
raio:
8
Objeto
Circulo
io()
raio:
10
Fausto Maranho Ayres
Objeto
Circulo
27
CEFETPB
CEFET-PB
Objeto Anel
26
Mensagens
Circulo
setRaio(...)
Mensagens
//1 mensagem
//1 mensagem
//2 mensagens
raio
CEFETPB
CEFET-PB
CEFETPB
CEFET-PB
cint
cext
Objeto Anel
raio:
8
Objeto
Circulo
raio:
10
Objeto
Circulo
28
Mensagens
Construtor Default
return
m2()
m1()
...
29
CEFETPB
CEFET-PB
CEFETPB
CEFET-PB
m3()
Sobrecarga de Construtores
Exerccio
{}
largura
Moldura (l,c,e)
area()
10
espessura
Moldura
Retangulo rinterno
Retangulo rexterno
20
Sobrecarga
de mtodo
CEFETPB
CEFET-PB
CEFETPB
CEFET-PB
public Circulo(double r) {
raio = r;
}
public Circulo(int r)
{
raio = r;
}
...
30
Retangulo
//Teste
Moldura m = new Moldura(10, 20, 2);
System.out.println( m.area() );
m.setComprimento(10);
System.out.println( m.area() );
m.setEspessura(1);
System.out.println( m.area() );
Fausto Maranho Ayres
//104
//64
//36
32
O que Herana?
Herana
Conceito
Um tipo de relacionamento
Classe
Classe A
A
Classe
Classe B
B
Classe
Classe C
C
Principal benefcio:
area()
imprimir()
Classe
Classe D
D
Classe
Classe E
E
Retangulo
33
base: int
altura:int
area()
area()
area()
cinterno: Circulo
cexterno: Circulo
area()
34
Polimorfismo de mtodo
Classe Figura
System.out.println(area= + area() );
CEFETPB
CEFET-PB
CEFETPB
CEFET-PB
raio: int
Herana em Java
Anel
Circulo
Triangulo
largura: int
comprimento:int
CEFETPB
CEFET-PB
Os mtodos area()
e imprimir() sero
herdados
Figura
REUSABILIDADE
a herana permite que novas
classes reusem propriedades e
mtodos das classes j
existentes
CEFETPB
CEFET-PB
Exemplo:
O mtodo
imprimir() chama
o mtodo area()
correto
}
Fausto Maranho Ayres
36
Polimorfismo de Tipo
Reflection
class Figura{
public static double somaArea(Figura f1, Figura f2)
{
return f1.area() + f2.area();
}
...
System.out.println(
this.getClass().getName()+ area= + area()
);
}
37
CEFETPB
CEFET-PB
CEFETPB
CEFET-PB
1.
2.
3.
39
CEFETPB
CEFET-PB
CEFETPB
CEFET-PB
38
Tipo polimrfico
40
Retangulo r;
r = new Retangulo(5,30);
r.setLargura(10);
r = null;
//declarao
//instanciao
//uso
//desprezo
Retangulo r;
r = new Retangulo(5,30);
r.setLargura(10);
r = null;
r
Varivel sem referncia (null)
Fausto Maranho Ayres
41
CEFETPB
CEFET-PB
CEFETPB
CEFET-PB
//declarao
//atribuio
//uso
//desprezo
r
30
atribuio
Fausto Maranho Ayres
43
//declarao
//instanciao
//uso
//desprezo
setLargura(10)
5
CEFETPB
CEFET-PB
CEFETPB
CEFET-PB
Retangulo r;
r = new Retangulo(5,30);
r.setLargura(10);
r = null;
r
5
42
Retangulo r;
r = new Retangulo(5,30);
r.setLargura(10);
r = null;
30
instanciao
//declarao
//instanciao
//uso
//desprezo
30
mensagem
44
Retangulo r;
r = new Retangulo(5,30);
r.setLargura(10);
r = null;
//declarao
//instanciao
//uso
//desprezo
Retangulo r;
r = new Retangulo(5,30);
r.setLargura(10);
r = null;
10
30
45
String s;
Retangulo r1,r2;
Date d;
double soma (Figura f1, Figura f2) ...
Objeto
Retangulo
CEFETPB
CEFET-PB
largura
CEFETPB
CEFET-PB
46
O objeto est
elegvel para a
coleta de lixo
30
Variveis de referncia
//declarao
//instanciao
//uso
//desprezo
setLargura(10)
10
CEFETPB
CEFET-PB
CEFETPB
CEFET-PB
5
Comprimento
30
r2
1 objeto
3 referncias
r3
r1
Fausto Maranho Ayres
48
Exerccio
Bibliografia
Retangulo r1,r2,r3;
r1 = new Retangulo(5,30);
r2 = new Retangulo(10,10);
r3=r2;
r1=r2;
coleta de lixo?
49
CEFETPB
CEFET-PB
CEFETPB
CEFET-PB
Java Tutorial
(http://java.sun.com/docs/books/tutorial)
SIERRA & BATES. Use a Cabea! Java. 2006
DEITEL & DEITEL. Java: How to Program.
Prentice Hall, 1998.
ECKEL, BRUCE, Thinking in Java. Prentice Hall,
2a. Edio. 2000.
HORSTMANN, CAY S. Core Java2. Prentice
Hall, 2000.
50