Baixe Sobrecarga de Métodos e Construtores em Java e outras Provas em PDF para Algoritmos e Programação, somente na Docsity!
Algoritmos e Programação II
Aula 3 – Sobrecarga
*Adaptado do material do Prof. Júlio Machado
Sobrecarga
Em várias linguagens é comum
encontrarmos rotinas que fazem basicamente
a mesma coisa, porém, com nomes distintos
porque se diferenciam nos tipos dos
parâmetros.
Ex.: classe Acumulador
Dois métodos adicionaDouble e adicionaInt.
Ambos somam o valor recebido como
parâmetro ao atributo de instância.
public class Acumulador { private double valor; public Acumulador() { valor = 0; } public double getValor() { return(valor); } public void adicionaDouble(double n) { valor = valor + n; } public void adicionaInt(int n) { valor = valor + n; } }
Em Java, podemos criar os dois métodos com o mesmo nome! A condição é que tenham uma lista de parâmetros diferentes.
public class Acumulador { ... public void adiciona(double n) { valor = valor + n; } public void adiciona(int n) { valor = valor + n; } }
Classe Vector
• add(int indice, Object elemento)
insere o elemento na posição indicada do vetor
• add(Object elemento)
insere o elemento no final do vetor
• remove(int indice)
remove o elemento da posição indicada do vetor
• remove(Object elemento)
busca e remove a primeira ocorrência do
elemento encontrada no vetor
Sobrecarga de Construtores
Usualmente é útil para uma classe possuir
mais de um construtor a fim de oferecer
diversas maneiras para instanciar e inicializar
os objetos dessa classe.
Um construtor também pode sofrer o
processo de sobrecarga.
Exemplo: classe Circulo
Deseja-se ter a
capacidade de inicializar
os atributos de um novo
objeto de duas formas:
através de um construtor sem parâmetros, que cria um círculo padrão de centro (0,0) e raio 1, e através de um construtor que recebe as informações de centro e raio para criar o círculo
public class Circulo { private int centrox; private int centroy; private int raio; public Circulo(int x, int y, int r){ if (x >= 0) centrox = x; else centrox = 0; if (y >= 0) centroy = y; else centroy = 0; if (r > 0) raio = r; else raio = 1; } public Circulo() { centrox = 0; centroy = 0; raio = 1; } ... }
Testando a classe:
public class TesteCirculo { public static void main (String args[]) { Circulo circ1 = new Circulo(); Circulo circ2 = new Circulo(1,2,4); System.out.println("Area circ1= " + circ1.area()); System.out.println("Area circ2= " + circ2.area()); } }
Estudo de Caso
Classe Professor
Definir construtores para:
Inicializar um professor
informando um nome, número
de matrícula e carga horária;
Inicializar um professor
informando o nome e número
de matrícula, com carga
horária padrão de 12 horas
semanais.
Exercícios
1. Altere a classe Ponto apresentada
abaixo para apresentar três
construtores:
Um sem parâmetros, que cria um
ponto nas coordenadas (0,0);
Um que recebe dois parâmetros de
coordenadas X e Y;
Um que inicializa o ponto através
das coordenadas de um outro ponto
recebido como argumento.
2) Utilizando a classe Ponto, altere e introduza
novos métodos na classe Circulo, através da
sobrecarga, para realizar as seguintes
funções:
armazenar as coordenadas do centro em um
objeto Ponto;
construir novos círculos através da informação
de um ponto central e raio;
mover um círculo para um novo ponto central
qualquer.
3) Desenvolva um programa em Java para testar
todos
os novos métodos desenvolvidos no exercício
anterior para a classe Circulo.
4) Crie uma classe CadastroDePontos que
armazena
um conjunto de pontos em um ArrayList , e contenha
um método para incluir novos pontos no cadastro e
um método para imprimir as coordenadas de todos
os pontos.
4) Acrescente à classe Ponto, desenvolvida
anteriormente, a capacidade de calcular a distância entre
dois pontos. Para tal, é desejado o seguinte
comportamento:
calcular a distância entre a instância do ponto e um
outro objeto ponto qualquer;
calcular a distância entre a instância do ponto e um
outro ponto dado pelas coordenadas X e Y;
calcular a distância entre dois pontos dadas as
coordenadas X1, Y1 e X2, Y2.
Obs: A distância entre dois pontos é calculada por:
5) Você está desenvolvendo um sistema de cálculos
matemáticos e se depara com um problema: a
necessidade de utilização de números complexos.
Solicitando ajuda de um matemático, você obtém as
seguintes informações:
Números complexos possuem a forma
parte real + parte imaginária * i como por exemplo 1+3i.
i representa a raiz quadrada de -1.
O número complexo resultante da soma é aquele cuja
parte real é a soma das partes reais dos operandos, e
a parte imaginária é a soma das partes imaginárias
dos operandos.
O número complexo resultante da subtração é aquele
cuja parte real é a diferença das partes reais dos
operandos, e a parte imaginária é a diferença das
partes imaginárias dos operandos.
Números complexos podem ser representados por
extensão, como 1+3i, ou por uma forma resumida pelo
par (parte real, parte imaginária), como (1,3).
Um número real a qualquer, é representado pelo
número complexo (a,0).
Modele e implemente as estruturas necessárias para a
utilização de números complexos em um programa
Java.