Você está na página 1de 86

Programação OO

2ª parte

Jobson Massollar
jobson.silva@uva.br
Orientação à Objetos

Espaço do Problema Espaço da Solução

Mundo real Tradução Mundo computacional

Diferentes paradigmas
para realizar essa tarefa.

De forma simplificada, podemos dizer que desenvolver um sistema é


criar uma solução computacional para um problema do mundo real.
Existem diferentes paradigmas que apoiam essa tradução.

2 Programação OO
Orientação à Objetos

 Estruturado

 Os sistemas são criados a partir da decomposição funcional, ou


seja, o problema a ser resolvido é decomposto em problemas
menores, que por sua vez podem ser implementados como rotinas
ou procedimentos. Além disso, os dados e as funções que
manipulam esses dados são tratados separadamente.

 Orientado a Objetos

 Pressupõe que o mundo é composto por objetos, que integram


dados e funções. Os sistemas são criados a partir dos objetos que
existem no domínio do problema, isto é, os sistemas são modelados
como um conjunto de objetos que interagem entre si.

3 Programação OO
Orientação à Objetos

 Paradigma Estruturado x Paradigma Orientado a Objetos

Sistema da
Biblioteca

Paradigma Estruturado Paradigma OO


Decomposição por Decomposição por objetos
funções do domínio

• Registrar empréstimos • Livro


• Calcular multa • Periódico
• Administrar livros • Aluno
• Cadastrar alunos • Empréstimo

4 Programação OO
Orientação à Objetos

 A Orientação a Objeto é um paradigma de análise, projeto e


programação de sistemas computacionais baseado na composição e
interação entre diversas unidades de software chamadas objetos.

 Mas o que são objetos ?

 São elementos, animados ou inanimados, que podem ser


percebidos pelos nossos sentidos ou consciência.

5 Programação OO
Objeto

 Trazendo essa definição para o mundo computacional, podemos definir


um objeto como:

Um objeto é a representação computacional de


um elemento ou processo do mundo real.

6 Programação OO
Exemplos de Objetos

cadeira carro piloto venda


cliente disciplina aluno computador

Note que os objetos possuem


características e comportamentos

7 Programação OO
Características dos Objetos

 Cada característica ou propriedade é chamada de atributo do objeto.

 Exemplo: objeto moto


 Cor
 Marca
 Ano de fabricação
 Tipo de combustível
 ...

 Podemos sempre associar um conjunto de valores aos atributos.

 Por exemplo: a cor da moto pode ser vermelha, azul, verde, etc.

8 Programação OO
Comportamento dos Objetos

 Cada comportamento é chamado de método do objeto.

 Um comportamento representa uma reação ou resposta de um objeto


a uma ação do mundo real.

 Exemplos de comportamentos para o objeto moto:


 Andar
 Parar
 Acender farol
 ...

9 Programação OO
Mapeamento de Objetos

Objeto no Mundo Real Objeto Computacional

Características Atributos

Comportamento Métodos

10 Programação OO
Principais Características de OO

 Classificação
 Abstração
 Encapsulamento
 Relacionamentos
 Herança
 Polimorfismo

11 Programação OO
Classificação

 Classificação

 Objetos com as mesmas características (atributos e


métodos) são agrupados em uma classe.

 Cada classe define um conjunto possível e infinito de


objetos.

12 Programação OO
Classificação

 Exemplo: imagine os carros que estão circulando na rua.


Que características você consegue observar?

 Placa: LNO-4387, KWU-9713, ...


 Cor: prata, branco, preto, vermelho, verde, ...
 Ano: 2015, 2014, 2010, 2005, ...
 Fabricante: Ford, Chevrolet, Renault, Citroen, Nissan, ...
 Modelo: Gol, Duster, C3, Livina, Focus, ...
 Tipo de combustível: etanol, gasolina, diesel
 Câmbio: manual, automático
 Marchas: 4, 5, 6, ...
 ...

13 Programação OO
Classificação

 Exemplo: imagine os carros que estão circulando na rua.


Que características você consegue observar?

 Placa: LNO-4387, KWU-9713, ...


 Cor: prata, branco, preto, vermelho, verde, ...
 Ano: 2015, 2014, 2010, 2005, ...
 Fabricante: Ford, Chevrolet, Renault, Citroen, Nissan, ...
 Modelo: Gol, Duster, C3, Livina, Focus, ...
 Tipo de combustível: etanol, gasolina, diesel
 Câmbio: manual, automático
 Marchas: 4, 5, 6, ... Note que, a partir desse
 ... conjunto de atributos
podemos representar
todos os carros.

14 Programação OO
Classificação

Objetos Carro Classe Carro

abstrair em
Carro

Placa
Cor
Ano

Andar
Parar
Estacionar

15 Programação OO
Classificação

 Podemos dizer que a classe descreve os atributos e


métodos de um conjunto de objetos:

 A classe é um molde a partir do qual todos os objetos


daquela classe são criados.
 Cada objeto pertence a uma única classe.
 O objeto possuirá os mesmos atributos e métodos
definidos na classe.
 A classe é o bloco básico para a construção de
programas OO.

16 Programação OO
Classificação

 Quando criamos um objeto a partir de uma classe dizemos


que temos uma instância da classe.

 Por ser algo concreto, um objeto possui valores associados


aos atributos da classe a qual ele pertence.

 O estado de uma instância é definido pelos valores que


atribuímos aos seus atributos.

17 Programação OO
Classificação

Classe Aluno Instância: Maria

Aluno Matricula: 1234-5


Nome: Maria da Silva
Matricula Data de nascimento: 01/10/1995
Nome
Data de nascimento

Matricular
O estado de um objeto
Cursar é definido pelos valores
dos seus atributos.

18 Programação OO
Classificação

 Na programação OO, a ideia é que cada objeto seja


responsável por seus dados (valores dos atributos) e seja
capaz de executar os seus próprios métodos
(comportamentos).

 Assim, podemos dizer que um objeto mantém seus


próprios dados e executa seus próprios métodos.

19 Programação OO
Métodos Especiais

 Criação e destruição de objetos de uma classe:

 A classe é responsável pela criação e destruição de seus


próprios objetos.

 A criação de um objeto é realizada através de um


método especial chamado construtor.

 A destruição de um objeto é realizada através de um


método especial chamado destrutor.

20 Programação OO
Principais Características de OO

 Classificação 
 Abstração
 Encapsulamento
 Relacionamentos
 Herança
 Polimorfismo

21 Programação OO
Abstração

 Abstração

Quantas visões distintas podem ser usadas


enquanto construímos um sistema?

"Abstração procura focar as características


essenciais de um objeto, de acordo com a
perspectiva do observador"

22 Programação OO
Abstração

 Exemplo: objeto Aluno

 Que características são relevantes ?

cor do cabelo, Para definir que


características são
altura,... relevantes é
preciso definir o
contexto onde o
ou objeto será usado.

número de matrícula,
cpf,
nome do curso, ...
23 Programação OO
Principais Características de OO

 Classificação 
 Abstração 
 Encapsulamento
 Relacionamentos
 Herança
 Polimorfismo

24 Programação OO
Encapsulamento

 Encapsulamento

Uma classe encapsula atributos e métodos,


ocultando os detalhes de implementação do
objetos.

25 Programação OO
Encapsulamento

 Princípio do desenvolvimento orientado a objetos:


Interface Visível

Pedido de Serviço

Implementação
26 Programação OO
Encapsulamento

 Princípio do desenvolvimento orientado a objetos:

 O encapsulamento determina que a implementação de


um objeto somente deve ser acessada através de uma
interface visível e bem definida.

27 Programação OO
Encapsulamento

 Atributos e Métodos:

 Os atributos não podem ser manipulados diretamente


fora do objeto.

 Os atributos podem ser alterados ou consultados


somente através dos métodos do objeto.

28 Programação OO
Classes

 As classes são os elementos básicos para construção de programas OO


em linguagens como C++, Java e C#.

 Assim, para construir um programa OO devemos, inicialmente,


identificar as classes que fazem parte do problema que estamos
tentando resolver.

29 Programação OO
Classes

 Algumas classes são identificadas de forma bastante natural, enquanto


outras requerem uma certa experiência por parte do analista ou
programador.

 Lembre-se: a identificação das classes e a abstração de atributos e


métodos de cada uma depende do problema que você está tentando
resolver.

 Ao analisar um problema a ser resolvido, as classes normalmente são


extraídas:
1. dos conceitos que compõem o domínio do problema;
2. dos conceitos adotados na solução do problema.

30 Programação OO
Classes

 Imagine que desejamos implementar um editor gráfico que irá


manipular figuras geométricas em um plano cartesiano:
 Retângulo
 Triângulo
 Círculo
 Polígonos de 5 ou mais lados

 Quais as classes candidatas para esse projeto ?

31 Programação OO
Classes

 Imagine que desejamos implementar um editor gráfico que irá


manipular figuras geométricas em um plano cartesiano:
 Retângulo
 Triângulo
 Círculo
 Polígonos de 5 ou mais lados

 Quais as classes candidatas para esse projeto ?


 Retângulo
 Triângulo
 Círculo
 Polígono
 Plano Cartesiano
 ...

32 Programação OO
Classes

 Tomando por base a implementação da classe Retângulo:

 Quais as características de um retângulo?

 Que operações gostaríamos de realizar com o retângulo ?

33 Programação OO
Classes

 Tomando por base a implementação da classe Retângulo:

 Quais as características de um retângulo?


 Altura, largura, posição (x, y) no plano, cor da borda, cor de
preenchimento, ...

 Que operações gostaríamos de realizar com o retângulo ?


 Desenhar, mover, rodar, redimensionar, ...

 Vamos começar, então, definindo a classe Retangulo.

34 Programação OO
Classes

 Para criar uma classe precisamos definir o lugar onde iremos colocar
essa classe.

 No Java, esse lugar é chamado de pacote.

 Podemos imaginar o pacote como sendo um diretório ou uma pasta


onde colocamos a classe.

 Podemos definir quantos pacotes quisermos.

 O nome dos pacotes é definido pelo próprios desenvolvedores.

 Pelo padrão do Java, os nomes dos pacotes devem ter somente letras
minúsculas.

35 Programação OO
Classes

 Da mesma forma que podemos ter uma hierarquia de pastas, também


podemos ter uma hierarquia de pacotes.

 Quando temos um pacote dentro de outro usamos o ponto (.) para


definir a hierarquia de pacotes:

java.mhs.unitri.javapos

36 Programação OO
Classes

 Sintaxe da definição de Classe:

[visibilidade] [abstract | final] class identificador


[extends identificador2]
[implements identificador3*] {
[Atributos]
[Métodos]
}

 visibilidade: public, private ou package.


 abstract: não podem ser criadas instâncias da classe (será visto
posteriormente)
 final: não pode ter subclasses

37 Programação OO
Classes

 Visibilidade da classe:

 public: pode ser livremente instanciada por qualquer outra classe.

 private: só é visível no arquivo onde foi criada.

 package: só pode ser instanciada por classes do mesmo pacote. É


a visibilidade default.

38 Programação OO
Classes

 Versão inicial da classe Retangulo:


Preferencialmente,
toda classe deve ser
package principal; declarada dentro de
um pacote
public class Retangulo {

}
Por ser pública, a classe
Retangulo é visualizada por
todas as classes de todos
os pacotes do sistema.

 Vamos acrescentar atributos na classe Retangulo.

39 Programação OO
Atributos

 Atributos são declarados da mesma forma que as variáveis locais,


porém com uma sintaxe ligeiramente diferente:

[visibilidade] [static] [final] tipo atributo [ = inicialização];

 visibilidade: public, private, package ou protected.

 static: define que esse atributo é da classe (será visto


posteriormente)

 final: atributo constante (valor inicial não pode ser alterado)

40 Programação OO
Atributos

 Visibilidade dos atributos:

 public: pode ser livremente lido ou alterado por métodos de


qualquer classe.

 private: só pode ser lido ou alterado por métodos da própria


classe, ou seja, esse atributo não é visível fora da classe.

 package: só pode ser lido ou alterado por métodos das classes do


mesmo pacote. É a visibilidade default.

 protected: só pode ser lido ou alterado por métodos de classes


descendentes. Isso será visto com mais detalhes quando falarmos
de herança.

41 Programação OO
Atributos

 Princípio do Encapsulamento:

 Atributos não devem ser visíveis por nenhum objeto que não seja
instância da própria classe ou de uma classe descendente
(herança).

 Assim, devemos declarar nossos atributos sempre como protected


ou private.

42 Programação OO
Atributos

 Segunda versão da classe Retangulo:

package principal;

public class Retangulo {


private int largura;
private int altura;
private int x; Atributos podem ser
private int y; declarados em qualquer
} local dentro do corpo da
classe, mas normalmente
são colocados no início.

43 Programação OO
Atributos

 Inicialização de atributos:

 Um atributo pode ser explicitamente inicializado, da mesma forma


que as variáveis locais.

 Quando não for inicializado explicitamente, a máquina virtual do


Java (JVM) se encarregará de fazê-lo, da seguinte forma:
 boolean: false
 char: ‘\0’
 byte, short, int, long: 0
 float, double: 0.0
 referência para outro objeto: null

44 Programação OO
Classes

 Uma vez definida uma classe, podemos criar objetos ou instâncias


dessa classe.
 Lembre-se: a classe é um molde a partir do qual podemos representar
objetos reais.

Objetos Classe

public class Retangulo


{
private int largura;
private int altura;
private int x;
private int y;
}

45 Programação OO
Classes

 Criação de objetos: o operador new

 É um operador usado para criar um objeto, ou seja, uma instância


de uma classe.
 Ao declararmos uma variável do tipo de uma classe não estamos
criando o objeto em si, mas somente uma referência para o objeto.
 No momento da declaração da variável a referência está com valor
null.
 Precisamos usar o método new para que o Java aloque espaço na
memória para o novo objeto.

46 Programação OO
Classes

 Exemplo: criação de uma instância da classe Retangulo com o


operador new.
Define uma variável r do tipo
Retangulo. Inicialmente
essa variável não referencia
Retangulo r; nenhum objeto, pois este
ainda não foi criado. r

r = new Retangulo();

47 Programação OO
Classes

 Exemplo: criação de uma instância da classe Retangulo com o


operador new.

Retangulo r;
r

r = new Retangulo();

largura = 0
• Cria uma nova instância da classe altura = 0
Retangulo. x=0
• A variável r passa a referenciar esse y=0
objeto.
• Os valores dos atributos são inicializados

48 Programação OO
Construtores

 Quando criamos um objeto:


1. Precisamos definir os valores de seus atributos;
2. Evitar que os objetos sejam criado com valores de atributos
inválidos.

 No nosso exemplo, não deveríamos ter um Retangulo com dimensões


negativas, por exemplo.

 Para definir como as instâncias de uma classe podem ser criadas


usamos construtores. Assim, podemos dizer que Construtores são
métodos especiais usados para criar uma instância de uma classe
(objeto).

 Podem existir várias formas diferentes de criarmos um objeto. Assim,


podemos ter vários construtores diferentes para uma mesma classe.

49 Programação OO
Construtores

 Sintaxe básica de construtores:

public NomeDaClasse ([parâmetros]) [throws exceções]


{
[ corpo do construtor ]
}

 Observe que:
 Construtores devem ter, obrigatoriamente, o mesmo nome da
classe.
 Construtores não tem nenhum tipo de retorno.
 Construtores podem receber parâmetros que serão usados na
inicialização do objeto.

50 Programação OO
Construtores

 Quais construtores podemos definir para a classe Retangulo ? Lembre-


se que a instância deve ficar em um estado consistente.

51 Programação OO
Construtores

 Quais construtores podemos definir para a classe Retangulo ? Lembre-


se que a instância deve ficar em um estado consistente.

1. Construir um retângulo definindo sua posição (x, y), largura e


altura.

 Alguma outra ideia ?

52 Programação OO
Construtores

 Construtor para a classe Retângulo:


package principal;

Inicializa todos os atributos do Retangulo.


public class Retangulo {
O this é usado para referenciar o próprio
private int largura;
objeto. Dessa forma diferenciamos o
private int altura; atributo largura do parâmetro largura.
private int x;
private int y;

public Retangulo(int x, int y, int largura, int altura) {


this.x = x;
this.y = y;
this.largura = largura;
this.altura = altura;
}
}

53 Programação OO
Construtores

 Como ocorre a criação do objeto com operador new e construtor ?


Retangulo r1, r2; Quando definimos as variáveis
os objetos ainda não existem.
r1 = new Retangulo(10, 20, 100, 200);

r2 = new Retangulo(5, 15, 50, 150); r1

r2

54 Programação OO
Construtores

 Como ocorre a criação do objeto com operador new e construtor ?


Retangulo r1, r2; O operador new cria o
objeto e, em seguida,
inicializa os atributos do
r1 = new Retangulo(10, 20, 100, 200); objeto.

r1

largura = 0
altura = 0
x=0
y=0

55 Programação OO
Construtores

 Como ocorre a criação do objeto com operador new e construtor ?


Retangulo r1, r2;

r1 = new Retangulo(10, 20, 100, 200);

r1

Depois é chamado o construtor.


Quando executamos um método de
um objeto, a referência this
referencia o próprio objeto. largura = 0
altura = 0
x=0
y=0

this

56 Programação OO
Construtores

 Como ocorre a criação do objeto com operador new e construtor ?


Retangulo r1, r2;

r1 = new Retangulo(10, 20, 100, 200);

r1
public Retangulo(int x, int y, int largura, int altura) {
this.x = x;
this.y = y;
this.largura = largura;
this.altura = altura;
largura = 100
}
altura = 200
x = 10
y = 20

A referência this é usada para


informar que estamos acessando o
atributo largura ao invés do this
parâmetro largura.

57 Programação OO
Construtores

 Como ocorre a criação do objeto com operador new e construtor ?


Retangulo r1, r2;

r1 = new Retangulo(10, 20, 100, 200);

r2 = new Retangulo(5, 15, 50, 150); r1


r2

Quando criamos outro


Retangulo, todo esse largura = 100
processo se repete. largura = 50 altura = 200
altura = 150 x = 10
x=5 y = 20
y = 15

58 Programação OO
Construtores

 Podemos definir mais de um construtor para a mesma classe, desde


que eles tenham assinaturas diferentes:
package principal;
Os dois construtores são válidos
public class Retangulo { porque tem assinaturas diferentes,
private int largura; ou seja, a quantidade ou tipo dos
private int altura; parâmetros são diferentes.
private int x;
private int y;

public Retangulo(int x, int y, int largura, int altura) {


this.x = x;
this.y = y;
this.largura = largura;
this.altura = altura;
}

public Retangulo(int x, int y, int lado) {


this.x = x;
this.y = y;
this.largura = lado;
this.altura = lado;
}
59 Programação OO
}
Exercícios

 Exercício 16: no método main crie duas instâncias r1 e r2 da classe


Retangulo com o operador new, usando construtores diferentes.
Imprima uma mensagem no construtor e uma mensagem antes e
depois da chamada do operador new. Observe o resultado da saída.

60 Programação OO
Construtores

 Resumo sobre Construtores:


 São métodos especiais usados para inicializar a instância com os valores
desejados.
 O construtor sem parâmetros é chamado de construtor default.
 Construtores não retornam nenhum valor.
 Ao criar um construtor, nós definimos que parâmetros deverão ser
passados para que o objeto seja criado de forma coerente.
 Podemos criar vários construtores para uma mesma classe.
 Construtores não podem ser chamados diretamente pelo nosso código.
 Construtores são chamados automaticamente pela máquina virtual Java,
de acordo com o tipo dos parâmetros que estamos passando no operador
new.
 Construtores são chamados após a inicialização dos atributos.
 Quando não definimos nenhum construtor para a classe, o Java gera
automaticamente um construtor default.

61 Programação OO
Métodos de Acesso

 Se os atributos são privados, como lemos ou alteramos os seus


valores?

 Resposta: métodos de acesso !

62 Programação OO
Métodos de Acesso

 Métodos de acesso são usados para ler ou alterar atributos e usam os


seguintes padrões:

public tipo get<nome do atributo>()


{
return atributo;
}

public void set<nome do atributo>(tipo novoValor)


{
atributo = novoValor;
}

63 Programação OO
Métodos de Acesso

 Exemplo: métodos get e set para o atributo largura.

public int getLagura() {


return largura;
}

public void setLargura(int largura) {


this.largura = largura;
}

64 Programação OO
Métodos de Acesso

 Exercício 17: altere o exercício 16 e crie métodos de acesso para a


classe Retangulo. Use esses métodos de acesso para alterar os
atributos das instâncias r1 e r2.

65 Programação OO
Métodos de Acesso
package principal; Os atributos são privados,
então precisamos dos
public class Retangulo { métodos de acesso para
permitir que estes sejam
private int largura, altura, x, y;
lidos ou alterados.

public int getLargura() { return largura; }

public int getAltura() { return altura; }


Repare que, com os métodos
public int getX() { return x; } de acesso, podemos impedir
que alterações inválidas
public int getY() { return y; } sejam executadas.

public void setLargura(int larg) { if (larg > 0) largura = larg; }

public void setAltura(int alt) { if (alt > 0) altura = alt; }

public void setX(int x) { this.x = x; }

public void setY(int y) { this.y = y; }


}
66 Programação OO
Métodos

 Agora que temos os atributos e os construtores da classe Retangulo


podemos implementar os demais métodos:
 Mover
 Redimensionar
 Desenhar

67 Programação OO
Métodos

 Sintaxe de métodos da Classe:

visibilidade [static] [final] [abstract] tipo método ([parâmetros])


[throws exceções]
{
[ corpo do método ]
}

 Visibilidade: public, private, package ou protected.


 static: método da classe (será visto posteriormente)
 final: método não pode ser sobrescrito (será visto posteriormente)
 abstract: método deve ser implementado nas subclasses (será visto
posteriormente)

68 Programação OO
Métodos

 Método mover():

package Principal;

public class Retangulo {

public void mover(int novoX, int novoY) {


x = novoX;
y = novoY;
}
Move o retângulo para
uma nova posição (x, y)
}

69 Programação OO
Métodos

 Método deslocar():

package Principal;

public class Retangulo {

public void deslocar(int dx, int dy) {


x = x + dx;
y = y + dy;
}
Desloca o retângulo na vertical
} e na horizontal.

70 Programação OO
Métodos

 Método redimensionar():

package Principal;

public class Retangulo {

public void redimensionar(float sx, float sy) {


if (sx > 0 && sy > 0) {
largura = (int) (sx * largura);
altura = (int) (sy * altura);
}
Calcula a nova largura/altura, que
} pode ser maior ou menor que
largura/altura atual.
}
Se os novos valores de largura ou
altura forem inválidos, então não
redimensiona.

71 Programação OO
Métodos

 Método desenhar():

package Principal;

public class Retangulo {

public void imprimir() {


System.out.printf("Retangulo(%d, %d, %d, %d)\n",
x, y, largura, altura);
}

}
Imprime os dados do
retângulo

72 Programação OO
Exercícios

 Exercícios 18: altere o exercício 17 para:


a) Deslocar a instância r1 em (-10, 20)
b) Mover a instância r2 para a posição (0,0)
c) Redimensionar a instância r2 na escala (0.5, 1.5)

Ao final, desenhe as instâncias r1 e r2.

73 Programação OO
Exercícios

 Exercício 19: implemente a classe Circulo:


a) Crie um nova classe com o nome Circulo no mesmo projeto onde
está a classe Retangulo.
b) Defina o(s) atributo(s).
c) Defina o(s) construtor(es).
d) Defina os métodos de acesso.
e) Defina os demais métodos (os mesmos métodos da classe
Retangulo)
f) Crie duas instâncias da classe Circulo e execute algumas
operações sobre essas instâncias.

74 Programação OO
Construtor Cópia

 Imagine o seguinte código:

int a, b;
a b
a = 10;
10 10

b = a;

A variável b é uma cópia de a.

Se alterarmos o valor de b não


vamos alterar o valor de a.

75 Programação OO
Construtor Cópia

 Com objetos essa situação é diferente:

Retangulo r1, r2;

r1 = new Retangulo(10, 20, 100, 200);


r1
r2 = r1; r2

r2 vai referenciar o mesmo largura = 100


objeto que r1. altura = 200
x = 10
y = 20
Um objeto só é criado quando
usamos o operador new com
o construtor da classe.

76 Programação OO
Construtor Cópia

 Com objetos essa situação é diferente:

Retangulo r1, r2;

r1 = new Retangulo(10, 20, 100, 200);


r1
r2 = r1; r2

r2.setLargura(300);

largura = 300
altura = 200
Quando alteramos o objeto x = 10
referenciado por r2, estamos y = 20
alterando o mesmo objeto
referenciado por r1.

77 Programação OO
Construtor Cópia

 Quando precisamos clonar um objeto, ou seja, criar um novo objeto


idêntico a um outro que já existe, precisamos implementar um
construtor cópia.

 Como o nome já diz, um construtor cópia tem a finalidade de criar um


objeto como cópia de outro objeto.

 Para definir um construtor cópia devemos criar um construtor que


recebe como parâmetro uma instância da própria classe.

 Dessa forma podemos copiar todos os atributos de uma instância para


a nova instância.

78 Programação OO
Construtor Cópia

 No caso das classes Retangulo e Circulo, definidas anteriormente, o


construtor cópia pode ser definido como:

public class Retangulo{ public class Circulo {


private int largura; private int x;
private int altura; private int y;
private int x; private int raio;
private int y;
public Circulo(Circulo outro)
public Retangulo(Retangulo outro) {
{ x = outro.getX();
largura = outro.getLargura(); y = outro.getY();
altura = outro.getAltura(); raio = outro.getRaio();
x = outro.getX(); }
y = outro.getY(); }
}
}

79 Programação OO
Construtor Cópia

 Para usar o construtor cópia, basta passar o objeto que será copiado:

public class EditorGrafico {


public static void main(String[] args) {
Retangulo r1, r2; r1
Circulo c1, c2;

r1 = new Retangulo(10, 20, 30, 40);


r2
r2 = new Retangulo(r1); largura = 30
altura = 40
x = 10
c1 = new Circulo(5, 15, 50); y = 20

c2 = new Circulo(c1); largura = 30


} altura = 40
x = 10
y = 20

80 Programação OO
Sobrecarga de Métodos

 Java permite que tenhamos métodos com o mesmo nome, mas


parâmetros diferentes. Isso é chamado sobrecarga de métodos.

 No nosso exemplo do Retangulo, podemos definir outro método


redimensionar().

81 Programação OO
Sobrecarga de Métodos

 Exemplo:
public class Retangulo {

public void redimensionar(float sx, float sy) {


if (sx > 0 && sy > 0) {
largura = (int) (sx * largura);
altura = (int) (sy * altura);
}
}

public void redimensionar(int larg, int alt) {


if (larg > 0 && alt > 0) {
O Java não confunde os dois métodos porque
largura = larg;
eles tem assinaturas diferentes !
altura = alt;
}
Assinatura diferente significa que os métodos
} têm:
} - quantidades de parâmetros diferentes,
- tipos dos parâmetros diferentes ou
- ordem dos parâmetros diferente

82 Programação OO
Sobrecarga de Métodos

 Importante: o Java não leva em conta o tipo de retorno dos métodos


para diferencia-los, apenas a quantidade, a ordem e os tipos dos
parâmetros. Exemplo:

public class Retangulo {

public void redimensionar(float dx, float dy) { ... }

public void redimensionar(int larg, int alt) { ... }

public boolean redimensionar(int larg, int alt) { ... }


}

Aqui teremos um erro de compilação,


porque já existe um método redimensionar
que recebe um tipo float. Apesar de um
método não retornar nada e o outro
retornar um boolean, os métodos são
considerados iguais.

83 Programação OO
Exercícios

 Exercício 20: crie uma classe que imprime uma sequência de números
inteiros de n a m. A classe pode imprimir a sequência saltando de 1
em 1 (valor default) ou de p em p. Exemplos:
a) Sequência de 2 a 6: 2 3 4 5 6
b) Sequência de 2 a 10 com salto 2: 2 4 6 8 10
c) Sequência de 0 a 15 com salto 3: 0 3 6 9 12 15
d) Sequência de 0 a 10 com salto 4: 0 4 8

84 Programação OO
Exercícios

 Exercício 21: crie uma classe para representar uma conta-corrente,


com métodos para depositar uma quantia, sacar uma quantia e obter o
saldo. Para cada saque será debitada também uma taxa de operação
no valor de R$ 1,50. Repare que o saque só poderá ser efetuado ser
houver saldo suficiente para a quantia solicitada mais a taxa da
operação.

85 Programação OO
Exercícios

 Exercício 22: crie uma classe Data para representar uma data. Para
criar uma data é obrigatório informar dia, mês e ano. Crie, também,
três métodos:
a) ehValida() que deverá retornar true se a data for válida ou false
caso contrário.
b) ehBissexto() que deverá retornar true se a data for válida e o ano
for bissexto ou false caso contrário.
c) imprime() que deverá imprimir a data com o separador default "/"
ou com um separador definido pelo usuário. Caso a data seja
inválida, o método deverá imprimir "INVÁLIDA".

Ano bissexto é aquele que é múltiplo de 4 e não é múltiplo de 100 OU aquele


que é múltiplo de 400.

86 Programação OO

Você também pode gostar