Introdução a classes e objetos Prof. Marcelo Roberto Zorzan Prof a. Rachel Reis
Estruturas de Seleção if... else Operador condicional (? : ) switch Aula de Hoje Estruturas de Repetição: while/do... while/for Instruções break e continue Variável de instância final Arrays Método tostring Referência this Sobrecarga de Construtores e Métodos
Estruturas de Seleção Seleção: if if (nota >=60) System.out.println( Aprovado ); Seleção: if... else if (nota >=0) System.out.println( Aprovado ); else System.out.println( Reprovado );
Estruturas de Seleção Instruções if... else aninhadas if (nota < 40) System.out.println( Reprovado ); else if (nota < 60) System.out.println( Recuperação ); else System.out.println( Aprovado );
Estruturas de Seleção Operador condicional (? : ) System.out.println( nota>=60? Aprovado : Reprovado ); O 1º operando é uma expressão booleana (true ou false) O 2º é o valor da expressão condicional se a expressão booleana for true O 3º é o valor da expressão condicional se a expressão booleana for false
Estruturas de Seleção Instrução switch Realizar diferentes ações baseadas nos possíveis valores de uma variável de inteiro ou expressão Cada ação está associada com o valor de uma expressão integral constante (byte, short, int, ou char)
Estruturas de Seleção switch(condição) { case constante: instrução; break; case constante: instrução; break; default: instrução; }
Estruturas de Repetição Comando while int valor = 3; while (valor < 100) valor = 3 * valor;
Estruturas de Repetição Comando do... while Testa a condição de continuação do loop depois de executar o corpo do loop Sempre executa pelo menos uma vez do{ instrução; } while (condição)
Estruturas de Repetição do... while - Exemplo int cont = 1; do { System.out.printf( %d, cont); ++cont; } while (cont <=10)
Estruturas de Repetição Comando for for (cont=1; cont<=10; cont++) System.out.printf( %d, cont); Forma geral for (inicialização; condicaoparada; incremento) instrução;
Instruções Break e Continue Usadas para alterar o fluxo de controle Instrução break - Quando usada em um while, for, do... while ou switch, ocasiona sua saída imediata dessa instrução A execução continua com a primeira instrução depois da instrução de controle
Break Instruções Break e Continue for (cont=1; cont <=10; cont++) { if (cont == 5) break; System.out.printf( %d, cont); } Esse código imprime 1 2 3 4
Instruções Break e Continue Instrução Continue Quando executada em um while, for ou do while pula as instruções restantes no corpo do loop e prossegue com a próxima iteração do loop
Instruções Break e Continue Continue for (cont = 1; cont <=10; cont++) if (cont == 5) continue; System.out.printf( %d, cont); } Esse código imprime 1 2 3 4 6 7 8 9 10
Operadores de atribuição composto Usados para abreviar instruções de atribuição Ex: c = c + 3; c+= 3; Operadores de atribuição: 1) += 2) -= 3) *= 4) /= 5) %=
Variáveis de instância final A palavra-chave final serve para especificar que uma variável não é modificável (é uma constante) e que qualquer tentativa de modificar é um erro Ex: private final int incremento;
Arrays É um grupo de variáveis que contém valores que são todos do mesmo tipo Os arrays são objetos tipos por referência Os elementos de um array podem ser tipos primitivos ou por referência O número de posição do elemento é chamado índice
Arrays Um programa refere-se aos elementos do array usando o nome do array seguido pelo índice do elemento entre colchetes ([]) O primeiro elemento do array tem índice zero Um programa pode usar uma expressão como índice em um array Um array possui o membro length que fornece o comprimento do array
Arrays Para criar arrays usa-se a palavra-chave new, especificando o tipo dos elementos do array e o número de elementos. Ex 1: int c[] = new int [12]; Ex 2: int c[]; c = new int[12];
Arrays Um programa pode criar vários arrays em uma única declaração Ex 1: String b[] = new String[100], x[] = new String[27]; Ex 2: String b[] = new String[100]; String x[] = new String[27];
Arrays Os colchetes podem aparecer 1) double[] array1, array2; 2) double array1[]; 3) double[] array1; Exemplo array int array[] = new int[10]; for (int c=0; c<array.length; c++) System.out.println(array[c]);
Arrays public class IniciaArray { public static void main (String args[]) { int array[]; array = new int[10]; for (int cont=0; cont < array.length; cont++) array[cont] = 2+2*cont; } }
Arrays Um programa pode criar e inicializar um array Ex: int n[] = {10, 20, 30, 40} Neste caso não é necessário utilizar a palavrachave new
Estrutura for aprimorada Itera os elementos de um array sem utilizar um contador for (parâmetro : array) instrução; Ex: int array[] = {88,94,100,24,75,78} int total = 0; for (int nro: array) total += nro;
Arrays Multidimensionais Os arrays bidimensionais são usados para representar tabelas (linhas e colunas) Para identificar um elemento deve-se informar 2 índices O Java permite especificar arrays unidimensionais cujos elementos são também arrays unidimensionais alcançando assim um array bidimensional
Arrays Multidimensionais Cada elemento do array é acessado por a[linha][coluna] Exemplos 1) int b[][] = {{1,2}, {3,4}}; 2) int b[][] = {{1,2}, {3,4,5}};
Arrays Multidimensionais Exemplos 1) int b[][]; b = new int [3][4]; 2) int b [][]; b = new int [2][]; b[0] =new int[5]; b[1] = new int[3];
Passando arrays para métodos Para passar um array para um método especifique o nome do array sem nenhum colchete Quando um argumento para um método for um array ou elemento de um array de um tipo por referência, o método recebe uma cópia da referência Quando um argumento para um método for um elemento do array de um tipo primitivo, o método recebe uma cópia do valor do elemento
Passagem por valor e referência O Java não permite ao programador escolher entre passar por valor ou passar por referência Todos os argumentos são passados por valor Cópias de valores primitivos Cópias de referência para objetos
Exercício Array 1 Crie uma classe Curso, que contém Um atributo nomecurso Um atributo notas do tipo array com 10 posições Um construtor para setar o valor dos atributos Os métodos get e set para os atributos Um método que calcula a média das notas Um método que calcula a maior nota Crie uma classe para testes
Exercício Array 2 Crie uma classe carro, que contém Um atributo modelo do carro Um atributo ano de fabricação Um atributo preço do carro (indicando o preço do carro em diferentes concessionárias) do tipo array com 5 posições Um construtor para inicializar os atributos Métodos get e set para cada atributo Métodos para encontrar o maior preço de um modelo carro Método para encontrar o menor preço de um modelo de carro Método para calcular o preço médio de um determinado modelo de carro
Método tostring public class Tempo { private int hora; private int minuto; private int segundo; public void settempo(int h, int m, int s) { hora = ((h>=0 && h<24)? h : 0); minuto = ((m>=0 && m<60)? m : 0); segundo = ((s>=0 && s<60)? s : 0); }
Método tostring } public String tostring() { return String.format( %d:%d:%d,hora, minuto, segundo); } O método tostring não recebe argumentos e retorna uma string em formato de hora padrão que consiste nos valores de hora, minuto e segundo separados por dois pontos.
Método tostring A classe tempo não declara um construtor, portanto, ela tem um construtor padrão (default) O método settempo é usado para configurar data/hora. Uma expressão condicional testa se cada argumento está dentro do intervalo especificado
Referência this Cada objeto pode acessar uma referência a si próprio com a palavra-chave this Quando um método não-static é chamado por um objeto particular, o corpo do método utiliza implicitamente a palavra this para referenciar as variáveis de instância do objeto e outros métodos
Referência this
Referência this
Referência this No exemplo anterior duas classes foram declaradas dentro de um mesmo arquivo (TesteThis e Tempo) Quando um arquivo.java é compilado e contém mais de uma classe, o compilador produz um arquivo separado da classe com a extensão.class para cada classe compilada Nesse caso, somente uma classe pode ser declarada como public
Referência this Observe que no exemplo anterior o nome dos parâmetros para o construtor são idênticos aos nomes das variáveis de instância da classe Se um método contiver uma variável local com o mesmo nome de um atributo, esse método vai referenciar a variável local ao invés do atributo
Sobrecarga de construtores Uma classe pode ter vários construtores sobrecarregados permitindo que objetos dessa classe sejam inicializados de diferentes maneiras Para sobrecarregar construtores, basta fornecer múltiplas declarações de construtor com assinaturas diferentes As regras para sobrecarga de construtores são: - A lista de parâmetros tem que mudar - O modificador de acesso pode mudar
Sobrecarga de construtores class Sobrecarga1 { private int num1; private int num2; Escreva três construtores Sobrecarga1(){} Sobrecarga1(int p){ num1 = p; num2 = 0; } } Sobrecarga1 (int p, int s){ num1 = p; num 2 = s; }
Referência this Você pode chamar um construtor dentro de outro construtor através da palavra-chave this: ContaBancaria() { this (, 0.0, false); } ContaBancaria(String nome, double saldo, boolean ehespecial) { this.nome = nome; this.saldo = saldo; this.ehespecial = ehespecial }
ContaBancaria() { this (, 0.0, false); } ContaBancaria(String nome, double saldo, boolean ehespecial) { this.nome = nome; this.saldo = saldo; this.ehespecial = ehespecial } O segundo construtor é apelidado completo, pois inicializa todos os atributos da classe. O primeiro construtor não recebe nenhum argumento e passa o nome do correntista como uma string vazia. A instrução this deve vir sempre na primeira linha do construtor.
Sobrecarga de construtores Outro exemplo
Sobrecarga de construtores
Sobrecarga de métodos É a capacidade de possuir métodos diferentes com mesmo nome, mas com parâmetros diferentes O interpretador determinará qual método deve ser invocado pelo tipo de parâmetro passado. Os trecho abaixo é válido para uma compilação Java. public void imprimir ( int i ) {... } public void imprimir ( float f ) {... } public void imprimir ( String s) {... }
Sobrecarga de métodos Criar métodos com o mesmo nome, mas com diferentes parâmetros e/ou diferente tipo de retorno As regras para sobrecarga de métodos são: - O nome do método tem que ser o mesmo - A lista de parâmetros tem que mudar - O tipo de retorno pode mudar - O modificador de acesso pode mudar
Sobrecarga de métodos public int soma(int x, int y) { return x + y; } public double soma(double x, double y) { return x + y; } public String soma(string x, String y) { return x + y; }
Sobrecarga de métodos Dado o método: void teste (int i, String s){ } Exemplo válido de sobrecarga void teste (String s, int i){ } Exemplo inválido de sobrecarga void teste (int j, String k){ }
Exercício 1) Escreva 3 exemplos válidos de sobrecarga para o método: public void sobrecarga (int x, String y, float z){ } Regras de sobrecarga: - O nome do método tem que ser o mesmo - A lista de parâmetros tem que mudar - O tipo de retorno pode mudar - O modificador de acesso pode mudar
Exercício 2) Crie um a classe retângulo que possui - Dois construtores: 1) Setando a largura e o comprimento para 0 2) Setando a largura e o comprimento com um valor recebido como parâmetro Métodos que calculam o perímetro e a área do retângulo Métodos get e set para o comprimento e largura. O método set deve verificar se a largura e o comprimento são números maiores que 0.0 e menores que 20.0 Teste a classe retângulo