3. Conceitos Básicos de Programação 4. Desenvolvimento de Programas Orientados a Objetos Carla Merkle Westphall INE-CTC-UFSC E-Mail: [email protected] URL: http://moodle.inf.ufsc.br INE5402/5603-D (20072) - Programação Orientada a Objetos I Tipos Referência • Tipos Referência – Todos os demais tipos de Java! – Definidos a partir de declarações de classes • Quando uma variável em Java é declarada como sendo do tipo de uma classe, esta variável é considerada como sendo do tipo referência – Declaração e inicialização: • String str = “Entendendo Strings”; • Banco brasil = new Banco (“Brasil”); – Diferentemente das variáveis de tipos primitivos, que armazenam um valor, variáveis do tipo referência armazenam um ponteiro para um objeto em memória 2 Strings • Strings – São seqüências de caracteres delimitados por “” – Representadas por instâncias da classe String (pacotes java.lang) – Declaração e Inicialização: • String saudacao = “Bom dia!”; • Variável saudacao conterá um ponteiro (referência) para um objeto do tipo String que estará em memória e que “armazenará” a informação “Bom dia!” – Exemplo: String s1 = “string1”; String s2 = “string2”; String s3 = new String(“s1”); char data[] = { ‘a’, ‘b’, ‘c’ }; String cc = “ab”+ “cde”; – As strings podem ser concatenadas através do operador + 3 Strings • Strings: Comparação – Não use o operador == para comparar Strings – O operador == testa referências quando utilizado com objetos, ou seja, testa se os objetos “apontam” para mesma posição de memória – Use o método equals() da classe String – Use o método equalsIgnoreCase() da classe String se não for importante a caixa (maiúsculas ou minúsculas) String nome = “Lisa”; if(!nome.equals(“Bart”)) If(“Lisa”.equals(nome)) 4 Classe Math • Expressões Matemáticas – Os métodos da classe Math permitem realizar cálculos comuns necessários em expressões matemáticas. – Exemplos de chamadas de métodos da classe Math: • Função raiz quadrada: double y = Math.sqrt(10.0); • Função mínimo: double z = Math.min(x,10); • Os métodos da classe Math são métodos estáticos – não necessitam de objetos da classe para sua chamada – você deve preceder as chamadas dos métodos com o nome da classe seguido de ponto 5 Classe Math • Chamada de Métodos – Métodos podem ser chamados em declarações de variáveis ou como parâmetros de outros métodos • float z = Math.sqrt(4.0*x); • System.out.println(Math.sqrt(x+y*f)); • A classe Math possui duas constantes importantes em programas matemáticos: – Math.E = 2.7282818284590452354 // valor base de logaritmos naturais – Math.PI = 3.14159265358979323846 // relação entre a circunferência e o diâmetro de círculos 6 Classe Math Método abs( x ) ceil ( x ) cos( x ) exp( x ) floor( x ) log( x ) Exemplo valor absoluto de x (tem versões para abs(23.7) é 23.7; abs(0.0) é 0.0; abs(-23.7) é 23.7 float, int e log) arredonda o valor de x para o menor inteiro maior que x co-seno trigonométrico de x (x em radianos) x método esponencial e arredonda o valor de x para o maior inteiro menor que x logaritmo natural de x (base e) ceil(9.2) é 10.0; ceil (-9.8) é -9.0; cos(0.0) é 1.0 exp(1.0) é 2.718281828 floor(9.2) é 9.0; floor(-9.8) é -10.0 log(2.718282) é 1.0; log(7.389056) é 2.0 max( x, y ) maior valor entre x e y (também em versões para float, int e long) max( 2.3, 12.7) é 12.7; max(-2.3;-12.7) é -2.3 min( x, y ) menor valor entre x e y (também em versões para float, int e long) min( 2.3, 12.7) é 2.3; min(-2.3;-12.7) é -12.7 pow( x, y ) x elevado à potência y (x ) round( x ) sin( x ) sqrt( x ) 7 Descrição tan( x ) y arredonda o valor de x inteiro mais próximo seno trigonométrico de x (x em radianos) raiz quadrada de x tangente trigonométrica de x (x em radianos) pow(2.0, 7.0) é 128.0; pow(9.0,0.5) é 3.0 round(9.2) é 9.0; round(-9.8) é -10.0 sin(0.0) é 0.0 sqrt(900.0) é 30.0; sqrt(9.0) é 3.0 tan(0.0) é 0.0 Importando Pacotes • Pacotes (Packages) – Conjunto de classes relacionadas é chamado de pacote • Grupo de todos os pacotes é conhecido como biblioteca de classe java ou Java API (Java applications programming interface) – Scanner está no pacote java.util – Os nomes dos pacotes Java começam com Java (pacotes do núcleo da linguagem) ou Javax (extensões ao núcleo) 8 Importando Pacotes • Exemplos de pacotes Java: – java.lang: Tipos e funcionalidades básicas da linguagem. Inclui, entre outras, as classes String, Math, Integer e Thread. É importada automaticamente em seus programas Java; – java.util: classes para tarefas gerais, tais como vetores e string de tokens. – java.net: recursos de rede (sockets e URLs); – java.io: classes para escrita e leitura em arquivos; – java.awt: componentes gráficos originais da linguagem (Abstract Window Toolkit); – javax.swing: pacote de extensão aos componentes gráficos com melhoramentos à biblioteca AWT – java.applet: classes específicas para tratamento de applets; 9 Importando Pacotes • Nome completo de uma classe: nome do pacote + nome da classe – Ex.: java.lang.String -> nome completo da classe String • Sentença import: – Permite a utilização de membros de pacotes sem a necessidade de referenciá-los a partir do seu nome completo – import <nome completo da classe>; • A importação pode ser de: – Apenas um membro do pacote • Ex.: import java.util.Scanner; – Todos os membros do pacote • Ex.: import java.util.*; • Se não forem usadas todas as classes desse pacote, o compilador vai descobrir quais foram as classes usadas e as importá-las em tempo de compilação – O pacote java.lang é sempre importado • import java.lang.*; 10 Leitura do Teclado • Para ler de forma confortável texto do canal de entrada padrão – É preciso criar primeiro um Scanner passando o canal System.in que esta associado ao teclado Scanner input = new Scanner(System.in); • Para cada um dos tipos primitivos há um método correspondente com a assinatura nextXxx() que retorne um valor desse tipo. – Se a string não puder ser interpretada como sendo deste tipo, é lançado uma exceção do tipo InputMismatchException. • Exemplos de algumas leituras de tokens: – String aToken = input.next() ; //Lê um token string – int num1 = input.nextInt() ; //Lê um token inteiro – double num2 = input.nextDouble() ; //Lê um token real – String linha = input.nextLine() ; 11 //Lê uma linha Impressão Formatada dados formatados • printf – Primeiro argumento é a string formatada (texto fixo e especificadores de formato) – Especificadores de formato começam com (%) e são seguidos por um caractere que representa o tipo de dado • %s para uma string – System.out.printf( "%s\n%s\n", " Bem vindo", " a Java!" ); • %d para um decimal • %f para um número ponto flutuante System.out.printf( "A soma eh %d\n", soma ); // apresenta soma 12 Exemplo: Soma // Programa de adição que apresenta a soma de dois números. import java.util.Scanner; // programa usa a classe Scanner da package java.util public class Soma { // método main inicia a execução da aplicação Java public static void main( String args[] ) { // cria objeto da classe Scanner para obter entradas do teclado Scanner input = new Scanner( System.in ); int numero1; // declara variável: primeiro numero a somar int numero2; // declara variável: segundo numero a somar int soma; // declara variável: soma de numero1 com numero2 System.out.print( "Digite o primeiro inteiro: " ); // prompt numero1 = input.nextInt(); // lê primeiro número via método nextInt da classe Scanner System.out.print( "Digite o segundo inteiro: " ); // prompt numero2 = input.nextInt(); // lê segundo numero soma = numero1 + numero2; // adiciona números System.out.printf( "A soma eh %d\n", soma ); // apresenta soma } // fim do metodo main 13 } // fim da classe Soma Exercícios • Exercício 1 – Escreva um programa que calcula a média de três números reais digitados pelo usuário • Utilize a classe Scanner e printf 14 Caixa de Dialogo: Caixa de Mensagem • Classe JOptionPane – Oferece caixas de diálogo pré-empacotadas que permitem aos programas apresentarem janelas contendo mensagens para o usuário – Faz parte do pacote javax.swing • Pacote que contém várias classes que ajudam o programador a criar GUIs (Graphical User Interfaces) // Imprime linhas na caixa de dialogo import javax.swing.JOptionPane; // importa classe JOptionPane public class Dialogo1 { public static void main( String args[] ) { // apresenta um dialogo com a mensagem JOptionPane.showMessageDialog( null, " Bem vindo\na\nJava" ); } } 15 Caixa de Dialogo: Caixa de Mensagem • Classe JOptionPane – Método JOptionPane.showMessageDialog • Método estático: não requer a instanciação de um objeto • Argumentos – Primeiro usado para posicionamento na tela » Null para colocar a caixa no centro da tela do frame default – Segundo é a String a apresentar // Imprime linhas na caixa de dialogo import javax.swing.JOptionPane; // importa classe JOptionPane public class Dialogo1 { public static void main( String args[] ) { // apresenta um dialogo com a mensagem JOptionPane.showMessageDialog( null, " Bem vindo\na\nJava" ); } } 16 Caixa de Dialogo: Caixa de Mensagem • Classe JOptionPane – Método JOptionPane.showMessageDialog • Argumentos – Primeiro usado para posicionamento na tela » Null para colocar a caixa no centro da tela do frame default – Segundo é a String a apresentar – Terceiro é o título da janela – Quarto é o tipo de mensagem 17 // Imprime linhas na caixa de dialogo import javax.swing.JOptionPane; // importa classe JOptionPane public class Dialogo2 { public static void main( String args[] ) { // apresenta um dialogo com a mensagem JOptionPane.showMessageDialog( null, "Bem vindo\na\nJava" , "Titulo", JOptionPane.INFORMATION_MESSAGE); } } Caixa de Dialogo: Digitando texto • Classe JOptionPane – Método JOptionPane.showInputDialog 18 import javax.swing.JOptionPane; public class BoasVindas { public static void main( String args[] ) { // solicita a digitação do nome String nome = JOptionPane.showInputDialog("Qual é seu nome?" ); // cria a mensagem String mensagem = String.format("Bem vindo, %s, a Desenvolvimento orientado a objetos!", nome ); // Apresenta a mensagem de boas vindas JOptionPane.showMessageDialog( null, mensagem ); } } Caixa de Dialogo: Digitando texto • Método showInputDialog() – Variáveis informadas aos programas Java são sempre Strings que devem ser convertidas. – Erros de entradas inesperadas (tipos incompatíveis com as conversões) devem ser tratados pelo usuário (veremos como em tratamento de exceções). import javax.swing.JOptionPane; public class EntradaInteiro { public static void main( String args[] ) { // solicita a digitação de um inteiro String sInt = JOptionPane.showInputDialog("Digite Inteiro?" ); // recupera a informação como um numero inteiro int numero = Integer.parseInt( sInt); } } 19 Exercícios 2. Modifique o programa de adição de maneira a utilizar entradas baseada em diálogos com JOptionPane ao invés de usar entrada baseada em console 3. Escreva uma instrução (ou comentário) para realizar cada uma das seguintes tarefas: 20 a) Declarar as variáveis x,y e z e resultado como tipo int b) Declarar as variáveis xVal, yVal e zVal como do tipo String c) Solicitar ao usuário para inserir o 1o valor, ler o valor e armazenar em xVal d) Solicitar ao usuário para inserir o 1o valor, ler o valor e armazenar em yVal e) Solicitar ao usuário para inserir o 1o valor, ler o valor e armazenar em zVal f) Converter xVal em um int e armazenar o resultado na variável x g) Converter yVal em um int e armazenar o resultado na variável y h) Converter zVal em um int e armazenar o resultado na variável z i) Computar o produto dos três inteiros contidos em x,y e z e atribuir o resultado à variável resultado j) Exibir um diálogo contendo a mensagem “O Produto é” seguindo do valor da variável resultado k) Retornar um valor a partir do programa para indicar que o mesmo foi finalizado com sucesso. Estrutura de Seleção if • Sintaxe if (condição) comando Java; [ou {bloco de comandos Java;}] • Exemplo: Se a média das notas do aluno for maior ou igual a 6 Imprimir “Aprovado” if (media >= 6) System.out.println(“Aprovado”); if (media >= 6) { System.out.print(“O Aluno está”); System.out.println(“Aprovado”); } 21 verdadeiro Media >=6 falso Imprimir “Aprovado” Estrutura de Seleção if Igualdade ou operador relacional padrão Operadores de Igualdade = ≠ Operadores Relacionais > < 22 Igualdade ou operador relacional Java Exemplo Significado == != x == y x != y x é igual a y x não é igual a y > < >= <= x x x x x é maior que y x é menor que y x é maior ou igual a y x é menor ou igual a y > y < y >= y <= y Operadores Lógicos • Operador Condicional AND (&&) – Usado para testar se duas condições são verdadeiras if (sexo == MASC) && (idade >= 65) ++homemIdoso; • Operador Condicional OR (||) – Usado para testar se uma das condições são verdadeiras if (media >= 6) || (recuperacao >= 6) ++numAprovados; • Adotam circuito curto – AND: Verifica segundo operando apenas se o primeiro é verdadeiro – OR: Verifica segundo operando apenas se o primeiro é falso 23 Operadores Booleanos • AND (&) e OR (|) – Similar aos operadores lógicos, com uma exceção: os operadores lógicos boleanos sempre avaliam os dois operandos – Útil para evitar efeitos colaterais no circuito curto quando existir modificação de valores de variáveis no segundo operando if (vendido == true) | (++idade >= 60) • Garante que ++idade >= 60 será avaliado e a idade será incrementada 24 Estrutura de Seleção if/else • Sintaxe if (condição) comando Java; [ou {bloco de comandos Java;}] else comando Java; [ou {bloco de comandos Java;}] System.out.print(“O Aluno está”); if (media >= 6){ System.out.println(“ Aprovado”); } // fim do bloco if else { System.out.println(“ Reprovado”); } // fim do bloco else 25 verdadeiro Media >=6 falso Imprimir “Reprovado” Imprimir “Aprovado” Estrutura de Seleção if/else • Estrutura aninhada if (media >= 9) System.out.print(“O Conceito é A”); else if (media >= 7) System.out.print(“O Conceito é B”); else if (media >= 6) System.out.print(“O Conceito é C”); else System.out.print(“O Conceito é D”); verdadeiro Media >=9 A falso verdadeiro Media >=7 B falso verdadeiro Media >=6 falso D 26 C Exemplo: Estrutura if // Compara inteiros usando a estrutura de controle if, operadores relacionais // e operadores de igualdade. import java.util.Scanner; // programa usa a classe Scanner public class Compara { // método main inicia a execução do programa Java public static void main( String args[] ) { // cria objeto Scanner para obter entradas do teclado Scanner input = new Scanner( System.in ); int numero1, numero2; // primeiro e segundo numero a comparar System.out.print( "Digite primeiro numero: " ); // prompt numero1 = input.nextInt(); // lê o primeiro numero System.out.print( "Digite segundo numero: " ); // prompt numero2 = input.nextInt(); // lê o segundo numero 27 Exemplo if ( numero1 == numero2 ) System.out.printf( "%d == %d\n", numero1, numero2 ); if ( numero1 != numero2 ) System.out.printf( "%d != %d\n", numero1, numero2 ); if ( numero1 < numero2 ) System.out.printf( "%d < %d\n", numero1, numero2 ); if ( numero1 > numero2 ) System.out.printf( "%d > %d\n", numero1, numero2 ); if ( numero1 <= numero2 ) System.out.printf( "%d <= %d\n", numero1, numero2 ); if ( numero1 >= numero2 ) System.out.printf( "%d >= %d\n", numero1, numero2 ); } // fim do método main } // fim da classe Compara 28