Buscar

EDO0400_4

Prévia do material em texto

LINGUAGEM DE PROGRAMAÇÃO - EDO0400
Semana Aula: 4
Unidade 2 - Conceitos de orientação a objetos
Tema
Conceitos de Orientação a Objetos com aplicação na criação de programas em Java.
Palavras-chave
Classe, objeto, sobrecarga, static.
Objetivos
O aluno deverá ser capaz de:
 Compreender os conceitos sobrecarga, métodos static e atributos static.
 Conhecer métodos e constante da classe Math
 Compreender um dos usos do this
 Aplicar os conceitos acima na criação e teste de programas em Java.
 Compreender construtor cópia
Estrutura de Conteúdo
 Método estático
 Classe Math, a constante PI e os métodos pow, sqrt, entre outros.
 Atributo estático
 Sobrecarga ou overload de construtores
 Objeto como parâmetro de método
 Construtor cópia
>>>>>>>>>>>>>>>>>> Detalhando <<<<<<<<<<<<<<<<<<<<<<<<<<
Método estático 
 Em alguns casos precisamos implementar alguns métodos que independem dos objetos 
de uma classe. Nesse caso, chamamos esses métodos de métodos da classe. Tais 
métodos são implementados usando a palavra static.
 Todos os métodos da classe Math são estáticos.
 A principal diferença entre os métodos estáticos e os métodos de instância está na sua 
chamada.
 Exemplos:
double x = 12.2;
double y = Math.sqrt(x); // calcula a raiz quadrada de x
long z = Math.round(y); // arredonda o valor de y
 
Constante estática PI : Math.PI
Métodos da classe Math : abs, acos, asin, atan, ceil, cos, exp, floor, log, max, min, pow, 
random, round, sin, tan, sqrt. Destaque para abs, max, min, pow, round, sqrt.
 
Regra para chamar um método estático : Classe.Método O operador ponto é usado.
Atributos estáticos
 No caso de atributos estáticos só existe UMA cópia desse atributo na memória 
que é COMPARTILHADA por todos os objetos da classe.
 Assim como os métodos estáticos, os atributos estáticos são chamados atributos 
da classe e, por isso, podem ser acessados diretamente a partir da classe.
 
Diferenças importantes
 Métodos de instância : 
1) Só podem ser chamados a partir de objetos da classe.
2) Podem acessar (ler ou alterar) atributos da instância ou atributos da classe 
(estáticos).
 
 Métodos estáticos :
1) São chamados a partir da própria classe.
2) Só podem acessar (ler ou alterar) atributos da classe (estáticos).
 
Sobrecarga ou overload : definido na aula 3. 
 
 De construtores : construtores na mesma classe e que se diferenciam pela 
passagem de parâmetros
 De métodos : dois ou mais métodos na mesma classe, com mesmo nome e que se 
diferenciam pela lista de parâmetros. O Java não confunde os dois métodos 
porque eles têm assinaturas diferentes ! 
 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
 
O parâmetro é um objeto
 Note que o parâmetro passado para um construtor ou método pode ser objeto de uma 
classe. Para manipulá-lo pode ser possível usar a referência this.
 
this
 Nesta aula veremos que a referência this referencia o objeto que está sendo construído 
ou está usando o método. Assim, quando no construtor queremos diferenciar o atributo 
do parâmetro e ambos possuem o mesmo nome, usamos this.
Regra : this.atributo = parâmetro_de_mesmo_nome_que_atributo
 
Construtor cópia
 Imagine o seguinte trecho de código:
int a, b;
a = 10;
b = a; //b é uma cópia de a
 
Com objetos, essa situação é diferente:
 
Retangulo r1, r2;
r1 = new Retangulo(10, 20, 100, 200);
r2 = r1; 
 
NOTE : 
1) r2 vai referenciar o mesmo objeto que r1.
2) Um objeto só é criado quando usamos o operador new com o construtor da classe.
 
 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.
 
Exemplo :
 
public class Retangulo{
 private int largura;
 private int altura;
 private int x;
 private int y;
 public Retangulo(Retangulo outro) {
 largura = outro.getLargura();
 altura = outro.getAltura();
 x = outro.getX();
 y = outro.getY();
 }
}
 
Considere que uma classe Circulo também possui um construtor cópia.
 
public class Circulo {
 private int x;
 private int y;
 private int raio;
 public Circulo(Circulo outro) {
 x = outro.getX();
 y = outro.getY();
 raio = outro.getRaio();
 }
}
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;
 Circulo c1, c2;
 r1 = new Retangulo(10, 20, 30, 40);
 r2 = new Retangulo(r1);
 c1 = new Circulo(5, 15, 50);
 c2 = new Circulo(c1);
 }
 
 
 
Estratégias de Aprendizagem
 Para que o aprendizado seja proveitoso, o aluno deve se envolver ativamente na 
participação da aula, deve realizar as tarefas propostas, realizar testes por conta própria 
nos programas desenvolvidos e compartilhar sua experiência/conclusão com todos. 
 Toda tarefa realizada pode ser conferida com o professor, para que haja certeza se está 
ou não correta.
Indicação de Leitura Específica
Aplicação: articulação teoria e prática
Exercícios :
 
1) Crie um projeto com duas classes : classe Circulo e classe TestaCirculo (com a main), 
sabendo que todo círculo tem um raio e um centro no ponto (x,y). Neste projeto ...
a) crie dois círculos : um com valores constantes definidos por você e outro com dados 
obtidos via console. 
b) implemente todos os sets e todos os gets
c) use sobrecarga de construtores e crie cada círculo (item a) com um construtor.
d) calcule a distância de um círculo a outro. Para isso, implemente um método
 float distancia(Circulo outroCirculo)
que calcula a distância de um círculo a outro. 
 
e) calcule a área de cada círculo. Para isso, implemente um método de nome 
calcularArea.
f) calcule o perímetro de cada círculo. Para isso, implemente um método de nome 
calcularPerimetro.
g) imprima todos os dados de cada círculo. Para isso, implemente um método de nome 
imprimirDados.
 
Considerações Adicionais

Continue navegando