Escolar Documentos
Profissional Documentos
Cultura Documentos
Java 02
Java 02
Este mdulo longo e aborda muitos assuntos que sero tratados novamente em mdulos posteriores
(1) Trabalha no espao do problema (casos de uso simplificados em objetos) Abstraes mais simples e mais prximas do mundo real
Biblioteca Catlogo Livro Autor Autor Livro Autor Livro Autor
(2) Trabalha no espao da soluo (casos de uso decompostos em procedimentos algortmicos) Abstraes mais prximas do mundo do computador
Sistema de Biblioteca
Adicionar Livros Pesquisar Catalogo
O que um objeto?
Objetos so conceitos que tm
identidade, estado e comportamento
Ou seja...
Em uma linguagem OO pura
Uma varivel um objeto Um programa um objeto Um procedimento um objeto
Objetos (2)
Em uma linguagem orientada a objetos pura
Um nmero, uma letra, uma palavra, uma valor booleano, uma data, um registro, uma boto da GUI so objetos
Em Java, objetos so armazenados na memria de heap e manipulados atravs de uma referncia Heap Pilha (varivel), guardada na pilha. 0010
Tm estado (seus atributos) Tm comportamento (seus mtodos) Tm identidade (a referncia)
5
ref 001A
23
001A 001F
Literais e tipos
Tipos representam um valor, uma coleo de valores ou coleo de outros tipos. Podem ser
Tipos bsicos, ou primitivos, quando representam unidades indivisveis de informao de tamanho fixo Tipos complexos, quando representam informaes que podem ser decompostas em tipos menores. Os tipos menores podem ser primitivos ou outros tipos complexos
Em Java, tipos complexos so armazenados como objetos e tipos primitivos so guardados na pilha
Apesar de serem objetos, seqncias de caracteres (strings) em Java podem ser representadas literalmente.
11
12
Literais inteiros
int i = 10; short s = 15; byte b = 1; long hexa = 0x9af0L; int octal = 0633;
Literais de ponto-flutuante
float f = 123.0f; double d = 12.3; double g = .1e-23;
Literais booleanos
boolean v = true; boolean f = false;
13
12
Casa c1 = new Casa(); c1.numero = 12; c1.cor = Color.yellow; Casa c2 = new Casa(); c2.numero = 56; c2.cor = Color.red; Casa c3 = new Casa(); c3.numero = 72; c3.cor = Color.white; c3.abrePorta();
56
72
14
Ou seja...
Classes no so os objetos que representam
A planta de uma casa um objeto, mas no uma casa
Resumo
Objetos so conceitos que tm estado (atributos), comportamento (mtodos) e identidade (referncia) Tipos representam valores Primitivos: valores fixos e indivisveis. So armazenados na pilha Complexos: valores multidimensionais que podem ser decompostos em componentes menores. Descrevem objetos que so armazenados no heap Literais Usados para definir tipos primitivos ou certos tipos complexos formados por componentes iguais (strings e vetores) Variveis podem armazenar valores de tipos primitivos ou referncias para objetos Classes so tipos complexos: descrevem objetos No so importantes no contexto da execuo
16
Os componentes de uma classe so seus membros Uma classe pode conter trs tipos de componentes
Membros estticos ou de classe: no fazem parte do "tipo" Membros de instncia: definem o tipo de um objeto Procedimentos de inicializao
Membros de instncia
Cada objeto, quando criado, aloca espao para eles S podem ser usados atravs de objetos
Procedimentos de inicializao
Usados para inicializar objetos ou classes 17
Exemplo
public class Casa { private Porta porta; private int numero; public java.awt.Color cor; public Casa() { porta = new Porta(); numero = ++contagem * 10; } public void abrePorta() { porta.abre(); } public static String arquiteto = "Z"; private static int contagem = 0; static { if ( condio ) { arquiteto = "Og"; } } }
Tipo
Atributos de instncia: cada objeto poder armazenar valores diferentes nessas variveis. Procedimento de inicializao de objetos (Construtor): cdigo executado aps a criao de cada novo objeto. Cada objeto ter um nmero diferente. Mtodo de instncia: s possvel cham-lo se for atravs de um objeto. Atributos estticos: no preciso criar objetos para us-los. Todos os objetos os compartilham. Procedimento de inicializao esttico: cdigo executado uma nica vez, quando a classe carregada. O arquiteto ser um s para todas as casas: ou Z ou Og. 18
A ordem dos membros no importante, mas seguir convenes melhora a legibilidade do cdigo
Mantenha os membros do mesmo tipo juntos (no misture mtodos estticos com mtodos de instncia) Declare as variveis antes ou depois dos mtodos (no misture mtodos, construtores e variveis) Mantenha os seus construtores juntos, de preferncia bem no incio Se for necessrio definir blocos static, defina apenas um, e coloque-o no incio ou no final da classe.
19
Construtores
Construtores so procedimentos realizados na construo de objetos
Parecem mtodos, mas no tm tipo de retorno e tm nome idntico ao nome da classe No fazem parte da definio do tipo do objeto (interface) Nem sempre aparecem explcitos em uma classe: podem ser omitidos (o sistema oferece uma implementao default)
Para cada objeto, o construtor chamado exatamente uma vez: na sua criao
Exemplo:
> Objeto obj = new Objeto();
Chamada de construtor
20
Em Java
(...) Classe Java (tipo) Referncia CDPlayer cd1;
cd1 = new CDPlayer(); cd1.liga(); Criao de objeto cd1.selecionaFaixa(3); cd1.executa(); (...) Envio de mensagem
21
Resumo
Os componentes de uma classe, em Java, podem pertencer a dois domnios, que determinam como so usados Domnio da classe: existem independentemente de existirem objetos ou no: mtodos static, blocos static, atributos static e interface dos construtores de objetos Domnio do objeto: mtodos e atributos no declarados como static (definem o tipo ou interface que um objeto possui), e contedo dos construtores Construtores so usados apenas para construir objetos
No so mtodos (no declaram tipo de retorno) "Ponte" entre dois domnios: so chamados uma vez antes do objeto existir (domnio da classe) e executados no domnio do objeto criado
Reuso de implementao
Separao interface-implementao: maior reuso
Reuso depende de bom planejamento e design
Uma vez criada uma classe, ela deve representar uma unidade de cdigo til para que seja reutilizvel Formas de uso e reuso
Uso e reuso de objetos criados pela classe: mais flexvel a * Composio: a parte essencial de b b Agregao: a parte de b b a Associao: a usado por b b a Reuso da interface da classe: pouco flexvel b a Herana: b a (substituio pura) ou b um tipo de a (substituio til, extenso)
* Notao UML
24
Locomotiva Vago
Trem
1..*
Agregao: uma locomotiva tem um farol (mas no vai deixar de ser uma locomotiva se no o tiver)
Locomotiva Farol
Associao: um trem usa uma estrada de ferro (no faz parte do trem, mas ele depende dela)
Trem usa EstradaDeFerro
25
Carro
Fusca
Porsche
26
Extenso e sobreposio
Extenso
Acrescenta novos mtodos aos j herdados (Um objeto do tipo Carro tem mais mtodos que um objeto do tipo Veiculo) Veculo Carro
abastece() fechaPorta() abrePorta() Veculo getVelocidade():float getPassageiros():int acelera() freia()
Sobreposio
Carro Redefine os mtodos implementados previamente (Um objeto do tipo Fusca tem o mesmo nmero de mtodos de um objeto do tipo Carro
Fusca
abrePorta() getVelocidade()
Porsche
freia()
27
Polimorfismo
Uso de um objeto no lugar de outro
pode-se escrever cdigo que no dependa da existncia prvia de tipos especficos
Desenhista geraFigura() Conhece apenas interface do tipo genrico (Figura) Chama "desenha()" sem saber qual objeto ser desenhado. Objeto real pode ser "plugado" durante a execuo. usa Figura desenha() Ligao da interface com o objeto real pode ser feita durante a execuo
Crculo desenha()
Quadrado desenha()
Tringulo desenha()
28
Encapsulamento
Simplifica o objeto expondo apenas a sua interface essencial Cdigo dentro de mtodos naturalmente encapsulado
No possvel acessar interior de um mtodo fora do objeto
Mtodos que no devem ser usados externamente e atributos podem ter seu nvel de acesso controlado em Java, atravs de modificadores
private: apenas acesso dentro da classe package-private (default): acesso dentro do pacote* protected: acesso em subclasses public: acesso global
* no existe um modificador com este nome. A ausncia de um modificador de acesso deixa o membro com acesso package-private
29
Resumo de caractersticas OO
Abstrao de conceitos
Classes, definem um tipo separando interface de implementao Objetos: instncias utilizveis de uma classe
Encapsulamento
Separao de interface e implementao que permite que usurios de objetos possam utiliz-los sem conhecer detalhes de seu cdigo
Polimorfismo
Permite que objeto seja usado no lugar de outro 30
Exerccio
1. Crie, e compile as seguintes classes
Uma Pessoa tem um nome (String) Uma Porta tem um estado aberto, que pode ser true ou false, e pode ser aberta ou fechada Uma Construcao tem uma finalidade Uma Casa uma Construcao com finalidade residencial que tem um proprietrio Pessoa, um nmero e um conjunto (vetor) de Portas
Smbolos essenciais
Separadores
{ ... } chaves: contm as partes de uma classe e delimitam blocos de instrues (em mtodos, inicializadores, estruturas de controle, etc.) ; ponto-e-vrgula: obrigatria no final de toda instruo simples ou declarao
Identificadores
Nomes usados para representar classes, mtodos, variveis (por exemplo: desenha, Casa, abrePorta, Circulo, raio) Podem conter letras (Unicode) e nmeros, mas no podem comear com nmero
Palavras reservadas
So 52 (assert foi includa na verso 1.4.0) e consistem de 49 palavras-chave e literais true, false e null. Exemplos de palavras-chave so public, int, class, for e void A maior parte dos editores de cdigo Java destaca as palavras reservadas
33
34
class Garagem { ... } interface Fachada { ... } /** Classe principal */ public class Casa { ... }
Por causa da declarao package o nome completo destas classes cidade.Garagem cidade.Fachada e cidade.Casa Este arquivo, ao ser compilado, ir gerar trs arquivos .class
35
Mtodos
Contm procedimentos - instrues simples ou compostas executadas em seqncia - entre chaves Podem conter argumentos
O tipo de cada argumento precisa ser declarado Mtodo identificado pelo nome + nmero e tipo de argumentos
Possuem um tipo de retorno ou a palavra void Podem ter modificadores (public, static, etc.) antes do tipo
... public void paint (Graphics g){ int x = 10; g.drawString(x, x*2, "Booo!"); } ... class T1 { private int a; private int b; public int soma () { return a + b; } } class T2 { int x, y; public int soma () { return x + y; } public static int soma(int a, int b){ return a + b; } public static int soma(int a, int b, int c){ return soma(soma(a, b), c); } }
37
Exemplos
public static void main ( String[] args ) { ... } private final synchronized native int metodo (int i, int j, int k) ; String abreArquivo () throws IOException, Excecao2 { ... }
38
Atributos de dados
Contm dados Devem ser declaradas com tipo Podem ser pr-inicializadas (ou no) Podem conter modificadores
public class Produto { public static int total = 0; public int serie = 0; public Produto() { serie = serie + 1; total = serie; } class Data { } int dia; int mes; int ano; } public class Livro { private String titulo; private int codigo = 815; ... public int mostraCodigo() { return codigo; } } class Casa { static Humano arquiteto; int numero; Humano proprietario; Doberman[] guardas; }
39
Exemplo
40
Construtores
Tm sempre o mesmo nome que a classe Contm procedimentos entre chaves, como os mtodos So chamados apenas uma vez: na criao do objeto Pode haver vrios em uma mesma classe
So identificados pelo nmero e tipo de argumentos
41
Sintaxe de construtores
Construtores so procedimentos especiais usados para construir novos objetos a partir de uma classe A definio de construtores opcional: Toda classe sem construtor declarado explicitamente possui um construtor fornecido pelo sistema (sem argumentos) Parecem mtodos mas
no definem tipo de retorno possuem, como identificador, o nome da classe: Uma classe pode
ter vrios construtores, com o mesmo nome, que se distinguem pelo nmero e tipo de argumentos Sintaxe
[mod]* nome_classe ( [tipo arg]* ) [throws exceo*] { ... }
42
Exemplo
Exemplo de classe com um atributo de dados (varivel), um construtor e dois mtodos
public class UmaClasse { private String mensagem; public UmaClasse () { mensagem = "Mensagem inicial"; } public void setMensagem (String m) { mensagem = m; } public String getMensagem() { return mensagem; } }
variavel (referencia) do tipo String construtor inicializao de varivel ocorre quando objeto construdo mtodo que recebe parmetro e altera varivel mtodo que retorna varivel
43
Exemplo: um crculo
public class Circulo { public int x; public int y; public int raio; public static final double PI = 3.14159; public Circulo (int x1, int y1, int r) { x = x1; y = y1; raio = r; } public double circunferencia() { return 2 * PI * raio; } }
Circulo
+x: int +y: int +raio: int +PI: 3.14159 +Circulo(x:int, y:int, raio:int) +circunferencia(): double
44
Usando crculos
Use dentro de um mtodo ou construtor (blocos de procedimentos)
Circulo c1, c2, c3; c1 = new Circulo(3, 3, 1); c2 = new Circulo(2, 1, 4); c3 = c1; // mesmo objeto! System.out.println("c1: (" + c1.x + ", " + c1.y + ")"); int circ = (int) c1.circunferencia(); System.out.print("Raio de c1: " + c1.raio); System.out.println("; Circunferncia de c1: " + circ);
45
Herana
Circulo +x: int +y: int +raio: int +PI: 3.14159 +Circulo(x:int, y:int, raio:int) +circunferencia(): double
class Coisa extends Circulo { Coisa() { this(1, 1, 0); } Coisa(int x, int y, int z) { super(x, y, z); } }
A Coisa um Circulo!
46
Exerccio
1. Escreva uma classe Ponto
contm x e y que podem ser definidos em construtor mtodos getX() e getY() que retornam x e y mtodos setX(int) e setY(int) que mudam x e y
Vetores
Vetores so colees de objetos ou tipos primitivos
Os tipos devem ser conversveis ao tipo em que foi declarado o vetor
int[] vetor = new int[10];
48
Vetores
De tipos primitivos
pilha heap pilha heap
class Point { public int x; public int y; } Point
+x: int +y: int
0 0 0
#
v[0] = 23; v[2] = 52;
23 0 52
int[] v = new int[3]; v objeto do tipo (int[]) cria um vetor inicializao dos elementos
pilha
heap # null
heap 0 0
p[0].x p[0].y
49
Inicializao de vetores
Vetores podem ser inicializados no momento em que so criados. Sintaxe:
String[] semana = {"Dom", "Seg", "Ter", "Qua", "Qui", "Sex","Sab"}; String[][] usuarios = { {"Joo", "Ningum"}, {"Maria", "D.", "Aparecida"}, {"Fulano", "de", "Tal"} };
Essa inicializao no pode ser usada em outras situaes (depois que o vetor j existe), exceto usando new, da forma:
semana = new String[] {"Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sab"};
50
A propriedade length
length: todo vetor em Java possui esta propriedade que informa o nmero de elementos que possui length uma propriedade read-only extremamente til em blocos de repetio
for (int x = 0; x < vetor.length; x++) { vetor[x] = x*x; }
Uma vez criados, vetores no podem ser redimensionados Use System.arraycopy() para copiar um vetor para dentro de outro (alto desempenho) Use java.util.ArrayList (ou Vector) para manipular com vetores de tamanho varivel (baixo desempenho) ArrayLists e Vectors so facilmente conversveis em vetores quando necessrio
51
Vetores multidimensionais
Vetores multidimensionais em Java so vetores de vetores
possvel criar toda a hierarquia (vetor de vetor de vetor...), para fazer vetores retangulares ...
int [][][] prisma = new int [3][2][2];
... ou criar apenas o primeiro nvel (antes de usar, porm, preciso criar os outros nveis)
int [][][] prisma2 = new int [3][][]; prisma2[0] = new int[2][]; prisma2[1] = new int[3][2]; prisma2[2] = new int[4][4]; prisma2[0][0] = new int[5]; prisma2[0][1] = new int[3];
52
Exerccios
1. Crie uma classe TestaCirculos que
a) crie um vetor de 5 objetos Circulo b) imprima os valores x, y, raio de cada objeto c) declare outra referncia do tipo Circulo[] d) copie a referncia do primeiro vetor para o segundo e) imprima ambos os vetores f) crie um terceiro vetor g) copie os objetos do primeiro vetor para o terceiro h) altere os valores de raio para os objetos do primeiro vetor i) imprima os trs vetores
53
Escopo de variveis
Atributos de dados (declarados no bloco da classe): podem ser usadas em qualquer lugar (qualquer bloco) da classe
Uso em outras classes depende de modificadores de acesso (public, private, etc.) Existem enquanto o objeto existir (ou enquanto a classe existir, se declarados static)
54
Exemplo
public class Circulo {
private int raio; private int x, y; public double area() { return Math.PI * raio * raio; } public void mudaRaio(int novoRaio) { int maxRaio = 50; if (novoRaio > maxRaio) { raio = maxRaio; } if (novoRaio > 0) { int inutil = 0; raio = novoRaio; } } }
novoRaio varivel local ao mtodo mudaRaio maxRaio varivel local ao mtodo mudaRaio raio varivel de instncia inutil varivel local ao bloco if
55
Membros de instncia
mtodos e variveis que no tenham modificador 'static' so membros do objeto Para cada objeto, h uma cpia dos mtodos e variveis
Escopo
Membros de instncia no podem ser usados dentro de blocos estticos: preciso obter antes, uma referncia para
o objeto
56
Exemplos
Membros de instncia s existem se houver um objeto
Errado!
public class Circulo { public int raio; public int x, y; membros de instncia Pode. Porque area() faz parte do objeto!
:Circulo
+x: 0 +y: 0 +raio: 0 area():double
Certo!
public class Circulo { public int raio; public int x, y;
public double area() { return Math.PI * raio * raio; } public static void main(String[] a){ raio = 3; qual raio? double z = area(); existe? } } No pode. No existe objeto em main()!
public double area() { return Math.PI * raio * raio; } public static void main(String[] a){ Circulo c = new Circulo(); c.raio = 3; raio de c double z = c.area(); } area() de c
57
58
Comentrios
H duas formas de incluir comentrios em um arquivo Java Antes de mtodos, construtores, campos de dados e classes, o comentrio de bloco iniciado com /** pode ser usado para gerar HTML em documentao
H uma ferramenta (JavaDoc) que gera automaticamente documentao a partir dos arquivos .java relaciona e descreve classes, mtodos, etc e cria referncias cruzadas Descries em HTML podem ser includas nos comentrios especiais /** ... */ /* ... comentrio de bloco ... */ // comentrio de linha
59
Gerao de documentao
Para gerar documentao de um arquivo ou de uma coleo de arquivos .java use o javadoc:
javadoc arquivo1.java arquivo2.java
O programa criar uma coleo de arquivos HTML, interligados, entre eles estaro
ndice de referncias cruzadas uma pgina para cada classe, com links para cada mtodo, construtor e campo pblico, contendo descries (se houver) de comentrios /** .. */
Convenes de cdigo
Toda a documentao Java usa uma conveno para nomes de classes, mtodos e variveis
Utiliz-la facilitar a manuteno do seu cdigo!
Mtodos e variveis
use caixa mista, com primeira letra minscula ex: umaVariavel, umMetodo()
Constantes
use todas as letras maisculas. Use sublinhado para separar as palavras ex: UMA_CONSTANTE
61
Exerccios
1. Classe Conta e TestaConta
a) Crie a classe Conta, de acordo com o diagrama UML abaixo
acrescenta valor ao saldo atual Conta -saldo: double -numero: String +depositar(valor: double) +sacar (valor: double) +toString(): String +Conta(nome: String) subtrai valor do saldo atual sobrepe Object.toString() retorna String contendo saldo atual
b) Crie uma classe TestaConta, contendo um mtodo main(), e simule a criao de objetos Conta, o uso dos mtodos depositar() e sacar() e imprima, aps cada operao, os valores disponveis atravs do mtodo toString() c) Gere a documentao javadoc das duas classes
62
argonavis.com.br
63