Baixe o app para aproveitar ainda mais
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.
Compartilhar