aula sobre uso de classes e objetos renata pontin de mattos fortes [email protected] 2006

39
Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes [email protected] 2006

Upload: internet

Post on 17-Apr-2015

106 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

Aula

Sobre uso de Classes e Objetos

Renata Pontin de Mattos [email protected]

2006

Page 2: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

2

Roteiro

Criar Objetos

A classe String

Packages

Formatando Saída

Tipos Enumerados

Classes Wrapper

Page 3: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

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

Page 4: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

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();

Page 5: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

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

Page 6: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

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

Page 7: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

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

Page 8: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

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

Page 9: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

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

Page 10: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

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

Page 11: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

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:

Page 12: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

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"

Page 13: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

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

Page 14: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

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.

Page 15: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

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

Page 16: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

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

Page 17: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

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

Page 18: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

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());

}

}

Page 19: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

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

Page 20: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

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

Page 21: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

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.*;

Page 22: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

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.*;

Page 23: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

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

Page 24: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

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); }}

Page 25: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

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

Page 26: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

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);

Page 27: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

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

Page 28: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

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

Page 29: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

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

Page 30: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

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

Page 31: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

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

Page 32: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

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

Page 33: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

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

Page 34: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

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());

}

}

Page 35: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

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

Page 36: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

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

Page 37: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

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

Page 38: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

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

Page 39: Aula Sobre uso de Classes e Objetos Renata Pontin de Mattos Fortes renata@icmc.usp.br 2006

39

fim.