Aqui são apresentados conceitos básicos a plataforma Java. Simples e rápido.
/**Depois que entrei no mundo Java, começei a procurar por conteúdo na internet para estudar, então me deparei com um ótimo site, http://www.argonavis.com.br, de um grande cara chamado Helder Rocha, que disponibiliza...
Aqui são apresentados conceitos básicos a plataforma Java. Simples e rápido.
/**Depois que entrei no mundo Java, começei a procurar por conteúdo na internet para estudar, então me deparei com um ótimo site, http://www.argonavis.com.br, de um grande cara chamado Helder Rocha, que disponibiliza este mesmo conteúdo em seu site também. Obrigado pela ajuda a comunidade.*/
Size: 282.82 KB
Language: pt
Added: Nov 01, 2013
Slides: 63 pages
Slide Content
1
Programa Programaçãção o
orientada a orientada aobjetos objetos
em Java em Java
Java 2 StandardEdition Helderda Rocha
www.argonavis.com.br
2
Assuntos abordados neste módulo
ƒConceitos de programação orientada a objetos existentes na
sintaxe da linguagem Java
ƒArtefatos: pacote, classe, objeto, membro, atributo, método,
construtor e interface
ƒCaracterísticasOO em Java: abstração, encapsulamento, herança e
polimorfismo
ƒSintaxe Java para construção de estruturas de dados
ƒTipos de dados primitivos
ƒComponentes de uma classe
ƒConstrução de aplicações simples em Java
ƒComo construir uma classe Java (um tipo de dados) contendo
métodos, atributos e construtores
ƒComo construir e usar objetos
ƒEste módulo élongoe aborda muitos assuntos que serão
tratados novamente em módulos posteriores
3
Por que OO é importante?
ƒJava éuma linguagem orientada a objetos
ƒPara desenvolver aplicações e componentes de
qualidadeem Java épreciso entender e saber aplicar
princípios de orientação a objetos ao programar
ƒÉpossível escrever programas em Java semsaber
usar os recursos da OO, mas
ƒDificilmente vocêserácapaz de ir além de programas
simples com mais de uma classe
ƒSerámuito difícil entender outros programas
ƒSeu código seráfeio, difícil de depurar e de reutilizar
ƒVocêestaráperdendo ao usar uma linguagem como Java
(se quiser implementar apenas rotinas procedurais pode usar uma
linguagem melhor para a tarefa como Shell, Fortran, etc.)
4
O que é Orientação a objetos
ƒParadigma do momento na engenharia de software
ƒAfeta análise, projeto (design) e programação
ƒA análiseorientada a objetos
ƒDetermina o queo sistemadeve fazer: Quais os atores
envolvidos? Quais as atividades a serem realizadas?
ƒDecompõe o sistema em objetos: Quais são? Que tarefas
cada objeto teráque fazer?
ƒO designorientado a objetos
ƒDefine comoo sistema seráimplementado
ƒModela os relacionamentos entre os objetos e atores
(pode-se usar uma linguagem específica como UML)
ƒUtiliza e reutiliza abstrações como classes, objetos,
funções, frameworks, APIs, padrões de projeto
5
Sistema de Biblioteca
Abstração de casos de uso em
(1) análise OO e (2) análise procedural
(1) Trabalha no espaçodo
problema (casos de uso
simplificadosem objetos)
–Abstrações mais simples e
mais próximasdo mundo real
(2) Trabalha no espaçoda solução
(casos de uso decompostosem
procedimentos algorítmicos)
–Abstrações mais próximas do
mundo do computador
Sistema de Biblioteca
Adicionar
livros
Pesquisar
Catálogo
Biblioteca Catálogo
Livro
LivroLivro
AutorAutor
Autor Autor
Usuário Bibliotecário
Adicionar Livros
Pesquisar Catalogo
Lógica procedural
encapsulada em
objetos pequenos
Lógica exposta e
espalhada por
todo o sistema
6
O que é um objeto?
ƒObjetos são conceitosque têm
ƒidentidade,
ƒestadoe
ƒcomportamento
ƒCaracterísticasde Smalltalk, resumidas por Allan Kay:
ƒTudo(em um programa OO) são objetos
ƒUm programaéum monte de objetos enviando
mensagens uns aos outros
ƒO espaço(na memória) ocupado por um objeto consiste
de outros objetos
ƒTodo objeto possui um tipo(que descreve seus dados)
ƒObjetos de um determinado tipo podem receber as
mesmas mensagens
7
Ou seja...
ƒEm uma linguagem OO pura
ƒUma variável éum objeto
ƒUm programa éum objeto
ƒUm procedimento éum objeto
ƒUm objeto écomposto de objetos , portanto
ƒUm programa (objeto) pode ter variáveis (objetos que
representam seu estado) e procedimentos (objetos que
representam seu comportamento)
ƒAnalogia: abstração de um telefone celular
ƒÉcomposto de outros objetos, entre eles bateria e botões
ƒA bateria éum objeto também, que possui pelo menos um
outro objeto: carga, que representa seu estado
ƒOs botões implementam comportamentos
8
Objetos (2)
ƒEm uma linguagem orientada a objetos pura
ƒUm número, uma letra, uma palavra, uma valor booleano,
uma data, um registro, uma botão da GUI são objetos
ƒEm Java, objetos são armazenados na memória de
heape manipulados através de uma referência
(variável), guardada na pilha.
ƒTêm estado(seus atributos)
ƒTêm comportamento(seus métodos)
ƒTêm identidade(a referência)
ƒValores unidimensionaisnão são objetos em Java
ƒNúmeros, booleanos, caracteres são armazenados na pilha
ƒTêm apenas identidade (nome da variável) e estado (valor
literal armazenado na variável); -dinâmicos; + rápidos
Heap
001A
0010
001A
001F
ref
235
Pilha
9
Variáveis, valores e referências
ƒVariáveissão usadas em linguagens em geral para
armazenar valores
ƒEm Java, variáveis podem armazenar endereços de
memóriado heap ou valores atômicos de tamanho fixo
ƒEndereços de memória (referências) são inaccessíveis aos
programadores (Java não suporta aritmética de ponteiros!)
ƒValoresatômicos representam tiposde dados primitivos
ƒValores são passados para variáveis através de
operações de atribuição
ƒAtribuição de valores éfeita através de literais
ƒAtribuição de referências(endereços para valores) éfeita
através de operações de construção de objetos e, em dois
casos, podeser feita através de literais
10
Literais e tipos
ƒTiposrepresentam um valor, uma coleçãode valores
ou coleção de outros tipos. Podem ser
ƒTipos básicos, ou primitivos , quando representam unidades
indivisíveis de informação de tamanho fixo
ƒTipos complexos, quando representam informações que
podem ser decompostas em tipos menores. Os tipos
menores podem ser primitivos ou outros tipos complexos
ƒLiterais: são valoresrepresentáveis literalmente.
ƒNúmeros:
1, 3.14, 1.6e-23
ƒValores booleanos:
true
e
false
ƒCaracteres individuais:
'a', '\u0041', ''
)
ƒSeqüências de caracteres:
"aaa", "Java"
ƒVetores de números, booleanos ou strings:
{"a", "b"}
Unidimensionais
Compostos
11
Tipos primitivos e complexos
ƒExemplos de tipos primitivos (atômicos)
ƒUm inteiro ou um caractere,
ƒUm literal booleano (true ou false)
ƒExemplos de tipos complexos
ƒUma data: pode ser decomposta em três inteiros,
representando dia, mês e ano
ƒUm vetorde inteiros: pode ser decomposto em suas partes
ƒUma seqüênciade caracteres: pode ser decomposta nos
caracteres que a formam
ƒEm Java, tipos complexos são armazenados como
objetose tipos primitivos são guardados na pilha
ƒApesar de serem objetos, seqüências de caracteres
(strings) em Java podem ser representadas literalmente.
12
Tipos primitivos em Java
ƒTêm tamanho fixo. Têm sempre valor default.
ƒArmazenados na pilha (acesso rápido)
ƒNão são objetos. Classe 'wrapper' faz transformação, se
necessário (encapsula valor em um objeto).
boolean
—
—
—
Boolean
char
16-bit
Unicode 0
Unicode 2
16
-1
Character
byte
8-bit
-128
+127
Byte
short
16-bit
-2
15
+2
15
—1
Short
int
32-bit
-2
31
+2
31
—1
Integer
long
64-bit
-2
63
+2
63
—1
Long
float
32-bit
IEEE754
IEEE754
Float
double
64-bit
IEEE754
IEEE754
Double
void
—
—
—
Void
Tipo
Tamanho
Mínimo
Máximo
'Wrapper'
false \u0000 0
0
000.0 0.0 —Default
13
Exemplos de tiposprimitivos 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 (não étipo primitivo -s éuma referência)
String s = "abcde";
ƒLiterais de vetor (não étipo primitivo -v éuma referência)
int[] v = {5, 6};
14
O que é uma classe?
ƒClasses são uma especificaçãopara objetos
ƒUma classe representa um tipo de dadoscomplexo
ƒClasses descrevem
ƒTipos dos dados que compõem o ob jeto (o que podem armazenar)
ƒProcedimentos que o objeto pode executar (o que podem fazer)
Casa
boolean abrePorta(){}
int numero
Color cor
static String arquiteto
12
56
72
Classe
Instâncias da classe Casa (objetos)
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();
15
Ou seja...
ƒClasses não são os objetos que representam
ƒA planta de uma casa éum objeto, mas não éuma casa
ƒClasses definem lógica estática
ƒRelacionamentos entre classes são definidos na
programação e não mudamdurante a execução
ƒRelacionamentos entre objetos são dinâmicose podem
mudar. O funcionamento da aplicação reflete a lógica de
relacionamento entre os objetos, e não entre as classes.
ƒClasses não existem no contexto da execução
ƒUma classe representavários objetos que ocupam espaço
na memória, mas ela não existe nesse domínio
ƒA classe tem papel na criação dos objetos, mas não existe
quando os objetos trocam mensagens entre si.
16
Resumo
ƒObjetossão conceitos que têm estado(atributos),
comportamento(métodos) e identidade(referência)
ƒTiposrepresentam valores
ƒPrimitivos: valores fixos e indivisíveis. São armazenados na pilha
ƒComplexos: valores multidimensionais que podem ser
decompostos em componentes menores. Descrevem objetos que
são armazenados no heap
ƒLiterais
ƒUsados para definir tipos primitiv os ou certos tipos complexos
formados por componentes iguais (strings e vetores)
ƒVariáveispodem armazenar valoresde tipos primitivos ou
referênciaspara objetos
ƒClassessão tipos complexos: descrevem objetos
ƒNão são importantes no contexto da execução
17
Membros: atributos e métodos
ƒUma classe define uma estrutura de dados não-ordenada
ƒPode conter componentes em qualquer ordem
ƒOs componentes de uma classe são seus membros
ƒUma classe pode conter três tipos de componentes
ƒMembros estáticos ou de classe: não fazem parte do "tipo"
ƒMembros de instância:definem o tipo de um objeto
ƒProcedimentos de inicialização
ƒMembros estáticos ou de classe
ƒPodem ser usados através da classe mesmo quando não háobjetos
ƒNão se replicam quando no vos objetos são criados
ƒMembros de instância
ƒCada objeto, quando criado, aloca espaço para eles
ƒSópodem ser usados através de objetos
ƒProcedimentos de inicialização
ƒUsados para inicializar objetos ou classes
18
Exemplo
publicclassCasa{
privatePorta porta;
privateintnumero;
public java.awt.Color cor;
publicCasa(){
porta= newPorta();
numero= ++contagem * 10;
}
publicvoidabrePorta() {
porta.abre();
}
public staticString arquiteto= "Zé";
private static int contagem= 0;
static{
if( condição ) {
arquiteto= "Og";
}
}
}
Procedimento de inicialização estático: código é executado uma
única vez, quando a classe é
carregada. O arquiteto será um só
para todas as casas: ou Zé ou Og.
Procedimento de inicialização de objetos(Construtor): código é
executado após a criação de cada
novo objeto. Cada objeto terá um
número diferente.
Atributos de instância : cada
objeto poderá armazenar valores
diferentes nessas variáveis.
Atributos estáticos : não é preciso
criar objetos para usá-los. Todos
os objetos os compartilham.
Método de instância: só é possível
chamá-lo se for através de um
objeto.
Tipo
19
Boas práticas ao escrever classes
ƒUse, e abuse, dos espaços
ƒEndente, com um tab ou 4 espaços, membrosda classe,
ƒEndente com 2 tabs, o conteúdodos membros, ...
ƒA ordem dos membros não éimportante, mas seguir
convenções melhora a legibilidade do código
ƒMantenha os membros do mesmo tipo juntos (não
misture métodos estáticos com métodos de instância)
ƒDeclare as variáveis antes ou depois dos métodos (não
misture métodos, construtores e variáveis)
ƒMantenha os seus construtores juntos, de preferência
bem no início
ƒSe for necessário definir blocos static, defina apenas um,
e coloque-o no início ou no final da classe.
20
Construtores
ƒConstrutoressão procedimentos realizados na
construção de objetos
ƒParecemmétodos, mas não têm tipo de retorno e têm
nome idêntico ao nome da classe
ƒNão fazem parte da definição do tipo do objeto (interface)
ƒNem sempre aparecem explícitos em uma classe: podem
ser omitidos
(o sistema oferece uma implementação default)
ƒPara cada objeto, o construtor échamado
exatamente uma vez: na sua criação
ƒExemplo:
> Objeto obj = new Objeto();
ƒAlguns podem requerer parâmetros
> Objeto obj = new Objeto(35, "Nome");
Chamada de
construtor
21
(...)
CDPlayer cd1;
cd1= new CDPlayer();
cd1.liga();
cd1.selecionaFaixa(3);
cd1.executa();
(...)
Objetos possuem uma interface ...
ƒAtravés da interface*épossível utilizá-lo
ƒNão épreciso saber dos detalhes da implementação
ƒO tipo(Classe) deum objeto determina sua interface
ƒO tipo determina quais mensagenspodem ser enviadas
CDPlayer
liga()
desliga()
selecionaFaixa(int)
avança()
retorna()
executa()
pausa()
para()
Interface
Tipo
Classe Java (tipo)
Envio de mensagem
Criação de objeto
Referência
Em Java
Formato das
mensagens
que se pode
enviar para
um objeto
* interface aqui refere-se a um conc eito e não a um tipo de classe Java
22
... e umaimplementação (oculta)
ƒImplementação não interessa àquem usaobjetos
ƒPapel do usuáriode classes
ƒnãoprecisa sabercomo a classe foi escrita, apenas quais
seus métodos, quais os parâmetros (quantidade, ordem e
tipo)e valores que são retornados
ƒusa apenas a interface(pública) da classe
ƒPapel do desenvolvedor de classes
ƒdefinenovos tiposde dados
ƒexpõe, através de métodos, todas as funções necessárias
ao usuário de classes, e ocultao resto da implementação
ƒtem a liberdadede mudar a implementaçãodas classes
que cria sem que isto comprometa as aplicações
desenvolvidas pelo usuário de classes
23
Resumo
ƒOs componentes de uma classe, em Java, podem pertencer a
dois domínios, que determinam como são usados
ƒDomínio da classe: existem independentemente de existirem
objetos ou não: métodos static, blocos static, atributos static
e interface dos construtores de objetos
ƒDomínio do objeto: métodos e atributos não declarados como
static (definem o tipo ou interface que um objeto possui ), e
conteúdo dos construtores
ƒConstrutores são usados apenaspara construir objetos
ƒNão são métodos (não declaram tipo de retorno)
ƒ"Ponte" entre dois domínios: são chamados uma vezantes do objeto
existir (domínio da classe) e executados no domínio do objeto criado
ƒSeparação de interface e implementação
ƒUsuários de classes vêem apenas a interface.
ƒImplementação éencapsulada dentro dos métodos, e pode variar sem
afetar classes que usam os objetos
24
ƒSeparação interface-implementação: maior reuso
ƒReuso depende de bom planejamento e design
ƒUmavez criada uma classe, ela deve representar uma
unidadede código útil para que seja reutilizável
ƒFormasde uso e reuso
ƒUso e reusode objetoscriados pela classe: mais flexível
ƒComposição: a “éparte essencial de”b
ƒAgregação:a“éparte de”b
ƒAssociação: a“éusado por”b
ƒReusoda interface da classe: pouco flexível
ƒHerança: b“é”a(substituição pura)
ou b“éum tipo de”a(substituição útil, extensão)
Reuso de implementação
b a b a b a b a
* Notação UML
*
25
Agregação, composição eassociação
ƒComposição:um treméformado por locomotiva e vagões
ƒAgregação: uma locomotiva temum farol (mas não vai
deixar de ser uma locomotiva se não o tiver)
ƒAssociação: um tremusauma estrada de ferro (não faz parte
do trem, mas ele depende dela)
Trem
EstradaDeFerro
Trem
Locomotiva
usa
Vagão
Locomotiva
1..*
1
Farol
26
Herança (reuso de interface)
ƒUm carro éumveículo
ƒFuscase Porsches sãocarros (e também veículos)
Veículo
Carro
Veículo
Carro
Fusca
Porsche
Veículo
getVelocidade():float
getPassageiros():int
acelera()
freia()
representação
UML
representação UML
detalhada de ‘Veículo’
representação
UML simplificada
(não mostra os
métodos)
27
Extensão e sobreposição
ƒExtensão
ƒSobreposição
Carro
Fusca
Porsche
Veículo
Carro
abastece()
fechaPorta()
abrePorta()
abrePorta() getVelocidade()
freia()
Redefineos métodos
implementados
previamente (Um objetodo
tipo Fusca tem o mesmo
númerode métodos de um
objeto do tipo Carro
Acrescentanovos
métodos aos já herdados
(Um objetodo tipo
Carro tem maismétodos
que um objeto do tipo
Veiculo)
Veículo
getVelocidade():float
getPassageiros():int
acelera()
freia()
28
Polimorfismo
ƒUso de um objeto no lugar de outro
ƒpode-se escrever código que não dependa da existência
prévia de tiposespecíficos
Figura
Círculo
Quadrado
Triângulo
desenha()
desenha()
desenha()
desenha()
Desenhista
geraFigura()
«usa»
Conhece apenas interface
do tipo genérico (Figura)
Chama "desenha()" sem
saber qual objeto será
desenhado. Objeto real
pode ser "plugado"
durante a execução.
Cada desenha() sobrepõe funcionamento
original com algo diferente
Ligação da interface
com o objeto real
pode ser feita durante
a execução
29
Encapsulamento
ƒSimplifica o objeto expondo apenas a sua interface
essencial
ƒCódigo dentro de métodos énaturalmente encapsulado
ƒNão épossível acessar interior de um método fora do objeto
ƒMétodos que não devem ser usados externamente e
atributos podem ter seu nível de acesso controlado em
Java, através de modificadores
ƒprivate: apenas acesso dentro da classe
ƒpackage-private(default): acesso dentro do pacote*
ƒprotected: acesso em subclasses
ƒpublic: acesso global
* não existe um modificador com este nome. A ausência de um
modificador de acesso deixa o me mbro com acesso package-private
30
Resumo de características OO
ƒAbstração de conceitos
ƒClasses, definem um tipo separando interface de implementação
ƒObjetos: instâncias utilizáveis de uma classe
ƒHerança: "éum"
ƒAproveitamento do códigona formação de hierarquias de classes
ƒFixada na compilação (inflexível)
ƒAssociação "tem um"
ƒConsiste na delegação de operações a outros objetos
ƒPode ter comportamento e estrutura alterados durante execução
ƒVários níveis de acoplamento: associação, composição, agregação
ƒEncapsulamento
ƒSeparação de interface e implemen tação que permite que usuários
de objetos possam utilizá-los sem conhecer detalhes de seu código
ƒPolimorfismo
ƒPermite que objeto seja usado no lugar de outro
31
Exercício
ƒ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 proprietário Pessoa, um número e um
conjunto (vetor) de Portas
ƒ2. Crie as seguintes classes
ƒUm Ponto tem coordenadas x e y inteiras
ƒUm Circulo tem um Ponto e um raio inteiro
ƒUm Pixel éum tipo de Ponto que possui uma cor
32
Menor classe utilizável em Java
ƒUma classe contém a representaçãode um objeto
ƒdefine seus métodos (comportamento)
ƒdefine os tipos de dados que o objeto pode armazenar
(estado)
ƒdetermina como o objeto deve ser criado (construtor)
ƒUma classe Java também pode conter
ƒprocedimentos independentes (métodos ‘static’)
ƒvariáveis estáticas
ƒrotinas de inicialização (blocos ‘static’)
ƒO programa abaixo éa menor unidade compilável
em Java
classMenor{}
33
Símbolos essenciais
ƒSeparadores
ƒ{ ... }chaves: contémas partes de uma classe e delimitamblocos de
instruções (em métodos, inicializadores, estruturas de controle, etc.)
ƒ;ponto-e-vírgula: obrigatóriano final de toda instrução simples ou
declaração
ƒIdentificadores
ƒNomesusados para representar classes, métodos, variáveis (por
exemplo: desenha, Casa, abrePorta, Circulo, raio)
ƒPodem conter letras (Unicode) e números, mas não podem começar
com número
ƒPalavras reservadas
ƒSão52 (assertfoi incluída na versão 1.4.0) e consistem de 49
palavras-chave e literais true, falsee null.
ƒExemplos de palavras-chavesão public, int, class, fore void
ƒA maior parte dos editores de código Java destaca as palavras
reservadas
34
Para que serve uma classe
ƒUma classe pode ser usada para
ƒconter a rotina de execuçãoprincipal de uma aplicação
iniciada pelo sistema operacional (método main)
ƒconterfunções globais(métodos estáticos)
ƒconter constantes e variáveis globais (camposde dados
estáticos)
ƒespecificar e criar objetos (contém construtores, métodos
e atributosde dados)
35
Uma unidade de compilação
packagecidade; // classe faz parte do pacote cidade
importcidade.ruas.*; // usa todas as classes de pacote
importpais.terrenos.LoteUrbano; // usa classe LoteUrbano
importPessoa; // ilegal desde Java 1.4.0
importjava.util.*; // usa classes de pacote Java
classGaragem {
...
}
interfaceFachada {
...
}
/** Classe principal */
public classCasa {
...
}
Casa.java
Este arquivo, ao ser
compilado, irá gerar
três arquivos .class
Por causa da declaração ‘package’
o nome completodestas classes é
cidade.Garagem
cidade.Fachada e
cidade.Casa
36
O que pode conter uma classe
ƒUm bloco ‘class’pode conter (entre as chaves
{...}
), em
qualquer ordem
ƒ(1) zero ou mais declarações de atributosde dados
ƒ(2) zero ou mais definições de métodos
ƒ(3) zero ou mais construtores
ƒ(4) zero ou mais blocos de inicialização static
ƒ(5) zero ou mais definições de classes ou interfaces
internas
ƒEsses elementos sópodem ocorrer dentrodo bloco ‘ class
NomeDaClasse {
...
}
’
ƒtudo, em Java, ‘pertence’a alguma classe
ƒapenas ‘import’e ‘package’podem ocorrer fora de uma
declaração ‘class’(ou ‘interface’)
37
Métodos
ƒContém procedimentos -instruçõessimples ou compostasexecutadas
em seqüência -entre chaves
ƒPodem conter argumentos
ƒO tipo de cada argumento precisa ser declarado
ƒMétodo é identificado pelo nome + número 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);
}
}
38
Sintaxede definição de métodos
ƒSintaxe básica
ƒ[mod]*tipoidentificador ( [tipoarg]* ) [throwsexceção*]{ ... }
ƒChave
ƒ[mod]*–zero ou mais modificadores separados por espaços
ƒtipo–tipo de dados retornado pelo método
ƒidentificador–nome do método
ƒ[arg]*–zero ou mais argumentos, com tipo declarado,
separadospor vírgula
ƒ[throwsexceção*] –declaração de exceções
ƒExemplos
public static voidmain (String[]args ) { ... }
private final synchronized
nativeintmetodo (inti, intj, intk) ;
StringabreArquivo ()
throws IOException, Excecao2{ ... }
39
Atributos de dados
ƒContém dados
ƒDevem ser declaradas com tipo
ƒPodem ser pré-inicializadas (ou não)
ƒPodem conter modificadores
public class Livro {
private String titulo;
private int codigo = 815;
...
public int mostraCodigo() {
return codigo;
}
}
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;
}
class Casa {
static Humano arquiteto;
int numero;
Humano proprietario;
Doberman[] guardas;
}
40
Sintaxede declaração de atributos
ƒSintaxe básica
ƒ[modificador]*tipoidentificador[= valor];
ƒChave
ƒ[modificador]*–zero ou mais modificadores (de acesso, de
qualidade), separados por espaços: public, private, static, transient,
final, etc.
ƒtipo–tipo de dados que a variável (ou constante) pode conter
ƒidentificador–nome da variável ou constante
ƒ[= valor]–valor inicial da variável ou constante
ƒExemplo
protected static finaldoublePI= 3.14159 ;
int numero;
41
Construtores
ƒTêm sempre o mesmo nome que a classe
ƒContém procedimentos entre chaves, como os métodos
ƒSão chamados apenas uma vez: na criação do objeto
ƒPode haver vários em uma mesma classe
ƒSão identificados pelo número e tipo de argumentos
ƒNunca declaram tipo de retorno
public class Produto {
public static int total = 0;
public int serie = 0;
public Produto() {
serie = total + 1;
total = serie;
}
}
public class Livro {
private String titulo;
public Livro() {
titulo = "Sem título";
}
public Livro(String umTitulo) {
titulo = umTitulo;
}
}
42
Sintaxede construtores
ƒConstrutores são procedimentos especiais usados para
construir novos objetos a partir de uma classe
ƒA definição de construtores éopcional:
Todaclasse sem
construtor declarado explicitamente possui um construtor
fornecido pelo sistema (sem argumentos)
ƒParecem métodos mas
ƒnão definem tipo de retorno
ƒpossuem, como identificador, o nome da classe:
Umaclasse pode
ter vários construtores, com o mesmo nome, que se
distinguem pelo número e tipo de argumentos
ƒSintaxe
ƒ[mod]*nome_classe ( [tipoarg]* ) [throwsexceção*]{ ... }
43
Exemplo
ƒExemplo de classe com um atributode dados
(variável), um construtor e dois métodos
public classUmaClasse {
privateString mensagem;
publicUmaClasse () {
mensagem= "Mensagem inicial";
}
public voidsetMensagem (String m) {
mensagem= m;
}
publicString getMensagem() {
returnmensagem;
}
}
variavel (referencia)
do tipo String
construtor
inicialização de variável
ocorre quando objeto é
construído
método que recebe
parâmetro e altera
variável
método que retorna variável
44
Exemplo: um círculo
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
45
Usando círculos
ƒUse dentro de um método 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("; Circunferência de c1: "
+ circ);
46
Herança
class Coisa extends Circulo {
Coisa() {
this(1, 1, 0);
}
Coisa(int x, int y, int z) {
super(x, y, z);
}
}
Coisa
+Coisa(x:int, y:int, raio:int)
+Coisa()
A Coisa é umCirculo!
Circulo
+x: int
+y: int
+raio: int
+PI: 3.14159
+Circulo(x:int, y:int, raio:int) +circunferencia(): double
47
Exercício
ƒ1. Escreva uma classe Ponto
ƒcontém x e y que podem ser definidos em construtor
ƒmétodos getX() e getY() que retornam x e y
ƒmétodos setX(int) e setY(int) que mudam x e y
ƒ2. Escreva uma classe Circulo, que contenha
ƒraio inteiro e origem Ponto
ƒconstrutor que define origem e raio
ƒmétodo que retorna a área
ƒmétodo que retorna a circunferência
ƒuse java.lang.Math.PI (Math.PI)
ƒ3. Crie um segundo construtor para Circulo que aceite
ƒum raio do tipo int e coordenadas x e y
48
Vetores
ƒVetores são coleções de objetos ou tipos primitivos
ƒOs tipos devem ser conversíveis 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 podemser recuperados a partir da posição 0:
int elemento_1 = vetor[0];
int elemento_2 = vetor[1];
49
ƒDetipos primitivos
ƒDeobjetos (Pointéuma classe, com membrosx e y, inteiros)
Vetores
0 0 0
#
pilha heap
int[] v = new int[3];
23
0
52
#
pilha heap
v[0] = 23;
v[2] = 52;
null null
#
pilha heap
Point[] p = new Point[2];
#
null
#
pilha heap p[0] = new Point();
0 0
heap
p[0].x
p[0].yPoint +x: int
+y: int
class Point{
public int x;
public int y;
}
p é objeto do tipo (Point[])
v é objeto do tipo (int[])
cria um vetor
inicialização dos
elementos
cria um vetor
cria um objetoPoint
50
Inicialização de vetores
ƒVetores podem ser inicializados no momento em que são criados.
Sintaxe:
String[]semana = {"Dom", "Seg", "Ter",
"Qua", "Qui", "Sex","Sab"};
String[][]usuarios = {
{"João", "Ninguém"},
{"Maria", "D.", "Aparecida"},
{"Fulano", "de", "Tal"}
};
ƒEssa inicialização não pode se r usada em outras situações
(depois que o vetor jáexiste), exceto usando new, da forma:
semana =
new String[]{"Dom", "Seg", "Ter", "Qua",
"Qui", "Sex", "Sab"};
51
A propriedade length
ƒlength: todo vetor em Java possui esta propriedade que
informa o número de elementos que possui
ƒlengthéuma propriedade read-only
ƒextremamente útil em blocos de repetição
for (int x = 0; x < vetor.length; x++) {
vetor[x] = x*x;
}
ƒUmavez criados, vetores não 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 variável (baixo desempenho)
ƒArrayLists e Vectors são facilmente conversíveis em vetores
quando necessário
52
Vetores multidimensionais
ƒVetores multidimensionais em Java são vetores de vetores
ƒÉpossível criar toda a hierarquia (v etor de vetor de vetor...), para
fazer vetores retangulares ...
ƒ... ou criar apenas o primeiro níve l (antes de usar, porém, épreciso
criar os outros níveis)
int [][][] prisma = new int[3][2][2]; 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];
53
Exercícios
ƒ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 referência do tipo Circulo[]
ƒd) copie a referência 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 três vetores
54
Escopo de variáveis
ƒAtributos de dados (declarados no blocoda 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)
ƒVariáveis locais (declaradas dentro de blocos de
procedimentos)
ƒExistem enquanto procedimento (método, bloco de controle de
execução) estiver sendo executado
ƒNão podem ser usadas fora do bloco
ƒNão pode ter modificadores de acesso (private, public, etc.)
55
Exemplo
public classCirculo {
privateintraio;
privateint x, y;
public double area() {
return Math.PI * raio* raio;
}
public void mudaRaio(intnovoRaio) {
intmaxRaio = 50;
if(novoRaio > maxRaio) {
raio= maxRaio;
}
if (novoRaio > 0) {
intinutil = 0;
raio = novoRaio;
}
}
}
variáveis visíveis dentro
da classe, apenas
maxRaioé variável local
ao métodomudaRaio
novoRaioé variável local
ao métodomudaRaio
raioé variável de instância
inutilé variável local
ao blocoif
56
Membros de instância vs.
componentes estáticos (de classe)
ƒComponentes estáticos
ƒOs componentes de uma classe, quando declarados
'static', existem independenteda criação de objetos
ƒSóexiste uma cópiade cada variável ou método
ƒMembros de instância
ƒmétodos e variáveis que não tenhammodificador 'static'
são membros do objeto
ƒPara cada objeto, háuma cópia dos métodos e variáveis
ƒEscopo
ƒMembros de instância não podem ser usados dentro de
blocos estáticos:
Épreciso obter antes, uma referência para
o objeto
57
Exemplos
ƒMembros de instância sóexistem
se houver um objeto
public class Circulo {
public int raio;
public int x, y;
public double area() {
return Math.PI * raio * raio;
}
public staticvoid main(String[] a){
raio= 3;
double z = area();
}
}
public class Circulo {
public int raio;
public int x, y;
public double area() {
return Math.PI * raio * raio;
}
public static void main(String[] a){
Circulo c = new Circulo();
c.raio = 3;
double z = c.area();
}
}
Errado! Certo!
membros de
instância
:Circulo
+x: 0
+y: 0
+raio: 0
area():double
qualraio?
existe?
qualarea?
existe?
raio de c
area() de c
tem que
criar pelo
menos um
objeto!
main()não
faz parte do
objeto!
Pode. Porque area()
faz parte do objeto!
Não pode. Não existe objeto em main()!
58
Variáveis locais vs.
variáveis de instância
ƒVariáveis de instância ...
ƒsempre são automaticamente inicializadas
ƒsão sempre disponíveis no interior dos métodos de instância e
construtores
ƒVariáveis locais ...
ƒsempre têm que ser inicializadas antes do uso
ƒpodem ter o mesmo identificador que variáveis de instância
ƒnestecaso, épreciso usar a palavra reservada thispara fazer
a distinção
class Circulo {
private int raio;
public void mudaRaio(intraio) {
this.raio= raio;
}
}
variável de instância
variável local
59
Comentários
ƒHáduas formas de incluir comentários em um
arquivo Java
ƒ/* ... comentário de bloco ... */
ƒ// comentário de linha
ƒAntes de métodos, construtores, campos de dados e
classes, o comentário de bloco iniciado com /**
pode ser usado para gerar HTML em documentação
ƒHáuma ferramenta (JavaDoc) quegera
automaticamente documentação a partir dos arquivos
.java
ƒrelacionae descreve classes, métodos, etc e cria
referências cruzadas
ƒDescrições em HTML podem ser incluídas nos
comentários especiais /** ... */
60
Geração de documentação
ƒPara gerar documentação de um arquivo ou de uma
coleção de arquivos .java use o javadoc:
javadoc arquivo1.java arquivo2.java
ƒO programa criaráuma coleção de arquivos HTML,
interligados, entre eles estarão
ƒíndice de referências cruzadas
ƒuma página para cada classe, com links para cada
método, construtor e campo público, contendo descrições
(se houver) de comentários /** .. */
ƒConsulte a documentação para maiores informações
sobre a ferramenta javadoc.
61
Convenções de código
ƒToda a documentação Java usa uma convenção para nomes
de classes, métodos e variáveis
ƒUtilizá-la facilitaráa manutenção do seu código!
ƒClasses, construtores e interfaces
ƒuse caixa-mista com primeira l etra maiúscula, iniciando novas
palavras com caixa-alta. Não use sublinhado.
ƒex: UmaClasse, Livro
ƒMétodos e variáveis
ƒuse caixa mista, com primeira letra minúscula
ƒex: umaVariavel, umMetodo()
ƒConstantes
ƒuse todas as letras maiúsculas. Use sublinhado para separar as
palavras
ƒex: UMA_CONSTANTE
62
Exercícios
ƒ1. Classe Conta e TestaConta
ƒa) Crie a classe Conta, de acordo com o diagrama UML abaixo
ƒb) Crie uma classe TestaConta,contendo um método main(), e
simule a criação de objetos Conta, o uso dos métodos depositar() e
sacar() e imprima, após cada operação, os valores disponíveis
através do método toString()
ƒc) Gere a documentação javadoc das duas classes
Conta
-saldo: double
-numero: String
+depositar(valor: double) +sacar (valor: double) +toString(): String +Conta(nome: String)
acrescenta valorao saldoatual
subtrai valordo saldoatual
sobrepõe Object.toString()
retorna Stringcontendo saldo
atual