Escolar Documentos
Profissional Documentos
Cultura Documentos
Programao
orientada a objetos
em Java
Helder da Rocha
www.argonavis.com.br
1
Assuntos abordados neste mdulo
Conceitos de programao orientada a objetos existentes na
sintaxe da linguagem Java
Artefatos: pacote, classe, objeto, membro, atributo, mtodo,
construtor e interface
Caractersticas OO em Java: abstrao, encapsulamento, herana e
polimorfismo
Sintaxe Java para construo de estruturas de dados
Tipos de dados primitivos
Componentes de uma classe
Construo de aplicaes simples em Java
Como construir uma classe Java (um tipo de dados) contendo
mtodos, atributos e construtores
Como construir e usar objetos
Este mdulo longo e aborda muitos assuntos que sero
tratados novamente em mdulos posteriores
2
Por que OO importante?
12
Exemplos de tipos primitivos e literais
Literais de caracter:
char c = 'a';
char z = '\u0041'; // em Unicode
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;
Literais de string (no tipo primitivo - s uma referncia)
String s = "abcde";
Literais de vetor (no tipo primitivo - v uma referncia)
int[] v = {5, 6};
13
O que uma classe?
Classes so uma especificao para objetos
Uma classe representa um tipo de dados complexo
Classes descrevem
Tipos dos dados que compem o objeto (o que podem armazenar)
Procedimentos que o objeto pode executar (o que podem fazer)
Instncias da classe Casa (objetos)
Classe Casa c1 = new Casa();
c1.numero = 12;
Casa 12
c1.cor = Color.yellow;
CDPlayer
Em Java
Tipo
(...) Classe Java (tipo)
liga()
desliga() CDPlayer cd1; Referncia
Interface
selecionaFaixa(int) cd1 = new CDPlayer();
Formato das avana()
mensagens retorna() cd1.liga(); Criao de objeto
que se pode executa() cd1.selecionaFaixa(3);
enviar para pausa() cd1.executa();
um objeto para() (...) Envio de mensagem
* Notao UML 24
Agregao, composio e associao
Composio: um trem formado por locomotiva e vages
1
Locomotiva
Trem
1..* Vago
25
Herana (reuso de interface)
Um carro um veculo
Veculo representao
UML
Carro
representao UML
Fusca Porsche
detalhada de Veculo
26
Extenso e sobreposio
Extenso
Acrescenta novos Veculo
mtodos aos j herdados Veculo getVelocidade():float
(Um objeto do tipo getPassageiros():int
Carro tem mais mtodos acelera()
Carro
que um objeto do tipo freia()
abastece()
Veiculo) fechaPorta()
abrePorta()
Sobreposio
Carro
Redefine os mtodos
implementados
Fusca Porsche previamente (Um objeto do
abrePorta() freia() tipo Fusca tem o mesmo
getVelocidade() nmero de mtodos de um
objeto do tipo Carro
27
Polimorfismo
31
Menor classe utilizvel em Java
32
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
Para que serve uma classe
34
Uma unidade de compilao
Casa.java
class Garagem {
... Por causa da declarao package
} o nome completo destas classes
cidade.Garagem
interface Fachada { cidade.Fachada e
... cidade.Casa
}
35
O que pode conter uma classe
Sintaxe bsica
[mod]* tipo identificador ( [tipo arg]* ) [throws exceo*] { ... }
Chave
[mod]* zero ou mais modificadores separados por espaos
tipo tipo de dados retornado pelo mtodo
identificador nome do mtodo
[arg]* zero ou mais argumentos, com tipo declarado,
separados por vrgula
[throws exceo*] declarao de excees
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 Livro {
private String titulo;
public class Produto { private int codigo = 815;
public static int total = 0; ...
public int serie = 0; public int mostraCodigo() {
public Produto() { return codigo;
serie = serie + 1; }
total = serie; }
} class Casa {
} class Data { static Humano arquiteto;
int dia; int numero;
int mes; Humano proprietario;
int ano; Doberman[] guardas;
} }
39
Sintaxe de declarao de atributos
Sintaxe bsica
[modificador]* tipo identificador [= valor] ;
Chave
[modificador]* zero ou mais modificadores (de acesso, de
qualidade), separados por espaos: public, private, static, transient,
final, etc.
tipo tipo de dados que a varivel (ou constante) pode conter
identificador nome da varivel ou constante
[= valor] valor inicial da varivel ou constante
Exemplo
protected static final double PI = 3.14159 ;
int numero;
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
Nunca declaram tipo de retorno
public class Produto {
public static int total = 0;
public int serie = 0;
public Produto() { public class Livro {
serie = total + 1; private String titulo;
total = serie; public Livro() {
} titulo = "Sem ttulo";
} }
public Livro(String umTitulo) {
titulo = umTitulo;
}
}
41
Sintaxe de construtores
42
Exemplo
43
Exemplo: um crculo
44
Usando crculos
45
Herana
Circulo
+x: int
+y: int
+raio: int
+PI: 3.14159
47
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];
Cada elemento do vetor inicializado a um valor default,
dependendo do tipo de dados:
null, para objetos
0, para int, long, short, byte, float, double
Unicode 0, para char
false, para boolean
Elementos podem ser recuperados a partir da posio 0:
int elemento_1 = vetor[0];
int elemento_2 = vetor[1];
48
Vetores
De tipos primitivos
pilha heap pilha heap class Point {
public int x;
# 0 # 23 public int y;
}
0 0
v[0] = 23;
0 v[2] = 52; 52 Point
+x: int
int[] v = new int[3]; +y: int
inicializao dos
v objeto do tipo (int[]) cria um vetor
elementos
De objetos (Point uma classe, com membros x e y, inteiros)
pilha heap pilha heap heap
# null # # 0 p[0].x
0 p[0].y
null null
Point[] p = new Point[2]; p[0] = new Point();
cria um vetor cria um objeto Point
p objeto do tipo (Point[]) 49
Inicializao de vetores
50
A propriedade length
51
Vetores multidimensionais
52
Exerccios
53
Escopo de variveis
54
Exemplo
public class Circulo {
55
Membros de instncia vs.
componentes estticos (de classe)
Componentes estticos
Os componentes de uma classe, quando declarados
'static', existem independente da criao de objetos
S existe uma cpia de cada varivel ou mtodo
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
:Circulo
main() no
Membros de instncia s existem faz parte do
+x: 0
+y: 0
se houver um objeto objeto! +raio: 0
area():double
Errado! Certo!
public class Circulo { membros de public class Circulo {
instncia tem que
public int raio; public int raio; criar pelo
public int x, y; Pode. Porque area() public int x, y; menos um
faz parte do objeto! objeto!
public double area() { public double area() {
return Math.PI * raio * raio; return Math.PI * raio * raio;
} }
public static void main(String[] a){ public static void main(String[] a){
raio = 3; qual raio? Circulo c = new Circulo();
double z = area(); existe? c.raio = 3;
raio de c
} double z = c.area();
} qual area? } area() de c
No pode. No existe existe? }
objeto em main()!
57
Variveis locais vs.
variveis de instncia
Variveis de instncia ...
sempre so automaticamente inicializadas
so sempre disponveis no interior dos mtodos de instncia e
construtores
Variveis locais ...
sempre tm que ser inicializadas antes do uso
podem ter o mesmo identificador que variveis de instncia
neste caso, preciso usar a palavra reservada this para fazer
a distino
class Circulo { varivel de instncia
private int raio;
public void mudaRaio(int raio) {
this.raio = raio; varivel local
}
}
58
Comentrios
60
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!
Classes, construtores e interfaces
use caixa-mista com primeira letra maiscula, iniciando novas
palavras com caixa-alta. No use sublinhado.
ex: UmaClasse, Livro
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
62
Curso J100: Java 2 Standard Edition
Reviso 17.0
argonavis.com.br
63