aula sobre uso de classes e objetos renata pontin de mattos fortes renata@icmc.usp.br 2006

Post on 17-Apr-2015

106 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Aula

Sobre uso de Classes e Objetos

Renata Pontin de Mattos Fortesrenata@icmc.usp.br

2006

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.

top related