Baixe o app para aproveitar ainda mais
Prévia do material em texto
Linguagem de Programação – Aula 5 Análise e Desenvolvimento de Sistemas/Parangaba Ronnison Reges Vidal Ceará, 10 de Março de 2017 DROPBOX HTTPS://GOO.GL/EQRAXS OBJETIVOS O aluno deverá ser capaz de: Compreender o conceito de sobrecarga(overload) Conhecer alguns métodos (static) e constante da classe Math Compreender um dos usos do this Aplicar os conceitos acima na criação e teste de programas em Java. MÉTODOS ESTÁTICOS 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 MÉTODOS 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 ESTÁTICOS Métodos/atributos de classe Métodos/atributos de objetos 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. Métodos da classe Math : pow e sqrt. Regra para chamar um método estático : Classe.Método O operador ponto é usado. MÉTODOS ESTÁTICOS 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. MÉTODOS ESTÁTICOS 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 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 SOBRECARGA OU OVERLOAD this 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 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. Construtor cópia Imagine o seguinte trecho de código: int a, b; a = 10; b = a; //b é uma cópia de a O PARÂMETRO É UM OBJETO 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. O PARÂMETRO É UM OBJETO 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. O PARÂMETRO É UM OBJETO Exemplo - Considere que uma classe Circulo também possui um construtor cópia. 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(); } } 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(); } } O PARÂMETRO É UM OBJETO Exemplo - 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); } } PACOTE : JAVAX.SWING Classe JOptionPane para entrada e saída de dados ? Métodos : 1) showMessageDialog Exemplo 1 : JOptionPane.showMessageDialog(null, "Esta é uma mensagem !"); Outra possibilidade é JOptionPane.showMessageDialog(null, "Texto da Mensagem", "Titulo da janela criada", TIPOICONE); onde TIPOICONE pode ser: JOptionPane.ERROR_MESSAGE JOptionPane.INFORMATION_MESSAGE JOptionPane.WARNING_MESSAGE JOptionPane.QUESTION_MESSAGE JOptionPane.PLAIN_MESSAGE PACOTE : JAVAX.SWING Exemplo 2 : JOptionPane.showMessageDialog(null, "Mensagem ", "Título da janela", JoptionPane.WARNING_MESSAGE); 2) showInputDialog Exemplo : String numLido = JOptionPane.showInputDialog( "Informe:" ); Note : Os métodos showInputDialog e showMessageDialog são static. Como chamar um método estático ... Regra : classe.método PACOTE : JAVAX.SWING Exemplo : Fonte : Deitel & Deitel import javax.swing.JOptionPane; public class Soma { public static void main( String args[] ) { String numero1, numero2; int n1, n2, resultado; numero1 = JOptionPane.showInputDialog ("Informe um inteiro:"); numero2 = JOptionPane.showInputDialog ("Informe outro inteiro"); // convertendo n1 = Integer.parseInt( numero1 ); //Converte para inteiro com parseInt n2 = Integer.parseInt( numero2 ); // somando resultado = n1 + n2; JOptionPane.showMessageDialog(null, "A soma é "+ resultado, "Resultado:", JOptionPane.PLAIN_MESSAGE); } } PACOTE : JAVAX.SWING Exemplo : Fonte : Deitel & Deitel >> Integer.parseInt() : converte, quando possível, de string para int. Se não for possível, ocorrerá uma exceção (NumberFormatException). >> Double.parseDouble(): converte, quando possível, de string para double. Se não for possível, ocorrerá uma exceção (NumberFormatException >> Float.parseFloat() : converte, quando possível, de string para float. Se não for possível, ocorrerá uma exceção (NumberFormatException). APLICAÇÃO: ARTICULAÇÃO TEORIA E PRÁTICA Exercícios 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 … crie dois círculos : um com valores constantes definidos por você e outro com dados obtidos via console. implemente todos os sets e todos os gets use sobrecarga de construtores e crie cada círculo (item a) com um construtor. APLICAÇÃO: ARTICULAÇÃO TEORIA E PRÁTICA Exercícios - Continuação 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 … 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. calcule a área de cada círculo. Para isso, implemente um método de nome calcularArea. calcule o perímetro de cada círculo. Para isso, implemente um método de nome calcularPerimetro. imprima todos os dados de cada círculo. Para isso, implemente um método de nome imprimirDados. APLICAÇÃO: ARTICULAÇÃO TEORIA E PRÁTICA Exercícios - Continuação Faça um programa em Java para calcular e imprimir o volume de uma esfera de raio r. Faça entrada de dados via classe JOptionPane. Obrigado!
Compartilhar