aula sobre uso de classes e objetos renata pontin de mattos fortes [email protected] 2006
TRANSCRIPT
2
Roteiro
Criar Objetos
A classe String
Packages
Formatando Saída
Tipos Enumerados
Classes Wrapper
3
Programas interativos
os programas geralmente precisam de entrada de dados para rodar
a classe Scanner fornece métodos convenientes para ler valores de entrada de vários tipos
um objeto Scanner pode ser setado par ler a entrada de diversas origens, incluindo o usuário digitando valores do teclado
a entrada do teclado é representada pelo objeto System.in
4
Ler da entrada a seguinte linha cria um objeto Scanner que lê
do teclado:
Scanner scan = new Scanner (System.in);
o operador new cria o objeto Scanner, chamado scan
após criado, o objeto Scanner pode ser usado para chamar vários métodos de entrada, como
por exemplo: answer = scan.nextLine();
5
Ler da entrada a classe Scanner é parte da
biblioteca java.util, e deve ser importada no programa para ser usada
o método nextLine lê todas as entradas até que o fim-de-linha seja encontrado
6
Tokens de entrada
a menos que especificado de outra forma, os espaços em branco são usados para separar elementos (chamados tokens) de entrada
espaços em branco incluem: o caracter de espaço, tabs, caracter de new line
o método next da classe Scanner lê o próximo token de entrada e o retorna como um string
os métodos como nextInt e nextDouble lêem os dados de tipos particulares
7
Criando Objetos uma variável armazena ou um tipo primitivo
ou uma referência para um objeto
Um nome de classe pode ser usado como um tipo para declarar uma variável de referencia a objeto
String title;
Nenhum objeto é criado com esta declaração
Uma variável de referencia a objeto armazena o endereço de um objeto. O objeto em si deve ser criado separadamente
8
Criando Objetos Geralmente, usamos o operador new
para criar um objeto
String title = new String (“ Oi "");
chama o construtor de String, que é um Método especial que inicializa o objeto
Criar um objeto é também conhecido por instanciar
um objeto é uma instância de uma certa classe
9
Chamada de métodos Uma vez que um objeto esteja instanciado,
podemos usar o operador PONTO para chamar seus métodos
count = title.length()
Um método pode retornar um valor, que pode ser usado em um atribuição ou expressão
Uma chamada de método pode ser pensada como um pedido pra um objeto realizar um serviço
10
Referências Note que uma variável primitiva pode
conter o valor em si, mas uma variável de objeto contém o endereço do objeto
Uma referência a objeto pode ser pensada como um ponteiro para a localização do objeto
"Silvia Silva"nome1
num1 38
11
Atribuição A ação de atribuição toma uma cópia de um
valor e o armazena em uma variável
Para tipos primitivos:num1 38
num2 96antes:
num2 = num1;
num1 38
num2 38depois:
12
Atribuição por referência Para referência a objetos, a atribuição copia o
endereço:
nome2 = nome1;
nome1
nome2antes:
"Silvia Silva"
"Saulo Saul"
nome1
nome2depois:
"Silvia Silva"
13
Apelidos (aliases) Duas ou mais referências que se referem ao
mesmo objetos são denominados de aliases entre si
Assim, temos uma situação interessante: um objeto pode ser acessado usando múltiplas variáveis de referencia.
Aliases podem ser úteis, mas devem ser utilizados cuidadosamente
Modificar um objeto através de um referência modifica para todos os seus aliases, porque existe realmente somente um objeto
14
Coleta de lixo – (Garbage Collection) Quando um objeto deixa de possuir referências
válidas para ele, ele não pode ser mais acessado pelo programa
o objeto é inútil, e portanto é chamado de lixo (garbage)
Java realiza periodicamente coleta de lixo automática, retornando uma memória de objeto para o sistema para uso futuro
Em outras linguagens, o programador é responsável por realizar a coleta de lixo.
15
A classe String porque strings são MUITO comuns, não
temos que saur o operador new para criar um objeto String
String titulo = "Aula POO!";
Esta sintaxe especial funciona somente para strings
Cada literal string (delimitada por aspas duplas) representa um objeto String
16
Métodos de String Uma vez que um objeto String tenha
sido criado, o seu valor nem seu tamanho podem ser modificados
Portanto, dizemos que um objeto da classe String é imutável
porém, vários métodos da classe String retornam novos objetos String que são versões modificadas do original
17
Índices de String Algumas vezes é útil referenciar um
determinado caractere de uma string
Isso pode ser feito especificando-se o índice numérico do caractere na string
Os índices começam no ZERO em cada string
Na string "Hello", o caractere 'H' está no índice zero, 0, e o 'o' está no índice 4
18
//*************************************************************
public class StringMutation {
public static void main (String[] args) {
String frase = “Change is inevitable";
String mutation1, mutation2, mutation3, mutation4;
System.out.println (“Original : \"" + frase + "\"");
System.out.println (“tamanho da string " + frase.length());
mutation1 = frase.concat (", except from vending machines.");
mutation2 = mutation1.toUpperCase();
mutation3 = mutation2.replace ('E', 'X');
mutation4 = mutation3.substring (3, 30);
System.out.println ("Mutation #1: " + mutation1);
System.out.println ("Mutation #2: " + mutation2);
System.out.println ("Mutation #3: " + mutation3);
System.out.println ("Mutation #4: " + mutation4);
System.out.println ("Mutated length: " + mutation4.length());
}
}
//*************************************************************
public class StringMutation {
public static void main (String[] args) {
String frase = “Change is inevitable";
String mutation1, mutation2, mutation3, mutation4;
System.out.println (“Original : \"" + frase + "\"");
System.out.println (“tamanho da string " + frase.length());
mutation1 = frase.concat (", except from vending machines.");
mutation2 = mutation1.toUpperCase();
mutation3 = mutation2.replace ('E', 'X');
mutation4 = mutation3.substring (3, 30);
System.out.println ("Mutation #1: " + mutation1);
System.out.println ("Mutation #2: " + mutation2);
System.out.println ("Mutation #3: " + mutation3);
System.out.println ("Mutation #4: " + mutation4);
System.out.println ("Mutated length: " + mutation4.length());
}
}
19
Bibliotecas de Classes Uma biblioteca de classes (class library) é
uma coleção de classes que podem ser usadas quando desenvolvendo programas; a biblioteca padrão de Java é parte de qualquer ambiente de desenvolvimento Java
Suas classes não são parte da linguagem Java por si, mas contamos bastante com elas
System e String estão na biblioteca padrão Java
Outras bibliotecas de classes podem ser obtidas de vendedores ou você pode criar
20
Pacotes - Packages as classes da biblioteca padrão Java estão
organizadas em packages
Alguns dos packages da biblioteca padrão são :
Package
java.langjava.appletjava.awtjavax.swingjava.netjava.utiljavax.xml.parsers
Propósito
Suporte geralCriar applets para webGráficos e interfaces gráficas com usuário Capacidades gráficas adicionais Comunicação de redeUtilidadesProcessamento de documentos XML
21
A declaração import Quando se quer usar uma classe de um package,
você pode usar seu nome qualificado completamente:
java.util.Scanner
Ou pode importar a classe, e então simplesmente usar o seu nome de classe
import java.util.Scanner;
Para importar todas as classes de um pacote, deve-se usar o caractere *
import java.util.*;
22
A declaração import Todas as classes do package java.lang são importadas automaticamente em todos os programas. Como se todos os programas contivessem a linha:
import java.lang.*;
23
Classe Random A classe Random é parte do package java.util
Fornece métodos para gerar números pseudo-randômicos
Um objeto Random executa cálculos complicados baseados em um valor inicial (seed value) para produzir uma série de valores randômicos sem significado
24
import java.util.Random;public class RandomNumbers { public static void main (String[] args) { Random generator = new Random(); int num1; float num2; num1 = generator.nextInt(); System.out.println (“um inteiro randomico: " + num1); num1 = generator.nextInt(10); System.out.println (“de 0 a 9: " + num1); num1 = generator.nextInt(10) + 1; System.out.println (“de 1 a 10: " + num1); num1 = generator.nextInt(15) + 20; System.out.println (“de 20 a 34: " + num1); num1 = generator.nextInt(20) - 10; System.out.println (“de -10 a 9: " + num1); num2 = generator.nextFloat(); System.out.println (“ um float randomico (entre 0-1): " + num2); num2 = generator.nextFloat() * 6; // 0.0 to 5.999999 num1 = (int)num2 + 1; System.out.println (“de 1 a 6: " + num1); }}
import java.util.Random;public class RandomNumbers { public static void main (String[] args) { Random generator = new Random(); int num1; float num2; num1 = generator.nextInt(); System.out.println (“um inteiro randomico: " + num1); num1 = generator.nextInt(10); System.out.println (“de 0 a 9: " + num1); num1 = generator.nextInt(10) + 1; System.out.println (“de 1 a 10: " + num1); num1 = generator.nextInt(15) + 20; System.out.println (“de 20 a 34: " + num1); num1 = generator.nextInt(20) - 10; System.out.println (“de -10 a 9: " + num1); num2 = generator.nextFloat(); System.out.println (“ um float randomico (entre 0-1): " + num2); num2 = generator.nextFloat() * 6; // 0.0 to 5.999999 num1 = (int)num2 + 1; System.out.println (“de 1 a 6: " + num1); }}
25
A classe Math é parte do package java.lang
Contém métodos que realizam várias funções matemáticas, por ex:
Valor absoluto
Raiz quadrada
Exponenciação
Funções trigonométricas
26
A classe Math
Os métodos da classe Math são static (também chamados métodos de classe)
Os static methods podem ser chamados pelo nome da classe – nenhum objeto da classe Math é necessário
value = Math.cos(90) + Math.sqrt(delta);
27
Formatando Saída A biblioteca padrão Java contém classes
que fornecem capacidades de formatação
A classe NumberFormat permite formatar valores como moedas ou porcentagens
A classe DecimalFormat permite formatar valores baseados em um padrão
Ambas estão no package java.text
28
Formatando Saída A classe NumberFormat tem métodos
estáticos que retornam um objeto formatado
getCurrencyInstance()
getPercentInstance()
Cada objeto formatado tem um método chamado format que retorna uma string com a informação especificada no formato desejado
29
Formatando Saída A classe DecimalFormat pode ser usada
para formatar um valor em ponto-flutuante de várias formas
É possível especificar que o número seja truncado para três casas decimais, por exemplo.
O construtor da classe DecimalFormat pega uma string que representa um padrão para o número formatado
30
Tipos enumerados Java permite definir um tipo enumerado, que pode
ser usado para declarar variáveis.
Um tipo enumerado estabelece todos os possíveis valores para uma variável daquele tipo.
Os valores são identificados arbitrariamente. Assim, a seguinte declaração cria um tipo enumerado Season
enum Season {winter, spring, summer, fall};
Qualquer número de valores pode ser listado
31
Tipos enumerados A partir de um tipo ser definido, uma
variável daquele tipo pode ser declarada
Season time;
e pode ser atribuído um valor
time = Season.fall;
Os valores são especificados através do nome do tipo
Tipos enumerados são seguros, ou seja, não é possível atribuir qualquer outro valor diferentes dos da lista definida
32
Valores Ordinais Internamente, cada valor de um tipo
enumerado é armazenado como um inteiro, chamado seu valor ordinal
O primeiro valor é zero, o segundo um e assim por diante
Porém, não se pode atribuir um valor numérico a um tipo enumerado, mesmo se ele corresponde a um valor ordinal válido
33
Tipos enumerados A declaração de um tipo
enumerado é um tipo especial de classe, e cada variável daquele tipo é um objeto
o método ordinal retorna o valor ordinal do objeto
O método name retorna o nome do identificador correspondente ao valor do objeto
34
public class IceCream {
enum Sabor {creme, chocolate, morango, crocante, cafe,
pistache, menta, amendoas}
public static void main (String[] args) {
Sabor cone1, cone2, cone3;
cone1 = Sabor.pistache;
cone2 = Sabor.chocolate;
System.out.println ("cone1 vale: " + cone1);
System.out.println ("cone1 ordinal: " + cone1.ordinal());
System.out.println ("cone1 nome: " + cone1.name());
System.out.println ();
System.out.println ("cone2 vale: " + cone2);
System.out.println ("cone2 ordinal: " + cone2.ordinal());
System.out.println ("cone2 nome: " + cone2.name());
cone3 = cone1;
System.out.println ();
System.out.println ("cone3 vale: " + cone3);
System.out.println ("cone3 ordinal: " + cone3.ordinal());
System.out.println ("cone3 nome: " + cone3.name());
}
}
public class IceCream {
enum Sabor {creme, chocolate, morango, crocante, cafe,
pistache, menta, amendoas}
public static void main (String[] args) {
Sabor cone1, cone2, cone3;
cone1 = Sabor.pistache;
cone2 = Sabor.chocolate;
System.out.println ("cone1 vale: " + cone1);
System.out.println ("cone1 ordinal: " + cone1.ordinal());
System.out.println ("cone1 nome: " + cone1.name());
System.out.println ();
System.out.println ("cone2 vale: " + cone2);
System.out.println ("cone2 ordinal: " + cone2.ordinal());
System.out.println ("cone2 nome: " + cone2.name());
cone3 = cone1;
System.out.println ();
System.out.println ("cone3 vale: " + cone3);
System.out.println ("cone3 ordinal: " + cone3.ordinal());
System.out.println ("cone3 nome: " + cone3.name());
}
}
35
Classes Wrapper O package java.lang contém wrapper
classes que correspondem a cada tipo primitivo:
Voidvoid
Booleanboolean
Characterchar
Doubledouble
Floatfloat
Longlong
Integerint
Shortshort
Bytebyte
ClasseWrapper
Tipo Primitivo
36
Classes Wrapper A seguinte declaração cria um objeto Integer que
representa o inteiro 40 como um objeto
Integer age = new Integer(40);
Um objeto de uma classe wrapper pode ser usado em qualquer situação onde um valor primitivo não seria possível
por exemplo, alguns objetos servem como contêiners de outros objetos
Valores primitivos não poderiam ser armazenados em tais contêiners, mas objetos wrapper podem
37
Classes Wrapper As classes wrapper podem conter métodos
estáticos que ajudam a gerenciar o tipo associado
por exemplo, a classe Integer contém um método para converter um inteiro armazenado em um valor String para um valor int:
num = Integer.parseInt(str);
As classes wrapper sempre contém constantes úteis também
por exemplo, a classe Integer contém MIN_VALUE e MAX_VALUE que são os menor e maior valores int
38
Autoboxing Autoboxing é conversão automática de um
valor primitivo para um correspondente objeto wrapper:
Integer obj;
int num = 42;
obj = int;
A atribuição cria o objeto Integer apropriado
A conversão reversa (unboxing) também ocorre automaticamente quando necessário
39
fim.