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 ]
Post on 10-Nov-2018
214 Views
Preview:
Transcript
Programação Orientada a ObjetosProfessor: André Luis Meneses Silva
andreLuis.ms@gmail.combr.geocities.com/programacao2ufs
Programação Orientada a Objetos[ Conteúdo ]
Objeto Mensagens Classe Encapsulamento Visibilidade Membros de Instância e de Classe Construtor Finalizador Referência this
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
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
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
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)
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
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
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
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
Programação Orientada a Objetos[ Visibilidade ]
Exemplos de definição de visibilidade Pessoa2 a.ClasseA b.ClasseB a.TesteVisibilidade1 a.TesteVisibilidade2 a.TesteVisibilidade3
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
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
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
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
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
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
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
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.
Programação Orientada a Objetos[ Herança ]
Exemplo Pessoa3 Cliente
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)
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
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
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
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.
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.
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
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.
Programação Orientada a Objetos[ Polimorfismo ]
Exemplo Forma Circulo Quadrado TestarFormas
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();...
Programação Orientada a Objetos[ Polimorfismo ]
Você também pode escrever métodos que aceitem argumentos polimóricos.
Ex: public void imprime(Object o){...}
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());}
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
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
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
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
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
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
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.
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
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
Programação Orientada a Objetos[ Bibliografia ]
Deitel (capítulos 8, 9 e 10) Java Tutorial
Lessons Classes and Objects, Interfaces and Inheritance
top related