I I I O Ã Ç A M A R G O R P
CONCEITOS AVANÇADOS DE ORIENTAÇÃO À OBJETOS
Conceitos avançados sobre orientação a objectos Classes Atributos de classe Metodos de classe Metodos construtores Herança Sobrecarga polimorfismo
P R O G R A M A Ç Ã O I I I
Os programas criados segundo a programação orientada a objetos funcionam essencialmente a custa de entidades
As entidades são objectos
Os objectos possuem características próprias
Os objectos são capazes de desempenhar determinadas tarefas
P R O G R A M A Ç Ã O I I I
Desenhar um programa, consistem em definir os objectos necessários, suas funcionalidades e o modo como comunicam entre si Um objecto é uma combinação de dados e atributos (variáveis) e acções (subprogramas) relacionadas. Os subprogramas em POO são comummente designados por métodos
P R O G R A M A Ç Ã O I I I
Um objecto pode ser caracterizado por três componentes: Identidade Atributo Comportamento
P R O G R A M A Ç Ã O I I I
Um objecto pode ser caracterizado por três componentes:
Identidade
É comum ter num programa Permite ao programador e ao sistema a objectos sua identificação semelhantes, Atributo com o mesmo comportamento, Permitem caracteriza-lo mas com Comportamento atributos e identidades Define o conjunto de funcionalidades que diferentes pode executar por opção própria ou a
pedido de outro objecto.
P R O G R A M A Ç Ã O I I I
Objecto especial que serve de molde ou padrão para a criação de objectos Possuem a mesma estrutura interna Mesmas variáveis de instância Mesmo comportamento
Mesmos métodos de instancia Mesma interface ou API
P R O G R A M A Ç Ã O I I I
Capazes de responder às mesmas mensagens, ou seja, um objecto pode efetuar uma tarefa de outro desde que esteja definida em seus comportamentos – chamada de um método definido no outro objecto Pode ser vista como um TIPO Em linguagem POO, são vistos como mecanismos de implementação de Tipos Abstractos de Dados (TAD) Representam mecanismos de partilha de código
P R O G R A M A Ç Ã O I I I
Objecto boby Atributos boby Pastor alemão cinzento
Classe Cao
Comportamentos
Atributos
Correr ladrar
Nome Raça Cor Comportamentos
Correr ladrar
Objecto laica Atributos laica rafeiro castanho Comportamentos
Correr ladrar
P R O G R A M A Ç Ã O I I I
Reutilizável Colocada dentro de um bloco que é antecedido pela palavra reservada class, seguido pelo identificador da classe que deve começar pela letra maiúscula. O nome dos objectos por letra minúscula Dentro do bloco, estarão as definições dos membros da classe (class members)
P R O G R A M A Ç Ã O I I I
Definição de cada variável de instância, separando as várias declarações com comentários que auxiliem a legibilidade dos programas. //Identificação da classe class Cao{ //definições dos atributos e comportamentos que os objectos criados a partir dela devem apresentar } class Cao{ //variáveis de instância private int idade; // idade do cão private string nome; // nome do cão private string raca; // raça do cão private string cor; // cor do cão }
P R O G R A M A Ç Ã O I I I
Private indica que as variáveis apenas podem ser acedidas directamente pelos métodos (comportamentos) definidos na própria classe. com ela, o objecto criado será uma entidade fechada portanto encapsulada. Os detalhes internos não são visiveis a partir do exterior
class Cao{ //variáveis de instância private int idade; // idade do cão private string nome; // nome do cão private string raca; // raça do cão private string cor; // cor do cão }
P R O G R A M A Ç Ã O I I I
Cada classe tem pelo menos um construtor. Tipo especial de método utilizado para criação e inicialização de objectos criados a partir de uma classe. Têm o mesmo nome da classe Distinguem-se de outros métodos por não terem valor de retorno, nem mesmo void . Não são chamados como os outros métodos, apenas a instrução de criação de objectos de uma classe os pode chamar.
P R O G R A M A Ç Ã O I I I
class Cao{ //variáveis de instância private int idade; // idade do cão private string nome; // nome do cão private string raca; // raça do cão private string cor; // cor do cão Public Cao(int i, string n, string r, string c) { idade = i; nome = n; raca = r; cor = c; } }
P R O G R A M A Ç Ã O I I I
Criação de instâncias de uma dada classe class Ponto{ //variáveis de instância int x; int y; Final double A = 3.4; //construtor default Ponto(){ x = 0; y= 0; } //construtor com parametros Ponto(int cx, int cy){ x = cx; y = cy; } }
Valores
atribuídos por omissão Instancias da classe Ponto criadas, com atribuição às variáveis de instância, valores iniciais dados como parametros
P R O G R A M A Ç Ã O I I I
mudarIdade() alterarNome() retificarRaca() tirarCor()
P R O G R A M A Ç Ã O I I I
class Cao{ //variáveis de instância private int idade; // idade do cão private string nome; // nome do cão private string raca; // raça do cão private string cor; // cor do cão Public Cao(int i, string n, string r, string c) { idade = i; nome = n; raca = r; cor = c; } }
P R O G R A M A Ç Ã O I I I
import java.awt.*; public class Cao{ //variáveis de instância private int idade; // idade do cão private string nome; // nome do cão private string raca; // raça do cão private string cor; // cor do cão //Construtor com parametros e recebe os valores iniciais dos atributos public Cao(int i, string n, string r, string c) { idade = i; nome = n; raca = r; cor = c; }
P R O G R A M A Ç Ã O I I I
//muda a idade de acordo com os atributos Public void mudarIdade(int id) { } }
P R O G R A M A Ç Ã O I I I
Método que retorna o valor de um atributo Public String getNome() { Return nome; }
P R O G R A M A Ç Ã O I I I
Método que modifica o valor de um atributo Public void setNome(String valor) { nome = valor; }
P R O G R A M A Ç Ã O I I I
Os acessores seguem as seguintes regras: O atributo tem de ser declarado como private O acessor será public Os getters não recebem nenhum parametro e retornam um valor cujo tipo é igual ao atributo que acede Os setters apenas recebem um parametro, do tipo do atributo e não retornam valor
P R O G R A M A Ç Ã O I I I
Private String nome; Public String getNome() { Return nome; } Public void setNome(String valor) { nome = valor; }
P R O G R A M A Ç Ã O I I I
A chamada a metodos de um objecto é necessário referencia o objecto Referencia ao objecto; O literal ponto; O nome do método; Os parametros necessarios a serem passados.
referenciaObjecto .Ometodo(); referenciaObjecto .OutroMetodo(ComParametro);
P R O G R A M A Ç Ã O I I I
A chamada a metodos de um objecto é necessário referencia o objecto Referencia ao objecto; O literal ponto; O nome do método; Os parametros necessarios a serem passados.
Características CB = new Características("Blattella Germanica“); CB.getNome(); Ou Características CB = new Características("Blattella Germanica“);
P R O G R A M A Ç Ã O I I I
Tambem chamado de metodos da classe, visto que o seu comportamento não depende de nenhum estado do objecto. O comportamento de um metodo estatico acontece ao nivel da classe
logger l = Looger.getLogger (“NewLoggerr”);
P R O G R A M A Ç Ã O I I I
Construtor de cópia
Recebe um parâmetro do mesmo tipo de objeto que se pretende criar, obtendo uma copia do parâmetro. Ponto(Ponto p){ x = p.getX(); y = p.getY(); }
getX() e getY() métodos que consultam a coordenada respetiva do ponto p.
P R O G R A M A Ç Ã O I I I
Métodos de instância São responsáveis pelo comportamento das instancias da classe. getX() método que faz acesso ao valor de uma variável de instancia de nome genérico X.
Exemplos: getNome(), getConta, getProvincia()
setX() métodos que alteram o valor de uma variável de instancia X. Exemplos: setNome(), setConta, setProvincia()
P R O G R A M A Ç Ã O I I I
Interrogadores ou seletores getX()
Métodos que realizam a consulta do valor de dada variável e devolvem esse valor como resultado.
(tipo nome_parâmetro ,…)
Modificadores setX()
Alteram o valor da variável de instancia.
(tipo nome_parâmetro ,…)
P R O G R A M A Ç Ã O I I I
Interrogadores ou seletores getX() // interrogador ou seletor int getX(){ return x; } int cx = p1.getX(); System.out.println(“ X de P1 = “ + cx); Ou System.out.println(“ X de P1 = “ + p1.getX());
P R O G R A M A Ç Ã O I I I
Modificadores – incremento das coordenadas void incCoor (int deltaX, int deltaY){ x = x + deltaX; y = y + deltaY; }
Invocação do método anterior num objecto exterior a classe. p1.incCoord(dx, dy)
O objecto exterior altera o seu estado interno p1 O objecto exterior (invocador) não necessita de receber qualquer resultado (void)
P R O G R A M A Ç Ã O I I I
Modificadores – decremento das coordenadas void decCoor (int deltaX, int deltaY){ x = x - deltaX; y = y - deltaY; }
Invocação do método anterior num objecto exterior a classe. p1.incCoord(dx, dy)
O objecto exterior altera o seu estado interno p1 O objecto exterior (invocador) não necessita de receber qualquer resultado (void)
P R O G R A M A Ç Ã O I I I
String getConta() Boolean maiorQue(int valor) Void setValor(int valor) Boolean valorEntre(real min, real max) Double[] notasAcimaDe(double NotaRef) Triangulo maiorTTri(Triangulo t)
P R O G R A M A Ç Ã O I I I
Acesso aos packages que contêm o conjunto de classes Classes individuais Cada um dos membros
Variáveis Métodos
Interfaces, classes abstratas
P R O G R A M A Ç Ã O I I I
Modificadores de acesso Tipos de acesso
Public
Protected
Propria classe; qualquer classe do mesmo package e qualquer subclasse
Private
Qualquer classe
Propria classe
Por omissão (default)
Caso nenhum modificador seja declarado Propria classe e classes dentro do mesmo package
P R O G R A M A Ç Ã O I I I
Modificadores de acesso Tipos de acesso
Private e protected
Classes especiais (inner class) Usadas na implementação de classes predefinidas complexas de Java Definidas no interior de outras classes
A não declaração de um modificador particular, significa que a classe estará apenas acessível dentro do respectivo package.
P R O G R A M A Ç Ã O I I I
Import static java.lang.Math.abs; Public class Ponto{ //variáveis de instancia private int x; private int y; //Construtores Public Ponto(){x=0; y=0;} Public Ponto(int cx, int cy){ x= cx; y=cy; } Public Ponto(Ponto p){ x = p.getX(); y = p.getY(); }
//Metodos de instancia // interrogador – devolve x Public int getX(){ return x; } // interrogador – devolve y Public int getY(){ return y; } //modificador – incremento das coordenadas public void incCoord(int deltaX, int DeltaY){ x = x + deltaX; y = y + deltaY; }
P R O G R A M A Ç Ã O I I I
/*determina se um ponto tem ambas as coordenadas positivas */ public boolean coordPos(){ return x > 0 && y > 0 ; } /* verifica se um ponto é simétrico, ou seja, se dista igualmente dos eixos do X e dos Y */ public boolean simétrico(){ return abs(x) == abs(y); }
P R O G R A M A Ç Ã O I I I
P R O G R A M A Ç Ã O I I I