Buscar

turma_A_poos3_aula_2_sobrecarga_construtor_pacote

Prévia do material em texto

POOS3 – Programação Orientada a Objetos edilson.ifsp@gmail.com 
 
Aula 2 – Sobrecarga, Construtor, Estrutura de Pacote 
1. Sobrecarga 
Java permite que vários métodos com o mesmo nome sejam definidos, contanto que esses 
métodos tenham diferentes conjuntos de parâmetros (com base no número, nos tipos e na ordem 
dos parâmetros). Isso é chamado de sobrecarga de método. A sobrecarga de um método é 
comumente utilizada para criar vários métodos com o mesmo nome que realizam tarefas 
semelhantes sobre tipos de dados diferentes. 
Exemplo 1: 
 
public int adicao(int x, int y) 
{ 
 return x + y; 
} 
 
public float adicao(float x, float y) 
{ 
 return x + y; 
} 
 
Note que os dois métodos têm o mesmo nome: “adicao”. Mas como isso é possível? É possível 
pelo fato de Java permitir a sobrecarga de métodos. Apesar do mesmo nome, os métodos possuem 
tipos de parâmetros diferentes. 
Veja outro exemplo: 
Exemplo 2: 
 
public int soma(int nro1, int nro2) 
{ 
 return nro1 + nro2; 
} 
 
public int soma(int nro1, int nro2, int nro3) 
{ 
 return nro1 + nro2 + nro3; 
} 
 
Os dois métodos possuem o nome “soma”. Mas enquanto o primeiro permite a soma de dois 
valores, o segundo permite a soma de três valores. 
 
1.1. Como utilizar métodos sobrecarregados? 
A seguir é mostrado um exemplo no qual você pode verificar como utilizar os métodos 
sobrecarregados. 
Primeiro, iremos criar a classe Calculadora, com dois métodos sobrecarregados (adicao e soma). 
Exemplo 3: 
 
public class Calculadora { 
 
 public int adicao(int x, int y){ 
 return x + y; 
 } 
 
 public double adicao(double x, double y){ 
 return x + y; 
 } 
 
 public int soma(int nro1, int nro2){ 
 return nro1 + nro2; 
 } 
 
 public int soma(int nro1, int nro2, int nro3){ 
 return nro1 + nro2 + nro3; 
 } 
} 
 
Para testar os métodos, a classe CalculadoraTeste é criada abaixo. Note que podemos efetuar a 
adição de dois números, sejam eles inteiros ou double. Isso é possível porque o método adicao foi 
criado utilizando-se sobrecarga. Assim, ele é capaz de somar números inteiros e números com ponto 
flutuante. 
 
public class CalculadoraTeste { 
 public static void main(String[] args) { 
 int r1Int, r2Int; 
 double r3Double; 
 
 Calculadora c = new Calculadora(); 
 
 r1Int = c.adicao(2, 3); 
 r3Double = c.adicao(1.5, 6.1); 
 
 System.out.println(r1Int); 
 System.out.println(r3Double); 
 
 r2Int = c.soma(2, 6); 
 System.out.println(r2Int); 
 
 r2Int = c.soma(1, 2, 3); 
 System.out.println(r2Int); 
 } 
} 
 
O método soma também está sobrecarregado. Isso permite que se efetue a soma de dois ou três 
números. 
 
2. Construtor 
Criando um Construtor 
O construtor é um método especial. Ele possui o mesmo nome da classe e pode ter parâmetros. 
Entretanto, ele não pode retornar um valor (nem mesmo void). Cada classe deve ter um construtor 
(é possível ter mais do que um construtor). Caso você não crie um construtor, o compilador irá gerar 
o construtor padrão de forma automática. Para criar um construtor, basta adicionar na classe um 
método público com o mesmo nome da classe, e que não retorne valor. 
Quando a palavra new é utilizada, o construtor é chamado e ele realiza as inicializações 
requeridas nos objetos. Veja o exemplo a seguir: 
Exemplo 4: 
class Circulo { 
 private double raio; 
 
 public Circulo() { 
 raio = 0.0; 
 } 
 public double calcularArea() { 
 return 3.141592 * raio * raio; 
 } 
} 
 
Observe que a classe Circulo possui um construtor: 
 
public Circulo() { 
 raio = 0.0; 
 } 
 
2.1. Sobrecarga de Construtores 
No exemplo anterior, a área de todos os objetos do tipo círculo sempre será zero porque o 
construtor está inicializando seu valor como igual a zero. Para resolver isso, basta sobrecarregar o 
construtor (lembre-se, o construtor é um tipo especial de método). 
Exemplo 5: 
 
class Circulo { 
 private double raio; 
 
 public Circulo() { 
 raio = 0.0; 
 } 
 
 public Circulo(double raioInicial) { 
 raio = raioInicial; 
 } 
 
 public double calcularArea() { 
 return 3.141592 * raio * raio; 
 } 
} 
 
Veja outro exemplo: 
 
public class Pessoa { 
 private String nome; 
 private int idade; 
 
 public Pessoa(){} 
 
 public Pessoa(String n, int i){ 
 nome = n; 
 idade = i; 
 } 
 
 public int getIdade() { 
 return idade; 
 } 
 
 public void setIdade(int i) { 
 idade = i; 
 } 
 
 public String getNome() { 
 return nome; 
 } 
 
 public void setNome(String n) { 
 nome = n; 
 } 
 
} 
 
public class PessoaTeste { 
 public static void main(String[] args) { 
 Pessoa p1 = new Pessoa(); 
 
 p1.setNome("Maria"); 
 p1.setIdade(21); 
 
 System.out.println(p1.getNome()); 
 System.out.println(p1.getIdade()); 
 
 Pessoa p2 = new Pessoa("José", 28); 
 System.out.println(p2.getNome()); 
 System.out.println(p2.getIdade()); 
 
 } 
} 
 
Observe que o objeto p1 utilizou os métodos setNome e setIdade para incluir essas informações 
nas variáveis de instância nome e idade. Já o objeto p2 utilizou um construtor sobrecarregado, no 
qual nome e idade são incluídos no momento da criação do objeto. 
 
3. Pacote 
Java possibilita a utilização de pacotes para organizar as classes criadas pelo desenvolvedor. A 
própria biblioteca padrão do Java é distribuída em pacotes, incluindo: java.lang, java.util, java.net, 
etc. 
Além da organização das classes de seu projeto, a utilização de pacotes garante que classes com 
o mesmo nome não criem conflitos entre si, devido à convenção para nomenclatura dos pacotes. 
Imagine que três programadores trabalhando em um mesmo projeto resolvem criar uma classe 
chamada “Utilidades”. Sem a utilização de pacotes, não seria possível dizer à JVM qual das classes 
referenciar. 
A Oracle recomenda que se utilize o nome de domínio da empresa na Internet escrito ao inverso 
para elaborar a estrutura dos pacotes. A partir daí, o projeto pode ser estruturado em subpastas. 
Como exemplo, considere um domínio na Internet cujo nome é “nomeDominio.com.br”. Dessa 
forma, a estrutura de pacotes seria nomeada como “br.com.nomeDominio”. Caso um projeto 
denominado “meuProjeto” fosse criado, a estrutura ficaria: “br.com.nomeDominio.meuProjeto”. 
 
3.1. Definindo Pacotes 
Para especificar o pacote ao qual uma classe pertence, a palavra chave package deve ser incluída 
na primeira linha do código fonte. Exemplo: 
 
package br.com.edilson.exercicio; 
 
public class Funcionario { 
 
} 
 
3.2. Importação de Classes 
Uma classe pode utilizar todas as classes de seu próprio pacote e todas as classes públicas de 
outros pacotes. Para acessar as classes públicas de outros pacotes, existem duas maneiras: a 
primeira é através do nome completo da classe que você pretende utilizar. Exemplo: 
package br.com.edilson.exercicio; 
 
public class Teste { 
 java.util.Scanner entrada = new java.util.Scanner(System.in); 
} 
 
Uma maneira mais simples é utilizar a declaração import. Através dela, é criado um atalho para 
se referir à classe de um determinado pacote. Uma vez que o import é utilizado, não há mais a 
necessidade de se utilizar o caminho completo da classe. Exemplo:package br.com.edilson.exercicio; 
 
import java.util.Scanner; 
 
public class Teste { 
 Scanner entrada = new Scanner(System.in); 
} 
 
Se o objetivo é importar todas as classes de um determinado pacote, um * deve ser utilizado ao 
final do comando import. Exemplo: 
 
import java.util.*; 
 
4. Exercícios 
4.1. Crie um programa que simule uma calculadora. O usuário deverá informar dois números e 
especificar umas das seguintes operações (Adição, Subtração, Divisão, Multiplicação). Crie 
uma classe chamada Calculadora, na qual os métodos deverão ser especificados. A 
calculadora deve somar números inteiros, float e double. 
Obs: Criando um programa utilizando Console facilitará a simulação. 
 
4.2. Crie uma classe chamada Aluno. Essa classe deve permitir que o nome do aluno e um código 
de acesso de quatro dígitos sejam especificados ao se criar um novo objeto. A classe também 
deve permitir que o nome “Visitante” juntamente com o código “0000” possam ser 
especificados ao se criar um novo objeto. 
 
4.3. Escreva um programa que leia as seguintes informações para dois clientes: nome, fone e 
crédito disponível. Você deve criar também um método para verificar se o cliente ainda tem 
direito a comprar na loja (baseando-se em um crédito positivo), e em caso afirmativo, o valor 
que pode ser gasto (utilize construtores sobrecarregados). 
 
4.4. Escreva um programa que será armazenado dentro de um controle remoto de uma Tv. O 
programa deve conter o método ligar. Esse método pode ser utilizado em três situações: na 
primeira, a Tv somente será ligada; na segunda, a Tv será ligada e sintonizada em um canal 
informado pelo usuário; já na terceira, a Tv será ligada, o canal sintonizado e também o 
volume será ajustado de acordo com a preferência do usuário. 
 
4.5. Você foi contratado para criar um programa que permita a manipulação de três impressoras. 
A impressora A precisa de uma string de caracteres para realizar a impressão, e retorna 
verdadeiro ou falso como resultado. A impressora B precisa de uma string de caracteres, o 
número inicial e também o número final das páginas que serão impressas. Ela retorna um 
código que varia entre 1 e 6 para indicar o que ocorreu durante o processo de impressão. A 
impressora C envia dois strings de caracteres e o total de páginas que será impresso, e 
retorna um vetor com dados sobre o processo. De acordo com as funcionalidades solicitadas, 
escreva um programa que permita a escolha de uma determinada impressora, valide se os 
parâmetros necessários para a impressão foram informados corretamente e exiba um log 
com a saída que a impressora gera.

Continue navegando