42
Programação Orientada a Objetos Professor: André Luis Meneses Silva [email protected] br.geocities.com/programacao2ufs

Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva [email protected] br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Embed Size (px)

Citation preview

Page 1: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a ObjetosProfessor: André Luis Meneses Silva

[email protected]/programacao2ufs

Page 2: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Conteúdo ]

Objeto Mensagens Classe Encapsulamento Visibilidade Membros de Instância e de Classe Construtor Finalizador Referência this

Page 3: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Conteúdo ]

Herança Sobreposição Classes e métodos final Classe Abstrata Polimorfismo Interface Classes Internas Exercícios Bibliografia

Page 4: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Objeto Revisão]

São entidades que encapsulam estado (dados) e comportamento (operações sobre os dados) O estado de um objeto é o

conjunto de valores associados a seus atributos

O comportamento de um objeto descreve as interações com outros objetos

Todo objeto possui uma identidade que o diferencia dos demais

Page 5: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Revisão Mensagens ]

Objetos interagem através de mensagens (métodos)

É preciso que haja essa interação já que o software (assim como o mundo) é composto por vários objetos

Page 6: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Encapsulamento ]

Encapsulamento é uma das técnicas mais importantes

Permite esconder como está definido o objeto internamente

Para garantir o encapsulamento, toda alteração de estado do objeto deve ser feita através de seus métodos

Os atributos são protegidos de acesso direto (garantindo consistência)

Page 7: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Encapsulamento ]

Através do encapsulamento é possível ocultar como a classe implementou o comportamento e como mantém o estado

Isso permite alterar a implementação a qualquer momento

Page 8: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Visibilidade ]

Clientes de uma classe Por instanciação: são os que criam instâncias

da classe e manipulam essas instâncias através de métodos

Por herança: são as subclasses que herdam os métodos e atributos da classe

Internos ao pacote: são as classes que estão dentro do mesmo pacote

Externos ao pacote: são as classes que estão fora do pacote

Page 9: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Visibilidade ]

Tipos de Visibilidade Pública (public): Objetos de qualquer tipo podem fazer

acesso, manipular e chamar atributos e métodos declarados como public.

Privada (private): Objetos de qualquer tipo não podem fazer acesso, manipular ou chamar atributos e métodos declarados private

Protegida (protected): Se um atributo ou método é declarado como protected, os clientes por herança e as classes do mesmo pacote têm acesso a eles

Pacote: Um método com visibilidade de pacote pode ser acessível pelas classes internas ao pacote, enquanto que as externas não o acessam

Page 10: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Visibilidade ]

Tipos de Visibilidade

Modificador Mesma Classe

Mesmo Pacote

Subclasse Universo

private Sim - - -default Sim Sim - -protected Sim Sim Sim -public Sim Sim Sim Sim

Page 11: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Visibilidade ]

Exemplos de definição de visibilidade Pessoa2 a.ClasseA b.ClasseB a.TesteVisibilidade1 a.TesteVisibilidade2 a.TesteVisibilidade3

Page 12: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Membros de Instância e de Classe ]

Há atributos e métodos que pertencem a um objeto (instância)

Quando o valor de atributo deve ser compartilhado por todos os objetos da classe, é declarado atributo de classe (static)

Um método deve ser declarado de classe (static) quando: Manipula algum atributo de classe Não depende do estado do objeto para gerar seu resultado

e não se deseja sobrepô-lo em uma subclasse

Page 13: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Membros de Instância e de Classe ]

Para chamar um método de classe ou acessar um atributo de classe não é necessário criar um objeto

Exemplo Formatar

Page 14: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Construtor ]

Um construtor é um método de uma classe que é executado quando deseja-se criar uma instância da classe (objeto)

Permite inicializar os atributos do objeto sendo criado e alocar recursos

Uma classe pode definir mais de um construtor com parâmetros diferentes (sobrecarga de construtores)

Exemplo Pessoa3

Page 15: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Finalizador ]

Diferentemente do construtor, que recebe o nome da classe, o finalizador deve ser chamado de finalizer

O finalizador serve para desalocar recursos mantidos pelo objeto

É chamado pelo coletor de lixo, antes do objeto ser liberado da memória Se o coletor nunca for executado, o finalizador

não será chamado

Page 16: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Finalizador ]

Cada classe pode definir um único finalizador O último comando de um finalizador deve ser

a chamada super.finalize() Não é interessante utilizar este método.

Deve-se utilizar outras formas de liberação de recursos

Exemplo Finalizador

Page 17: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Referência this ]

Cada objeto tem acesso a uma referência para si próprio, através de this

Através de this é possível: Diferenciar entre parâmetros de métodos e

atributos de instância com o mesmo nome Retornar uma referência para o próprio objeto em

um de seus métodos Exemplo

Inteiro

Page 18: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Herança ]

É um mecanismo para derivar novas classes a partir de classes existentes através de um processo de refinamento

Uma subclasse (classe derivada) herda a representação de dados e operações sua superclasse (classe base)

Pode seletivamente: Adicionar novas operações Estender a representação de dados Redefinir a implementação de operações já existentes

Page 19: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Herança ]

Terminologia Classe Derivada, Subclasse, Classe Filha, Classe

Descendentes Classe Base, Superclasse, Classe Pai, Classes Ancestrais

Para trabalharmos com herança definimos uma classe utilizando a palavra reservada extendsPublic class <nome_da_classe_filho> extends

<nome_da_classe_pai>{...}

Qualquer classe definida em Java é filha de Object.

Page 20: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Herança ]

Exemplo Pessoa3 Cliente

Page 21: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Herança ]

Quando um novo objeto filho é criado, ele chama o construtor da classe pai.

Quando a superclasse não tem construtor padrão, é necessário chamar o construtor da superclasse Deve-se incluir uma chamada a

super(<parâmetros>) no construtor da subclasse

Se não for incluída, será chamado o construtor padrão (sem parâmetros)

Page 22: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Herança ]

Herança de Implementação Herança na qual os elementos pai e filho não possuem um

relacionamento conceitual, mas apenas elementos em comum.

Deve ser evitada Utiliza-se herança apenas para facilitar a implementação Pode ser substituída por agregação, ou seja, ao invés de

herança introduzimos um atributo na nova classe que corresponde ao elemento que desejamos herdar.

Exemplo: Uma Pilha herdar de uma lista

Page 23: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Herança ]

Herança de Comportamento Ocorre quando a subclasse proporciona pelo

menos o comportamento da superclasse Exemplo: Humano é um Mamífero

Page 24: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Sobreposição ]

Também conhecido como Overriding. Permite redefinir métodos e atributos em uma

subclasse, fornecendo um novo comportamento em instâncias da subclasse

Para isso o método declarado na classe filha deve ter a mesma assinatura.

Pode-se acessar o membro da superclasse através de super.<nome-do-membro>

Exemplo Cliente

Page 25: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Sobreposição ]

A partir do JSE5, métodos que sofrem sobreposição podem ter tipos de retorno diferentes, desde que o método que realiza a sobreposição possua um tipo de retorno que seja subtipo do tipo de retorno do método original.

Page 26: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Classes e métodos final ]

Quando uma classe é declarada final, ela não pode ser estendida, ou seja, não pode ter descendentes.

public final void metodoFinal() { // Implementação do método}

public final class ClasseX { // Implementação da classe} Já os métodos final são definidos em uma

classe e não podem ser sobrepostos nas superclasse.

Page 27: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Classe Abstrata ]

Uma classe abstrata é uma classe que não pode ser instanciada.

Quando algum dos métodos é declarado abstract, a classe também deve ser declarada abstract

Exemplo Forma

Page 28: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Polimorfismo ]

É derivado do grego “muitas formas” ou “tendo muitas formas”

No contexto da OO, significa que variáveis podem referenciar mais do que um tipo

Essas variáveis podem fazer referência a diferentes tipos em diferentes contextos

Através do polimorfismo é possível escrever programas mais genéricos

Basicamente, uma variável do tipo pai pode referenciar todos os seus filhos, netos, bisnetos, etc.

Page 29: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Polimorfismo ]

Exemplo Forma Circulo Quadrado TestarFormas

Page 30: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Polimorfismo ]

Através de Polimorfismo, podemos definir arrays que possuem dados heterogêneos.Object[] objetos = new Object[10]

objetos[0] = “Ola”;objetos[1] = new Classe1();objetos[2] = new Classe2();...

Page 31: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Polimorfismo ]

Você também pode escrever métodos que aceitem argumentos polimóricos.

Ex: public void imprime(Object o){...}

Page 32: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Polimorfismo ]

No caso do método anterior, poderíamos utilizar instanceof e casting para modelarmos o comportamento a depender do Object obtido.

public void imprime(Object o){ if (o instanceof String)

System.out.println(o); else if (o instanceof Classe1)

System.out.println(((Classe1)o).imprime());}

Page 33: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Interface ]

É um conjunto de requisitos para classes que desejam estar em conformidade com ela

Não é uma classe Quando uma classe implementa uma interface, ela

garante que implementa todos os métodos nela definidos. Caso não o faça, deve ser declarada abstrata

Java só permite herança simples, mas permite que uma classe implemente múltiplas interfaces

Page 34: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Interface ]

São úteis principalmente para: Capturar similaridades entre classes não

relacionadas sem forçar um relacionamento artificial entre elas

Declarar métodos que uma ou mais classes devem implementar

Revelar a interface de uma classe sem revelar sua classe

Exemplo Imprimir

Page 35: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Interface ]

Classe Abstrata x Interface: Somente as assinaturas dos métodos podem ser

incluídas em interfaces, ou seja, não é permitido incluir qualquer código

Utiliza a palavra reservada interface no lugar de class;

Não permite a declaração de variáveis (exceto constantes)

Uma interface pode estender uma ou mais interfaces

Page 36: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Classes Internas ]

A partir da versão 1.1 surgiu o suporte a classes internas, que são classes definidas como membros de outras classes ou dentro de métodos

Tipos de Classes Internas Classe Membro Classe Local Classe Anônima

Page 37: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Classes Internas ]

Classe Membro É definida como um membro de uma outra classe. São interessantes porque podem referenciar todos os

atributos e métodos (inclusive os privados) da classe da qual é membro.

A instância da classe membro está associada à instância da classe que a definida

Exemplo Lista ListaMembro

Page 38: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Classes Internas ]

Classe Local É uma classe definida dentro de um bloco de código Java

e é visível somente dentro desse bloco Interfaces não podem ser definidas localmente Como é definida em um bloco de código, é análoga a

variáveis locais Não são classes membro, mas podem usar os atributos e

métodos da classe na qual foi definida, além das variáveis e parâmetros acessíveis de dentro do bloco de código

Exemplo ListaLocal

Page 39: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Classes Internas ]

Classe Anônima É uma extensão do conceito de classe local Ao invés de declarar uma classe local e instanciar

e usar o objeto em outro comando, uma classe anônima combina os dois passos em uma única expressão.

Não tem um nome e só pode ser instanciada uma vez.

Page 40: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Classes Internas ]

Excetuando-se essas diferenças, classes anônimas são similares a classes locais em comportamento e uso.

Interfaces não podem ser definidas anonimamente pois seriam inúteis já que não teriam um nome e não poderiam ser implementadas

Exemplo ListaAnonima

Page 41: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos [ Exercícios ]

1. Verificar se é possível acessar um membro privado dentro do método main da própria classe

2. Entre protected ou pacote, qual restringe o acesso aos membros de uma classe? Analise para classes no mesmo pacote, subclasses e classes fora do pacote

3. Crie classes que testem o polimorfismo4. Implementar uma classe que represente um

cliente. A classe deve implementar a interface java.lang.Comparable

Page 42: Programação Orientada a Objetos fileProfessor: André Luis Meneses Silva andreLuis.ms@gmail.com br.geocities.com/programacao2ufs. Programação Orientada a Objetos [ Conteúdo ]

Programação Orientada a Objetos[ Bibliografia ]

Deitel (capítulos 8, 9 e 10) Java Tutorial

Lessons Classes and Objects, Interfaces and Inheritance