introdução à programação orientada a objetos usando java

42
Introdu¸c˜ ao ` aPrograma¸c˜ ao Orientada a Objetos usando Java Introdu¸c˜ ao ` aPrograma¸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

Upload: helio-henrique-monte-alto

Post on 05-Dec-2014

2.281 views

Category:

Technology


2 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Introducao a Programacao Orientada a Objetosusando Java

Helio Henrique L. C. Monte-AltoDisciplina: Paradigma de Programacao Imperativa e Orientada

a Objetos

2012

Page 2: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Topicos

1 Introducao

2 Classes e objetos

3 Atributos e Metodos

4 Encapsulamento

5 RelacionamentosAssociacoesAgregacao e composicao

6 Heranca e polimorfismo

7 Interfaces

Page 3: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Introducao

Introducao

Orientacao a objetos (OO) e uma aplicacao de tipos abstratosde dados

O programa e estruturado de forma a representar os objetos eas relacoes entre eles no mundo real

Exemplos de linguagens: Java, C++, Python, Ruby,Smalltalk, Javascript, C#, Scala, etc.

Discussao

Orientacao a objetos e um paradigma de programacao? Ou seriaapenas um estilo de programacao?

Page 4: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Classes e objetos

Classes e objetos

Classe

Conjunto de indivıduos (objetos) com atributos ecomportamentos (metodos) em comum

Ex: classe dos animais mamıferos

Comportamentos: respirar, amamentar, locomover-se, etc.Atributos: tempo de vida, tamanho, etc.

Alem disso, em LP, uma classe define um tipo de dados, assimcomo sua interface (operacoes / metodos)

Objeto

Um objeto e uma instancia (ou concretizacao) de uma classe

Page 5: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Classes e objetos

Classes e objetos - Exemplos

A definicao de uma classe pode ser vista como uma receita debolo

Os bolos criados a partir dessa receita sao instancias dessaclasse

Page 6: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Atributos e Metodos

Atributos e Metodos

Atributos

Valores dos atributos constituem o estado de um objeto

Estado diferencia objetos da mesma classe

Metodos

Metodos publicos constituem a interface (ou protocolo) demensagens dos objetos de uma classe

Diferencas na interface (metodos a mais) e na implementacao(polimorfismo) diferenciam objetos de classes pais, filhas eirmas

Page 7: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Atributos e Metodos

Exemplo Lampada 1

c l a s s Lampada {

// Estadop r i v a t e boolean a c e s a = f a l s e ;

// I n t e r f a c ep u b l i c v o i d a c e n d e r ( ) {

a c e s a = t r u e ;}

p u b l i c v o i d apagar ( ) {a c e s a = f a l s e ;

}

}

Questao

Quantos objetos distintos pertencem a classe Lampada?

Page 8: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Atributos e Metodos

Exemplo 1.3

Figura : Atributos (estado): o que objeto conhece. Metodos: o que oobjeto faz (Sierra e Bates, 2005)

Page 9: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Encapsulamento

Modificadores de acesso / visibilidade

Em Java

private

public

package

protected

Page 10: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Encapsulamento

Encapsulamento

Encapsulamento

Consiste em esconder os membros da classe;

Utilizacao do objeto deve ser feita apenas por meio de suainterface;

Exemplos:

Carro: volante e pedais (interface); motor, rodas(implementacao)Estrutura de pilha: empilhar, desempilhar e ver o topo(interface); lista estatica, lista ligada dinamica(implementacao)

Page 11: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Encapsulamento

Metodos de acesso: getters e setters

Servem para recuperar os dados privados e fazer atribuicao demaneira confiavel, por meio de metodos

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 om i t i d o s

p u b l i c double g e t S a l d o ( ) {r e t u r n t h i s . s a l d o ;

}p u b l i c v o i d s e t S a l d o ( double s a l d o ) {

t h i s . s a l d o = s a l d o ;}// . . . o u t r o s metodos om i t i d o s

}

Questao

E uma boa pratica fazer getters e setters para todos os atributos?Por que?

Page 12: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao 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 ;p r i v a t e C l i e n t e 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 i t u l a r ) {t h i s . numero = numero ;t h i s . s a l d o = 0 ;t h i s . t i t u l a r = t i t u l a r ;

}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

s a l d o i n i c i a l ) {t h i s . numero = numero ;t h i s . t i t u l a r = t i t u l a r ;t h i s . s a l d o = s a l d o i n i c i a l ;

}

Page 13: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Encapsulamento

Membros de classe

Sao atributos e metodos que nao pertencem as instancias,mas as classes

Tambem chamados de membros estaticos

c l a s s Conta {p r i v a t e s t a t i c i n t t o t a l D e C o n t a s ;// . . .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 getTota lDeContas ( ) {

r e t u r n Conta . t o t a l D e C o n t a s ;}

}

Page 14: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Relacionamentos

Trocas de mensagens

Em OO, enviar uma mensagem sıncrona a um objetocorresponde a chamar um metodo publico desse objeto(lembre-se que os metodos publicos constituem o protocolo daclasse)

Page 15: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Relacionamentos

Associacoes

Associacoes

Definem ligacoes entre objetos de diferentes classes

Page 16: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Relacionamentos

Associacoes

Agregacao e composicao (associacoes do tipo parte-de)

Agregacao

Agregacao: relacao ”parte-de”fraca entre objetos.

Ex: um computador e seus perifericos. Os perifericos PODEMexistir sem o computador (ligados a outro computador, porexemplo).

Page 17: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Relacionamentos

Agregacao e composicao

Agregacao e composicao (associacoes do tipo parte-de)

Composicao

Composicao: relacao forte entre objetos. Ex: um mouse eseus botoes. Os botoes NAO PODEM existir independentesdo mouse para o qual foram fabricados.

Page 18: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Relacionamentos

Agregacao e composicao

Agregacao - Exemplo

Page 19: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Heranca e polimorfismo

Heranca - Introducao

Motivacao

Tipos abstratos de dados facilitam o reuso

Problemas:Ao criar uma nova aplicacao, em quase todos os casos saorequeridas modificacoes nos TAD ja existentesTipos sem forma alguma de hierarquia nao condizem com amodelagem de muitos espacos de problema

Solucao: heranca (especializacao / generalizacao)

Heranca

Permite que novas classes herdem atributos e metodos de outraclasse, podendo modificar alguns desses membros e adicionarnovos membros especıficos da nova classe.

Page 20: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Heranca e polimorfismo

Conceitos

Uma classe Child que herda / estende uma classe Parent e uma especializacaode Parent, e e chamada classe derivada, classe filha ou subclasse de Parent;

Uma classe Parent pode ser estendida por uma classe Child e e umageneralizacao de Child, sendo chamada classe mae ou superclasse de Child.

Uma subclasse pode ou nao ser subtipo de sua superclasse

Page 21: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Heranca e polimorfismo

Exemplo Lampada 2

c l a s s P i s c a P i s c a extends Lampada{

// Estadop r i v a t e boolean p i s c a n d o = f a l s e ;

// I n t e r f a c ep u b l i c v o i d a t i v a r P i s c a ( ) {

a c e n d e r ( ) ;p i s c a n d o = t r u e ;

}

p u b l i c v o i d d e s a t i v a r P i s c a ( ) {p i s c a n d o = f a l s e ;

}

}

Questao

E agora? Quantos objetos distintos pertencem a classe Lampada?E a classe PiscaPisca?

Page 22: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Heranca e polimorfismo

Modificador de acesso Protected

Um membro protegido e visıvel nas classes filhas

Em Java, a clausula protected tambem implica que omembro e visıvel a todas as classes do mesmo pacote(package)

Page 23: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Heranca e polimorfismo

Polimorfismo

Metodos publicos e protegidos da classe mae podem sersobrescritos pelas classe filha

A vinculacao dos objetos com os metodos e feitadinamicamente, em tempo de execucao

Vantagem

Permite que outras partes do programa referenciem os objetospertencentes a uma hierarquia de classes de maneira maistransparente, facilitando o reuso.

Page 24: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Heranca e polimorfismo

Classes abstratas

Sao classes que nao podem ser instanciadas diretamente

As classes filhas implementam os metodos abstratos daclasse mae

Exemplos

Classe abstrata: Forma geometrica; Classes concretas:Retangulo, Circulo, etc

Classe abstrata: Funcionario; Classes concretas: Gerente,Secretario, etc

Page 25: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Heranca e polimorfismo

Exemplo Forma Geometrica

Page 26: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Heranca e polimorfismo

Sera que e heranca mesmo?

O uso de heranca aumenta o acoplamento entre as classes

Usar apenas quando necessario, procurando alternativas comocomposicao e Interfaces

Regra basica

Se uma classe B estende A, entao classe B E-UMA classe A;

Exemplos:

Quadrado e uma Forma Geometrica? SIM!Lobo e um Animal? SIM!Banheira e um Banheiro? NAO! Banheiro TEM-UMABanheira (use agregacao / composicao)Pilha e uma Lista? NAO! Pilha nao tem metodos add() nemremove() (use composicao)

Page 27: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Heranca e polimorfismo

Sera que e heranca mesmo?

O uso de heranca aumenta o acoplamento entre as classes

Usar apenas quando necessario, procurando alternativas comocomposicao e Interfaces

Regra basica

Se uma classe B estende A, entao classe B E-UMA classe A;

Exemplos:

Quadrado e uma Forma Geometrica?

SIM!Lobo e um Animal? SIM!Banheira e um Banheiro? NAO! Banheiro TEM-UMABanheira (use agregacao / composicao)Pilha e uma Lista? NAO! Pilha nao tem metodos add() nemremove() (use composicao)

Page 28: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Heranca e polimorfismo

Sera que e heranca mesmo?

O uso de heranca aumenta o acoplamento entre as classes

Usar apenas quando necessario, procurando alternativas comocomposicao e Interfaces

Regra basica

Se uma classe B estende A, entao classe B E-UMA classe A;

Exemplos:

Quadrado e uma Forma Geometrica? SIM!

Lobo e um Animal? SIM!Banheira e um Banheiro? NAO! Banheiro TEM-UMABanheira (use agregacao / composicao)Pilha e uma Lista? NAO! Pilha nao tem metodos add() nemremove() (use composicao)

Page 29: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Heranca e polimorfismo

Sera que e heranca mesmo?

O uso de heranca aumenta o acoplamento entre as classes

Usar apenas quando necessario, procurando alternativas comocomposicao e Interfaces

Regra basica

Se uma classe B estende A, entao classe B E-UMA classe A;

Exemplos:

Quadrado e uma Forma Geometrica? SIM!Lobo e um Animal?

SIM!Banheira e um Banheiro? NAO! Banheiro TEM-UMABanheira (use agregacao / composicao)Pilha e uma Lista? NAO! Pilha nao tem metodos add() nemremove() (use composicao)

Page 30: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Heranca e polimorfismo

Sera que e heranca mesmo?

O uso de heranca aumenta o acoplamento entre as classes

Usar apenas quando necessario, procurando alternativas comocomposicao e Interfaces

Regra basica

Se uma classe B estende A, entao classe B E-UMA classe A;

Exemplos:

Quadrado e uma Forma Geometrica? SIM!Lobo e um Animal? SIM!

Banheira e um Banheiro? NAO! Banheiro TEM-UMABanheira (use agregacao / composicao)Pilha e uma Lista? NAO! Pilha nao tem metodos add() nemremove() (use composicao)

Page 31: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Heranca e polimorfismo

Sera que e heranca mesmo?

O uso de heranca aumenta o acoplamento entre as classes

Usar apenas quando necessario, procurando alternativas comocomposicao e Interfaces

Regra basica

Se uma classe B estende A, entao classe B E-UMA classe A;

Exemplos:

Quadrado e uma Forma Geometrica? SIM!Lobo e um Animal? SIM!Banheira e um Banheiro?

NAO! Banheiro TEM-UMABanheira (use agregacao / composicao)Pilha e uma Lista? NAO! Pilha nao tem metodos add() nemremove() (use composicao)

Page 32: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Heranca e polimorfismo

Sera que e heranca mesmo?

O uso de heranca aumenta o acoplamento entre as classes

Usar apenas quando necessario, procurando alternativas comocomposicao e Interfaces

Regra basica

Se uma classe B estende A, entao classe B E-UMA classe A;

Exemplos:

Quadrado e uma Forma Geometrica? SIM!Lobo e um Animal? SIM!Banheira e um Banheiro? NAO!

Banheiro TEM-UMABanheira (use agregacao / composicao)Pilha e uma Lista? NAO! Pilha nao tem metodos add() nemremove() (use composicao)

Page 33: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Heranca e polimorfismo

Sera que e heranca mesmo?

O uso de heranca aumenta o acoplamento entre as classes

Usar apenas quando necessario, procurando alternativas comocomposicao e Interfaces

Regra basica

Se uma classe B estende A, entao classe B E-UMA classe A;

Exemplos:

Quadrado e uma Forma Geometrica? SIM!Lobo e um Animal? SIM!Banheira e um Banheiro? NAO! Banheiro TEM-UMABanheira (use agregacao / composicao)

Pilha e uma Lista? NAO! Pilha nao tem metodos add() nemremove() (use composicao)

Page 34: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Heranca e polimorfismo

Sera que e heranca mesmo?

O uso de heranca aumenta o acoplamento entre as classes

Usar apenas quando necessario, procurando alternativas comocomposicao e Interfaces

Regra basica

Se uma classe B estende A, entao classe B E-UMA classe A;

Exemplos:

Quadrado e uma Forma Geometrica? SIM!Lobo e um Animal? SIM!Banheira e um Banheiro? NAO! Banheiro TEM-UMABanheira (use agregacao / composicao)Pilha e uma Lista?

NAO! Pilha nao tem metodos add() nemremove() (use composicao)

Page 35: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Heranca e polimorfismo

Sera que e heranca mesmo?

O uso de heranca aumenta o acoplamento entre as classes

Usar apenas quando necessario, procurando alternativas comocomposicao e Interfaces

Regra basica

Se uma classe B estende A, entao classe B E-UMA classe A;

Exemplos:

Quadrado e uma Forma Geometrica? SIM!Lobo e um Animal? SIM!Banheira e um Banheiro? NAO! Banheiro TEM-UMABanheira (use agregacao / composicao)Pilha e uma Lista? NAO!

Pilha nao tem metodos add() nemremove() (use composicao)

Page 36: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Heranca e polimorfismo

Sera que e heranca mesmo?

O uso de heranca aumenta o acoplamento entre as classes

Usar apenas quando necessario, procurando alternativas comocomposicao e Interfaces

Regra basica

Se uma classe B estende A, entao classe B E-UMA classe A;

Exemplos:

Quadrado e uma Forma Geometrica? SIM!Lobo e um Animal? SIM!Banheira e um Banheiro? NAO! Banheiro TEM-UMABanheira (use agregacao / composicao)Pilha e uma Lista? NAO! Pilha nao tem metodos add() nemremove() (use composicao)

Page 37: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Interfaces

Interfaces

Uma interface em Java define uma colecao de metodospublicos, sem definir a implementacao

Apenas expoe o que o objeto deve fazer, e nao como elefaz ou o que ele tem

Exemplo

Em Java, para ordenar uma lista usandoCollection.sort(lista), e necessario que os membros dalista 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 ) ;

}

Page 38: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Interfaces

Exemplo Funcionarios

Page 39: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Interfaces

Exemplo Funcionarios

Quero que alguns funcionarios (Diretor e Gerente) consigam seautenticar no sistema interno.

Page 40: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Interfaces

Exemplo Funcionarios

Depois de um tempo, descobri que preciso que o cliente tambempossa se autenticar no sistema interno, entao fiz a caca abaixo:

Page 41: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Interfaces

Exemplo Funcionarios

Depois de refatorar meu sistema usando interfaces, eliminei asgambiarras e deixei o sistema menos acoplado e mais manutenıvel.(Um prototipo do codigo estara nos exemplos.)

Exemplo retirado da apostila Java e Orientacao a Objetos. Caelum.

Page 42: Introdução à Programação Orientada a Objetos Usando Java

Introducao a Programacao Orientada a Objetos usando Java

Interfaces

Referencias Bibliograficas

Arlow J., Neustadt I. UML and the Unified Process - PracticalObject-Oriented Analysis and Design. Pearson. 2002

Caelum. Java e Orientacao a Objetos. Disponıvel em <http://www.caelum.com.br/curso/fj-11-java-orientacao-objetos>

Sierra K., Bates B. Use a Cabeca! - Java. 2a Edicao. O’ReillyMedia. 2005