ESTUDO DE MOBILIDADE DE AGENTES EM APLICAÇÕES SENSÍVEIS AO CONTEXTO
Introdução à Programação Orientada a Objetos Usando Java
1. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Introdu¸˜o ` Programa¸˜o Orientada a Objetos
ca a ca
usando Java
Helio Henrique L. C. Monte-Alto
Disciplina: Paradigma de Programa¸˜o Imperativa e Orientada
ca
a Objetos
2012
2. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
T´picos
o
1 Introdu¸˜o
ca
2 Classes e objetos
3 Atributos e M´todos
e
4 Encapsulamento
5 Relacionamentos
Associa¸˜es
co
Agrega¸˜o e composi¸˜o
ca ca
6 Heran¸a e polimorfismo
c
7 Interfaces
3. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Introdu¸˜o
ca
Introdu¸˜o
ca
Orienta¸˜o a objetos (OO) ´ uma aplica¸˜o de tipos abstratos
ca e ca
de dados
O programa ´ estruturado de forma a representar os objetos e
e
as rela¸˜es entre eles no mundo real
co
Exemplos de linguagens: Java, C++, Python, Ruby,
Smalltalk, Javascript, C#, Scala, etc.
Discuss˜o
a
Orienta¸˜o a objetos ´ um paradigma de programa¸˜o? Ou seria
ca e ca
apenas um estilo de programa¸˜o?
ca
4. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Classes e objetos
Classes e objetos
Classe
Conjunto de indiv´ıduos (objetos) com atributos e
comportamentos (m´todos) em comum
e
Ex: classe dos animais mam´ ıferos
Comportamentos: respirar, amamentar, locomover-se, etc.
Atributos: tempo de vida, tamanho, etc.
Al´m disso, em LP, uma classe define um tipo de dados, assim
e
como sua interface (opera¸˜es / m´todos)
co e
Objeto
Um objeto ´ uma instˆncia (ou concretiza¸˜o) de uma classe
e a ca
5. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Classes e objetos
Classes e objetos - Exemplos
A defini¸˜o de uma classe pode ser vista como uma receita de
ca
bolo
Os bolos criados a partir dessa receita s˜o instˆncias dessa
a a
classe
6. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Atributos e M´todos
e
Atributos e M´todos
e
Atributos
Valores dos atributos constituem o estado de um objeto
Estado diferencia objetos da mesma classe
M´todos
e
M´todos p´blicos constituem a interface (ou protocolo) de
e u
mensagens dos objetos de uma classe
Diferen¸as na interface (m´todos a mais) e na implementa¸˜o
c e ca
(polimorfismo) diferenciam objetos de classes pais, filhas e
irm˜s
a
7. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Atributos e M´todos
e
Exemplo Lampada 1
c l a s s Lampada {
// E s t a d o
p r i v a t e boolean acesa = f a l s e ;
// I n t e r f a c e
public void acender () {
acesa = true ;
}
p u b l i c void apagar () {
acesa = f a l s e ;
}
}
Quest˜o
a
Quantos objetos distintos pertencem ` classe Lampada?
a
8. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Atributos e M´todos
e
Exemplo 1.3
Figura : Atributos (estado): o que objeto conhece. M´todos: o que o
e
objeto faz (Sierra e Bates, 2005)
9. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Encapsulamento
Modificadores de acesso / visibilidade
Em Java
private
public
package
protected
10. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Encapsulamento
Encapsulamento
Encapsulamento
Consiste em esconder os membros da classe;
Utiliza¸˜o do objeto deve ser feita apenas por meio de sua
ca
interface;
Exemplos:
Carro: volante e pedais (interface); motor, rodas
(implementa¸˜o)
ca
Estrutura de pilha: empilhar, desempilhar e ver o topo
(interface); lista est´tica, lista ligada dinˆmica
a a
(implementa¸˜o)
ca
11. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Encapsulamento
M´todos de acesso: getters e setters
e
Servem para recuperar os dados privados e fazer atribui¸˜o de
ca
maneira confi´vel, por meio de m´todos
a e
p u b l i c c l a s s Conta {
p r i v a t e double s a l d o ;
// . . . o u t r o s a t r i b u t o s o m i t i d o s
p u b l i c double getSaldo () {
return this . saldo ;
}
p u b l i c void s e t S a l d o ( double s a l d o ) {
this . saldo = saldo ;
}
// . . . o u t r o s metodos o m i t i d o s
}
Quest˜o
a
´ uma boa pr´tica fazer getters e setters para todos os atributos?
E a
Por quˆ?
e
12. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Encapsulamento
Construtores
Servem para inicializar objetos de uma classe
p u b l i c c l a s s Conta {
p r i v a t e i n t numero ;
private Cliente t i t u l a r ;
p r i v a t e double s a l d o ;
p u b l i c Conta ( i n t numero , C l i e n t e titular ) {
t h i s . numero = numero ;
this . saldo = 0;
this . titular = titular ;
}
p u b l i c Conta ( i n t numero , C l i e n t e t i t u l a r , double
saldoinicial ) {
t h i s . numero = numero ;
this . titular = titular ;
this . saldo = s a l d o i n i c i a l ;
}
13. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Encapsulamento
Membros de classe
S˜o atributos e m´todos que n˜o pertencem `s instˆncias,
a e a a a
mas `s classes
a
Tamb´m chamados de membros est´ticos
e a
c l a s s Conta {
private s t a t i c int totalDeContas ;
// . . .
p u b l i c Conta ( ) { // c o n s t r u t o r
Conta . t o t a l D e C o n t a s += 1 ;
}
p u b l i c s t a t i c i n t getTotalDeContas () {
r e t u r n Conta . t o t a l D e C o n t a s ;
}
}
14. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Relacionamentos
Trocas de mensagens
Em OO, enviar uma mensagem s´ ıncrona a um objeto
corresponde a chamar um m´todo p´blico desse objeto
e u
(lembre-se que os m´todos p´blicos constituem o protocolo da
e u
classe)
15. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Relacionamentos
Associa¸˜es
co
Associa¸oes
c˜
Definem liga¸˜es entre objetos de diferentes classes
co
16. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Relacionamentos
Associa¸˜es
co
Agrega¸˜o e composi¸˜o (associa¸oes do tipo parte-de)
ca ca c˜
Agrega¸˜o
ca
Agrega¸˜o: rela¸˜o ”parte-de”fraca entre objetos.
ca ca
Ex: um computador e seus perif´ricos. Os perif´ricos PODEM
e e
existir sem o computador (ligados a outro computador, por
exemplo).
17. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Relacionamentos
Agrega¸˜o e composi¸˜o
ca ca
Agrega¸˜o e composi¸˜o (associa¸oes do tipo parte-de)
ca ca c˜
Composi¸˜o
ca
Composi¸˜o: rela¸˜o forte entre objetos. Ex: um mouse e
ca ca
o o ˜
seus bot˜es. Os bot˜es NAO PODEM existir independentes
do mouse para o qual foram fabricados.
18. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Relacionamentos
Agrega¸˜o e composi¸˜o
ca ca
Agrega¸˜o - Exemplo
ca
19. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Heran¸a e polimorfismo
c
Heran¸a - Introdu¸˜o
c ca
Motiva¸˜o
ca
Tipos abstratos de dados facilitam o reuso
Problemas:
Ao criar uma nova aplica¸˜o, em quase todos os casos s˜o
ca a
requeridas modifica¸˜es nos TAD j´ existentes
co a
Tipos sem forma alguma de hierarquia n˜o condizem com a
a
modelagem de muitos espa¸os de problema
c
Solu¸˜o: heran¸a (especializa¸˜o / generaliza¸˜o)
ca c ca ca
Heran¸a
c
Permite que novas classes herdem atributos e m´todos de outra
e
classe, podendo modificar alguns desses membros e adicionar
novos membros espec´ ıficos da nova classe.
20. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Heran¸a e polimorfismo
c
Conceitos
Uma classe Child que herda / estende uma classe Parent ´ uma especializa¸˜o
e ca
de Parent, e ´ chamada classe derivada, classe filha ou subclasse de Parent;
e
Uma classe Parent pode ser estendida por uma classe Child e ´ uma
e
generaliza¸˜o de Child, sendo chamada classe m˜e ou superclasse de Child.
ca a
Uma subclasse pode ou n˜o ser subtipo de sua superclasse
a
21. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Heran¸a e polimorfismo
c
Exemplo Lampada 2
c l a s s P i s c a P i s c a e x t e n d s Lampada {
// E s t a d o
p r i v a t e boolean piscando = f a l s e ;
// I n t e r f a c e
public void a t i v a r P i s c a () {
acender () ;
piscando = true ;
}
public void d e s a t i v a r P i s c a () {
piscando = f a l s e ;
}
}
Quest˜o
a
E agora? Quantos objetos distintos pertencem ` classe Lampada?
a
E ` classe PiscaPisca?
a
22. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Heran¸a e polimorfismo
c
Modificador de acesso Protected
Um membro protegido ´ vis´ nas classes filhas
e ıvel
Em Java, a cl´usula protected tamb´m implica que o
a e
membro ´ vis´ a todas as classes do mesmo pacote
e ıvel
(package)
23. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Heran¸a e polimorfismo
c
Polimorfismo
M´todos p´blicos e protegidos da classe m˜e podem ser
e u a
sobrescritos pelas classe filha
A vincula¸˜o dos objetos com os m´todos ´ feita
ca e e
dinamicamente, em tempo de execu¸˜o
ca
Vantagem
Permite que outras partes do programa referenciem os objetos
pertencentes a uma hierarquia de classes de maneira mais
transparente, facilitando o reuso.
24. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Heran¸a e polimorfismo
c
Classes abstratas
S˜o classes que n˜o podem ser instanciadas diretamente
a a
As classes filhas implementam os m´todos abstratos da
e
classe m˜e
a
Exemplos
Classe abstrata: Forma geom´trica; Classes concretas:
e
Retˆngulo, Circulo, etc
a
Classe abstrata: Funcion´rio; Classes concretas: Gerente,
a
Secret´rio, etc
a
25. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Heran¸a e polimorfismo
c
Exemplo Forma Geom´trica
e
26. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Heran¸a e polimorfismo
c
Ser´ que ´ heran¸a mesmo?
a e c
O uso de heran¸a aumenta o acoplamento entre as classes
c
Usar apenas quando necess´rio, procurando alternativas como
a
composi¸˜o e Interfaces
ca
Regra b´sica
a
´
Se uma classe B estende A, ent˜o classe B E-UMA classe A;
a
Exemplos:
27. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Heran¸a e polimorfismo
c
Ser´ que ´ heran¸a mesmo?
a e c
O uso de heran¸a aumenta o acoplamento entre as classes
c
Usar apenas quando necess´rio, procurando alternativas como
a
composi¸˜o e Interfaces
ca
Regra b´sica
a
´
Se uma classe B estende A, ent˜o classe B E-UMA classe A;
a
Exemplos:
Quadrado ´ uma Forma Geometrica?
e
28. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Heran¸a e polimorfismo
c
Ser´ que ´ heran¸a mesmo?
a e c
O uso de heran¸a aumenta o acoplamento entre as classes
c
Usar apenas quando necess´rio, procurando alternativas como
a
composi¸˜o e Interfaces
ca
Regra b´sica
a
´
Se uma classe B estende A, ent˜o classe B E-UMA classe A;
a
Exemplos:
Quadrado ´ uma Forma Geometrica? SIM!
e
29. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Heran¸a e polimorfismo
c
Ser´ que ´ heran¸a mesmo?
a e c
O uso de heran¸a aumenta o acoplamento entre as classes
c
Usar apenas quando necess´rio, procurando alternativas como
a
composi¸˜o e Interfaces
ca
Regra b´sica
a
´
Se uma classe B estende A, ent˜o classe B E-UMA classe A;
a
Exemplos:
Quadrado ´ uma Forma Geometrica? SIM!
e
Lobo ´ um Animal?
e
30. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Heran¸a e polimorfismo
c
Ser´ que ´ heran¸a mesmo?
a e c
O uso de heran¸a aumenta o acoplamento entre as classes
c
Usar apenas quando necess´rio, procurando alternativas como
a
composi¸˜o e Interfaces
ca
Regra b´sica
a
´
Se uma classe B estende A, ent˜o classe B E-UMA classe A;
a
Exemplos:
Quadrado ´ uma Forma Geometrica? SIM!
e
Lobo ´ um Animal? SIM!
e
31. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Heran¸a e polimorfismo
c
Ser´ que ´ heran¸a mesmo?
a e c
O uso de heran¸a aumenta o acoplamento entre as classes
c
Usar apenas quando necess´rio, procurando alternativas como
a
composi¸˜o e Interfaces
ca
Regra b´sica
a
´
Se uma classe B estende A, ent˜o classe B E-UMA classe A;
a
Exemplos:
Quadrado ´ uma Forma Geometrica? SIM!
e
Lobo ´ um Animal? SIM!
e
Banheira ´ um Banheiro?
e
32. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Heran¸a e polimorfismo
c
Ser´ que ´ heran¸a mesmo?
a e c
O uso de heran¸a aumenta o acoplamento entre as classes
c
Usar apenas quando necess´rio, procurando alternativas como
a
composi¸˜o e Interfaces
ca
Regra b´sica
a
´
Se uma classe B estende A, ent˜o classe B E-UMA classe A;
a
Exemplos:
Quadrado ´ uma Forma Geometrica? SIM!
e
Lobo ´ um Animal? SIM!
e
˜
Banheira ´ um Banheiro? NAO!
e
33. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Heran¸a e polimorfismo
c
Ser´ que ´ heran¸a mesmo?
a e c
O uso de heran¸a aumenta o acoplamento entre as classes
c
Usar apenas quando necess´rio, procurando alternativas como
a
composi¸˜o e Interfaces
ca
Regra b´sica
a
´
Se uma classe B estende A, ent˜o classe B E-UMA classe A;
a
Exemplos:
Quadrado ´ uma Forma Geometrica? SIM!
e
Lobo ´ um Animal? SIM!
e
˜
Banheira ´ um Banheiro? NAO! Banheiro TEM-UMA
e
Banheira (use agrega¸˜o / composi¸˜o)
ca ca
34. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Heran¸a e polimorfismo
c
Ser´ que ´ heran¸a mesmo?
a e c
O uso de heran¸a aumenta o acoplamento entre as classes
c
Usar apenas quando necess´rio, procurando alternativas como
a
composi¸˜o e Interfaces
ca
Regra b´sica
a
´
Se uma classe B estende A, ent˜o classe B E-UMA classe A;
a
Exemplos:
Quadrado ´ uma Forma Geometrica? SIM!
e
Lobo ´ um Animal? SIM!
e
˜
Banheira ´ um Banheiro? NAO! Banheiro TEM-UMA
e
Banheira (use agrega¸˜o / composi¸˜o)
ca ca
Pilha ´ uma Lista?
e
35. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Heran¸a e polimorfismo
c
Ser´ que ´ heran¸a mesmo?
a e c
O uso de heran¸a aumenta o acoplamento entre as classes
c
Usar apenas quando necess´rio, procurando alternativas como
a
composi¸˜o e Interfaces
ca
Regra b´sica
a
´
Se uma classe B estende A, ent˜o classe B E-UMA classe A;
a
Exemplos:
Quadrado ´ uma Forma Geometrica? SIM!
e
Lobo ´ um Animal? SIM!
e
˜
Banheira ´ um Banheiro? NAO! Banheiro TEM-UMA
e
Banheira (use agrega¸˜o / composi¸˜o)
ca ca
˜
Pilha ´ uma Lista? NAO!
e
36. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Heran¸a e polimorfismo
c
Ser´ que ´ heran¸a mesmo?
a e c
O uso de heran¸a aumenta o acoplamento entre as classes
c
Usar apenas quando necess´rio, procurando alternativas como
a
composi¸˜o e Interfaces
ca
Regra b´sica
a
´
Se uma classe B estende A, ent˜o classe B E-UMA classe A;
a
Exemplos:
Quadrado ´ uma Forma Geometrica? SIM!
e
Lobo ´ um Animal? SIM!
e
˜
Banheira ´ um Banheiro? NAO! Banheiro TEM-UMA
e
Banheira (use agrega¸˜o / composi¸˜o)
ca ca
e ˜
Pilha ´ uma Lista? NAO! Pilha n˜o tem m´todos add() nem
a e
remove() (use composi¸˜o)
ca
37. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Interfaces
Interfaces
Uma interface em Java define uma cole¸˜o de m´todos
ca e
p´blicos, sem definir a implementa¸˜o
u ca
Apenas exp˜e o que o objeto deve fazer, e n˜o como ele
o a
faz ou o que ele tem
Exemplo
Em Java, para ordenar uma lista usando
Collection.sort(lista), ´ necess´rio que os membros da
e a
lista implementem a interface Comparable.
p u b l i c i n t e r f a c e Comparable<T> {
i n t compareTo (T o u t r o ) ;
}
38. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Interfaces
Exemplo Funcion´rios
a
39. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Interfaces
Exemplo Funcion´rios
a
Quero que alguns funcion´rios (Diretor e Gerente) consigam se
a
autenticar no sistema interno.
40. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Interfaces
Exemplo Funcion´rios
a
Depois de um tempo, descobri que preciso que o cliente tamb´me
possa se autenticar no sistema interno, ent˜o fiz a caca abaixo:
a
41. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Interfaces
Exemplo Funcion´rios
a
Depois de refatorar meu sistema usando interfaces, eliminei as
gambiarras e deixei o sistema menos acoplado e mais manuten´ ıvel.
(Um prot´tipo do c´digo estar´ nos exemplos.)
o o a
42. Introdu¸˜o ` Programa¸˜o Orientada a Objetos usando Java
ca a ca
Interfaces
Referˆncias Bibliogr´ficas
e a
Arlow J., Neustadt I. UML and the Unified Process - Practical
Object-Oriented Analysis and Design. Pearson. 2002
Caelum. Java e Orienta¸˜o a Objetos. Dispon´ em <
ca ıvel
http://www.caelum.com.br/curso/fj-11-java-orientacao-
objetos>
Sierra K., Bates B. Use a Cabe¸a! - Java. 2a Edi¸˜o. O’Reilly
c ca
Media. 2005