Sei sulla pagina 1di 13

Paradigmas de Programao

2
Fundamentos da POO
Prof. Fausto Maranho Ayres

Princpios

Orientado a
procedimento

Abstrao de processos Basic, Fortran, Pascal, C,


Cobol, Clipper,

Orientado a
funo

Funo metemtica

Lisp,

Orientado a
texto

Casamento de padres
textuais

Snobol

Orientado a
lgica

Deduo sobre Regras


e fatos

Prolog

Orientado a
objeto

Abstrao de Dados e
de Processo

Smaltalk, Eiffel, C++, Java,


Phyton, C#, Lua, Ruby

CEFETPB
CEFET-PB

Curso Superior em Sistemas para Internet


www.cefetpb.edu.br
2008-1

Paradigma

Fausto Maranho Ayres

Abstrao


Linguagem

Abstrao

Abstrao: tcnica para lidar com a complexidade


de um problema.

Abstrao de processos:
 visa dividir um problema em subproblemas menores e mais

fceis de implementar ("dividir para conquistar").


lerdados;
calcularMedia;
imprimirresultados;

Abstrao de dados:
 visa identificar as estruturas de dados (relacionamentos) e

Copyritght 1991 Grady Booch


Fausto Maranho Ayres

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?

 uma estrutura de dados bem definidas no

O que Classe de Objeto?


 Contm a descrio dos objetos

domnio do problema

 uma "frma" a partir da qual objetos so

Ex: domnio acadmico

instanciados

Aluno, Disciplina, Turma, Professor, etc


propriedades
Nome
Matricula

Joao
0413702

Nome
Matricula

Nome
CH
Maria
0113788

POO
100

concluiu()
cursou(d)
nota(d)

Objeto
Aluno

Objeto
Aluno

Prerequisitos()

Fausto Maranho Ayres

Objeto
Disciplina

CEFETPB
CEFET-PB

CEFETPB
CEFET-PB

1
concluiu()
cursou(d)
nota(d)

Fausto Maranho Ayres

Etapas do Desenvolvimento OO

Objeto
 Instanciao, Estado, Ciclo de vida

Classe
mtodos

Objetos Instanciados

Principais Conceitos da POO




1.

Modelagem

2.

Implementao Codificar as classes

Classe
 Construtor
 Propriedades e Mtodos
 Encapsulamento

Identificar as classes
de objetos e seus
relacionamentos

em Java

 Relacionamentos entre classes


 Sobrecarga de mtodos

3.

 Herana e Polimorfismo
Fausto Maranho Ayres

CEFETPB
CEFET-PB

CEFETPB
CEFET-PB

 Propriedades e Mtodos de classe

Teste

Fausto Maranho Ayres

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

Toda classe tem um


mtodo construtor,
de mesmo nome,
usado para
inicializar o objeto

Circulo(r)
area()

chamada de mtodo

Pacote
java.lang

11

CEFETPB
CEFET-PB

}
CEFETPB
CEFET-PB

Instanciao dos objetos

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

Fausto Maranho Ayres

10

public class Teste {


public static void main(String[] args){

Propriedade

Circulo

public Circulo(double r){


raio = r;
}

Teste

Circulo.java
public class Circulo
{ private double raio;

mtodos
public double area()
{
return largura*comprimento;
}
// ...demais mtodos

Fausto Maranho Ayres

Implementao de Classes

raio

public Retangulo(double l,double c){


largura = l;
comprimento = c;
construtor
}

Retangulo(l,c)
area()

Diagrama
UML

Classe

public class Retangulo


{ private double largura;
Propriedade
private double comprimento;

largura
comprimento

Circulo(r)
area()

c2

r1

Retangulo

raio

CEFETPB
CEFET-PB

Implementao de Classes

Circulo c = new Circulo(10);


System.out.println(c.area());
}}
Fausto Maranho Ayres

// 314.15

12

Instanciao de Objetos


Exerccio

Representao grfica dos objetos na memria

1.
2.

Estado do
objeto

largura: 5
comprimento:
30

CEFETPB
CEFET-PB

objeto
Retangulo

referncia

raio:10

Fausto Maranho Ayres

objeto
Circulo

13

CEFETPB
CEFET-PB

referncia

Adicione o mtodo perimetro() nas classes


Circulo e Retangulo, respectivamente
Imprima o permetro dos 2 objetos na classe
Teste.

Fausto Maranho Ayres

Convenes de Nomes

14

Encapsulamento

 Arquivos e Classes (palavras capitalizadas)


class Circulo

 Atributos (substantivo + palavras capitalizadas)


double largura;
int idade;

um conceito da POO que impede o acesso


direto s propriedades dos objetos, visando
aumentar o nvel de abstrao

 Constantes (maisculas)
LIMITE_MAX = 20
Fausto Maranho Ayres

15

CEFETPB
CEFET-PB

CEFETPB
CEFET-PB

 Mtodos (verbo + palavras capitalizadas)


double area()
void calcularSaldo()

Fausto Maranho Ayres

16

Encapsulamento em Java


Encapsulamento em Java

Considere as propriedades da classe Retangulo

public class Retangulo {


private double largura;
private double comprimento;
...

Retangulo r = new Retangulo(5,30);


r.largura = 8;
r.comprimento = 10;
System.out.println(r.largura);
System.out.println(r.comprimento);

O modificador de acesso private impede o


acesso s propriedades do objeto

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

Retangulo r = new Retangulo(5,30);


r.setLargura(8);
r.setComprimento(10);
System.out.println(r.getLargura() );
System.out.println(r.getComprimento() );

CEFETPB
CEFET-PB

Fausto Maranho Ayres

Encapsulamento em Java
Codifique os mtodos get()/set()

Codifique os mtodos get()/set()


public class Circulo
{
...
public double getRaio()
{
return raio;
}
public void setRaio(double r) {
raio=r;
}
...
}
Testar os
mtodos

public class Retangulo


{ ...
public double getLargura(){
return largura;
}
public double getComprimento() {
return comprimento;
}
public void setLargura(double l) {
largura=l;
}
public void setComprimento(double c) {
comprimento=c;
}
...
}
Testar os
mtodos
Fausto Maranho Ayres

18

Encapsulamento em Java

19

CEFETPB
CEFET-PB

CEFETPB
CEFET-PB

O acesso s propriedades do objeto deve ser


feito sempre via mtodo get() ou set()
correspondente. Ex:

Implemente o mtodo abaixo:

public double getDiametro()


Fausto Maranho Ayres

{...}
20

Exerccio


Relacionamento entre Classes

Complete o cdigo abaixo:


Retangulo r = new Retangulo(5,30);
1. imprimir a metade do comprimento de r

Anel
Circulo cinterno
Circulo cexterno

Objetos do mundo real


Propriedades

2. alterar a sua largura para 6

e
r

3. alterar a sua largura para o dobro dela

21

a2

a1

Circulo
raio
...

Composio:
Um anel s existe se
existir os 2 crculos

CEFETPB
CEFET-PB

CEFETPB
CEFET-PB

4. alterar o comprimento de r para o mesmo valor da


sua largura

Fausto Maranho Ayres

Anel(r,e)
area()

operaes

Fausto Maranho Ayres

Relacionamento entre Classes

22

Relacionamento entre Objetos




Instanciao do Objeto Anel

Anel.java

Anel

public Anel(double r, double e){


cexterno = new Circulo(r);
cinterno = new Circulo(r-e);
}
construtor

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

public class Teste {


public static void main(String[] args){
Anel a = new Anel(10, 2);
System.out.println(a.area());
//System.out.println(a.perimetro());
}}

public class Anel


Propriedade
{ private Circulo cinterno, cexterno;

cinterno
cexterno

raio:
10
Fausto Maranho Ayres

Circulo

Circulo
24

Exerccio


Mensagens

Implemente e teste os mtodos:

Ex:

public class Anel {


...
public double getRaio()
{...}
public double getEspessura()
{...}
public void setRaio(double r)
{...}
public void setEspessura(double e)
{...}
...
}

r.area();
r.setLargura(2);
c.setRaio( c.getRaio() + 10);
getRaio()

Fausto Maranho Ayres

25

Fausto Maranho Ayres

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

Uma mensagem pode desencadear outras


mensagens
area()

Circulo

setRaio(...)

Mensagens


//1 mensagem
//1 mensagem
//2 mensagens

raio
CEFETPB
CEFET-PB

CEFETPB
CEFET-PB

Conceito: uma mensagem consiste em invocar


um determinado mtodo sobre um objeto.

cint
cext

Objeto Anel

Fausto Maranho Ayres

raio:
8

Objeto
Circulo

raio:
10

Objeto
Circulo
28

Mensagens


Construtor Default

Um Sistema OO um conjunto de objetos que


interagem atravs de mensagens
return

Quando no h construtor na classe, o compilador


fornece, implicitamente, um construtor vazio. Ex:
public class Circulo
{
...
public Circulo() {}
}

return

m2()

m1()

 Neste caso, para inicializar o objeto, devemos

...

utilizar os mtodos setX():

Circulo c = new Circulo();


c.setRaio(10);
System.out.println( c.area() );

Fausto Maranho Ayres

29

CEFETPB
CEFET-PB

CEFETPB
CEFET-PB

m3()

Fausto Maranho Ayres

Sobrecarga de Construtores


Exerccio

Pode-se especificar vrios construtores desde


que tenham parmetros diferentes :
public class Circulo
{
...
public Circulo()

{}

largura

Moldura (l,c,e)
area()

10
espessura

//instanciao dos objetos


Circulo c1 = new Circulo();
Circulo c2 = new Circulo(8.45);
Circulo c3 = new Circulo(10);
31

Moldura
Retangulo rinterno
Retangulo rexterno

20

Sobrecarga
de mtodo

CEFETPB
CEFET-PB

CEFETPB
CEFET-PB

Crie a classe Moldura :


comprimento

public Circulo(double r) {
raio = r;
}
public Circulo(int r)
{
raio = r;
}
...

Fausto Maranho Ayres

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

entre duas classes onde uma


subclasse herda todas as
propriedades e mtodos de
uma superclasse

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

Polimorfismo = muitas + formas


 o mtodo area() tem diferentes implementaes

public class Figura {


public double area() {return 0;}
public void imprimir() {

public static void main(String[] args){

System.out.println(area= + area() );

Circulo c = new Circulo(1);


c.imprimir();
//3.14
Retangulo r= new Retangulo(2,4);
r.imprimir();
//8
Anel a= new Anel(10,2);
a.imprimir();
//...
Figura f= new Figura();
f.imprimir();
//0

Acrescentar herana nas classes:


public class Retangulo extends Figura {...}
public class Circulo extends Figura{...}
public class Anel extends Figura{...}
35

CEFETPB
CEFET-PB

CEFETPB
CEFET-PB

raio: int

Fausto Maranho Ayres

Herana em Java

Fausto Maranho Ayres

Anel

Circulo

Triangulo

largura: int
comprimento:int
CEFETPB
CEFET-PB

Fausto Maranho Ayres

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


Todo objeto possui mtodos que fornecem


informaes sobre sua classe

Uma varivel de um tipo T pode referenciar


objetos de subtipos de T
Mtodo esttico

public void imprimir() {

class Figura{
public static double somaArea(Figura f1, Figura f2)
{
return f1.area() + f2.area();
}
...

System.out.println(
this.getClass().getName()+ area= + area()
);
}

37

Anel a = new Anel(10,2);


Retangulo r = new Retangulo(1,2);
System.out.println( Figura.somaArea(a, r) );

CEFETPB
CEFET-PB

CEFETPB
CEFET-PB

A palavra reservada this representa o objeto que


est sendo manipulado
Fausto Maranho Ayres

Fausto Maranho Ayres

Mtodo e Classe Abstratos




Mtodo Abstrato: um mtodo incompleto,


contendo apenas a sua assinatura: ex:

1.
2.

O uso de mtodos abstratos obriga que todas as


subclasses concretas o implemente

3.

Classe Abstrata: uma classe que no pode ser


instanciada (no faz sentido). ex:

Limpa a memria ocupada pelos objetos inacessveis


(quando h falta de memria).

O uso de classe abstrata necessrio quando h


mtodos abstratos ou quando a classe genrica e usada
apenas para reunir propriedades e mtodos comuns a
vrias subclasses

39

CEFETPB
CEFET-PB

CEFETPB
CEFET-PB

Instanciao: o objeto criado na memria e passa a


ser referenciado por uma varivel de referncia;
Uso: o objeto recebe mensagens de outros objetos e,
com isso, executa parte da funcionalidade do sistema;
Destruio: quando o objeto no mais referenciado
(inacessvel) ele torna-se elegvel para a coleta de lixo
Coletor de Lixo:

public abstract class Figura {...}

Fausto Maranho Ayres

38

Ciclo de vida de um objeto

public abstract double area();

Tipo polimrfico

Fausto Maranho Ayres

40

Ciclo de vida de um objeto




Ciclo de vida de um objeto

A declarao indica o tipo de uma referncia

Retangulo r;
r = new Retangulo(5,30);
r.setLargura(10);
r = null;

//declarao
//instanciao
//uso
//desprezo

A instanciao cria o objeto na memria

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

Fausto Maranho Ayres

//declarao
//atribuio
//uso
//desprezo

r
30

atribuio
Fausto Maranho Ayres

43

//declarao
//instanciao
//uso
//desprezo

setLargura(10)
5

CEFETPB
CEFET-PB

CEFETPB
CEFET-PB

Uma mensagem enviada ao objeto

Retangulo r;
r = new Retangulo(5,30);
r.setLargura(10);
r = null;

r
5

42

Ciclo de vida de um objeto

A atribuio cria uma referncia para o objeto na


memria

Retangulo r;
r = new Retangulo(5,30);
r.setLargura(10);
r = null;

30

instanciao

Ciclo de vida de um objeto




//declarao
//instanciao
//uso
//desprezo

30
mensagem

Fausto Maranho Ayres

44

Ciclo de vida de um objeto


o mtodo correspondente executado!

Retangulo r;
r = new Retangulo(5,30);
r.setLargura(10);
r = null;

//declarao
//instanciao
//uso
//desprezo

O objeto deixa de ser referenciado

Retangulo r;
r = new Retangulo(5,30);
r.setLargura(10);
r = null;

10

30

Fausto Maranho Ayres

45

Fausto Maranho Ayres

Um objeto pode ter vrias referncias:


Retangulo r1,r2,r3;
r1 = new Retangulo(5,30);
r2=r1;
r3=r1;

String s;
Retangulo r1,r2;
Date d;
double soma (Figura f1, Figura f2) ...

Objeto
Retangulo

Obs: toda classe Java pode ser usada como TIPO,


inclusive as classes abstratas
47

CEFETPB
CEFET-PB

largura

CEFETPB
CEFET-PB

46

Referncias para objeto

os objetos so acessveis atravs das variveis


de referncias.
As variveis so declaradas conforme o TIPO
DE OBJETO que iro referenciar. Ex:

Fausto Maranho Ayres

O objeto est
elegvel para a
coleta de lixo

30

varivel sem referncia!

Variveis de referncia


//declarao
//instanciao
//uso
//desprezo

setLargura(10)
10

CEFETPB
CEFET-PB

CEFETPB
CEFET-PB

Ciclo de vida de um objeto

5
Comprimento
30

r2

1 objeto
3 referncias

r3

r1
Fausto Maranho Ayres

48

Exerccio


Bibliografia

Considere o trecho abaixo:

Retangulo r1,r2,r3;
r1 = new Retangulo(5,30);
r2 = new Retangulo(10,10);
r3=r2;
r1=r2;




 Quantos objetos so instanciados?

 Mostre graficamente os objetos.


 Quantas referncias para objetos foram criadas?

coleta de lixo?

Fausto Maranho Ayres

49

CEFETPB
CEFET-PB

CEFETPB
CEFET-PB

 No final, quantos objetos estaro elegveis para a

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.

Fausto Maranho Ayres

50

Potrebbero piacerti anche