Slides 1 - Blog Ramon RDM

Propaganda
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
Download