Vous êtes sur la page 1sur 104

Programao Orientada a Objetos

Programa de computador
um conjunto de comandos e regras que um programador deve conhecer para poder manipular os recursos de um computador.

So escritos programao.

em

uma

linguagem

de

Para que um programa possa ser executado deve ser traduzido para uma linguagem que possa ser compreendida pelo computador atravs de um compilador.

Programa de computador

Programas processam dados.

O paradigma de programao orientada a objetos considera que os dados a serem processados e os mecanismos de processamento desses dados devem ser considerados em conjunto. Os modelos representam conjuntamente dados e operaes sobre esses dados.

Modelos
Modelos so representaes simplificadas de objetos, pessoas, itens, tarefas, processos, conceitos, idias etc. So usados comumente por pessoas no seu dia-a-dia, independente do uso de computadores.

Restaurante Caseiro Hipottico


Mesa 1 Kg refeio Sobremesa Refrigerante

Mesa 2 Kg refeio
Sobremesa Refrigerante Cerveja

Mesa 3 Kg refeio Sobremesa Refrigerante Cerveja


4

Cerveja

Modelos e Dados
O quadro branco um modelo do restaurante, representando de forma simplificada as informaes do restaurante necessrias para contabilizar os pedidos.

O modelo representa certos dados ou informaes. Os dados contidos no modelo so somente relevantes abstrao do mundo real feita.

Modelos e Operaes
Um modelo normalmente contm operaes ou procedimentos associados a ele, por exemplo:
Incluso de um pedido para uma mesa. Modificao do status de um pedido. Encerramento dos pedidos de uma mesa.

Tambm possvel a criao de modelos que possuem somente dados ou somente operaes. Modelos podem conter submodelos e ser parte de outros modelos.
6

Modelos e Orientao a Objetos


A simplificao inerente aos modelos , em muitos casos, necessria: dependendo do contexto, algumas informaes devem ser ocultas ou ignoradas.
Pessoa como empregado de empresa

Pessoa como paciente de uma clnica mdica Pessoa como contato comercial

A criao e uso de modelos uma tarefa natural e a extenso desta abordagem programao deu origem ao paradigma Programao Orientada a Objetos.
7

Programao Orientada a Objetos


Os modelos baseados em objetos so teis para compreenso de problemas, para comunicao com os usurios das aplicaes, para modelar empresa, projetar programas, etc.

POO um paradigma de programao de computadores onde se usam classes e objetos, criados a partir dos modelos descritos anteriormente, para representar e processar dados usando programas de computadores.

Encapsulamento
A capacidade de ocultar dados dentro do modelos, permitindo que somente operaes especializadas ou dedicadas manipulem os dados ocultos chama-se encapsulamento.

Encapsulamento um dos benefcios mais palpveis da POO.

Modelos que encapsulam os dados possibilitam a criao de programas com menos erros e mais clareza.

Encapsulamento
Modelos podem conter dados para representao das informaes ou dados relativos ao que se deseja modelar e operaes para manipulao dos dados. Em muitos casos, ser desejvel que os dados no possam ser acessados ou usados diretamente, mas somente atravs das operaes.
Por Exemplo:
Mquina fotogrfica o mecanismo da cmera oculta os dados e a maneira como so processados.
10

Encapsulamento
Em muitos modelos teremos vantagens em usar mecanismos de ocultao de dados: sempre que existir uma maneira de deixar ao modelo a capacidade e responsabilidade pela modificao de um de seus dados, devemos criar uma operao para faz-lo. Por exemplo:
Modelo que represente conta bancria e operao de retirada.

11

Mais exemplos de modelos

Exemplo 1: Uma lmpada incandescente


Lmpada estadoDaLampada acende() apaga() mostraEstado()

Ateno para os nomes de dados e das operaes.

A abrangncia do modelo define os dados e operaes.

12

Exemplo 1: em pseudocdigo
Representa uma Modelo Lampada lmpada em uso Incio do modelo dado estadoDaLampada; Acende a Lmpada operao acende() incio estadoDaLampada = aceso; fim Apaga a Lmpada operao apaga() incio estadoDaLampada = apagado; fim Mostra o estado da lmpada operao mostraEstado() incio se (estadoDalampada == aceso) imprime A lmpada est acesa seno imprime A lmpada est apagada; fim Fim do modelo

13

Mais exemplos de modelos

Exemplo 2: Uma conta bancria simplificada


ContaBancariaSimplificada nomeDoCorrentista saldo contaEspecial abreConta(nome,deposito,Especial) abreContaSimples(nome) deposita(valor) retira(valor) mostraDados()

Aspectos prticos de contas reais (senhas, taxas) foram deixados de lado.

14

Exemplo 2: em pseudocdigo
Modelo ContaBancriaSimplificada

Inicio do modelo dado nomeDoCorrentista, saldo, contaEspecial ;

Dados da conta

argumentos para a operao

operao abreConta(nome,deposito,especial) incio nomeDoCorrentista = nome; saldo = deposito; Inicializa simultaneamente todos os dados do modelo contaEspecial = especial; fim operao abreContaSimples(nome) incio nomeDoCorrentista = nome; saldo = 0.00; contaEspecial = false; fim

Inicializa simultaneamente todos os dados do modelo, usando o nome passado como argumento e os outros valores com valores default
15

Exemplo 2: em pseudocdigo continuao


operao deposita(valor) Deposita um valor na conta incio saldo = saldo + valor; fim Retira um valor na conta operao retira(valor) incio A conta no especial se (contaEspecial == false) inicio se (valor <= saldo) Existe saldo suficiente saldo = saldo valor; fim Conta especial, pode retirar a vontade seno saldo = saldo - valor; fim operao mostraDados() Mostra os dados imprimindo seus valores inicio imprime o nome do correntista + nomeDoCorrentista; imprime o saldo + saldo; imprime se (contaEEspecial) imprime A conta especial fim Fim do modelo

16

Mais exemplos de modelos

Exemplo 3: Uma data


Data
dia ms ano inicializaData(d,m,a) dataVlida(d,m,a) mostraData()

Consideramos que o valor do ms um inteiro;

Consideramos tambm que existem datas vlidas e no vlidas

17

Classes e objetos
Programadores que utilizam POO criam e usam objetos a partir de classes, que so relacionadas diretamente com os modelos descritos.

Classes so estruturas utilizadas para descrever os modelos, ou seja, contm a descrio dos dados (atributos) e das operaes (mtodos) que podem ser realizadas sobre eles.

Nome da Classe
Atributo 1 Atributo 2 Atributo 3 Mtodo 1 Mtodo 2

Um objeto ou instncia a materializao da classe.

18

Classes e objetos
Os

dados contidos em uma classe so conhecidos como campos ou atributos daquela classe. Cada campo deve ter um nome e ser de um tipo de dado nativo ou uma classe existente.

Valores dentro de classes podem ser variveis. As operaes contidas so os mtodos. receber argumentos

Mtodos podem (parmetros).

O nome mais os parmetros do mtodo so chamados de assinatura.

19

Classes e objetos
Para

que objetos ou instncias possam ser manipulados, necessria a criao de referncias a estes objetos, que so variveis do tipo da classe.

Classe -> Planta do edifcio, que descreve o edifcio, mas no corresponde fisicamente a ele.

Instncia -> Edifcio construdo. Referncia -> Nome do Objeto (ilhaDoSol)


instncias
Edifcio ilhaDoSol Edifcio palaci Edifcio iguatemi
20

Classe Edifcio

Classes em Java Sintaxe Bsica


Uma classe em Java ser declarada com a palavra-chave class seguida do nome da classe.
O nome no pode conter espaos.
Deve comear com uma letra.

Deve ser diferente das palavras reservadas.


Caracteres maisculos e minsculos so diferenciados. Contedo da classe limitado pelas chaves { }.
class Empregado
Nome da classe Atributo

Exemplo:

{ String Nome; public String ApresentarNome( ) { return Nome; } }


Mtodo

21

Classes em Java - Palavras Reservadas


abstract boolean break byte case catch char class const Continue default do double else extends false final finally float for if implements import instanceof int interface long native new null package private protected public return short static super switch Syncronyzed this throw throws transient true try void while
22

Classes em Java - Campos da Classe


Os campos das classes (atributos) devem ser declarados dentro do corpo da classe.

Cada campo deve ser representado por um determinado tipo de dado.

Em linguagens OO, possvel declarar campos como referncias a instncias de outras classes j existentes (Objetos).

Tambm possvel declarar campos de tipos primitivos da prpria linguagem (Variveis).

23

Classes em Java Declarao de Campos


A declarao simples, basta declarar o tipo de dado, seguido dos nomes dos campos que so daquele tipo.

Podemos observar que, para cada dado do modelo existe um campo correspondente na classe.

Campos podem ser referncias a uma classe. Exemplo: class DataSimples

24

Classes em Java Tipos Primitivos (nativos)


To i p bt y e s ot hr it n ln og fot la dul ob e ca hr bo a ol n e Fx d Vo s aae ar i l e -2 a 2 18 17 -2 6 a 2 6 3. 8 3. 7 7 7 - . 4. 8. 4 a 2 4. 8. 4 2 7 3 8t . 7 3 7 1 4 6 1 4 6 - . 2. 7. 3. 5. 7. 0 a 9 3 2 6 4 5 8 2 3 0 8 7 8 9 2. 7. 3. 5. 7. 0 . 3 2 6 4 5 7 2 3 0 8 7 8 1 028634177- 5 . 19442810e a 4 4 3 08363586e 3 . 22468280+8 4 4 46654264e 2 a . 05481454- 4 9 3 1 96338217e 38 . 79146350+0 7 R r sn mmn o a c r e eet u i cr t p a c ae Te u ae r o Fs u l A a nm t r z ae o me n I t io e bs n r d8 i e t I t io e 6 is n r d1 b e t I t io e 2 is n r d3 b e t I t io e 4 is n r d6 b e t Pn F t at d 3 bs ot l un e 2 i o u e t 8 y s u 4 is bt o 6 b e t 1 bs 6i t 1i b t

A classe String usada para representar cadeias de caracteres. (No so dados nativos, sendo instncias da classe String)
25

Operadores Aritmticos

+ (soma) - (subtrao) * (multiplicao) / (diviso) % (resto de uma diviso inteira) int(A) / int(B) (parte inteira de uma diviso)

Operao com instncias da classe String.

+ (concatenao)

26

Classes em Java - Converses entre tipos numricos


Converso entre Tipos Numricos: Sempre que for realizada uma operao numrica (+, -, *, /) entre dois tipos diferentes ser considerado como se os operadores fossem do mesmo tipo. Para isso, o operador de maior capacidade dita o tipo a ser considerado.

Menor

Maior

byte short int long float double


Converses Explicitas: Para fazer converses que no seguem a regra anterior necessrio realizar converses explicitar, veja o exemplo:

double x = 9.997; int nx = (int) x;

Sintaxe para uma converso Explicita

Resultado aps a converso nx = 9

27

Classes em Java - Mtodos de Classes


A maioria das classes representa modelos que tem dados e operaes que manipulam esses dados.

As operaes so chamadas de mtodos.

Mtodos no podem ser criados dentro de outros mtodos, nem fora da classe qual pertencem.

Exemplo: class DataSimples

28

Classes em Java Exemplo DataSimples


class DataSimples { byte dia,mes; short ano; Tipos primitivos definidos como atributos (variveis)

void inicializaDataSimples(byte d,byte m,short a) { if (dataEValida(d,m,a) == true) { dia = d; mes=m; ano=a; Mtodo } da classe else { dia = 0; mes=0; ano=0; Mtodo } da classe } boolean dataEValida(byte d,byte m,short a) { if ((d>=1) && (d<=31) && (m>=1) && (m<=12)) return true; else return false; }

Parmetros baseados em tipos primitivos

29

Classes em Java Exemplo DataSimples


boolean eIgual(DataSimples outraDataSimples) { if ((dia == outraDataSimples.dia) && ( mes == outraDataSimples.mes) && (ano == outraDataSimples.ano)) return true; else return false; Mtodo } da classe
void mostraDataSimples() { System.out.println(dia + / + ms + / + ano); } }

Parmetros baseados em um objeto da prpria classe

30

Classes Java Escopo de Variveis e Objetos


O escopo dos campos e variveis dentro de uma classe determina a sua visibilidade.

Campos declarados em uma classe so vlidos por toda a classe, mesmo que os campos estejam declarados depois dos mtodos que os usam.

Variveis e instncias de objetos declarados dentro de mtodos s sero vlidos dentro desse mtodo.

Dentro de mtodos e blocos de comandos, as variveis e objetos devem ser declarados antes de serem utilizadas.

Variveis passadas como argumentos para mtodos s so vlidas dentro dos mtodos.

Exemplo: class Data


31

Classes em Java Modificadores de Acesso


Modificadores de acesso podem ser usados tanto em campos como em mtodos de uma classe.
O objetivo proteger a integridade e a consistncia dos dados e operaes que uma determinada classe manipula.

Exemplo de Proteo aos Atributos (dados)


Por exemplo na classe dataSimples analisada anteriormente, observamos que ao ser inicializada uma data, os campos dia, ms e ano passam por um processo de consistncia, ao ser chamado o mtodo dataEValida. Entretanto, como no so usados modificadores, no podemos garantir que sempre as datas sero validadas, pois os campos da classe podem ser acessados diretamente, sem a utilizao dos mtodos da classe.
32

Classes em Java Modificadores de Acesso


Exemplo de Proteo aos Mtodos (aes)
Outro exemplo, seria um mtodo imprimeNmeroDaPgina de uma classe Relatrio. Esta classe teria o mtodo imprimeRelatrio que sempre que necessrio se utilizaria do mtodo imprimeNmeroDaPgina. Seria inadequado a execuo de imprimeNmeroDaPgina desatrelado do mtodo imprimeRelatrio. No primeiro exemplo apresentado, seria conveniente usar um modificador para proteger os dados, assim garantindo que as datas sempre seriam validados.

No segundo exemplo, seria conveniente usar um modificador para restringir o acesso ao mtodo imprimeNmeroDaPgina, j que este s deve ser usado atravs do mtodo 33 imprimeRelatrio.

Classes em Java Modificadores de Acesso


Existem quatro modificadores de acesso:
public: garante que o campo ou mtodo da classe declarado com este modificador poder ser acessados ou executado a partir de qualquer outra classe.

private: s podem ser acessados, modificados ou executados por mtodos da mesma classe, sendo ocultos para o programador usurio que for usar instncias desta classe ou criar classes herdeiras ou derivadas.

protected: funciona como o modificador private, exceto que classes herdeiras ou derivadas tambm tero acesso ao campo ou mtodo.

Finalmente, campos e mtodos podem ser declarados sem modificadores. Nesse caso, eles sero considerados como pertencentes categoria package, significando que seus campos e mtodos sero visveis para todas as classes de um mesmo 34 pacote.

Classes em Java Modificadores de Acesso


Ao criar uma classe, o programador deve implementar uma poltica de ocultao ou de acesso a dados e a mtodos internos.

Regras bsicas para implementao de polticas para classes simples:


Todo

campo deve ser declarado como private ou protected.

Mtodos que devem ser acessveis devem ser declarados com o modificador public. Caso classes no venham a ser agrupadas em pacotes, a omisso no gera problemas. Mtodos para controle dos campos devem ser escritos, e estes mtodos devem ter o modificador public.

Se for desejvel, mtodos podem ser declarados como private.

35

Exemplo de Escopo e Modificadores


public determina que essa classe pode ser instanciada dentro de qualquer outra classe. public class Data { private byte dia, mes;

private short ano;

private determina que os dados s podem ser manipulados dentro da prpria classe. Como dia, ms e ano so declarados fora dos mtodos, so variveis globais (atributos).

public void inicializaData(byte d,byte m,short a) { if (dataEValida(d,m,a) == true) As variveis d, m e a so parmetros (argumentos) e s podem ser manipulados dentro desse mtodo.

public { dia = d; mes=m; ano=a; indica } que o mtodo else pode ser { dia acessado = 0; mes=0; ano=0; sem } restries }

36

Exemplo de Escopo e Modificadores


private indica que esse mtodo s pode ser acessado atravs de outros mtodos da prpria classe. private boolean dataEValida(byte d,byte m,short a)
A variveis validade uma varivel local e s podem ser manipulada dentro desse mtodo. { boolean validade = false; if ((d>=1) && (d<=31) && (m>=1) && (m<=12)) validade = true; return validade; } protected indica que esse mtodo s pode ser acessado atravs de mtodos dessa classe ou de classes herdeiras ou derivadas. protected void mostraData() { } }
37

System.out.println(dia + / + ms + / + ano);

Programas orientados compostos por:

objetos,

so

conjuntos de objetos que representam os objetos existentes no negcio modelado. conjuntos de objetos que representam estruturas adequadas para a manipulao de dados. Os objetos que compem o programa comunicam-se por trocas de mensagens.

public class O programa

precisa ter um ponto de entrada Aplicacao { que indique mquina virtual onde iniciar a public static void main(String[] s) execuo. { } } 38

public static void main(String[] args)


public: visvel para qualquer outra classe. static: dispensa a criao de objetos. void: nenhum retorno esperado.

main: conveno para indicar a mquina virtual qual o ponto de entrada da aplicao. String[] args: parmetros passados pela aplicao via linha de comando. args o identificador.
39

public class Aplicacao { private Ponto p1,p2;

Declarao de objetos da classe Ponto como atributos.

public void moverPontos() Utilizao do mtodo mover da classe { p1.mover(4F,2F); Ponto, atravs do objeto p1. p2.mover(-2F,-4F); } public void criarPontos() Instncia de um objeto da classe Ponto { p1 = new Ponto(); p2 = new Ponto(); } public void rodar() Mtodo principal, que ser executado { criarPontos(); inicialmente pela mquina virtual Java. moverPontos(); } public static void main(String[] s) { Aplicacao ap = new Aplicacao(); ap.rodar(); } Criao de um objeto da prpria classe
40

Exemplo de uma Aplicao


public class Ponto { private float x; private float y;
Declarao de variveis do tipo primitivo float como atributos.

public void mover(float novoX, float novoY) { x = novoX; y = novoY; } }

41

new instancia um novo objeto. new aloca o espao necessrio para armazenar o estado do objeto e uma tabela para indicar o corpo do cdigo necessrio para efetuar suas operaes. new executa as tarefas de inicializao do objeto conforme o seu Construtor. new retorna o identificador do objeto criado e o operador de atribuio utilizado para copiar este endereo para uma varivel, que servir para futuras referncias ao objeto. O compilador e a mquina virtual Java verificam o tipo da varivel e o tipo da referncia retornada.
42

Gerenciador de memria para aplicaes java.


Thread chamada Automatic Garbage Collector. Retorna a memria ocupada por objetos que no esto mais sendo usados. Monitora a criao de objetos atravs do new. Cria um contador de referncia para cada objeto. Libera a memria quando o contador chegar a zero.
43

Objetos armazenam uma referncia nula at serem inicializados.

A referncia nula representada pela palavra reservada null.


Pode-se desfazer uma referncia para um objeto atribuindo a ela a palavra null.

44

Variveis de tipos primitivos armazenam um valor

Na declarao aloca-se espao na memria suficiente para o armazenamento da varivel. armazenam

Variveis de tipos referncias identificadores para objetos

Na declarao aloca-se espao para a referncia ao objeto. A alocao do objeto realizada atravs do operador new.

45

J vimos que podemos criar aplicaes que utilizam instncias de classes definidas pelo usurio ou j existentes. Aps criar a instncia da classe com a palavra-chave new, usamos mtodos para inicializar os campos da instncia. Na declarao aloca-se espao para a referncia ao objeto. Por esquecimento, um programador pode criar a instncia de uma classe mas no inicializar seus dados.
46

Construtor um tipo especial de membro de classe chamado automaticamente quando instncias so criadas atravs da palavra chave new. Construtores so teis para:

inicializar os atributos de uma classe;


realizar rotinas complexas de inicializao; realizar inicializaes segundo parmetros passados no momento da criao do objeto.

47

Na declarao de um construtor deve-se considerar que:

Construtores devem ter exatamente o mesmo nome da classe; Construtores no possuem tipo de retorno, nem mesmo void; Construtores so, normalmente, pblicos. Programador no pode chamar construtores diretamente;

48

Toda classe possui um construtor.

Caso o programador no fornea uma verso explcita do construtor, Java utiliza uma verso de construtor implcita que no recebe nenhum parmetro.
Se o programador fornecer um construtor a uma classe, a linguagem no mais incluir o construtor padro implcito.

49

public class Empregado { String Nome, Endereo, CPF; float Salrio; int Idade; public Empregado ( String N, String End, String cpf, int Ida) { Nome = N; Construtor da classe Empregado. Endereo = End; Observe que no foi definido um CPF = cpf; tipo de retorno e possui o mesmo nome da classe. Idade = Ida; }

public String InformarCPF( ) { return CPF; }


public String ApresentarNome( ) { return Nome; }

50

Construtores - Exemplo
Utilizao do Construtor da class CriaEmpregado classe Empregado para { public static void main(String args[]) instanciar um objeto. { Empregado obj = new Empregado(Maria Silva, Rua X n 246", Nome do Nome"403.234.567-33",58); Objeto da classe

System.out.println("O nome = +obj.ApresentarNome());

System.out.println("O CPF = "+ obj.InformarCPF());


System.out.println("A idade = .DevolveIdade());

}
51

Representada por um atributo esttico da classe System

System.out.println(...)
Tipos primitivos podem ser concatenados a Strings atravs do operador + Exemplo:
class saidaDados { public static void main (String args[]) { System.out.println(saida de dados); } }
52

Toda a classe que for se utilizar de entrada de dados via teclado deve utilizar o package Java.io.*. Esse pacote contm as classes que tratam de entrada de dados.
import java.io.*

Para obter valores do teclado em uma classe Java necessrio criar um objeto da classe BufferedReader.
BufferedReader obj = new BufferedReader(new inputStreamReader(System.in));

Todo a entrada de dados est sujeita a erros, j que fica a merc da digitao do usurio final. A forma mais simples de se tratar essa exceo solicitar que a exceo no seja tratada localmente atravs da linha de comando:
throws java.io.IOException
53

O Java s permite a entrada de Strings, desta forma, para que possamos informar valores numricos necessrio fazer uma converso de String para o tipo numrico desejado, comovarivel line umaver a podemos String. A seguir:

Converso de String para inteiro int i = Integer.valueOf(line).intValue();

Converso de String para long


long l = Long.valueOf(line).longValue();

Converso de String para float float f = Float.valueOf(line).floatValue(); Converso de String para double double d

=54

import java.io.*; class soma { public static void main (String args[ ] ) throws java.io.IOException { String aux; int a, b; BufferedReader obj = new BufferedReader(new InputStreamReader (System.in)); System.out.println("Digite o primeiro nmero: "); aux = obj.readLine(); a = Integer.valueOf(aux).intValue(); System.out.println("Digite o segundo nmero: "); aux = obj.readLine(); b = Integer.valueOf(aux).intValue(); a = a + b; System.out.println("O resultado : " + a);

55

Operadores Relacionais e Lgicos

Operadores Relacionais

Operadores Aritmticos
&& (E lgico) || (OU lgico) ! (NO lgico)

< (menor) > (maior) <= (menor ou igual) >= (maior ou igual) == (igual) != (diferente)

Operadores relacionais para a classe String


equals !equals if (nome.equals(Maria) if (!nome.equals(Maria)

56

Estrutura de Deciso e Controle - Comandos

if else
Estrutura do Comando

if (expresso_booleana ) { bloco de comandos do if; } [else] { bloco de comandos do else; }

Observaes:
O comando else opcional. Na construo de ifs aninhados, o else refere-se sempre ao if mais prximo. Procure usar chaves para delimitar os blocos. O operador de comparao igual a representado por == e no por =. Bloco de comandos pode ser um nico comando (terminado por ponto-e-vrgula) ou vrios comandos (delimitados por {}). indispensvel o uso de parnteses ( ) na expresso_booleana.
57

Estrutura de Deciso e Controle - Comandos

switch
Estrutura do Comando

switch(varivelDeControle) { case constante1: bloco1; break; case constante2:

bloco2;
break; [default: bloco3; break;]

Observaes:
Usual para selecionar alguma ao de um nmero de
alternativas. A varivel de controle s pode ser inteira ou char. O case define o ponto de entrada da execuo. Se voc quiser que s um bloco de declaraes seja executado use break. 58 A opo default opcional.

Estruturas de Repeties - Comandos

while
Estrutura do Comando

while (expresso_booleana) { Bloco de comandos; }

Observaes:
indispensvel o uso de parnteses ( ) na expresso_booleana.
O lao permanece em execuo enquanto a expresso_booleana for verdadeira. Um erro comum no atualizar as variveis de controle do lao, o que acarreta um loop infinito. Outro erro freqente colocar o ponto e vrgula aps o while. A fase de atualizao das variveis de controle ficam fora do lao, gerando um loop infinito. Use sempre chaves para delimitar o Bloco de comandos.
59

Estruturas de Repeties - Comandos

do - while
Estrutura do Comando

do
{ Bloco de comandos; } while (expresso_booleana);

Observaes:
semelhante ao comando while, sendo que a condio de
parada do lao testada aps o bloco de comandos.
Pelo menos uma vez o bloco de comandos ser executado. Observe as mesmas consideraes do comando while.

60

Estruturas de Repeties - Comandos

for

for(inicialiazao; terminao; iterao)


{ bloco de comandos; }
Estrutura do Comando

Observaes:
Num loop for explicita as quatro partes de uma iterao.
Um erro comum colocar o ponto e vrgula aps o for,
ficando o bloco de comandos fora do lao. O resultado um loop que nada realiza.

61

Exemplos das Estruturas de Deciso e Repetio


public class exemploCondicaoRepeticao { public static void main (String args[]) { double valor = 1; char letra='A'; int contador; while(valor <= 20) { System.out.println(valor); valor = valor * 2; if (valor >= 20) { System.out.println("Fim da exemplificao do while e if"); } } for (contador=0; contador < 10; contador++) { System.out.println(contador); } System.out.println("Fim da exemplificao do for");

62

Exemplos das Estruturas de Deciso e Repetio


do { switch (letra) { case 'A' : System.out.println(letra + " uma vogal"); break; case 'E' : System.out.println(letra + " uma vogal"); break; case 'I' : System.out.println(letra + " uma vogal"); break; case 'O' : System.out.println(letra + " uma vogal"); break; case 'U' : System.out.println(letra + " uma vogal"); break; } letra++; } while (letra != 'Z'); System.out.println("Fim da exemplificao do switch e do-while"); } }
63

Sobrecarga
Um mtodo pode ter o mesmo nome que outro mtodo na mesma classe;

Isto usual quando existem duas ou mais formas diferentes de se realizar a mesma tarefa;

Neste caso sobrecarregado;


diz-se

que

mtodo

est

Java permite a criao de mtodos com nome iguais, contanto que as assinaturas sejam diferentes; A assinatura composta do nome mais os tipos de argumento. O tipo de retorno no faz parte da assinatura;

Diferenas do tipos dos parmetros que definem assinaturas diferentes.

64

Sobrecarga
Java admite tambm, que se sobrecarregue os construtores de uma classe.

As restries so similares quelas aplicadas aos mtodos sobrecarregados

Deve-se se referir de dentro de um construtor sobrecarregado para outro, atravs do uso da palavra reservada this.

65

Exemplo de Sobrecarga
class criaEmpregado { public static void main(String args[])
As chamadas dos mtodos sobrecarregados esto apresentadas em negrito.

{ Empregado emp1 = new Empregado("Maria","123123123", "Rua das flores 245", 25,500); System.out.println("A idade de Maria = "+ emp1.DevolveIdade()); System.out.println("A idade de Maria daqui a 10 anos e = " + emp1.DevolveIdade(10)); Empregado emp2 = new Empregado("Tadeu",700); System.out.println("O salrio de Tadeu = "+emp2.salario); }
66

Exemplo de Sobrecarga
public class Empregado { String nome, endereco, cpf; float salario; int idade; public Empregado ( String n, String end, String c, int ida, float sal) { this(n, sal); endereco=end; cpf=c; idade=ida; } Uso da referncia this para chamar o outro construtor.

public Empregado (String n, float sal)


{ } public int DevolveIdade() { return idade; } public int DevolveIdade(int numAnos) nome = n; salario = sal; As sobrecargas esto representadas em negrito.

{ return idade+numAnos;
} }
67

A referncia this
Na chamada dos mtodos de uma classe, a mquina virtual passa implicitamente como parmetro uma referncia ao objeto ao qual a mensagem foi enviada.

Quando se deseja recuperar esta referncia de dentro do corpo da classe, usa-se a palavra reservada this.

Pode-se ainda utilizar a palavra chave this para se referir a um construtor sobrecarregado, como vimos anteriormente. Entretanto, neste caso, a palavra chave no diz respeito referncia do objeto, visto que este ainda est sendo criado.

68

A referncia this

Resumindo a referncia this usada para:

Referncia ao prprio objeto.

Acesso dados e mtodos na instncia de um objeto.


Passar o objeto como parmetro.
Classe principal para a exemplificao do uso da referncia this

public class ExemploThis { public static void main(String args[]) { Funcionario func1 = new Funcionario("Maria",500); Funcionario func2 = new Funcionario("Joo",700); func1.salario = func1.ajustaSalario(20); func2.salario = func2.ajustaSalario(30); System.out.println("O novo salrio de "+ func1.nome +" = "+func1.salario); System.out.println("O novo salrio de "+ func2.nome +" = "+func2.salario); } }
69

Exemplo do uso da referncia this


public class Funcionario { String nome; float salario; public Funcionario(String n, float s) { nome = n; Uso do this como parmetro para salario = s; referenciar o objeto corrente }

public float ajustaSalario(float percentual) { float novoSalario; novoSalario = this.salario + calculo(percentual,this); return novoSalario; } Uso do this para acessar um atributo do objeto.
private float calculo(float percentual, Funcionario obj) { float valorAcrescido; valorAcrescido = obj.salario * percentual / 100; return valorAcrescido; } }
70

Reutilizao de Classes
Um dos maior benefcio que a Programao Orientada a Objeto nos proporciona a reutilizao de cdigo.

A reutilizao se caracteriza pelo aproveitamento de classes e seus mtodos que j estejam escritos e que j tenham o seu funcionamento testado e comprovado.

A Reutilizao de cdigo diminui a necessidade de escrever novos mtodos e classes gerando economia de tempo e segurana.

Existe duas maneiras de conseguir esse reaproveitamento: Atravs de Composio ou atravs de Herana.

71

Composio
A composio o conceito mais usual no desenvolvimento de aplicaes baseadas em Orientao a Objetos.

Parte do pressuposto que uma determinada classe vai instanciar objetos de outras classes, utilizando-se do que esses objetos fazem para compor as funcionalidades da nova classe.

Esse conceito pode ser visto em exemplos anteriores (classe criaEmpregado e classe exemploThis), que instanciaram objetos da classe Empregado e funcionrio respectivamente.

CriaEmpregado exemploThis

Empregado
Funcionrio
72

Herana
Herana a capacidade de uma classe definir o seu comportamento e sua estrutura aproveitando definies de outra classe, normalmente conhecida como classe base ou classe pai.

A herana no precisa ser interrompida na derivao de uma camada de classes. A coleo de todas as classes que se estendem de um pai comum chama-se hierarquia de herana.

A palavra reservada extends que define que uma classe est herdando de outra.

Empregado Gerente Secretria

Analista de Sistemas
73

Herana

Atravs do mecanismo de herana possvel definirmos classes genricas que agreguem um conjunto de definies comuns a um grande nmero de objetos (Generalizao). A partir destas especificaes genricas podemos construir novas classes, mais especficas, que acrescentem novas caractersticas e comportamentos aos j existentes (Especializao).
Funcionrio
nome salrio

Gerente Gerente de Banco


codBanco codAgncia

Secretria Gerente de Empresas


codSetor

Analista de Sistemas

idiomas

linguagem

74

Herana e a referncia super

A palavra reservada super, nos possibilita:

referncia a classe base (pai) do objeto;

acesso a variveis escondidas (shadow), ou seja, variveis de uma classe que tem o mesmo nome de uma varivel definida em uma subclasse;

acesso a mtodos que foram redefinidos, ou seja, mtodos que possuem a mesma assinatura na classe Pai e na classe derivada;

utilizao pela classe derivada do construtor da classe pai.

75

Exemplo de Herana
Classe Pai public class Automovel Declarao de { public static final byte movidoAGasolina = 1; constantes. public static final byte movidoAAlcool = 2; public static final byte movidoADiesel = 3; private static final byte numeroMaximoDePrestacoes = 24;

private String modelo; private String cor; private byte combustivel;

Atributos

Construtor

public Automovel(String m, String c, byte comb) { modelo = m; cor = c; combustivel = comb; }

public byte quantasPrestacoes() { return numeroMaximoDePrestacoes; }


76

Exemplo de Herana
public float quantoCusta() { float preco = 0; switch (combustivel) { case movidoAGasolina: preco = 12000.0f; break; case movidoAAlcool: preco = 10500.0f; break; case movidoADiesel: preco = 11000.0f; break; } return preco; } public String toString() { String resultado; resultado = modelo+" "+cor+"\n"; switch(combustivel) { case movidoAGasolina: resultado += "Gasolina \n"; break; case movidoAAlcool: resultado += "lcool \n"; break; case movidoADiesel: resultado += "Diesel \n"; break; } return resultado; } }
77

Exemplo de Herana
public class AutomovelBasico extends Automovel { private boolean retrovisorDoLadoDoPassageiro; private boolean limpadorDoVidroTraseiro; private boolean radioAMFM;
Atributos A palavra extends que determina que AutomovelBasico herda de Automovel.

public AutomovelBasico (String m, String c, byte comb, boolean r, boolean l, boolean af) { super(m,c,comb); A palavra super, indica retrovisorDoLadoDoPassageiro = r; que deve ser usado o limpadorDoVidroTraseiro = l; construtor da classe Pai. radioAMFM = af; } public AutomovelBasico (String m, String c, byte comb) { super(m,c,comb); retrovisorDoLadoDoPassageiro = true; limpadorDoVidroTraseiro = true; radioAMFM = true; }
78

Exemplo de Herana
public float quantoCusta() Os dois mtodos { float preco = super.quantoCusta(); apresentados nessa if (retrovisorDoLadoDoPassageiro == true) transparncia possuem a preco = preco + 280; mesma assinatura da classe if (limpadorDoVidroTraseiro == true) Automovel, o que caracteriza uma redefinio preco = preco + 650; de mtodos da classe Pai. if (radioAMFM == true) preco = preco + 190; return preco; A palavra super, indica que deve ser chamado o mtodo } quantoCusta() e toString() da public String toString() classe Pai. { String resultado = super.toString(); if (retrovisorDoLadoDoPassageiro == true) resultado += "Com retrovisor do lado direito \n"; if (limpadorDoVidroTraseiro == true) resultado += "Com limpador traseiro \n"; if (radioAMFM == true) resultado += "Com radio \n"; return resultado; 79 }}

Exemplo de Herana
public class DemoAutomovel { public static void main(String arg[]) { Automovel a = new Automovel("Fusca","verde", Automovel.movidoAAlcool); System.out.println(a.toString()); Instncia de um objeto da System.out.println(a.quantoCusta()); classe AutomovelBasico. System.out.println(a.quantasPrestacoes()); AutomovelBasico ab = new AutomovelBasico("Corsa","cinza", Automovel.movidoAGasolina,true,true,false); System.out.println(ab.toString()); System.out.println(ab.quantoCusta()); System.out.println(ab.quantasPrestacoes()); } }
Observe que o mtodo quantasPrestacoes() est sendo acessado atravs de um objeto da classe AutomovelBasico. Isso s possvel porque a classe AutomovelBasico herda da classe Automovel, assim todos os atributos e mtodos da classe Pai podem ser usados pela classe derivada. Instncia de um objeto da classe Automovel.

80

Polimorfismo
O mecanismo de herana permite a criao de classes a partir de outras j existentes com relao -um-tipode, de forma que, a partir de uma classe genrica, classes mais especializadas possam ser criadas.

A relao -um-tipo-de entre classes permite a existncia de outra caracterstica fundamental de linguagens OO, o polimorfismo.

Polimorfismo (muitas formas) permite a manipulao de instncias de classes que herdem de uma mesma classe ancestral de forma unificada.

Podemos escrever mtodos que recebam instncias de uma classe C, e os mesmos mtodos sero capazes de processar instncias de qualquer classe que herde de C, j que qualquer classe que herde de C -um-tipo-de C.

81

Polimorfismo

Vantagens do uso do Polimorfismo:


Permite o envio de mensagens a um objeto sem a determinao exata do seu tipo;

Permite a extensibilidade do sistema com pouco ou nenhum impacto nas classes existentes;

Permite a construo de classes genricas para efetuar tarefas gerais comuns aos softwares, como as estruturas de dados.

82

Exemplo de Polimorfismo
public class ConcessionariaDeAutomoveis { public static void main(String args[]) { Automovel a1 = new Automovel("Fiat","bege", Automovel.movidoAAlcool); AutomovelBasico a2 = new AutomovelBasico("Corsa","cinza", Automovel.movidoAGasolina); imprime(a1); O mtodo imprime recebe um objeto da classe Automovel imprime(a2); como parmetro. Observe que nesse exemplo, chamamos o } mtodo passando a1 e a2, ou seja, objetos de classes
diferentes mas da mesma hierarquia de classes, caracterizando dessa forma a utilizao de polimorfismo.

public static void imprime(Automovel a) { System.out.println(Dados do automvel escolhido : "); System.out.println(a.toString()); System.out.println("Valor : "+a.quantoCusta()); System.out.println(a.quantasPrestacoes()+" prestaes de "+ (a.quantoCusta()/a.quantasPrestacoes())); } }
83

Classes Abstratas
So classes compostas por implementaes genricas e especificaes de procedimentos. Como no so totalmente implementadas, no produzem instncias, ou seja, no podemos criar objetos dessas classes. Elas agrupam caractersticas e comportamentos que sero herdados por outras classes e fornecem padres de comportamento que sero implementados nas subclasses.

A classe passa a servir como modelo genrico para as classes que sero dela derivadas.

Para se definir classes abstratas usa-se a palavra chave abstract.

84

Classes Abstratas
Um mtodo abstrato ser apenas o molde de uma implementao a ser provida pelas classes filhas concretas.

Cada classe filha poder prover implementao de uma forma particular.


sua

Mtodos abstratos s podem existir em classes abstratos.

Mtodos que no so abstratos podem ser usados normalmente pelos objetos das classes que derivam da classe abstrata.

As classes que derivarem de um classe abstrata devem obrigatoriamente implementar todos os mtodos abstratos definidos na classe Pai.

85

Exemplo de Classes Abstratas


abstract class Figura { int x; // coordenada x int y; // coordenada y
Definio da classe abstrata, atravs da palavra abstract.

public Figura (int x1, int y1) { x = x1; y = y1; } public abstract void desenha(); public abstract void apaga();

A classe pode ter um construtor, mesmo que no possa instanciar objetos.

public void move (int x1, int y1) { apaga(); x = x1; y = y1; Declarao de um mtodo desenha(); normal que poder ser } utilizado pelos objetos de }
classes derivadas.

Declarao dos mtodos abstratos. Esses mtodos devem obrigatoriamente ser implementados nas classes derivadas.

86

Exemplo de Classes Abstratas


class Quadrado extends Figura { public Quadrado(int x1, int y1) { super(x1, y1); }
Utilizao do construtor da classe Pai. Implementao obrigatria dos mtodos definidos na classe abstrata.

public void desenha() { System.out.println("Desenhando quadrado (" + x + "," + y + ")"); } public void apaga() { System.out.println("Apagando quadrado (" + x + "," + y + ")"); } } class TesteAbstract { public static void main (String args[]) Classe { Quadrado q = new Quadrado(10,10); para testar q.desenha(); o exemplo. q.move(50,50); q.apaga(); } }

87

Interfaces
Se uma classe definida por apenas mtodos abstratos ento melhor no usar a palavra-chave abstract. Para estes caso o Java fornece uma tcnica chamada de interfaces que pode ser usada para definir um modelo de comportamento.

As interfaces diferem dos mtodos abstratos no fato de que nenhum mtodo da interface pode ter um corpo.

As interfaces so estritamente modelos. As interfaces no podem ser instanciadas.

Uma classe pode implementar vrias interface mas apenas herda (extends) de uma nica classe. As Interfaces so compiladas da mesma forma que uma classe.

88

Interfaces
Uma interface uma coleo de definio de mtodos.

Uma interface pode tambm declarar constantes.

Java possui a palavra reservada interface para indicar a definio de uma interface. Sintaticamente equivalente a uma classe completamente abstrata.

Todos

seus mtodos so abstratos;

Todas as suas variveis so public static final;

Semanticamente entretanto, as duas diferem, pois uma interface guarda uma idia de protocolo (compromisso) entre classes.

89

Exemplo de Interfaces
class Linha implements FiguraGeometrica { int x, y ; interface FiguraGeometrica public Linha(int x1, int y1) { x = x1; y=y1; } public void desenha( ) { System.out.println("Desenhando linha (" + x + "," + y + ") "); } public void apaga( ) { System.out.println("Apagando linha (" + x + "," + y + ")" ); } public void move (int x1, int y1) Nesse exemplo a classe { this.apaga(); quadrado implementa a interface figuraGeometrica e x = x1; aceita desenvolver todos os y = y1; mtodos definidos pela this.desenha(); interface. } } { public void desenha(); public void apaga(); public void move (int x1, int y1); }

90

Pacotes
Um package um agrupamento de classes e interfaces que esto logicamente relacionadas.

No Java um conjunto de classes e interfaces que esto dentro de um mesmo diretrio de arquivos.

O Java utiliza os packages para:


garantir a unicidade do nome da classe, ou seja, no permitir que existam nomes de classes iguais em um mesmo pacote;

e para realizar controles de acesso; Membros de uma classe sem a especificao do controle de acesso so considerados membros que podem ser acessados pelas classes do mesmo package.

91

Pacotes
Para

colocar uma classe em um determinado pacote, deve-se colocar a palavra reservada package na primeira linha de cdigo do arquivo fonte (*.java). package java.lang;
Para

utilizar classes definidas em outros pacotes deve-se importar as classes atravs da palavra chave import. Importa apenas a
classe String

import java.lang.String; ou ainda

import java.lang.*;

Importa todas as classes do package lang


92

Principais Pacotes da Linguagem Java

java.applet Classes para criao de Applets.

java.awt Classes para criao de interfaces grficas.

java.io Classes para gerenciamento de Entradas e Sadas.

java.lang Classes Bsicas da linguagem (includas automaticamente, no necessita o uso do import).


java.net Classes para trabalho em rede.

java.util Classes de utilitrios (Data, Dicionrio, Pilha, Vetor, Random, etc.) java.sql Classes para manipulao de Banco de Dados

93

Tratamento de Excees
Uma exceo um evento que ocorre durante a execuo do programa, que foge normalidade do fluxo de instrues.

Linguagens que tratam adequadamente as excees tm a vantagem de separar a lgica da aplicao do tratamento de erros.

Excees so ocorrncias desenvolvedor da aplicao.


tratveis

pelo

Quando uma exceo acontece pode-se:


emitir exceo para o mtodo chamador, atravs do comando throws; capturar e tratar atravs dos comandos try, catch e finally.

94

Emitindo Excees
Os mtodos podem emitir excees de forma explcita. Um mtodo pode declarar que capaz de emitir uma exceo, usando para isso a clusula throws.

Ao emitir uma exceo est se considerando que o mtodo chamador ir tratar a exceo.

Caso o mtodo chamador no trate a exceo ser apresentado um erro no console do computador e a aplicao pode parar de rodar.

No prximo exemplo, caso seja digitado uma letra em lugar de um nmero, a mquina virtual Java emite um erro e para a execuo da aplicao.

95

Exemplo de Emisso de Excees


import java.io.*; class RepassandoExcecoes { public static void main(String args[]) throws java.io.IOException { float n=0; String line; BufferedReader in = new BufferedReader(new I nputStreamReader(System.in)); System.out.println("Digite um nmero: "); line = in.readLine(); n = Float.valueOf(line).floatValue(); System.out.println("O nmero digitado foi: " + n); } }
Caso ocorra uma exceo na digitao do nmero, a ltima linha da aplicao no ser executada.
96

Capturando Excees
Para capturar excees coloque o trecho que pode originar a exceo num bloco try.

Manipule cada exceo num bloco catch. Podem existir vrios catch para um nico try, j que num nico bloco try podem ocorrer tipos de excees diferentes.

Realize procedimentos obrigatrios e comuns num bloco finally.

try{ //origina a //exceo } catch(exception1){ //manipula exc1 } catch(exception2){ //manipula exc2 } finally { //proc. //obrigatrios }
97

Exemplo de Captura de Excees


import java.io.*; class CapturandoExcecoes { public static void main(String args[]) { float n=0; boolean ok = true; BufferedReader in = new BufferedReader(new

InputStreamReader(System.in));

No try colocado o cdigo que poder gerar excees.

try { System.out.println("Digite um nmero: "); line = in.readLine();

n = Float.valueOf(line).floatValue();
}
98

Exemplo de Captura de Excees


No catch colocado o tratamento da excees caso ocorra. Exception o identificador de System.out.println("Problema na converso"); exceo default. Existe um ok = false; especfico para cada tipo de No finally colocado o cdigo que ser exceo. executado ocorrendo ou no uma exceo.

catch (Exception e) {

finally

{ System.out.println("Exemplo de captura de excees");


} if (ok == true) System.out.println("O nmero digitado foi: " + n); } }
99

Vetores Um vetor (array) uma seqncia de objetos ou valores de tipos primitivos, todos do mesmo tipo e combinados sob um nico identificador.

Vetores so estticos. O seu tamanho

definido no momento da sua criao. Em Java, vetores so objetos. Na prtica, eles herdam de Object.

Arrays possuem um atributo pblico que informa o seu tamanho: length.


Arrays em Java iniciam na posio (ndice) 0.

10 0

Vetores

Declarao: Exemplos:

tipo[] identificador; int[] vet; Button[] b;


Declarao de um vetor de tipo primitivo. Declarao de vetor de objeto. um

Construo: Exemplo:

identificador = new tipo[tamanho] vet = new int[12]; b = new Button[10];

Inicializao:

Observe que um vetor pode ser declarado, construdo e inicializado ao mesmo tempo.
10 1

int vet = new int { 0,1,2,3,4,5,6,7,8,9,10,11};

Exemplo da utilizao de Vetores


Esse exemplo mostra os meses e a quantidade de dias que cada ms possui.

class DiasDosMeses { public static void main(String[] arg) { int[] maxDiasMes = new int[12]; String[] nomeMes = {"JAN", "FEV", "MAR", "ABR", "MAI", "JUN", "JUL", "AGO","SET", "OUT", "NOV", "DEZ"}; for(int i=0; i < maxDiasMes.length; i++) { if(((i+1 < 8) && ((i+1)%2==1)) || ((i+1 >= 8) && ((i+1)%2==0))) maxDiasMes[i] = 31; else maxDiasMes[i] = 30; } maxDiasMes[1] = 28; for(int i=0;i<12;i++) System.out.println(nomeMes[i]+":"+ maxDiasMes[i]); } }

10 2

Matrizes Os arrays multidimensionais funcionam de forma anloga aos arrays dimensionais.

Cada dimenso representada por um par de colchetes []. Exemplo de Matrizes

class ManipulaMatriz { public static void main(String args[]) Declarao e construo { int Mat[][] = new int[5][2]; de uma matriz. for( int i=0; i < Mat.length; i++) { for( int j=0; j < Mat[0].length; j++) { Mat[i][j]= (i*2)+j; System.out.print(" Mat[ "+ i +" ] " +"[ " + j + " ] = " + Mat[i][j]); } System.out.println( "); } } }

10 3

Contribuies e Referncias Bibliogrficas

Referncias Bibliogrficas: SANTOS, R. Introduo Programao Orientada a Objetos Usando Java. 1a Edio: Editora Campus. 2003.

DEITEL,

H. M. e DEITEL, P. J. Java como Programar. 4a Edio: Editora Bookman. 2003.


CORNELL, G. & HORSTMANN, C. S. Core Java. 2 a Edio: Makron Books. 2001.

10 4

Vous aimerez peut-être aussi