Вы находитесь на странице: 1из 104

Programao Orientada a Objetos

Artur Henrique Kronbauer arturhk@gmail.com


1

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 mecanismos de processados e os 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 Cerveja Mesa 2 Kg refeio Sobremesa Refrigerante Cerveja Mesa 3 Kg refeio Sobremesa Refrigerante 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
Modelo Lampada Representa uma lmpada em uso Incio do modelo dado estadoDaLampada; operao acende() Acende a Lmpada 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 Dados da conta Inicio do modelo dado nomeDoCorrentista, saldo, contaEspecial ;
argumentos para a operao

operao abreConta(nome,deposito,especial) incio nomeDoCorrentista = nome; saldo = deposito; Inicializa simultaneamente contaEspecial = especial; todos os dados do modelo 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
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.
  Os

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

 As 

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)


Tipo byte short int long float double char boolean Faixa de Valores -128 a 127 -32.768 a 32.767 -2.147.483.648 at 2.147.483.647 -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 1.401298464324811707e-45 a 3.40282346638528860e+38 4.94065645841246544e-324 a 1.79769313486231570e+308 Representam um nico caracter True ou False Armazenamento Inteiro de 8 bits Inteiro de 16 bits Inteiro de 32 bits Inteiro de 64 bits Ponto Flutuante de 32 bits 8 bytes ou 64 bits 16 bits 1 bit

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

Classes em Java Operadores Aritmticos




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 p short p int p long p float p 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 p nx = 9

27

Classes em Java - Mtodos de Classes




A maioria das classes representa modelos que tem dados e operaes que manipulam esses dados. operaes so chamadas de mtodos.

 As 

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)

Mtodo da classe

void inicializaDataSimples(byte d,byte m,short a) { if (dataEValida(d,m,a) == true) { dia = d; mes=m; ano=a; Parmetros } baseados em else tipos primitivos { 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; }

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 pacote. 34


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) { public indica que o mtodo pode ser acessado sem restries if (dataEValida(d,m,a) == true) { dia = d; mes=m; ano=a; } else { dia = 0; mes=0; ano=0; } } As variveis d, m e a so parmetros (argumentos) e s podem ser manipulados dentro desse mtodo.

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() { } } System.out.println(dia + / + ms + / + ano);

37

Programas baseados em Orientao a Objetos




Programas orientados a objetos, so compostos por:




conjuntos de objetos que representam os objetos existentes no negcio modelado. conjuntos de objetos que representam adequadas para a manipulao de dados. estruturas

Os objetos que compem o programa comunicam-se por trocas de mensagens. O programa precisa ter um ponto de entrada que indique mquina virtual onde iniciar a execuo.

public class Aplicacao { public static void main(String[] s) { } }

38

Aplicaes em Java
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

Exemplo de uma Aplicao


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

Operador new
 

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

Garbage Collection
  

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

 

Referncia nula


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

Primitivas e Referncias


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

Construtores


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

Construtores


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

Construtores


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

 

Construtores 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

 

Construtores - Exemplo
public class Empregado { String Nome, Endereo, CPF; float Salrio; int Idade; public Empregado ( String N, String End, String cpf, int Ida) { Nome = N; Endereo = End; Construtor da classe Empregado. CPF = cpf; Observe que no foi definido um tipo de retorno e possui o mesmo Idade = Ida; nome da classe. } 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", "403.234.567Nome do Objeto Nome33",58); da classe

System.out.println("O nome = +obj.ApresentarNome()); System.out.println("O CPF = "+ obj.InformarCPF()); System.out.println("A idade = .DevolveIdade()); } }

51

Sada de Dados Padro




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

Entrada de Dados Padro




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

Converso de String para tipos primitivos




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, como podemos ver a seguir: A varivel line uma String.


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 = Double.valueOf(line).doubleValue(); 54

Exemplo de Entradas e Sadas de Dados


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; } { } public int DevolveIdade() { return idade; } public int DevolveIdade(int numAnos) { return idade+numAnos; } } Uso da referncia this para chamar o outro construtor. public Empregado (String n, float sal) nome = n; salario = sal; As sobrecargas esto representadas em negrito.

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. dados e mtodos na instncia de um objeto.


Classe principal para a exemplificao do uso da referncia this

 Acesso 

Passar o objeto como parmetro.

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; salario = s; Uso do this como parmetro para 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 85 mtodos abstratos definidos na classe Pai.

Exemplo de Classes Abstratas


abstract class Figura { int x; // coordenada x int y; // coordenada y public Figura (int x1, int y1) { x = x1; y = y1; } public abstract void desenha(); public abstract void apaga();
Definio da classe abstrata, atravs da palavra abstract.

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 quadrado implementa a { this.apaga(); 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
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; utilizar classes definidas em outros pacotes deve-se importar as classes atravs da palavra chave import. Importa apenas a import java.lang.String; ou ainda import java.lang.*;
classe String

Para

Para

Importa todas as classes do package lang

92

Principais Pacotes da Linguagem Java


 

java.applet

Classes para criao de Applets. Classes para criao de interfaces

java.awt grficas.

java.io Sadas.

Classes para gerenciamento de Entradas e

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.) Classes para manipulao de Banco de
93

java.sql Dados

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.

catch (Exception e) { }

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.

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.


definido no momento da sua criao.




Vetores so estticos. O seu tamanho

Em Java, vetores so objetos. Na prtica, eles herdam de Object.




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


em Java iniciam na posio (ndice) 0.
100

 Arrays

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.

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


101

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]); } }

102

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( "); } } }

103

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.




104