Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java
Introdu¸c˜ao `a Programa¸c˜ao Orientada a Objetos usando Java Helio Henrique L. C. Monte-Alto Disciplina: Paradigma de Programa¸c˜ao Imperativa e Orientada a Objetos
2012
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java
T´opicos 1 Introdu¸c˜ ao 2 Classes e objetos 3 Atributos e M´ etodos 4 Encapsulamento 5 Relacionamentos
Associa¸c˜oes Agrega¸c˜ao e composi¸c˜ao 6 Heran¸ca e polimorfismo 7 Interfaces
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Introdu¸c˜ ao
Introdu¸c˜ao
Orienta¸c˜ao a objetos (OO) ´e uma aplica¸c˜ao de tipos abstratos de dados O programa ´e estruturado de forma a representar os objetos e as rela¸c˜oes entre eles no mundo real Exemplos de linguagens: Java, C++, Python, Ruby, Smalltalk, Javascript, C#, Scala, etc. Discuss˜ao Orienta¸c˜ao a objetos ´e um paradigma de programa¸c˜ao? Ou seria apenas um estilo de programa¸c˜ao?
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Classes e objetos
Classes e objetos Classe Conjunto de indiv´ıduos (objetos) com atributos e comportamentos (m´ etodos) em comum Ex: classe dos animais mam´ıferos Comportamentos: respirar, amamentar, locomover-se, etc. Atributos: tempo de vida, tamanho, etc.
Al´em disso, em LP, uma classe define um tipo de dados, assim como sua interface (opera¸c˜ oes / m´etodos) Objeto Um objeto ´e uma instˆancia (ou concretiza¸c˜ao) de uma classe
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Classes e objetos
Classes e objetos - Exemplos A defini¸c˜ao de uma classe pode ser vista como uma receita de bolo Os bolos criados a partir dessa receita s˜ao instˆancias dessa classe
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Atributos e M´ etodos
Atributos e M´etodos
Atributos Valores dos atributos constituem o estado de um objeto Estado diferencia objetos da mesma classe M´etodos M´ etodos p´ ublicos constituem a interface (ou protocolo) de mensagens dos objetos de uma classe Diferen¸cas na interface (m´etodos a mais) e na implementa¸c˜ao (polimorfismo) diferenciam objetos de classes pais, filhas e irm˜as
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Atributos e M´ etodos
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˜ao Quantos objetos distintos pertencem `a classe Lampada?
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Atributos e M´ etodos
Exemplo 1.3
Figura : Atributos (estado): o que objeto conhece. M´etodos: o que o objeto faz (Sierra e Bates, 2005)
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Encapsulamento
Modificadores de acesso / visibilidade Em Java private public package protected
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Encapsulamento
Encapsulamento
Encapsulamento Consiste em esconder os membros da classe; Utiliza¸c˜ao do objeto deve ser feita apenas por meio de sua interface; Exemplos: Carro: volante e pedais (interface); motor, rodas (implementa¸c˜ao) Estrutura de pilha: empilhar, desempilhar e ver o topo (interface); lista est´atica, lista ligada dinˆamica (implementa¸c˜ao)
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Encapsulamento
M´etodos de acesso: getters e setters Servem para recuperar os dados privados e fazer atribui¸c˜ao de maneira confi´avel, por meio de m´etodos 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˜ao ´ uma boa pr´atica fazer getters e setters para todos os atributos? E Por quˆe?
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java 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 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 saldoinicial ) { t h i s . numero = numero ; this . titular = titular ; this . saldo = s a l d o i n i c i a l ; }
titular ) {
t i t u l a r , double
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Encapsulamento
Membros de classe
S˜ao atributos e m´etodos que n˜ao pertencem `as instˆancias, mas `as classes Tamb´em chamados de membros est´aticos 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 ; } }
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Relacionamentos
Trocas de mensagens
Em OO, enviar uma mensagem s´ıncrona a um objeto corresponde a chamar um m´etodo p´ ublico desse objeto (lembre-se que os m´etodos p´ ublicos constituem o protocolo da classe)
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Relacionamentos Associa¸c˜ oes
Associa¸co˜es
Definem liga¸c˜oes entre objetos de diferentes classes
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Relacionamentos Associa¸c˜ oes
Agrega¸c˜ao e composi¸c˜ao (associa¸co˜es do tipo parte-de) Agrega¸c˜ao Agrega¸c˜ao: rela¸c˜ao ”parte-de”fraca entre objetos. Ex: um computador e seus perif´ericos. Os perif´ericos PODEM existir sem o computador (ligados a outro computador, por exemplo).
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Relacionamentos Agrega¸c˜ ao e composi¸c˜ ao
Agrega¸c˜ao e composi¸c˜ao (associa¸co˜es do tipo parte-de) Composi¸c˜ao Composi¸c˜ao: rela¸c˜ao forte entre objetos. Ex: um mouse e ˜ PODEM existir independentes seus bot˜oes. Os bot˜ oes NAO do mouse para o qual foram fabricados.
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Relacionamentos Agrega¸c˜ ao e composi¸c˜ ao
Agrega¸c˜ao - Exemplo
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Heran¸ca e polimorfismo
Heran¸ca - Introdu¸c˜ao Motiva¸c˜ao Tipos abstratos de dados facilitam o reuso Problemas: Ao criar uma nova aplica¸c˜ao, em quase todos os casos s˜ao requeridas modifica¸c˜ oes nos TAD j´a existentes Tipos sem forma alguma de hierarquia n˜ao condizem com a modelagem de muitos espa¸cos de problema
Solu¸c˜ ao: heran¸ca (especializa¸c˜ao / generaliza¸c˜ao) Heran¸ca Permite que novas classes herdem atributos e m´etodos de outra classe, podendo modificar alguns desses membros e adicionar novos membros espec´ıficos da nova classe.
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Heran¸ca e polimorfismo
Conceitos Uma classe Child que herda / estende uma classe Parent ´ e uma especializa¸c˜ ao de Parent, e ´ e chamada classe derivada, classe filha ou subclasse de Parent; Uma classe Parent pode ser estendida por uma classe Child e ´ e uma generaliza¸c˜ ao de Child, sendo chamada classe m˜ ae ou superclasse de Child. Uma subclasse pode ou n˜ ao ser subtipo de sua superclasse
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Heran¸ca e polimorfismo
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˜ao E agora? Quantos objetos distintos pertencem `a classe Lampada? E `a classe PiscaPisca?
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Heran¸ca e polimorfismo
Modificador de acesso Protected
Um membro protegido ´e vis´ıvel nas classes filhas Em Java, a cl´ausula protected tamb´em implica que o membro ´e vis´ıvel a todas as classes do mesmo pacote (package)
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Heran¸ca e polimorfismo
Polimorfismo
M´etodos p´ ublicos e protegidos da classe m˜ae podem ser sobrescritos pelas classe filha A vincula¸c˜ao dos objetos com os m´etodos ´e feita dinamicamente, em tempo de execu¸c˜ao Vantagem Permite que outras partes do programa referenciem os objetos pertencentes a uma hierarquia de classes de maneira mais transparente, facilitando o reuso.
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Heran¸ca e polimorfismo
Classes abstratas
S˜ao classes que n˜ao podem ser instanciadas diretamente As classes filhas implementam os m´ etodos abstratos da classe m˜ae Exemplos Classe abstrata: Forma geom´etrica; Classes concretas: Retˆangulo, Circulo, etc Classe abstrata: Funcion´ario; Classes concretas: Gerente, Secret´ario, etc
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Heran¸ca e polimorfismo
Exemplo Forma Geom´etrica
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Heran¸ca e polimorfismo
Ser´a que ´e heran¸ca mesmo? O uso de heran¸ca aumenta o acoplamento entre as classes Usar apenas quando necess´ario, procurando alternativas como composi¸c˜ ao e Interfaces Regra b´asica ´ Se uma classe B estende A, ent˜ao classe B E-UMA classe A; Exemplos:
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Heran¸ca e polimorfismo
Ser´a que ´e heran¸ca mesmo? O uso de heran¸ca aumenta o acoplamento entre as classes Usar apenas quando necess´ario, procurando alternativas como composi¸c˜ ao e Interfaces Regra b´asica ´ Se uma classe B estende A, ent˜ao classe B E-UMA classe A; Exemplos: Quadrado ´e uma Forma Geometrica?
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Heran¸ca e polimorfismo
Ser´a que ´e heran¸ca mesmo? O uso de heran¸ca aumenta o acoplamento entre as classes Usar apenas quando necess´ario, procurando alternativas como composi¸c˜ ao e Interfaces Regra b´asica ´ Se uma classe B estende A, ent˜ao classe B E-UMA classe A; Exemplos: Quadrado ´e uma Forma Geometrica? SIM!
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Heran¸ca e polimorfismo
Ser´a que ´e heran¸ca mesmo? O uso de heran¸ca aumenta o acoplamento entre as classes Usar apenas quando necess´ario, procurando alternativas como composi¸c˜ ao e Interfaces Regra b´asica ´ Se uma classe B estende A, ent˜ao classe B E-UMA classe A; Exemplos: Quadrado ´e uma Forma Geometrica? SIM! Lobo ´e um Animal?
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Heran¸ca e polimorfismo
Ser´a que ´e heran¸ca mesmo? O uso de heran¸ca aumenta o acoplamento entre as classes Usar apenas quando necess´ario, procurando alternativas como composi¸c˜ ao e Interfaces Regra b´asica ´ Se uma classe B estende A, ent˜ao classe B E-UMA classe A; Exemplos: Quadrado ´e uma Forma Geometrica? SIM! Lobo ´e um Animal? SIM!
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Heran¸ca e polimorfismo
Ser´a que ´e heran¸ca mesmo? O uso de heran¸ca aumenta o acoplamento entre as classes Usar apenas quando necess´ario, procurando alternativas como composi¸c˜ ao e Interfaces Regra b´asica ´ Se uma classe B estende A, ent˜ao classe B E-UMA classe A; Exemplos: Quadrado ´e uma Forma Geometrica? SIM! Lobo ´e um Animal? SIM! Banheira ´e um Banheiro?
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Heran¸ca e polimorfismo
Ser´a que ´e heran¸ca mesmo? O uso de heran¸ca aumenta o acoplamento entre as classes Usar apenas quando necess´ario, procurando alternativas como composi¸c˜ ao e Interfaces Regra b´asica ´ Se uma classe B estende A, ent˜ao classe B E-UMA classe A; Exemplos: Quadrado ´e uma Forma Geometrica? SIM! Lobo ´e um Animal? SIM! ˜ Banheira ´e um Banheiro? NAO!
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Heran¸ca e polimorfismo
Ser´a que ´e heran¸ca mesmo? O uso de heran¸ca aumenta o acoplamento entre as classes Usar apenas quando necess´ario, procurando alternativas como composi¸c˜ ao e Interfaces Regra b´asica ´ Se uma classe B estende A, ent˜ao classe B E-UMA classe A; Exemplos: Quadrado ´e uma Forma Geometrica? SIM! Lobo ´e um Animal? SIM! ˜ Banheiro TEM-UMA Banheira ´e um Banheiro? NAO! Banheira (use agrega¸c˜ao / composi¸c˜ao)
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Heran¸ca e polimorfismo
Ser´a que ´e heran¸ca mesmo? O uso de heran¸ca aumenta o acoplamento entre as classes Usar apenas quando necess´ario, procurando alternativas como composi¸c˜ ao e Interfaces Regra b´asica ´ Se uma classe B estende A, ent˜ao classe B E-UMA classe A; Exemplos: Quadrado ´e uma Forma Geometrica? SIM! Lobo ´e um Animal? SIM! ˜ Banheiro TEM-UMA Banheira ´e um Banheiro? NAO! Banheira (use agrega¸c˜ao / composi¸c˜ao) Pilha ´e uma Lista?
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Heran¸ca e polimorfismo
Ser´a que ´e heran¸ca mesmo? O uso de heran¸ca aumenta o acoplamento entre as classes Usar apenas quando necess´ario, procurando alternativas como composi¸c˜ ao e Interfaces Regra b´asica ´ Se uma classe B estende A, ent˜ao classe B E-UMA classe A; Exemplos: Quadrado ´e uma Forma Geometrica? SIM! Lobo ´e um Animal? SIM! ˜ Banheiro TEM-UMA Banheira ´e um Banheiro? NAO! Banheira (use agrega¸c˜ao / composi¸c˜ao) ˜ Pilha ´e uma Lista? NAO!
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Heran¸ca e polimorfismo
Ser´a que ´e heran¸ca mesmo? O uso de heran¸ca aumenta o acoplamento entre as classes Usar apenas quando necess´ario, procurando alternativas como composi¸c˜ ao e Interfaces Regra b´asica ´ Se uma classe B estende A, ent˜ao classe B E-UMA classe A; Exemplos: Quadrado ´e uma Forma Geometrica? SIM! Lobo ´e um Animal? SIM! ˜ Banheiro TEM-UMA Banheira ´e um Banheiro? NAO! Banheira (use agrega¸c˜ao / composi¸c˜ao) ˜ Pilha n˜ao tem m´etodos add() nem Pilha ´e uma Lista? NAO! remove() (use composi¸c˜ao)
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Interfaces
Interfaces Uma interface em Java define uma cole¸c˜ao de m´etodos p´ ublicos, sem definir a implementa¸c˜ao Apenas exp˜oe o que o objeto deve fazer, e n˜ao como ele faz ou o que ele tem Exemplo Em Java, para ordenar uma lista usando Collection.sort(lista), ´e necess´ario que os membros da lista implementem a interface Comparable. p u b l i c i n t e r f a c e Comparable { i n t compareTo (T o u t r o ) ; }
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Interfaces
Exemplo Funcion´arios
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Interfaces
Exemplo Funcion´arios Quero que alguns funcion´arios (Diretor e Gerente) consigam se autenticar no sistema interno.
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Interfaces
Exemplo Funcion´arios Depois de um tempo, descobri que preciso que o cliente tamb´em possa se autenticar no sistema interno, ent˜ao fiz a caca abaixo:
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Interfaces
Exemplo Funcion´arios Depois de refatorar meu sistema usando interfaces, eliminei as gambiarras e deixei o sistema menos acoplado e mais manuten´ıvel. (Um prot´otipo do c´odigo estar´a nos exemplos.)
Introdu¸c˜ ao ` a Programa¸c˜ ao Orientada a Objetos usando Java Interfaces
Referˆencias Bibliogr´aficas
Arlow J., Neustadt I. UML and the Unified Process - Practical Object-Oriented Analysis and Design. Pearson. 2002 Caelum. Java e Orienta¸c˜ao a Objetos. Dispon´ıvel em < http://www.caelum.com.br/curso/fj-11-java-orientacaoobjetos> Sierra K., Bates B. Use a Cabe¸ca! - Java. 2a Edi¸c˜ao. O’Reilly Media. 2005