Você está na página 1de 59

Escola Tcnica de Braslia

Java e POO

JAVA e a Programao Orientada a Objetos

Escola Tcnica de Braslia

Java e POO

SUMRIO

PARTE 1 Fundamentos Bsicos da Linguagem Java ........................................................................................... 3 PARTE 2 Principais Estruturas da Linguagem Java ........................................................................................... 15 PARTE 3 Funes Matemticas, Funes de String, Formatao de nmeros e de data/hora ............................... 23 PARTE 4 Indroduo excees em Java ........................................................................................................ 31 PARTE 5 Array e Matrizes ............................................................................................................................... 35 PARTE 6 Orientao a Objetos ........................................................................................................................ 40

Escola Tcnica de Braslia

Java e POO

PARTE 1 Fundamentos Bsicos da Linguagem Java

Escola Tcnica de Braslia

Java e POO

Introduo James Gosling e outros desenvolvedores da Sun estavam trabalhando em um projeto de TV interativa em meados da dcada de 1990, quando Gosling descontente com a linguagem C++, trancou-se em seu escritrio e criou uma nova linguagem adequada ao projeto e que focalizava alguns de seus motivos de frustrao na C++. O esforo de TV interativa da Sun falhou, mas seu trabalho na linguagem Java que facilitava a reescrita de software rendeu frutos. Java foi lanada pela Sun no segundo semestre de 1995, em um kit de desenvolvimento gratuito, do qual era possvel fazer o download pelo Web site da empresa. O fato de programas Java chamados applets poderem ser executados como parte das pginas Web contribui para atrair centenas de milhares de desenvolvedores. Java uma linguagem orientada a objetos, independente de plataforma e segura, projetada para ser mais fcil de aprender do que C++ e mais difcil de abusar do que C e C++. A Programao Orientada a Objetos (P.O.O) um tcnica de desenvolvimento de software em que um programa percebido como um grupo de objetos que trabalham juntos. Os objetos so criados como modelos, chamados classes, e contem os dados e as instrues necessrias para usar esses dados. Java completamente orientada a objetos. Independente de plataforma, um programa Java executado sem modificaes em diferentes sistemas operacionais. Os programas Java so compilados para um formato chamado bytecode, que executado por qualquer sistema operacional, software ou dispositivo com um interpretador Java. Caractersticas: Java cuida automaticamente da alocao e desalocao de memria; Java no inclui ponteiros; Java s inclui herana nica; Segurana. A falta de ponteiros e a presena de gerenciamento automtico de memria so dois dos elementos-chave para a segurana de Java. Outro a forma como os programas Java executados em pginas Web so limitados a um subconjunto da linguagem, para evitar que um cdigo malicioso prejudique o computador de um usurio. Os recursos da linguagem que poderiam facilmente ser empregados para fins prejudiciais como a capacidade de gravar dados em um disco e excluir arquivos no podem ser executados por um programa quando ele executado pelo interpretador Java de um browser na Internet. SDK Software Development Kit um conjunto de programas da linha de comando, usados para criar, compilar e executar programas Java. Cada nova verso da Java acompanhada por uma nova verso do kit de desenvolvimento. Ele no oferece uma interface grfica com o usurio, editor de textos ou outros recursos. Para usar o kit, necessrio digitar os comandos em um prompt de texto, ou seja, um prompt de linha de comando. No entanto, existem diversas IDEs (Integrated Development Environment), um ambiente integrado para desenvolvimento de software, tais como: JCreator, Eclipse, NetBeans, dentre outros. Exemplo: javac Soma.java compila a classe Soma e gera o arquivo bytecode. Java Soma interpreta o bytecode da classe Soma. O download do Software Development Kit pode ser baixaido no site da Sun (http://java.sun.com) e est disponvel para diversos sistemas operacionais. Depois da instalao do JDK, teremos que editar as variveis de ambiente do computador para incluir as referncias ao kit. 1. Edit a varivel PATH do computador e acrecente uma referncia pasta Bin do Software Development Kit (C:\Program Files\Java\jdk1.6.0_10\bin) se voc instalou nesta pasta. 2. Edite ou crie uma varivel CLASSPATH para que contenha uma referncia pasta ativa, seguida por uma referncia ao arquivo tools.jar na pasta lib do kit (.;C:\Program Files\Java\jdk1.6.0_10\lib\tools.jar). No esquea o ponto-e-vrgula.

Escola Tcnica de Braslia

Java e POO

O Java Software Development Kit exige o uso de uma linha de comando para compilar os programas Java, execut-los e tratar de outras tarefas. Uma linha de comando um modo de operar um computador digitando comandos no seu teclado.

Dicas: Para abrir uma pasta, digite cd seguido pelo nome da pasta e pressione Enter; o Exemplo: cd c:\temp. Digite cd \ para abrir a pasta raiz na unidade de disco; Digite cd.. para retornar ao nvel anterior; Para criar uma pasta, digite: md e o nome da pasta; o Exemplo: md c:\Teste Para deletar a pasta, digite: rd e o nome da pasta; o Exemplo: rd c:\Teste Ao contrrio das ferramentas de desenvolvimento Java mais sofisticadas, o Software Development Kit no inclui um editor de textos para criar cdigos- fonte. Para que um editor ou processador de textos funcione com o kit, ele precisa ser capaz de salvar arquivos de texto sem formatao. No Windows temos, por exemplo, o Bloco de Notas que s trabalha com arquivos de texto limpo. A desvantagem do uso de editores de texto simples, que eles no exibem nmeros de linha enquanto o cdigo-fonte criado. Ver os nmeros de linha ajuda na programao Java, pois muitos compiladores indicam o nmero de linhas em que ocorreu o erro. Exemplo: Menus.java:2: Class Font nor found in type declaration

Escola Tcnica de Braslia

Java e POO

O nmero 2 depois do nome do arquivo fonte Java indica a linha que disparou o erro do compilador. Com um editor de textos que aceita numerao, podemos ir diretamente para essa linha e comear a procurar o erro. Execute seu editor preferido e digite o programa Java abaixo: Obs.: Certifique-se de que todos os parnteses, chaves e aspas na listagem sejam digitados corretamente e use maisculas e minsculas no programa exatamente como aparecem. Exemplo 1: Classe Oi !

Depois de digitar o programa, salve o arquivo em algum lugar do disco rgido com o nome Oi.java. Os cdigosfonte Java precisam ser salvos com nomes terminando em .java. Se voc estiver usando o Windows, um editor de textos como o Bloco de Notas poder acrescentar uma extenso txt extra ao nome de arquivo de qualquer fonte Java salvo. Por exemplo, Oi.java ser salvo como Oi.java.txt. Como uma alternativa para evitar este problema, coloque aspas em torno do nome de arquivo ao salvar um arquivo fonte.

Compilando e executando o programa Abra uma janela da linha de comando, depois abra a pasta na qual o arquivo foi salvo. Quando estiver na pasta correta, poderemos compilar Oi.java digitando: Exemplo: javac Oi.java Neste momento gerado o arquivo bytecode Oi.class. Obs 1.: O compilador no apresenta qualquer mensagem se o programa for compilado com sucesso. Obs 2.: Se houver problemas, o compilador lhe dir exibindo cada erro junto com a linha que disparou o erro. Obs 3.: Se nenhum pacote tiver sido criado o arquivo Oi.class estar na mesma pasta do arquivo Oi.java Para executar o programa digite: java Oi Se o aquivo for interpretado corretamente pela mquina virtual Java, aparecer a palavra Oi,<Nome do Usurio> no prompt de comando.

Escola Tcnica de Braslia

Java e POO

Introduo programao Java Java uma linguagem sensvel ao caixa, ou seja, distingue maisculas de minsculas: nome diferente de Nome, por exemplo. Comentrios So os textos usados para anotar explicaes no prprio programa e desconsiderados pelo compilador. Smbolo Descrio // Comentrio de uma linha /* */ Comentrio de bloco (pode conter vrias linhas) /** / Comentrio de documentao Obs 1.: Os comentrios de documentao, colocados antes da declarao dos elementos do programa, podem ser extrados pela ferramenta javadoc e produzir pginas de documentao em HTML. Operadores Operadores Aritmticos Operador + * / % Descrio Adio Subtrao Multiplicao Diviso Resto da diviso

Operadores de Incremento e decremento Operador ++ -Descrio Incremento unitrio (adiciona uma unidade) Decremento unitrio (subtrai uma unidade)

Obs1.: Se usado como prefixo (antes da varivel), a operao realizada antes do uso do valor da varivel. Exemplo: int a=1,b; b=++a;// b recebe 2, a passa a valer 2. Obs 2.: Se usado como sufixo (depois da varivel), a operao realizada depois do uso do valor da varivel. Exemplo: int a=1,b; b=a++;//b recebe 1, a passa a valer 2;

Escola Tcnica de Braslia

Java e POO

Operadores Relacionais Operador == != > >= < <= Descrio Igual Diferente Maior que Maior ou igual a Menor que Menor ou igual a

Obs 1.: O operador de igualdade == no deve ser confundido com o operador de atribuio =. Obs 2.: No podem ser usados para comparar strings (literal). Operadores Lgicos Operador && || ! Descrio E lgico (and) Ou lgico (or) Negao (not) Operador Ternrio um valor simples que permite usar o valor de duas expresses diferentes conforme o resultado da condio. Sua sintaxe : <cond>?<expresso_se_verdadeiro>:<expresso_se_falso> Se a expresso cond verdadeira, retornado o resultado de expresso_se_verdadeiro, seno retornado o resultado de expresso_se_falso. Operadores de atribuio compostos Expresses assim: varivel = varivel operador expresso a=a+1; Podem ser escritas assim: varivel operador = expresso a+=1; Operador Descrio += Soma e atribui -= Subtrai e atribui += Multiplica e atribui /= Divide e atribui %= Calcula o resto e atribui

Escola Tcnica de Braslia

Java e POO

Precedncia dos operadores So as regras que determinam a ordem com que os diferentes operadores sero processados nas expresses: Nvel Operadores 1 () 2 ++ - 3 */% 4 +5 == ! = 6 && 7 || 8 ?: 9 = += - + *= /= %= Obs .: Parnteses so usados para alterar a ordem natural das expresses. Variveis A declarao de variveis em Java requer um tipo de dados, um nome (identificador) e, opcionalmente, um valor inicial. Exemplo: int a; Uma constante, ou varivel constante, uma varivel com um valor que nunca muda. Para declarar uma constante, use a palavra-chave final antes da declarao da varivel e inclua um valor inicial para essa varivel, como a seguir: final Double PI=3.141592; final boolean DEBUG = false; final int voltas=25; Tipos de dados primitivos: Definem o conjunto de valores que podem ser armazenados em uma varivel e tambm as operaes sobre seus valores. A linguagem Java possui oito tipos primitivos de dados: Descrio Byte Inteiros positivos e negatibos Short Inteiros positivos e negativos Int Inteiros positivos e negativos Long Inteiros positivos e negativos Float Valores em ponto flutuante Double Valores em ponto flutuante Char Caracteres individuais Boolean Tipo lgico, s assume false ou true Obs.: String uma classe em Java. Tipo Tamanho 1 2 4 8 4 8 Intervalo -128 a + 127 -32.768 a +32.767 -2.147.483.648 a 2.147.483.647 -2^64 a +2^64-1 1.40239846E-45 a 3.40282347E+38 4.9406564E-324 a 1.79769313E+308 -

Escola Tcnica de Braslia

Java e POO

Explicando um cdigo-fonte passo-a-passo Exemplo 2: Classe Oi! comentada public class Oi{ public static void main(String args[]){ System.out.println(Oi!); } } a) public um especificador do mtodo que indica que este acessvel externamente a esta classe (para outras classes que eventualmente seriam criadas). b) class a palavra reservada que marca o incio da declarao de uma classe. c) static qualificador ou specifier, que indica que o mtodo deve ser compartilhado por todos os objetos que so criados a partir desta classe. Os mtodos static podem ser invocados, mesmo quando no foi criado nenhum objeto para a classe. d) void o valor de retorno da funo, quando a funo no retorna nenhum valor ela retorna void, uma espcie de valor vazio que tem ser especificado. e) main este um nome particular de mtodo que indica para o compilador o incio do programa. dentro deste mtodo e atravs das iteraes entre os atributos, variveis e argumento visveis nele que o programa se desenvolve. f) (String args[]) argumento do mtodo main, ele um vetor de strings que formado quando so passados ou no argumentos atravs da invocao do nome do programa na linha de comando do sistema. g) System.out.pritln chamada do mtodo println para o atributo out da classe System, o argumento uma constante do tipo String, para imprimir a cadeia Oi! e posicionar o cursor na linha abaixo. Exemplo 3: Operadores import javax.swing.JOptionPane; public class Operadores { public static void main(String[] args) { /* declarando e inicializando 3 variveis inteiras */ int i1 = 7; int i2 = 3; int i3; i3 = i1 + i2; // adio i3 = i1 - i2; // subtrao i3 = i1 * i2; // multiplicao i3 = i1 / i2; // diviso inteira, pois n1 e n2 so do tipo int i3 = i1 % i2; // resto da diviso inteira /* declarando e inicializando 3 variveis float */ float f1 = 12.8f; // converso explcita para float float f2 = 6.4f; float f3; f3 = i1 * f2; // converso implcita para float f3 = f2 / i2; // diviso float, pois o numerador float f3++; // incremento f3--; // decremento f1 = ++f2 + f3; //a varivel i2 ser incrementada antes da atribuio f1 = f2++ + f3; //a varivel i2 ser incrementada aps a atribuio /* Operador relacional */ System.out.println( f1 > f2 ? f1 : f2 ); System.out.println( "f1 = " + f1 );

10

Escola Tcnica de Braslia

Java e POO

System.out.println( "f2 = " + f2 ); /* Calculo do preo de venda um produto baseado no preo de compra e e no percentual de lucro */ float preoCompra; float percentualLucro; System.out.print( "Preo de Compra : " ); preoCompra = Float.parseFloat(JOptionPane.showInputDialog("Digite o valor de compra")); System.out.print("Percentual de Lucro : "); percentualLucro = Float.parseFloat(JOptionPane.showInputDialog("Digite o percentual de lucro")); float lucro = preoCompra * (percentualLucro/100); float preoVenda = preoCompra + lucro; System.out.println("Preo de Compra : " + preoCompra + "\nPercentual de Lucro : " + percentualLucro + "\nLucro : " + lucro + "\nPreo de Venda : " + preoVenda); int i = 10; System.out.println( i = i << 1; System.out.println( i = i >> 2; System.out.println( int a = 5; int b = 10; int c = a | b; int d = a & b; System.out.println( } }

" i " + i ); " i " + i ); " i " + i );

"a = " + a + "\nb = " + b + "\nc = " + c + "\nd = " + d);

11

Escola Tcnica de Braslia

Java e POO

JOptionPane
A classe JOptionPane oferece vrios mtodos que podem ser usados para criar caixas de dilogos padro. As quatro caixas de dilogo padro so os seguintes: ConfirmDialog Faz uma pergunta, com botes para respostas Yes/No/Cancel. InputDialog Pedidos de entrada de texto. MessageDialog Apresenta uma mensagem. OptionDialog Compreende todos os trs outros tipos de caixa de dilogo. Se configurarmos um estilo para usar com qualquer uma dessas caixas, deveremos estabelecer antes que a mesma seja aberta. Inicialmente, estudaremos apenas as caixas de entrada e sada. CAIXAS DE DILOGO DE ENTRADA Uma caixa de dilogo de entrada faz uma pergunta e usa um campo de texto para armazenar a resposta. O modo mais fcil de criar uma caixa de dilogo de entrada com uma chamada ao mtodo showInputDialog(Componente, Objeto). Os argumentos so o componente pai e a string, o componente ou o cone a exibir a caixa. A chamada de mtodo da caixa de dilogo de entrada retorna uma string que representa a resposta do usurio. Exemplo: String resposta = JOptionPane.showInputDialog(null, Entre com o seu nome:); Podemos criar uma caixa de dilogo de entrada com o mtodo showInputDialog (Componente, Objeto, String, int). Os dois ltimos argumentos so: O ttulo a exibir na barra de ttulo da caixa de dilogo. Uma das cinco constantes de classe descrevendo o tipo de caixa de dilogo: ERROR_MESSAGE, INFORMATION_MESSAGE, PLAIN_MESSAGE, QUESTION_MESSAGE, ou WARNING_MESSAGE. Exemplo: String resposta = JOptionPane.showInputDialog(null, Qual o seu CEP?, Entre com o CEP, JOptionPane.QUESTION_MESSAGE); CAIXAS DE DILOGO DE MENSAGEM uma janela simples, que mostra informaes para tanto invocamos o mtodo showMessageDialog (Componente, Objeto). Exemplo: JOptionPane.showMessageDialog(null, O programa foi desinstalado); Podemos utilizar tambm o mtodo showMessageDialog (Componente, Objeto, String, int). Exemplo: JOptionPane.showMessageDialog(null, Um asteride ir destruir a Terra., Alerta de destruio, JOptionPane.WARNING_MESSAGE);

12

Escola Tcnica de Braslia

Java e POO

Exemplo 4: JOptionPane- showMessageDialog e showInputDialog import javax.swing.JOptionPane; public class EntradaString{ public static void main(String args[]){ String s= JOptionPane.showInputDialog(Digite um texto); JOptionPane.showMessageDialog(null,s); } } a) import javax.swing.JOptionPane Importao da classe grfica(swing) JOptionPane do pacote extendido de Java(javax). Necessrio para utilizao da classe que no est no pacote nativo de Java. Obs. 1: Tudo aquilo que se digita em uma janela da classe JOptionPane.showInputDialog tratado como uma String em Java. Obs 2.: Geralmente para utilizarmos um mtodo em Java podemos: a) Classe.mtodo; Exemplo: JOptionPane.showInputDialog. b) Classe.atributo.mtodo; Exemplo: System.out.println c) Objeto.mtodo. Exemplo: janela.setVisible(true); WRAPPER CLASS Existem classes especiais para cada um dos tipos primitivos, sua funo dotar cada tipo com mtodos para que possamos resolver problemas do tipo: Como converter um objeto String para o tipo primitivo int? O mtodo principal o parseTipo. Exemplos: byte a = Byte.parseByte(1); short b=Short.parseShort(1); int c=Integer.parseInt(1); long d=Long.parseLong(1); float e= Float.parseFloat(1); double f= Double.parseDouble(1); Exemplo 5: Wrapper class import javax.swing.JOptionPane; public class Soma{ public static void main(String args[]){ String numero1, numero2; float n1, n2, resultado; numero1=JOptionPane.showInputDialog(Digite o primeiro nmero:); nmero2=JOptionPane.showInputDialog(Digite o segundo nmero); n1=Float.parseFloat(numero1); n2=Float.parseFloat(numero2); resultado=n1+n2; JOptionPane.showMessageDialog(null,Resultado:+resultado); } }

13

Escola Tcnica de Braslia

Java e POO

Lista 1 1) Em pocas de pouco dinheiro, os comerciantes esto procurando aumentar suas vendas oferecendo desconto. Faa um algoritmo que possa entrar com o valor de um produto e imprima o novo valor tendo em vista que o desconto foi de 9%. 2) Criar um algoritmo que efetue o clculo do salrio liquido de um professor. Os dados fornecidos sero: valor da hora aula, nmero de aulas dadas no ms e percentual de desconto do INSS. 3) Calcular e apresentar o valor do volume de uma lata de leo, utilizando a frmula: volume: 3.14159*r2* altura. 4) Efetuar o clculo da quantidade de litros de combustvel gastos em uma viagem, sabendo-se que o carro faz 12 km com um litro. Devero ser fornecidos o tempo gasto na viagem e a velocidade mdia. Utilizar as seguintes frmulas: distncia = tempo * velocidade litros usados = distancia /12

14

Escola Tcnica de Braslia

Java e POO

PARTE 2 Principais Estruturas da Linguagem Java

15

Escola Tcnica de Braslia

Java e POO

ESTRUTURAS CONDICIONAIS IF Um dos principaris aspectos da programao a capacidade de um programa de decidir o que ele far. Isso tratado por um tipo especial de instruo, chamada condicional. Um condicional uma instruo de programao executada apenas se uma condio especfica for atendida. A condicional mais bsica a palavra-chave if. A condicional if usa uma expresso Booleana para decidir se uma instruo deve ser executada. Se a expresso retornar um valor true, a instruo ser executada. Exemplo: if(temperatura >38) System.out.println(Voc est com febre); Se quisermos que algo mais acontea no caso em que a expresso if retorna um valor false, ento uma palavra-chave else opcional poder ser usada. Exemplo: if(temperatura>38) System.out.println(Voc est com febre); else Sytem.out.println(Sua temperatura est normal); Usando if, possvel incluir apenas uma nica instruo como cdigo para executar se a expresso de teste for verdadeira, e outra instruo se a expresso for falsa. Podemos testar uma varivel em relao a algum valor e, se ele no combinar, test-lo novamente com um valor diferente. Exemplo: if(operacao == +) soma(objeto1, objeto2); else if (operacao == -) subtracao(objeto1,objeto2); else if (operacao == *) multiplicacao(objeto1,objeto2); else if (operacao == /) divicao(objeto1,objeto2); Esse uso das instrues if chamado instruo if aninhada, pois cada instruo else contm outro if, at que todos os testes possveis tenham sido feitos. Lista 2 1) 2) 3) 4) Ler um nmero e se ele for maior do que 20, ento imprimir a metade do nmero. Ler um nmero e imprimir se ele par ou mpar Ler um nmero e imprimir se ele positivo, negativo ou nulo. Construir um algoritmo que leia dois nmeros e efetue a adio. Caso o valor somado seja maior que 20, este dever ser apresentado somando-se a ele mais 8; caso o valor somado seja menor ou igual a 20, este dever ser apresentado subtraindo-se 5. Entrar com um nmero e imprimir a raiz quadrada do nmero caso ele seja positivo e o quadrado do nmero caso ele seja negativo. Entrar com um nmero e informar se ele divisvel por 3 e por 7. Entrar com um nmero e informar se ele divisvel por 10, por 5, por 2 ou se no divisvel por nenhum destes. A prefeitura do Rio de Janeiro abriu uma linha de crdito para os funcionrios estatutrios. O valor mximo da prestao no poder ultrapassar 30% do salrio bruto. Fazer um algoritmo que permita entrar com o salrio bruto e o valor da prestao e informar se o emprstimo pode ou no ser concedido.

5) 6) 7) 8)

16

Escola Tcnica de Braslia

Java e POO

9) Entrar com nome, nota da PR1 e nota da PR2 de um aluno. Imprimir nome, nota da PR1, nota da PR2, mdia e uma das mensagens: Aprovado, Reprovado ou Prova Final (a mdia 7 para aprovao, menor que 3 para reprovao e as demais em prova final). 10) Entrar com o salrio de uma pessoa e imprimir o desconto do INSS segundo a tabela a seguir: menor ou igual a R$ 600 isento maior que R$ 600 e menor ou igual a R$ 1200 20% maior que R$ 1200 e menor ou igual a R$ 2000 25% maior que R$ 2000 30% 11) Segundo uma tabela mdica, o peso ideal est relacionado com a altura e o sexo. Fazer um algoritmo que receba a altura e o sexo de uma pessoa, calcular e imprimir o seu peso ideal, utilizando as seguintes frmulas: para homens - (72.7 * h) - 58 para mulheres - (62.1 * h) - 44.7 Utilize o mtodo showOptionPane da classe JOptionPane para dar entrada no campo de sexo

17

Escola Tcnica de Braslia

Java e POO

Switch Em Java podemos agrupar aes com a instruo switch. Esta instruo baseada em um valor da varivel que pode ser qualquer um dos tipos primitivos char, byte, short ou int, que comparada com cada um dos valores de case. Se houver uma combinao, a instruo ou as instrues aps o teste sero executadas. Se nenhuma combinao for encontrada, a instruo ou instrues default sero executadas. O fornecimento de uma instruo default opcional se ela for omitida e no houver combinao para qualquer uma das instrues case, a instruo switch ser completada sem qualquer execuo. A implementao Java de switch limitada: os testes e os valores s podem ser tipos primitivos simples, que podem ser convertidos para um int; no se pode usar tipos primitivos maiores, como um long ou float, strings ou outros objetos dentro de um switch, no se pode testar qualquer relacionamento alm da igualdade. Estas restries limitam switch as casos mais simples. Ao contrrio de if aninhadas funcionam para qualquer tipo de teste em qualquer tipo possvel. Exemplo: switch(operation){ case +: soma(objeto1, objeto2); break; case *: subtracao(objeto1, objeto2); break; case -: multiplicacao(objeto1, objeto2); break; case +: divisao(objeto1, objeto2); break; } Exemplo: Ler um nmero inteiro entre 1 e 12 e escrever o ms correspondente. Caso o usurio digite um nmero fora desse intervalo, dever aparecer uma mensagem informando que no existe ms com este nmero. import javax.swing.*; public class Algoritmo138{ public static void main(String args[]){ int mes; mes=Integer.parseInt(JOptionPane.showInputDialog("Digite nmero do ms 1-12")); switch(mes){ case 1: JOptionPane.showMessageDialog(null,"Janeiro");break; case 2: JOptionPane.showMessageDialog(null,"Fevereiro");break; case 3: JOptionPane.showMessageDialog(null,"Maro");break; case 4: JOptionPane.showMessageDialog(null,"Abril");break; case 5: JOptionPane.showMessageDialog(null,"Maio");break;

18

Escola Tcnica de Braslia

Java e POO

case 6: JOptionPane.showMessageDialog(null,"Junho");break; case 7: JOptionPane.showMessageDialog(null,"Julho");break; case 8: JOptionPane.showMessageDialog(null,"Agosto");break; case 9: JOptionPane.showMessageDialog(null,"Setembro");break; case 10: JOptionPane.showMessageDialog(null,"Outubro");break; case 11: JOptionPane.showMessageDialog(null,"Novembro");break; case 12: JOptionPane.showMessageDialog(null,"Dezembro");break; default: JOptionPane.showMessageDialog(null,"No existe ms correspondente para este nmero"); } } } ESTRUTURAS DE REPETIO FOR Um loop for usado para repetir uma instruo at que uma condio seja atendida. Embora os loops for sejam constantemente utilizados para a iterao simples, em que uma instruo repetida por um certo nmero de vezes, os loops for podem ser usados para quase qualquer tipo de loop. O loop for em Java possui o seguinte formato: for(inicializao; condio;incremento){ instruo; } O incio do loop for possui trs partes: Inicializao- expresso que inicializa o incio do loop. Se voc tiver um ndice de loop, essa expresso poderia declar-lo e incializ-lo, como em int i=0. As variveis declaradas nessa parte do loop for so locais ao prprio loop; elas deixam de existir depois que o loop terminar sua execuo. Podemos inicializar mais de uma varivel nesta seo, separando cada expresso com uma vrgula. A instruo int i=0, int j=10 nesta seo declararia as variveis i e j, e ambas seriam locais ao loop. Condio teste que ocorre de cada passada do loop. O teste precisa ser uma expresso Booleana ou uma funo que retorne um valor boolean, como i<50. Se a conido for true, o loop executado. Quando a condio for false, o loop deixa de ser executado. Incremento qualquer expresso ou chamada de mtodo. Normalmente, o incremento usado para alterar o valor do ndice do loop, para trazer o estado do loop para mais perto de retornar false e encerrar o loop. O incremento ocorre depois de cada passada do loop. Pode-se colocar mis de uma expresso nesta seo, separando cada expresso com uma vrgula. Exemplo: for(int i=0; i<10;i++) System.out.println(Nmero: +i); Imprime todos os nmeros de zero a dez. Obs.: qualquer parte do loop for pode ser uma instruo vazia; em outras palavras, voc pode incluir um pontoe-vrgula sem expresso ou instruo, e essa parte do loop for ser ignorada.

19

Escola Tcnica de Braslia

Java e POO

Obs.: se utilizada uma instruo vazia no loop for, teremos que inicializar ou incrementar quaisquer variveis de loop ou ndices de loop em qualquer outro lugar no programa. Podemos ter uma instruo vazia como corpo do seu loop for, se tudo o que quiser fazer estiver na primeira linha desse loop. Exemplo: for(i=4001;notPrime(i);i+=2); Encontra o primeiro nmero primo maior do que 4000. Emprega um mtodo chamado notPrime(), que retorna um valor Booleano, que dever indicar se i primo ou no. WHILE usado para repetir uma instruo se uma determinada condio for true. Exemplo: while(i<10){ x=x*i++; } A condio do while uma expresso Booleana. Se a expresso for true, o loop while executar o corpo do loop e depois testar a condio novamente. Esse processo se repete at que a condio seja false. Embora o loop apresentado utilize chaves de abertura e fechamento para tornar uma instruo em bloco, as chaves no so necessrias, pois o loop contm apenas uma instruo: x=x*i++. O uso das chaves no cria quaisquer problemas, e as chaves sero exigidas se voc acrescentar outra instruo dentro do loop depois. DO WHILE O loop do exatamente como um loop while com uma diferena principal o lugar no loop em que a condio testada. Um loop while testa a condio antes do looping, de modo que, se a condio for false na primeira vez que for testada, o corpo do loop nunca ser executado. Um loop do executa o corpo do loop pelo menos uma vez antes de testar a condio, de modo que, se a condio for false na primeira vez em que for testada, o corpo do loop j teria sido executado uma vez. Exemplo: do{ i*=2; System.out.println(i+ ); }while (1<100); BREAK E CONTINUE O comando break usado para interromper a execuo de um dos laos de iterao vistos acima ou de um comando switch. Este comando comumente utilizado para produzir a parada de um lao mediante a ocorrncia de alguma condio especfica, antes da chegada do final natural do lao. Exemplo: // Achar i tal que v[i] negativo for(i=0; i<n;i++) if(v[i] <0) break; if(i == n) system.out.println("elemento negativo no encontrado."); E se isto se der dentro de um lao duplo? Nesse caso, o comando break provocar a interrupo apenas do lao em que o comando imediatamente subjacente. Os outros laos continuam normalmente. O comando continue tem a funo de pular direto para final do lao, mas em vez de interromper o lao como no break, ele continua executando o prximo passo do lao. O uso de continue pouco usual na programao estruturada.

20

Escola Tcnica de Braslia

Java e POO

Lista - 3 Estruturas repetio 1) 2) 3) 4) 5) 6) 7) 8) Criar um algoritmo que entre com cinco nmeros e imprimir o quadrado de cada nmero. Criar um algoritmo que imprima todos os nmeros pares no intervalo 1-10. Imprimir todos os nmeros de 1 at 100. Imprimir todos os nmeros de 100 at 1. Imprimir os mltiplos de 5, no intervalo de 1 at 500. Criar um algoritmo que imprima todos os nmeros de 1 at 100 e a soma deles. Entrar com 10 nmeros e imprimir o quadrado de cada nmero. Entrar com 15 nmeros e imprimir a raiz quadrada de cada nmero. Faa somente raiz de nmeros positivos. 9) Criar um algoritmo que leia um nmero e imprima seu produto. Exemplo: nmero: 3 Sada: 1 2 3 10) Criar um algoritmo que leia um nmero e imprima a soma dos nmeros mltiplos de 5 no intervalo entre 1 e num. Suponha que num ser maior que zero. 11) Criar um algoritmo que leia um nmero de entrada (num), leia n nmeros inteiros da entrada e imprima o maior deles. No suponha que todos os nmeros lidos sero positivos. 12) Criar um algoritmo que leia a quantidade de nmeros que se deseja digitar para que possa ser impresso o maior e o menor nmero digitado. No suponha que todos os nmeros lidos sero positivos. 13) Entrar com nome, nota da PR1 e nota da PR2 de 5 alunos. Imprimir uma listagem, contendo: nome, nota da PR1, nota da PR2 e mdia de cada aluno. Ao final, calcule a mdia geral da turma. 14) Entrar com 5 nmeros e imprimir a soma dos positivos e o total de nmeros negativos. 15) Criar um algoritmo que entre com 5 notas de cada aluno de uma turma de 10 alunos e imprima: a mdia de cada aluno a mdia da turma o percentual de alunos que tiveram mdias maiores ou iguais a 5 16) Uma escola tem 5 turmas e cada turma tem n alunos. Criar um algoritmo que imprima, por turma, o total de alunos com mdia superior a 7 e a mdia geral da escola.

21

Escola Tcnica de Braslia

Java e POO

Lista - 4 Estruturas repetio(while e do while) 1) Entrar com nmeros e imprimir o triplo de cada nmero. O algoritmo acaba quando entrar com o nmero -999 2) Entrar com nmeros enquanto forem positivos e imprimir quantos nmeros foram digitados. 3) Entrar com nmeros e imprimir o quadrado de cada nmero at entrar um nmero mltiplo de 6 que dever ter seu quadrado tambm impresso. 4) Chico tem 1,50 e cresce 2 centmetros por ano, enquanto Juca tem 1,10m e cresce 7 centmetros por ano. Construir um algoritmo que calcule e imprima quantos anos sero necessrios para que Juca seja maior que Chico 5) Crie um algoritmo que entre com vrios nmeros inteiros e positivos e imprima a mdia dos nmeros mltiplos de 3. 6) Uma das maneiras de se conseguir a raiz quadrada de um nmero subtrair do nmero os mpares consecutivos a partir de 1, at que o resultado da subtrao seja menor ou igual a zero. O nmero de vezes que se conseguir fazer a subtrao a raiz quadrada exata(resultado 0) ou aproximada do nmero(resultado negativo). Exemplo: Raiz de 16 16-1=15-3=12-5=7-7=0 4

22

Escola Tcnica de Braslia

Java e POO

PARTE 3 Funes Matemticas, Funes de String, Formatao de nmeros e de data/hora

23

Escola Tcnica de Braslia

Java e POO

FUNES MATEMTICAS A linguagem Java possui uma classe com diversos mtodos especializados em realizar clculos matemticos. Para realizar esses clculos, so utilizados os mtodos da classe Math que devem apresentar a seguinte sintaxe: Math.<nome do mtodo>(argumentos ou lista de argumentos) No necessrio importar a classe Math, pois o mesmo faz parte do pacote java.lang A classe Math define duas constantes matemticas: o Math.PI valor de pi (3,14159265358979323846) o Math.E logaritmos naturais (2.7182818284590452354) Mtodo ceil Tem como funo realizar o arredondamento de um nmero do tipo double para o seu prximo inteiro. Sua sintaxe a seguinte: Math.ceil(<valor do tipo double>) Mtodo floor utilizado para arredondar um determinado nmero, mas para seu inteiro anterior. Sua sintaxe : Math.floor(<valor do tipo double>); Mtodo max Utilizado para verificar o maior valor entre dois nmeros, que podem ser do tipo double, float, int ou long. A sua sintaxe a seguinte: Math.max(<valor1>,<valor2>); Mtodo min Fornece o resultado contrrio do mtodo max, sendo ento utilizado para obter o valor mnimo entre dois nmeros. Do mesmo modo que o mtodo max, esses nmeros tambm podem ser do tipo double, float, int ou long. A sua sintaxe a mesma do mtodo max mudando apenas para Math.min Mtodo sqrt Utilizado quando h necessidade de calcular a raiz quadrada de um determinado nmero. O nmero que se deseja extrair a raiz deve ser do tipo double. Veja sua sintaxe: Math.sqrt(<valor do tipo double>); Mtodo pow Assim como possvel extrair a raiz quadrada de um nmero, tambm possvel fazer a operao inversa, ou seja, elevar um determinado nmero ao quadrado ou a qualquer outro valor de potncia. Os nmeros utilizados devero ser do tipo double. Sua sintaxe a seguinte: Math.pow(<valor da base>.<valor da potncia>); Mtodo random utilizado para gerar valores de forma aleatria. Toda vez que o mtodo random chamado, ser sorteado um valor do tipo double entre 0.0 e 1.0 (o valor 1 nunca sorteado). Nem sempre essa faixa de valores suficiente numa aplicao real. Exemplo: (int) (Math.random()*100) Com isso seriam gerados nmeros inteiros entre 0 e 99

FUNES COM STRING 24

Escola Tcnica de Braslia

Java e POO

Mtodo length O mtodo length utilizado para retornar o tamanho de uma determinada string, incluindo tambm os espaos em branco presentes nela. Esse mtodo retorna sempre um valor do tipo int. Veja sua sintaxe: <String>.length(); Mtodo charAt Usado para retornar um caractere de uma determinada string de acordo com um ndice especificado entre parnteses. Esse ndice refere-se posio do caractere na string, sendo 0 o ndice do primeiro caractere. Sintaxe do mtodo charAt a seguinte: <String>.charAt(<ndice>); Mtodos toUpperCase e toLowerCase So utilizados para transformar todas as letras de uma determinada string em maisculas ou minsculas. O mtodo toUpperCase transforma todos os caracteres de uma string em maisculos O mtodo toLowerCase transforma todos os caracteres de uma string em minsculos Sua sintaxe a seguinte: <String>.toUpperCase() ou <String>.toLowerCase() Mtodo substring Retorna um cpia de caracteres de uma string a partir de dois ndices inteiros especificados, funcionando basicamente da mesma forma que o mtodo charAt dentro de um lopping. A sintaxe da substring a seguinte: <String>.substring(<ndice inicial>,[<ndice final>] Mtodo trim Seu objetivo remover todos os espaos em branco que aparecem no incio e no final de uma determinada string. Sero removidos apenas os espaos do incio e do fim da string; no sero removidos os espaos entre as palavras. Sua sintaxe a seguinte: <String>.trim(); Mtodo replace utilizado para substituio de caracteres, ou grupo de caracteres, em uma determinada string. Para seu funcionamento necessrio informar o(s) caractere(s) que deseja(m) substituir e por qual(is) caractere(s) ele ser(o) substitudo(s). Caso no haja na string nenhuma ocorrncia do caractere a ser substitudo, a string original retornada, isto , no ocorre nenhuma alterao.Veja sua sintaxe: <String>.replace(<caracteres a serem substitudos>, <substituio>) Mtodo valueOf usado para converter diversos tipos de dados em strings. Esse mtodo aceita vrios tipos de argumento (nmeros ou cadeia de caracteres) e transforma-os em strings. Sintaxe: String.valueOf(<nome da varivel a ser convertida>) Mtodo indexOf usado para localizar caracteres ou substrings em uma String. Quando realizamos a busca de uma palavra em um texto, estamos usando algo parecido com o funcionamento de indexOf, isto , ele busca uma palavra e retorna a posio onde ela se encontra. Caso haja sucesso na busca, retornado um nmero inteiro referente a posio do texto onde o caractere foi encontrado, ou a posio do texto onde se inicia a substring localizada. Casa haja insucesso na busca retornado o valor inteiro -1. A sintaxe : String.indexOf(<caractere ou substring a ser localizada, [posio inicial]>)

FORMATAO COM A CLASSE DECIMALFORMAT

25

Escola Tcnica de Braslia

Java e POO

Os clculos matemticos, em especial os que envolvem multiplicao e diviso, podem gerar resultados com muitas casas decimais.Isso nem sempre necessrio e esteticamente correto, pois apresentar um resultado com muitas casas decimais no muito agradvel e legvel maioria dos usurios. Por exemplo: considere duas variveis do tipo double x=1 e y=6. Ao realizar a diviso de x por y, aparece na tela o resultado 0.16666666666666666. Esse resultado no o mais adequado para se apresentar. Seria mais conveniente mostrar o resultado com duas ou trs casas decimais. Para realizar a formatao, necessrio definir um modelo de formatao, conhecido pelo nome de pattern. Considere pattern como o estilo de formatao que ser apresentado sobre um valor nmerico. Para definir o pattern, so usados caracteres especiais Caractere Significado 0 Imprime o digito normalmente, ou caso ele no exista, coloca 0 em seu lugar. Exemplo: Seja as variveis int x=4, y=32 e z=154, ao usar o pattern 000, o resultado impresso na tela seria x004, y032 e z154 # Imprime o digito normalmente, desprezando os zeros esquerda do nmero. Exemplo: Sejam as variveis double x=0,4 e y=01.34, ao usar o pattern ##.##, o resultado impresso na tela seria x.4, y1.34 . Separador decimal ou separador decimal monetrio Sinal de nmero negativo CLASSE LOCALE A linguagem Java tem como caracterstica ser utilizada no mundo todo. Em funo disso, um mesmo software feito em Java pode ser utilizado por usurios espalhados pelo globo. Cada pas ou regio adota certos formatos para representao monetria, apresentao de datas,etc. esses formatos so definidos pelo sistema operacional da mquina e ficam armazenados como configuraes locais. O separador de casas decimais, por exemplo, pode ser um ponto ou uma vrgula, dependendo da regio. A classe Locale permite identificar certas propriedades da mquina em que o software est sendo executado. Lista 5 Funes Matemticas e de String Formatao com a classe DecimalFormat 1) Crie uma classe para fazer o arredondamento dos seguintes valores: 5.2, 5.6 e -5.8 para o valor inteiro mais prximo. 2) Crie uma classe para fazer o arredondamento dos seguintes valores: 5.2, 5.6 e -5.8 para o valor inteiro anterior. 3) Crie uma classe para calcular o maior entre dois nmeros. 4) Crie uma classe para calcular o menor entre dois nmeros. 5) Crie uma classe para calcular a raiz quadrada dos nmeros 900 e 30.25. 6) Crie uma classe para calcular a potncia de 5.5 elevado a 2 e 25 elevado a 0.5. 7) Crie uma classe que gere 5 cartes de loteria com seis nmeros em cada um. 8) Formate os valores como se pede: o Idade 38 para 038; o Quantidade 9750 para 9.750; o Estoque 198564 para 198.564 o Altura 1,74f para 1,74 o Peso 7025 para 70,25 o Valor 2583.75 para R$ 2.583,75

26

Escola Tcnica de Braslia

Java e POO

9) Crie uma classe utilize os seguintes mtodos existentes da classe Locale: getCountry(); getDisplayCountry(); getDisplayLanguage(); getDisplayName();

10) Crie uma classe para obter o tamanho da frase: Aprendendo Java. 11) Crie uma classe para obter os carateres de 11 a 14 da frase: Aprendendo Java. 12) Coloque a palavra ARROZ em minscula, a palavra batata em maiscula e a palavra SaLaDa em minscula. 13) Crie uma classe que retorne trechos de caracteres definidos por intervalos pr-determinados. 14) Crie um programa que retire espaos em branco antes e depois de uma frase digitada pelo usurio. 15) Crie uma classe que utilize um mtodo para substituir o caracter a por u e o carater n por N e trocar os espaos em branco por _ de uma frase digitada pelo usurio. 16) Crie uma classe que converta valores nmeros para string. 17) Crie uma classe que realize uma busca pelo caractere a. DATA/HORA Os recursos de data e hora devem ser suficientemente flexveis. O uso de datas e horas torna possvel a criao de pginas que exibem informaes de maneira dinmica. Existem 11 classes diferentes para manipulao de datas e horas. As classes disponveis para a manipulao de data e hora pertencem a trs pacotes diferentes java.util Date, Calendar, GregorianCalendar, TimeZone, SimpleTimeZone java.text DateFormat, SimpleDateFormat, FormatSymbols java.sql Date, Time, Timestamp A classe Date existe em dois pacotes (util e sql), ambos com caractersticas e comportamentos diferentes A diferena bsica entre as classes Date, DateFormat, SimpleDateFormat e Calendar a seguinte: Date (pacote util) representa um instante de tempo, sem levar em considerao sua representao ou localizao geogrfica, com preciso de milisegundos DateFormat representa um data com formato String de acordo com um determinado fuso horrio e calendrio SimpleDateFormat permite a especificao de diferentes formatos para a data Calendar representar um instante de tempo de acordo com um sistema particular de calendrio e fuso horrio CLASSE DATE Para utilizar uma classe externa, necessrio que ela esteja na mesma pasta da aplicao ou fazemos sua importao import java.util.Date; O compilador compreende que data ser um objeto declarado a partir da classe Date Date data = new Date( ); Essa declarao indica que o objeto data ser inicializado com a data e hora atuais do sistema(default) Para marcar o tempo, Java considera o nmero de milisegundos decorridos desde 1 de janeiro de 1970. Cada segundo possui 1.000 milisegundos, cada minuto possui 60 segundos, cada hora possui 60 minutos e cada dia possui 24 horas, para saber o correspondente em dias, basta multiplicar 1000 x 60 x 60 x 24 getTime() Esse mtodo retorna um inteiro do tipo long que permite representar milissegundos decorridos O uso de getTime() permite realizar o clculo entre datas, bastando calcular a diferena entre os milissegundos

CLASSE DATEFORMAT

27

Escola Tcnica de Braslia

Java e POO

A classe Date no fornece um mecanismo de controle sobre a formatao de uma data e no permite converter uma string contendo informaes sobre uma data em um objeto Date A classe DateFormat permite apresentar a data com diferentes formataes, dependendo das necessidades de utilizao, tornando sua visualizao mais agradvel aos usurios A classe DateFormat pode criar uma data a partir de uma string fornecida Ao criar um objeto a partir de uma classe DateFormat, ele conter informao a respeito de um formato particular no qual a data ser apresentada O mtodo getDateInstance tem a seguinte sintaxe: getDateInstance( int estilo) Ao invocar o mtodo, deve ser passado um nmero inteiro que define o estilo de formatao Mtodos mais utilizados da classe DateFormat: Format(Date d) formata a data em uma string de acordo com o estilo utilizado. Retorna uma String getInstance() Retorna uma data e hora de acordo com o estilo SHORT. Retorna um DateFormat getDateInstance() Retorna uma data de acordo com o estilo de formatao local. Retorna um DateFormat getTimeInstance() Retorna um horrio de acordo com o estilo de formatao local. Retorna um DateFormat parse(String s) Converte a string em tipo Date. Retorna um Date CLASSE SIMPLEDATEFORMAT Permite criar formatos alternativos para a formatao de datas e horas Em orientao a objeto dizemos que SimpleDateFormat extends DateFormat Deve-se recorrer ao uso de um pattern para criar o prprio formato de data/hora Principais letras para criao de patterns: G designador de era. Formato texto. Exemplo: AD Y ano. Formato Year. Exemplo: 2005;05 M ms do ano. Formato Month. Exemplo: Jul;07 W semana do ano. Formato Number. Exemplo: 15 W semana do ms. Formato Number. Exemplo: 3 D dia do ano. Formato Number. Ex.: 234 D dia do ms. Formato Number. Ex.: 5 F dia da semana no ms. Formato Number. Ex.: 2 E dia da semana. Formato Text. Ex.: Sex A am/pm. Formato Texto. Ex.: PM H hora do dia(0-23). Formato Number. Ex.: 0 K hora do dia(1-24). Formato Number. Ex.: 23 K hora em am/pm(0-11). Formato Number. Ex.: 2 H hora em am/pm(1-12). Formato Number. Ex.: 5 M minuto da hora. Formato Number. Ex.: 10 S segundo do minuto. Formato Number. Ex.: 30 S milissegundos. Formato Number. Ex.: 978 Mtodos mais utilizados da classe SimpleDateFormat applyPattern(String p) Aplica um pattern data conforme definido na String p. Retorna void toPattern() Fornece o pattern que est sendo usado no formato de data. Retorna uma String CLASSE CALENDAR Oferece mecanismos adequados para realizao de clculos com datas ou para identificao das propriedades de uma data. A classe Calendar converte um tipo Date armazenado nela em um srie de campos Possui mtodos para recuper(get) ou para armazenar(set) os valores correspondentes a datas e horas, atravs de um argumento fornecido que identifica o campo a ser manipulado. Exemplo: Recuperar o dia do ano. get(Calendar.YEAR)

28

Escola Tcnica de Braslia

Java e POO

Principais campos usados pela classe Calendar: DAY_OF_MONTH Dia do ms(1-31) DAY_OF_WEEK Dia da semana(0=domingo, 6=sbado) DAY_OF_WEEK_IN_MONTH Semana do ms(1-5) corrente. Diferente em relao a WEEK_OF_MONTH porque considera apenas a semana cheia DAY_OF_YEAR Dias decorridos no ano corrente HOUR Hora do dia(manh ou tarde)(0 a 11) HOUR_OF_DAY Hora do dia(0 a 23) MILLISECOND Milissegundos em relao aos segundos MINUTE- Minutos em relao hora corrente MONTH Ms em relao ao ano corrente SECOND Segundos em relao ao minuto corrente WEEK_OF_MONTH Semana em relao ao minuto corrente (1 a 5) WEEK_OF_YEAR Semana em relao ao ano corrente YEAR Ano corrente JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER Ms correspondente ao ano MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY Dia correspondente semana Resumo dos mtodos mais utilizados da classe Calendar: Add(int field, int valor) Funo aritmtica para objetos Date que adiciona o valor inteiro ao campo (Field) determinado. Retorna void after(Object x) Verifica se o tempo (data e hora) do objeto x (pode ser Calendar ou outro tipo) superior ao armazenado no objeto Calendar. Retorna boolean before(Object x) Idem anterior, porm verifica se o tempo anterior ao objeto clear() Zera o contedo de data e hora armazenando 1 de janeiro de 1970 00:00:00. Retorna void getFirstDayOfWeek() Fornece o primeiro dia da semana, dependendo da localidade getTime() Fornece o tempo corrente getTimeMillis() Fornece o tempo corrente em milissegundos roll() Funo aritmtica para objetos Date aplicando o efeito de rolagem de datas. Retorna void toString() Fornece uma representao em formato String para a data armazenada. Retorna String Lista 5 1) Crie uma classe que imprima um objeto data em uma JOptionPane. 2) Execute o seguinte exerccio que utiliza a seguinte informao: Java considera o nmero de milisegundos decorridos desde 1 de janeiro de 1970. Cada segundo possui 1.000 milisegundos, cada minuto possui 60 segundos, cada hora possui 60 minutos e cada dia possui 24 horas, para saber o correspondente em dias, basta multiplicar 1000 x 60 x 60 x 24. 3) Crie uma classe que utilize os seguintes mtodos: getHours(); getMinutes();getSeconds();getTime();getTimezoneOffset(). Altere os valores da hora, dos minutos e dos segundos com seus respectivos mtodos. 4) Crie uma classe que formate as datas conforme os exemplos abaixo: Formato Default = 18/05/2009 Formato SHORT = 18/05/09 Formato MEDIUM = 18/05/2009 Formato LONG = 18 de Maio de 2009 Formato FULL = Segunda-feira, 18 de Maio de 2009 5) Crie uma classe que formate a data conforme os exemplos abaixo: dia/ms/ano com quatro dgitos, horas:minutos:segundos dd/MM/yyyy, hh:mm:ss --->18/05/2009, 10:30:29

29

Escola Tcnica de Braslia

Java e POO

Dia da semana, ms por extenso, dia, ano com dois dgitos EEE, MMM d, ''yy-->Seg, Mai 18,' 09 6) Crie uma classe que se utilize dos mtodos da classe Calendar. 7) Crie uma classe que pegue a hora do sistema e imprima Bom dia, Boa tarde, Boa noite ou Boa madrugada conforme a hora capturada do sistema. 8) Execute a classe.

30

Escola Tcnica de Braslia

Java e POO

PARTE 4 Indroduo excees em Java

EXCEES

31

Escola Tcnica de Braslia

Java e POO

Excees so objetos que representam erros que podem ocorrer em um programa Java. Java define uma srie de recursos da linguagem para lidar com excees, incluindo os seguintes: Como tratar de excees no cdigo e recuperar-se elegantemente de problemas em potencial; Como dizer Java e aos usurios dos mtodos que voc est esperando uma exceo em potencial; Como criar uma exceo se voc a detectar; Como o seu cdigo limitado, embora tornado-se mais robusto pelas excees. As excees em Java so instncias de classes que herdam da classe Throwable. Uma instncia de uma classe Throwable criada quando uma exceo lanada. Throwable possui duas subclasses: Error e Exception As instncias de Error so erros internos envolvendo a mquina virtual Java (o ambiente runtime). Esses erros so raros e normalmente fatais. A classe Exception caem em dois grupos gerais: Excees de runtime (subclasses da classe RuntimeException), como ArrayIndexOutofBounds, SecurityException e NullPointerException. Outras excees, como EOFException e MalformedURLException As excees de runtime normalmente ocorrem por causa do cdigo. Uma ArrayIndexOutofBounds nunca deveria ser lanada se verificssemos os limites de um array. Uma NullPointException no acontecer a menos que tentssemos usar uma varivel antes que ela tenha sido configurada para conter um objeto. Uma EOFException acontece, por exemplo, quando se est lendo um arquivo e o mesmo termina de forma inesperada. Uma MalformedURLException acontece quando uma URL no est no formato correto. A maioria das classes de exceo faz parte do pacote java.lang (incluindo Throwable, Exception e RuntimeException). Muitos dos outros pacotes definem outras excees, e essas so usadas por toda a biblioteca de classes. Em muitos casos,o compilador Java impe o gerenciamento de exceo quando tentamos usar mtodos que utilizam excees, ento precisamos lidar com essas excees no cdigo ou ele simplesmente no ser compilado. Exemplo de um erro: XMLParser.java:32:Exception java.lang.InterruptedException must be caught or it must be declared in the throws clause o f this method No erro acima preciso pegar a exceo java.lang.InterruptedException ou ento declar-la na clusula throws deste mtodo. Um mtodo pode indicar os tipos de erros que possivelmente poderia lanar. Por exemplo, mtodos que lem de arquivos poderiam potencialmente gerar erros IOException. Pegar excees em potencial exige: Que protejamos o cdigo que contm o mtodo que pode lanar uma exceo dentro de um bloco try Que coloquemos a exceo dentro de um bloco catch TRY-CATCH Significa: Experimente este trecho de cdigo, que poderia causar uma exceo. Se ele for executado corretamente, prossiga o programa. Se o cdigo lanar uma exceo, apanhe-a e trate dela. Exemplo: try{ float in = Float.parseFloat(input); } catch (NumberFormatException nfe){ System.out.println(input+ is not a valid number.); } Na instruo acima o mtodo de classe Float.parseFloat() poderia potencialmente lanar uma exceo do tipo NumberFormatException, significando que o thread foi interrompido por algum motivo

32

Escola Tcnica de Braslia

Java e POO

Para tratar dessa exceo, a chamada a parseFloat() colocada dentro de um bloco try, e um bloco catch associado foi configurado. Esse bloco catch recebe quaisquer objetos NumberFormatException que sejam lanados dentro do bloco try A parte da clusula catch dentro dos parnteses semelhante lista de argumentos da definio de um mtodo. Ela contm a classe da exceo que devemos pegar e um nome de varivel. Podemos usar a varivel para nos referirmos a esse objeto dentro de um bloco catch. getMessage() est presente em todas as excees e apresenta uma mensagem detalhada do erro printStackTrace() apresenta a seqncia de chamadas de mtodo que levou instruo que gerou a exceo. Exemplo: try{ float in = Float.parseFloat(input); } catch (NumberFormatException nfe){ System.out.println(Oops:+nfe.getMessage()); } Pegando excees de uma superclasse, por exemplo, IOException, tambm pegamos instncias de suas subclasses: EOFException e FileNotFoundException Para pegar vrias excees que no estejam relacionadas por herana podemos usar vrios blocos catch para um nico try. Exemplo: try{ }catch (IOException ioe){ System.out.println(Input/output error); System.out.println(ioe.getMessage()); }catch (ClassNotFoundException cnfe){ System.out.println(Class not found); System.out.println(cnfe.getMessage()); }catch (InterruptedException ie){ System.out.println(Program interrupted); System.out.println(ie.getMessage());} CLUSULA FINALLY Utilizada quando desejamos realizar uma ao no importando o que acontea. Server para liberar algum recurso externo depois de adquiri-lo Exemplo: try{ readTextfile(); }catch(IOException e){ System.out.println(Input/output error); System.out.println(e.getMessage()); } finally{ closeTextfile();} Exemplo 1: Classe que gera erro de diviso por zero. import javax.swing.JOptionPane; class Excecoes{ public static void main (String args[]) { int x=10, y=0, z=0; try{ z = x / y; } catch(Exception e){ JOptionPane.showMessageDialog(null,e.getMessage());

33

Escola Tcnica de Braslia

Java e POO

} } } Exemplo 2: class HexRead { String[] input = { "000A110D1D260219 ", "78700F1318141E0C ", "6A197D45B0FFFFFF " }; public static void main(String[] arguments) { HexRead hex = new HexRead(); for (int i = 0; i < hex.input.length; i++) hex.readLine(hex.input[i]); } void readLine(String code) { try { for (int j = 0; j + 1 < code.length(); j += 2) { String sub = code.substring(j, j+2); int num = Integer.parseInt(sub, 16); if (num == 255) return; System.out.print(num + " "); } } finally { System.out.println("**"); } return; } } Exemplo 3: public class CalorieCounter { float count; public CalorieCounter(float calories, float fat, float fiber) { if (fiber > 4) { fiber = 4; } count = (calories / 50) + (fat / 12) - (fiber / 5); assert count > 0 : "Adjusted calories < 0"; } public static void main(String[] arguments) { if (arguments.length < 2) { System.out.println("Usage: java CalorieCounter calories fat fiber"); System.exit(-1); } try { int calories = Integer.parseInt(arguments[0]); int fat = Integer.parseInt(arguments[1]); int fiber = Integer.parseInt(arguments[2]); CalorieCounter diet = new CalorieCounter(calories, fat, fiber); System.out.println("Adjusted calories: " + diet.count); } catch (NumberFormatException nfe) { System.out.println("All arguments must be numeric."); System.exit(-1); } } }

34

Escola Tcnica de Braslia

Java e POO

PARTE 5 Array e Matrizes

35

Escola Tcnica de Braslia

Java e POO

Os arrays so uma maneira de armazenar uma lista de itens que possuem o mesmo tipo de dado primitivo, a mesma classe ou uma classe pai comum. Cada item na lista entra em seu prprio local numerado, para acessarmos a informao com facilidade. Os arrays podem conter qualquer tipo de informao armazenada em uma varivel, mas, quando o array criado, podemos us-lo apenas para esse tipo de informao. Por exemplo, pode-se ter um array de inteiros, um array de objetos String ou um array de arrays, mas no pode ter um array que contenha objetos String e inteiros. Para criar um array em Java, precisa-se: 1. Declarar uma varivel para manter o array. 2. Criar um novo objeto de array e atribu-lo varivel de array. 3. Armazenar informaes neste array. O primeiro passo na criao do array declarar uma varivel que o manter. As variveis de array indicam o objeto ou tipo de dado que o array manter e o nome do array. Para diferenciar das declaraes de varivel normal, um par de colchetes vazio([]) acrescentado ao objeto ou tipo de dado, ou ao nome da varivel. Exemplo: String [] nomes; float[] nmeros; Obs.: tambm podemos declarar um array colocando os colchetes aps o nome da varivel, em vez do tipo de informao. Exemplo: String nomes[]; Depois de declarar a varivel de array, o prximo passo criar um objeto de array e atribu-lo a essa varivel. Para fazer isso: Use o operador new; Inicialize o contedo do array diretamente. Como os arrays so objetos em Java, podemos usar o operador new para criar uma nova instncia de um array. Exemplo: String[] jogador = new String[10]; Quando criamos um objeto de array usando new, todos os seus slots recebem automaticamente uma valor inicial (0 para arrays numricos, false para Booleanos, \0 para arrays de caractere, e null para objetos). Exemplo: Integer[] serie = new Integer[3]; series[0]= new Integer(10); series[1]= new Integer(3); series[2]= new Integer(5); Podemos criar e inicializar um array ao mesmo tempo, delimitando os elementos do array entre chaves, separados por vrgulas. Exemplo: Ponto[] marcados={new Ponto(1,5), new Ponto(3,3), new Ponto(2,3),}; Obs.: Cada um dos elementos dentro das chaves precisa ter o mesmo tipo da varivel que mantm o array. Obs.: Quando criamos um array com valores iniciais, o tamanho ser definido com o nmero de elementos includos dentro das chaves. Exemplo: String[] num ={Um, Dois, Trs, Quatro, Cinco, Seis}; Obs.: todos os arrays possuem uma varivel de instncia chamada length que contm o nmero de elementos no array. Obs.: O primeiro elemento de um array est na posio zero. Para acessar um elemento devemos acessar a posio do mesmo. Exemplo: num[0]= Primeiro nmero; Obs.: Em Java, impossvel acessar ou atribuir um valor a uma posio do array fora dos limites deste.

36

Escola Tcnica de Braslia

Java e POO

Obs.: Colacar mais elementos em um vetor gera um erro do tipo ArrayIndexOutBoundsException. Exemplo: public class HalfDollars { public static void main(String[] arguments) { int[] denver = { 15000006, 18810000, 20752110 }; int[] philadelphia = new int[denver.length]; int[] total = new int[denver.length]; int average; philadelphia[0] = 15020000; philadelphia[1] = 18708000; philadelphia[2] = 21348000; total[0] = denver[0] + philadelphia[0]; total[1] = denver[1] + philadelphia[1]; total[2] = denver[2] + philadelphia[2]; average = (total[0] + total[1] + total[2]) / 3; System.out.println("1993 production: " + total[0]); System.out.println("1994 production: " + total[1]); System.out.println("1995 production: " + total[2]); System.out.println("Average production: "+ average);

Ao lidar com arrays, podemos percorrer os elementos do array, em vez de lidar com cada element individualmente. Isso torna o cdigo muito mais fcil de ler. Arrays multidimensionais (matrizes) Um uso comum de matrizes para representar os dados em uma grade x,y de elementos de array. Java no aceita arrays multidimensionais, mas podemos conseguir a mesma funcionalidade declarando um array de arrays. Esses arrays tambm podem conter arrays, e assim por diante, por tantas dimenses quantas forem necessrias. Exemplo: Registrar um valor inteiro a cada dia por um ano e organizar esses valores por semana. int[][] dias= new int[52][7]; Esse array de arrays contm um total de 364 inteiros, um para cada dia em 52 semanas. Poderiamos definir o valor para o primeiro dia da dcima semana com a seguinte instruo: dias[9][0]=14200; Exemplo: Crie uma matriz 3 por 4 e inicialize seus valores. public class Matriz { public static void main(String[] args) { /* declarando dois arrays do tipo int*/ int[] a1; int[] a2; /* instanciando os dois arrays */ a1 = new int[ 10 ]; // array com 10 posies de int a2 = new int[ 30 ]; // array com 30 posies de int /* imprimindo o tamanho dos array a1 e a2 */ System.out.println("a1 tamanho : " + a1.length); System.out.println("a2 tamanho : " + a2.length);

37

Escola Tcnica de Braslia

Java e POO

/* notas */

declarando,

instanciando

atribuindo

valores

ao

array

float[] notas = { 7.5f , 9.0f , 10.0f }; /* imprimindo as posies do array notas */ System.out.println("Notas : " + notas[0] + " - " + notas[1] + " - " + notas[2]); /* simulando array bidimensional*/ int[][] matriz = new int[ 3 ][ 4 ]; System.out.println("Linhas da Matriz : " + matriz.length); System.out.println("Colunas da Matriz : " + matriz[0].length); matriz[0][0] = 1; matriz[0][1] = 2; matriz[0][2] = 3; matriz[0][3] = 4; matriz[1][0] = 5; matriz[1][1] = 6; matriz[1][2] = 7; matriz[1][3] = 8; matriz[2][0] = 9; matriz[2][1] = 10; matriz[2][2] = 11; matriz[2][3] = 12; /* Imprimindo o array */ for (int i = 0; i < matriz.length; i++){ for (int j = 0; j < matriz[0].length; j++){ System.out.print(matriz[i][j] + "\t");} System.out.println();} } } Lista - 7 VETOR MATRIZES 1) Criar um algoritmo que entre com dez nomes e imprima uma listagem contendo todos os nomes. 2) Criar um algoritmo que armazene nome e duas notas de 5 alunos e imprima uma listagem contendo nome, as duas notas e a mdia de cada aluno. Mostre a situao de cada aluno, ou seja, aprovado ou reprovado. 3) Criar um algoritmo que armazene 5 nomes em um vetor. Ordenar e imprimir uma listagem em ordem crescente. 4) Armazenar 15 nmeros inteiros em um vetor NUM e imprimir uma listagem numerada contendo o nmero e uma das mensagens: par ou mpar. 5) Armazenar nome e salrio de 5 pessoas. Calcular o novo salrio sabendo-se que o reajuste foi de 8%. Imprimir uma listagem com nome, salrio antigo e novo salrio. 6) Ler um vetor vet de 5 elementos e obter um vetor w cujos componentes so os fatoriais dos respectivos componentes de v. 7) Crie um algoritmo que armazene 5 nmeros e gere um vetor com os quadrados destes nmeros. 8) Crie um algoritmo que armazene 5 nomes e faa a ordenao destes em orderm crescente.

38

Escola Tcnica de Braslia

Java e POO

9) Criar um algoritmo que armazene nomes de duas disciplinas, sabendo-se que as turmas tm sempre 5 alunos. Armazene tambm a matrcula e as notas do alunos em matrizes de ordem cinco. Imprima a sada da seguinte maneira: /* Nome da disciplina: * Mat. Nota: */ 10) Entrar com valores para uma matriz A 3x4. Gerar e imprimir uma matriz B que o triplo da matriz A. 11) Entrar com valores inteiros para um matriz A[4][4] e para uma matriz B[4][4]. Gerar e imprimir a matriz SOMA[4][4].

39

Escola Tcnica de Braslia

Java e POO

PARTE 6 Orientao a Objetos

40

Escola Tcnica de Braslia

Java e POO

Orientao a Objetos - Conceitos Bsicos Pacotes um modo de organizar grupos de classes. Um pacote contm qualquer quantidade de classes relacionadas em finalidade, em escopo ou por herana. Se os programas forem pequenos e usarem um nmero limitado de classes, voc poder descobrir que no precisa explorar pacote algum. Todavia, quando comear a criar projetos mais sofisticados com muitas classes relacionadas umas as outras por herana, descobrir o benefcio de organiz-las em pacotes. Os pacotes so teis por vrios motivos gerais: Os pacotes permitem a organizao de classes em unidades. Assim temos pastas ou diretrios no disco rgido para organizar seus arquivos e aplicaes, os pacotes permitem a organizao das classes em grupos, de modo que possamos usar o que for necessrio em um programa. Os pacotes reduzem problemas de conflitos em relao a nomes. medida que o nmero de classes Java cresce, cresce tambm a probabilidade de usar o mesmo nome de classe de outro desenvolvedor, aumentando a possibilidade de conflitos de nomes e de mensagens ao tentar integar grupos de classes em um nico programa. Os pacores fornecem um meio de referncia especfica classe desejada, mesmo que ela compartilhe um nome com uma classe de outro pacote. Os pacotes permitem proteger classes, variveis e mtodos de maneiras mais amplas do que para cada classe individual. Os pacotes podem ser usados exclusivamente para identificar o seu projeto. Todas as vezes que usamos o comando import e toda vez que nos referimos a uma classe por seun nome de pacote inteiro java.awt.Font, por exemplo, estamos usando pacotes. Para usar uma classe contida em um pacote, use um dos trs mecanismos: 1. Se a classe que desjamos usar estiver no pacote java.lang (por exemplo, System ou Date), poderemos simplesmente usar o nome da classe para se referenciar a essa classe. As classes java.lang esto disponveis de maneira automtica. 2. Se a classe que deseja usar estiver em algum outro pacote, poderemos nos referir a ela por seu nome completo, incluindo quaisquer nomes de pacotes (por exmplo, java.awt.FlowLayout). 3. Para as classes que usa com freqncia a partir de outros pacotes, precisamos importar classes individuais ou um pacote inteiro de classes. Depois que uma classe ou pacote tiver sido importado, podemos nos referir a esta classe somente pelo seu nome. Para se referir a uma classe em algum outro pacote, podemos usar o nome completo, que o nome de classe precedido por quaisquer nomes de pacotes. Obs.: No necessrio importar classe ou pacote se formos utiliz-lo desta maneira: java.awt.Font texto = new java.awt.Font(); Para classes utilizadas apenas uma ou duas vezes no programa, o uso de nomes completos faz sentido. Contudo, se formos usar vrias vezes, ou se o nome do pacote for muito longo, com muitos subpacotes, ento importe essa classe, para economizar tempo de digitao. Obs.: Ao se criar o pacote do exemplo abaixo, ser criada uma subpasta chamada curso para armazenar o arquivo bytecode, ou seja, os (.class). package curso; Para importar classes de um pacote, use a declarao import. import curso; Obs.: podemos importar um pacote inteiro de classes, usando um asterisco(*). import javax.swing.*; Obs.: Contudo o asterisco no permite a importao de vrios pacotes com nomes semelhantes. java.util; java.util.jar; java.util.prefs. No podemos importar os trs pacotes com a seguinte instruo: o import java.*; Para tornar os trs diponveis em uma classe, as seguintes instrues so necessrias:

41

Escola Tcnica de Braslia

Java e POO

o import java,util.*; o import java,util.jar.*; o import java,util.prefs.*; Obs.: no se pode iniciar nomes de classes parciais, por exemplo, J* para importar todas as classes que comeam por J. Obs.: a importao de um grupo de classes no torna o seu programa mais lento nem o aumenta; somente as classes realmente usadas no cdigo sero carregadas, conforme a necessidade. Java permite se referir s constantes de uma classe pelo seu nome. Sendo assim, devemos fazer uma import static o que torna disponveis as constantes especficas nesta classe. Exemplo: Color.black; Math.PI e File.separator. Aps o import static java.lang.Math.*; Exemplo: import static java.lang.Math.*; public class Constantes{ public static void main(String args[]){ System.out.println(PI: +PI); System.out.println( +(PI*3)); } } Cuidado: Ao importar classes com mesmo nome de pacotes diferentes ser necessrio se referir a esta classe pelo seu caminho completo. Exemplo: a classe Date existe nos pacotes: java.util e java.sql, sendo assim ao se referir a classe Date do pacote java.util, utilize: java.util.Date. Classe Em Java, um programa composto de uma classe principal e quaisquer outras classes que sejam necessrias para dar suporte a ela. Essas classes de suporte incluem qualquer uma daquelas na bibliotecas de classes Java de que voc precisar. Por padro, as classes herdam da classe Object. Ela a superclasse de todas as classes na hierarquia Java. A palavra-chave extends usada para indicar a superclasse de uma classe, ou seja, fazer herana. Exemplo: public class Cadastro extends JFrame{//corpo da classe} Objeto Um objeto uma representao abstrata de uma entidade do mundo real, que tem um identificador nico, propriedades embutidas e a habilidade de interagir com outros objetos e consigo mesmo. O estado do objeto um conjunto de valores que os atributos do objeto podem ter em um determinado instante do tempo. As classes definem a estrutura e o comportamento de um tipo de objeto, elas atuam como templates. Todos os objetos criados a partir de uma classe so idnticos. Quando declaramos variveis de qualquer tipo primitivo o espao em memria alocado como parte da operao. A declarao de uma varivel referncia a um objeto no aloca espao na memria. A alocao de memria feita somente quando o objeto criado. Exemplo: Cadastro cad; cad = new Cadastro(); O primeiro comando, a declarao, aloca apenas o espao suficiente para a referncia. O segundo, aloca o espao para os atributos do objeto cad, somente aps a criao do objeto que seus membros atributos e mtodos podem ser referenciados.

42

Escola Tcnica de Braslia

Java e POO

Uma classe pode ter construtores especializados ou somente o construtor default. Um construtor recebe sempre o mesmo nome da classe. O mtodo construtor gera uma instncia do objeto em memria e o seu cdigo executado imediatamente aps a criao do objeto provendo-lhe um estado inicial. Obs.: Valores de parmetros so passados no momento da criao. Herana Significa ser capaz incorporar os dados e mtodos de uma classe previamente definida. Assim como a herana de todas as operaes e dados, voc pode especializar mtodos da classe ancestral e especificar novas operaes e dados, para refinar, especializar, substituir ou estender a funcionalidade da classe progenitora. Terminologia: Estender- criar uma nova classe que herda todo o contedo da classe Superclasse classe progenitora Subclasse classe filha Em Java, a classe Object a raiz de todas as classes. Variveis de instncia - atributos As so consideradas variveis de instncia se forem declaradas fora de uma definio de mtodo, e no so modificadas pela palavra-chave static. Por um costume de programao, a maioria das variveis de instncia definida logo aps a primeira linha da definio da classe, mas tambm podem ser definidas no final. Exemplo: public class Cadastro extends JFrame{ String nome; //varivel de instncia String sexo; //varivel de instncia int idade; //varivel de instncia } Obs.: So definidas fora de um mtodo. Variveis de classe As variveis de classe se aplicam a uma classe como um todo, em vez de serem armazenadas individualmente em objetos de classe. As variveis de classe so eficazes na comunicao entre diferentes objetos da mesma classe ou para registrar informaes por toda a classe entre um conjunto de objetos. A palavra-chave static usada na declarao da classe para declarar uma varivel de classe. static qualificador ou specifier, que indica que o mtodo deve ser compartilhado por todos os objetos que so criados a partir desta classe. Exemplo: public class Cadastro extends JFrame{ static String nome= Cliente; //varivel de classe String sexo; //varivel de instncia int idade; //varivel de instncia static final double rendaMinima=1000;/*varivel de classe uma constante em Java*/ } As variveis de classe so variveis definidas e armazenadas na prpria classe. Seus valores se aplicam classe e a todas as suas instncias.

43

Escola Tcnica de Braslia

Java e POO

Com variveis de instncia, cada nova instncia da classe recebe uma nova cpia das variveis de instncia que a classe define. Cada instncia, ento, pode alterar os valores dessas variveis de instncia sem afetar quaisquer outras instncias. Com as variveis de classe, s existe uma cpia dessa varivel. A alterao do valor dessa varivel o altera para todas as demais instncias. Cada instncia da classe Cadastro possui seus prprios valores para sexo e idade. A varivel de classe nome e rendaMinima, no entanto, possui apenas um valor para todos os membros do Cadastro: Cliente. Mude o valor de nome, e todas as instncias de Cadastro so afetadas. No caso da varivel de classe rendaMinima ela uma constante e no pode ser modificada, isto feito colocandose a palavra-chave final aps static. Para acessar variveis de classe, use a mesma notao de ponto que as variveis de instncia. Para obter ou alterar o valor da varivel de classe, podemos usar a instncia ou o nome da classe no lado esquerdo do ponto. As duas linhas de sada no exemplo a seguir apresentam o mesmo valor: Exemplo: Cadastro cad = new Cadastro(); Sytem.out.println(O nome no Cadastro :+cad.nome); Sytem.out.println(O nome no Cadastro :+Cadastro.nome); Exemplo: public class MembrosEstaticos { /* Atributo esttico */ private static int contObjetos = 0; public MembrosEstaticos () { contObjetos++; } /* Mtodo esttico */ public static void numeroDeOjetos () { System.out.println("Nmero de objetos instanciados contObjetos); } } Exemplo: public class MembrosEstaticosApp { public static void main (String[] args) { for (int i = 1; i <= 10; i++) { MembrosEstaticos me = new MembrosEstaticos(); /* chamada ao mtodo esttico */ me.numeroDeOjetos(); } /* chamada ao mtodo esttico */ MembrosEstaticos.numeroDeOjetos(); } }

"

44

Escola Tcnica de Braslia

Java e POO

Mtodos As definies de mtodo possuem quatro partes bsicas: O nome do mtodo; Uma lista de parmetros; O tipo de objeto ou primitivo retornado pelo mtodo; O corpo do mtodo. Obs.: o nome do mtodo e sua lista de parmetros correspondem a sua assinatura. Obs.: Em Java podemos ter vrios mtodos na mesma classe com o mesmo nome, mas com diferenas nas assinaturas. Essa prtica chamada de sobrecarga de mtodo. A menos que um mtodo tenha sido declarado como void como seu tipo de retorno, o mtodo retorna algum tipo de valor quando completado. O valor precisa ser retornado explicitamente em algum ponto de sada dentro do mtodo, usando a palavra-chave return. Exemplo: tipoRetorno nomeMtodo (tipo1 arg1, tipo2 arg2, tipo3 arg3...){ //corpo do mtodo} Quando chamamos um mtodo com parmetro de objeto, os objetos que passam para o corpo do mtodo so passados por referncia. Qualquer modificao feito nos objetos dentro do mtodo persistem fora dele. Mtodos de classe Os mtodos de classe esto disponveis a qualquer instncia da prpria classe e podem estar disponveis a outras classes. Alm disso, ao contrrio de um mtodo de instncia, uma classe no exige uma instncia da classe para que seus mtodos sejam chamados. Exemplo: System.exit(0); A classe System define um conjunto de mtodos teis durante a exibio do texto, recuperando informaes de configurao e executando outras tarefas. O mtodo exit(int) fecha uma aplicao com um cdigo de status que indica sucesso (0) ou falha(qualquer outro valor). Para definir mtodos de classe, use a palavra-chave static na frente da definio de mtodo. Exemplo: double x=Double.parseDouble(42); parseDouble um mtodo de classe, pois no precisamos criar nenhum objeto para utiliz-lo. Obs.: para passar argumentos a um programa Java, os argumentos devero ser anexados linha de comando (prompt do MS-DOS) quando o programa for executado. Exemplo: java Cadastro Abril 450 // passados dois argumentos que so arrays de strings para o mtodo main(). Sendo assim, args[0]=Abril e args[1]=450. Dentro do mtodo main() podemos tratar os argumentos que foram recebidos.

45

Escola Tcnica de Braslia

Java e POO

Polimorfimos por sobrecarga de mtodos Duas caractersticas diferenciam os mtodos com o mesmo nome: O nmero de argumentos; O tipo de dado ou objetos de cada argumento. Essas duas caractersticas fazem parte da assinatura de um mtodo. O uso de vrios mtodos com o mesmo nome e assinaturas diferentes chamado de sobrecarga. A sobrecarga de mtodo pode eliminar a necessidade de mtodos inteiramente diferentes, que realizam essencialmente a mesma coisa. A sobrecarga tambm torna possvel que os mtodos se comportem de modo diferente, dependendo dos argumentos que recebem. Quando chamamos um mtodo em um objeto, a Java combina o nome do mtodo e os argumentos a fim de escolher qual definio de mtodo deve ser executada. Para criar um mtodo sobrecarregado, crie diferentes definies de mtodo em uma classe, cada uma com o mesmo nome, mas com diferentes listas de argumentos. A diferena pode ser o nmero, o tipo de argumentos ou ambos. Java permite a sobrecarga do mtodo, desque que cada lista de argumentos seja exclusiva para o mesmo nome do mtodo. Exemplo: public class SobreCarga { public static float media (int a, int b) { return ( a + b ) / 2; } public static float media (float a, float b) { return ( a + b ) / 2; } public static float media (int a, int b, int c) { return ( a + b + c ) / 3; } public static float media ( float a, float b, float c ) { return ( a + b + c ) / 3; } /* No possvel ter um mtodo com apenas o tipo de retorno diferente */ /* public static double media ( float a, float b, float c ) { return ( a + b + c) / 3; } */ } Obs.: No possvel ter um mtodo com apenas o tipo de retorno diferente public class SobreCargaApp { public static void main (String[] args) { System.out.println( SobreCarga.media( System.out.println( SobreCarga.media( System.out.println( SobreCarga.media( System.out.println( SobreCarga.media( /* Converso explicita pra float */ System.out.println( SobreCarga.media( } }

5, 7 ) ); 5, 7, 3 ) ); 8f, 2f ) ); 5.3f, 7.9f, 3.1f ) ); 8f, 4 ) );

46

Escola Tcnica de Braslia

Java e POO

Mtodos construtores So chamados automaticamente quando os objetos dessa classe so criados. Ao contrrio dos outros mtodos, um construtor no pode ser chamado diretamente. Java faz trs aes quando new usada para criar uma instncia de uma classe. Aloca memria para o objeto; Inicializa as variveis de instncia desse objeto, seja para valores iniciais ou para um padro(0 para nmeros, null para objetos, false para Booleanos ou 0\ para caracteres). Chama o mtodo construtor da classe, que pode ser um dentre vrios mtodos. Se uma classe no possui quaisquer mtodos construtores definidos, um objeto ainda ser criado quando o operador new for usado em conjunto com a classe. Contudo, podemos ter de definir essas variveis de instancia ou chamar outros mtodos que o objeto precise para inicializar-se. Definindo mtodos construtores em sua prprias classes, possvel definir valores iniciais de variveis de instncia, chamar mtodos com base nessas variveis, chamar mtodos em outros objetos e definir propriedades iniciais de um objeto. Tambm podemos sobrecarregar mtodos construtores, como pode fazer com mtodos normais, para criar um objeto que tenha propriedades especficas com base nos argumentos fornecidos a new. Os construtores se parecem muito com os mtodos normais, com trs diferenas bsicas: Eles sempre tm o mesmo nome da classe. Eles no tem um tipo de retorno. Eles no podem retornar um valor no mtodo usando a instruo return. Exemplo: import javax.swing.*; public class Cadastro extends JFrame{ String nome; int idade; char sexo; Cadastro(String nome, int idade, char sexo){ this.nome=nome; this.idade=idade; this.sexo=sexo;} } Poderamos criar um objeto dessa classe com a seguinte instruo: Cadastro cad = new Cadastro(Ana,32,F); O objeto teria os seguintes valores: cad.Nome=Ana; cad.idade=32; cad.sexo=F. Polimorfismo por reescrita de mtodos Java procura a definio de um mtodo na classe do objeto. Se no encontrar uma, ele passar para a chamada de mtodo acima na hierarquia de classe, at que uma definio de mtodo seja encontrada. A herana de mtodo permite definir e usar mtodos repetidamente em subclasses, sem ter de duplicar o cdigo. Contudo, pode haver ocasies em que desejemos que um objeto responda aos memos mtodos, mas que tenha um comportamento diferente quando esse mtodo chamado. Nesse caso, voc pode redefinir o mtodo. Para redefinir um mtodo, defina um em uma subclasse com a mesma assinatura do mtodo em uma superclasse. Depois, quando o mtodo for chamado, o mtodo da subclasse ser encontrado e executado no lugar daquele que se encontra na superclasse.

47

Escola Tcnica de Braslia

Java e POO

Para reescrever um mtodo, basta criar um mtodo na sua superclasse que tenha a mesma assinatura (nome e lista de argumentos) do mtodo definido pela superclasse da sua classe. Como Java executa a primeira definio de mtodo que encontra, que combine com a assinatura, a nova assinatura esconde a definio do mtodo original. Exemplo: class Imprima { int x = 0; int y = 1; void imprimir() { System.out.println("x " + x + ", y " + y); System.out.println("Eu sou uma instncia da classe " + this.getClass().getName()); } } Exemplo: Classe Executora class SubImprima extends Imprima { int z = 3; public static void main(String[] arguments) { SubImprima obj = new SubImprima(); obj.imprimir(); } } Exemplo: Correo com reescrita do mtodo acrescentando a varivel de instncia z. class SubImprima extends Imprima { int z = 3; void imprimir() { System.out.println("x " + x + ", y " + y + ",z "+z); System.out.println("Eu sou uma instncia da classe " + this.getClass().getName()); } public static void main(String[] arguments) { SubImprima obj = new SubImprima(); obj.imprimir(); } } Super Normalmente, existem dois motivos para querermos definir um mtodo j implementado por uma superclasse: Para substituir completamente a definio desse mtodo original; Para aumentar o mtodo original com algum comportamento adicional. A redefinio de um mtodo e a entrega de uma nova definio ao mtodo escondem a definio do mtodo original. Entretanto, existem ocasies em que o comportamento deve ser acrescentado definio original, em vez de substitu-la completamente, em especial quando o comportamento duplicado no mtodo original e no mtodo que o redefine. Chamando o mtodo original no corpo do mtodo que o redefine, podemos acrescentar apenas o necessrio. A palavra-chave super usada para chamar o mtodo original de dentro de uma definio de mtodo. Essa palavra-chave passa a chamada de mtodo para cima na hierarquia. Exemplo: class SubImprima extends Imprima { int z = 3; void imprimir() { System.out.println("x " + x + ", y " + y + ",z "+z); System.out.println("Eu sou uma instncia da classe " + this.getClass().getName()); super.imprimir();//chama o mtodo da superclasse

48

Escola Tcnica de Braslia

Java e POO

} public static void main(String[] arguments) { SubImprima obj = new SubImprima(); obj.imprimir(); } } Obs.: A palavra-chave super, semelhante palavra-chave this, um marcador de lugar para a superclasse da classe. Pode-se us-la em qualquer lugar em que utiliza this, mas super refere-se superclasse, em vez do objeto atual. THIS Escopo a parte de um programa em que uma varivel ou outro tipo de informao existe, possibilitando o uso de variveis em instrues ou expresses. Quando a parte que define o escopo tiver concludo sua execuo, a varivel deixar de existir. Varivel com escopo local s pode ser usada dentro do bloco em que foi definida. Varivel de instncia se estende classe inteira, de modo que podem ser usadas por qualquer um dos mtodos de instncia dentro da classe. Ordem de busca da varivel verifica 1 no escopo atual (que poderia ser um bloco), depois em cada escopo mais externo e, finalmente, na definio do mtodo atual. Se a varivel no for uma varivel local, ento Java verificar uma definio dessa varivel como uma varivel de instncia ou de classe, na classe atual. Se a definio da varivel assim no for encontrada, ela procurar em cada superclasse, uma por vez. THIS - uma palavra chave usada num mtodo como referncia para o objeto corrente, ela tem o significado de: o objeto para o qual este trecho de cdigo est sendo executado. Refere-se ao objeto corrente quando usado no cdigo de um mtodo no esttico. Usado com freqncia para passar uma referncia do objeto corrente num envio de mensagem para outro objeto. A this B A=this Exemplo: public class Teste{ int A=0; public void Teste(int A){ this.A=A;}}//this.A refere-se a varivel de instncia A palavra-chave this a nica forma de garantir que o valor inteiro A do mtodo Teste() ser passado para a varivel inteira A da classe Teste. A palavra this muito utilizada quando um dos parmetros do mtodo tem o mesmo nome que uma varivel de instncia. void saca (double quantidade){ double novoSaldo = this.saldo-quantidade; this.saldo=novoSaldo;} A palavra-chave this refere-se ao objeto atual, e podemos us-la em qualquer lugar onde uma referncia a um objeto pudesse aparecer: Em muitos casos, voc pode no ter de usar explicitamente, pois ela ser assumida. Por exemplo, voc pode se referir a variveis de instncia e chamadas de mtodo definidas na classe atual simplesmente pelo nome, pois o this implcito nessas referncias. Exemplo: t=x; resetData(this);

49

Escola Tcnica de Braslia

Java e POO

This uma referncia instncia atual de uma classe. Devemos us-la apenas dentro do corpo de uma definio de mtodo de instncia. Os mtodos de classe que so declarados com a palavra-chave static no podem usar this. Exemplo: class ScopeTest{ int test=10; void printTest(){ int test=20; System.out.println(Test:+test);} public static void main (String args[]){ ScopeTest st= new ScopeTest(); st.printTest();}} Nessa classe, temos duas variveis com o mesmo nome e definio. A primeira, uma varivel de instncia, possui o nome test e inicializada com o valor 10. A segunda uma varivel local com o valor de 20. A varivel local test, dentro do mtodo printTest(), esconde a varivel de instncia test. Quando o mtodo printTest() chamado de dentro do mtodo main(), ele indica que test igual a 20, embora haja uma varivel de instncia igual a 10. Para evitar esse problema use this.test para se referir varivel de instncia e use apenas test para se referir varivel local. Exemplo: public abstract class Pessoa { private String identificacao;//varivel de instncia private String nome; //varivel de instncia private String dataNascimento; //varivel de instncia private char sexo;//varivel de instncia public Pessoa (String id, String nome, String datNasc, char sexo) { this.nome = nome;//a varivel de instncia recebe nome this.dataNascimento = datNasc; //a varivel de instncia recebe datNasc this.sexo = sexo;//a varivel de instncia recebe sexo } public void id (String id) { this.identificacao = id; } public void nome (String nome) { this.nome = nome; } public void dataNascimento (String dataNascimento) { this.dataNascimento = dataNascimento; } public void sexo (char sexo) { this.sexo = sexo; } public String id () { return identificacao; } public String nome () { return nome;

50

Escola Tcnica de Braslia

Java e POO

} public String dataNascimento () { return dataNascimento; } public char sexo () { return sexo; } public String toString () { return(nome + " | " + dataNascimento + " | " + sexo); } }

Encapsulamento Mecanismo utilizado visando obter segurana, modularidade e autonomia para objetos; Conseguido atravs da definio de visibilidade privada dos atributos, ganhando-se assim autonomia para definir o que o mundo externo ao objeto poder visualizar e acessar, normalmente atravs de mtodos pblicos. Dica: sempre defina os atributos de uma classe como privados, a no ser que tenha uma boa justificativa para no serem Modificadores de Visibilidade Os modificadores usados com mais freqncia nos programas so aqueles que controlam o acesso a mtodos e variveis: public, private e protected. Esses mtodos modificadores determinam quais variveis e mtodos de uma classe so visvieis a outras classes. Usando o controle de acesso, pode-se controlar como outras classes usaro suas classes. Algumas variveis e mtodos em uma classe sero teis apenas dentro da prpria classe e devero ficar escondidos de outras que possam interagir com essa classe. Esse processo chamado de encapsulamento. Um objeto controla o que o mundo exterior pode saber a respeito dele e como o mundo exterior pode interagir com ele. Encapsulamento o processo que impede que variveis de instncia sejam lidas ou modificadas por outras classes. A nica maneira de usar essas variveis chamando mtodos da classe, se estiverem disponveis. Java oferece quatro nveis de controle de acesso: public, private, protected e um nvel padro especificado sem o uso desses modificadores de controle de acesso. Public estes atributos e mtodos so sempre acessveis em todos os mtodos de todas as classes. Este o nvel menos rgido de encapsulamento, que equivale a no encapsular. Private estes atributos e mtodos so acessveis somente nos mtodos (todos) da prpria classe. Este o nvel mais rgido de encapsulamento. Protected estes atributos e mtodos so acessveis no pacote, nos mtodos da prpria classe e suas subclasses <default> - Visvel no pacote e na classe. Variveis e mtodos declarados sem quaisquer modificadores. TABELA RESUMO Visibilidade Public Protected Default Private Da mesma classe Sim Sim Sim Sim De qualquer classe no mesmo pacote Sim Sim Sim No De qualquer classe fora do pacote Sim No No No De uma subclasse no mesmo pacote Sim Sim Sim No De uma subclasse fora do mesmo Sim Sim No No pacote Classes, mtodos e variveis finais 51

Escola Tcnica de Braslia

Java e POO

O modificador final usado com classes, mtodos e variveis para indicar que no sero alterados. Ele possui diferentes significados para cada elemento que pode se tornar final, como a seguir: Uma classe final no pode ser subclassificada(extendida); Um mtodo final no pode ser redefinido por quaisquer subclasses; Uma varivel final no pode mudar de valor. Exemplo: Varivel final (constantes) public static final int voltas=10; static final String titulo= Revista; Exemplo: Mtodo final public final void get Assinatura(){ //corpo do mtodo} Obs.: O motivo mais comum para declarar um mtodo final fazer com que a classe seja executada com mais eficincia. Normalmente, quando o ambiente de runtime Java executa um mtodo, ele primeiro verifica a classe atual para encontrar o mtodo, depois verifica sua superclasse e prossegue subindo na hierarquia de classes, at que o mtodo seja encontrado. Esse processo sacrifica alguma velocidade em nome da flexibilidade e facilidade de desenvolvimento. Se um mtodo final, o compilador Java pode colocar o bytecode executvel do mtodo diretamente em qualquer programa que chame o mtodo. Afinal, o mtodo nem sequer mudar devido a uma subclasse que o redefine. Exemplo: Classe final public final class Cadastro{ //corpo da classe} Obs.: Todos os mtodos em uma classe final so automaticamente finais. Classes e mtodos abstratos Em uma hierarquia de classes, quanto maior a classe, mais abstrata sua definio. Uma classe no topo de uma hierarquia de outras classes s pode definir o comportamento e os atributos comuns a todas as classes. Comportamentos e atributos mais especficos entraro em algum lugar mais baixo na hierarquia. Quando estivermos fatorando o comportamento e os atributos comuns durante o processo de definio de uma hierarquia de classes, s vezes podemos nos deparar com uma classe que nem sequer precisar ser instanciada diretamente. Em vez disso, esse tipo de classe serve como um lugar para manter comportamentos e atributos comuns, compartilhados por suas subclasses. Essas classes so chamadas classes abstratas e so criadas usando o modificador abstract. Exemplo: public abstract class Pessoa{ //.... } Um exemplo de uma classe abstrata java.awt.JComponent, a superclasse dos componentes da interface grfica com o usurio. Como diversos componentes herdam dessa classe, ela contm mtodos e variveis teis a cada uma delas. Contudo, no existe algo como um componente genrico que possa ser acrescentado a uma interface, de modo que nunca precisa criar um objeto Component em um programa. As classes abstratas podem conter tudo o que um classe normal pode conter, incluindo mtodos construtores, pois suas subclasses ter de herdar os mtodos. As classes abstratas tambm podem conter mtodos abstratos, que so assinaturas de mtodo sem implementao. Esses mtodos so implementados em subclasses de classe abstrata. Os mtodos abstratos so declarados com o modificador abstract. No podemos declara um mtodo abstrato em uma classe no abstrata. Se uma classe no tiver nada alm de mtodos abstratos, ser melhor usar uma interface. Exemplo: 52

Escola Tcnica de Braslia

Java e POO

public abstract class Pessoa { private String identificacao; private String nome; private String dataNascimento; private char sexo; public Pessoa (String id, String nome, String datNasc, char sexo) { this.nome = nome; this.dataNascimento = datNasc; this.sexo = sexo; } public void id (String id) { this.identificacao = id; } public void nome (String nome) { this.nome = nome; } public void dataNascimento (String dataNascimento) { this.dataNascimento = dataNascimento; } public void sexo (char sexo) { this.sexo = sexo; } public String id () { return identificacao; } public String nome () { return nome; } public String dataNascimento () { return dataNascimento; } public char sexo () { return sexo; } public String toString () { return(nome + " | " + dataNascimento + " | " + sexo); } } Exemplo: public interface SituacaoAcademica { public static final float MEDIA = 5.0f; public static final int FALTAS = 18; public static final String AP = "Aprovado"; public static final String RF = "Reprovado por Falta"; public static final String RM = "Reprovado por Mdia";

public abstract void faltas (int faltas); public abstract void notas (float n1, float n2, float n3); 53

Escola Tcnica de Braslia

Java e POO

public abstract void nota1 (float n); public abstract void nota2 (float n); public abstract void nota3 (float n); public public public public public public } Exemplo: public class Alunos { private Aluno[] alunos; private int posNovoAluno = 0; public Alunos() { alunos = new Aluno[10]; } public void insere (int mat, String nome, float n1, float n2, float n3){ alunos[posNovoAluno] = new Aluno(mat, nome, n1, n2,n3); posNovoAluno++; } public void escreve () { String linha = "****************************************************"; System.out.println(linha); for (int i = 0; i < posNovoAluno; i++) { alunos[i].escreve(); } System.out.println(linha); } /* Classe Interna : Aluno */ class Aluno { int matricula; String nome; float nota1, nota2, nota3; Aluno (int mat, String nome, float n1, float n2, float n3) { this.matricula = mat; this.nome = nome; this.nota1 = n1; this.nota2 = n2; this.nota3 = n3; } void escreve() { String linha = "_________________________________________________"; System.out.println(linha + "\nMatrcula : \t" + matricula + "\nNome : \t" + nome + "\nNotas : \t" + nota1 + "\t" + nota2 + "\t" + nota3 + "\n" + linha); } } } GETTERS E SETTERS abstract abstract abstract abstract abstract abstract String situacaoFinal (); float media (); int faltas (); float nota1 (); float nota2 (); float nota3 ();

54

Escola Tcnica de Braslia

Java e POO

Um padro que surgiu com o desenvolvimento de Java foi de encapsular, isto , esconder todos os membros de uma classe. Para permitir o acesso aos atributos de uma maneira controlada, a prtica mais comum de criar dois mtodos, um que retorna valor e outro que muda valor. O padro para esses mtodos de colocar a palavra get ou set antes do nome do atributo. Exemplo 1: classe com os atributos pblicos. package oo; public class Cliente{ public String nome; public String escolaridade; public int idade; public Cliente(){ } } Exemplo 1: classe executora de cliente package oo; public class PrincipalCliente{ public static void main(String args[]){ Cliente cliente1 = new Cliente(); cliente1.escolaridade= Superior Completo; cliente1.idade=25; cliente1.nome= Mario dos Santos; System.out.println(p1.escolaridade); System.out.println(p1.idade); System.out.println(p1.nome); } } Exemplo 2: modificar os atributos da classe Cliente para private package oo; public class Cliente{ private String nome; private String escolaridade; private int idade; public Cliente(){ } } Quando tentamos executar novamente a classe PrincipalCliente todas as tentativas de acesso aos atributos da classe Cliente apresentaro erros na classe PrincipalCliente, porque agora os atributos so privados. possvel somente acess-los dentro da prpria classe Cliente. Para solucionarmos este problema deveremos criar os mtodos set() e get() pblicos para cada atributo que desejemos tornar pblico. O mtodo set() o modificar, seu objetivo alterar o valor. O mtodo get() o mtodo acessor, pega o valor do atributo.

Exemplo 3: Classe Cliente modificada incluindo os mtodos get e set.

55

Escola Tcnica de Braslia

Java e POO

public class Cliente{ private String nome; private String escolaridade; private int idade; public Cliente(){ } public String getNome(){ return nome; } public void setNome(String nome){ this.nome=nome; } public String getEscolaridade(){ return escolaridade; } public void setEscolaridade(String escolaridade){ this.escolaridade=escolaridade; } public String getIdade(){ return idade; } public void setIdade(int idade){ this.idade=idade; } Exemplo 3: nova classe executora que acessa os mtodo get e set da classe Cliente, package oo; public class PrincipalCliente{ public static void main(String args[]){ Cliente cliente1 = new Cliente(); cliente1.setEscolaridade(Superior Completo); cliente1.setIdade(25); cliente1.setNome(Mario dos Santos); System.out.println(p1.getEscolaridade()); System.out.println(p1.getIdade()); System.out.println(p1.getNome()); } } } Os mtodos get() e set() podem ser usados para validar um valor de entrada. Exemplo: public void setIdade(int idade){ if(idade >=0) this.idade=idade;} Neste caso, s daria entrada se o idade fosse maior que 0. Para no termos que repetir vrias vezes os comandos de impresso, podemos criar um mtodo que faa este trabalho na classe Cliente. Exemplo 4: incluindo um mtodo para impresso dos atributos.

56

Escola Tcnica de Braslia

Java e POO

public class Cliente{ private String nome; private String escolaridade; private int idade; public Cliente(){ } public String getNome(){ return nome; } public void setNome(String nome){ this.nome=nome; } public String getEscolaridade(){ return escolaridade; } public void setEscolaridade(String escolaridade){ this.escolaridade=escolaridade; } public String getIdade(){ return idade; } public void setIdade(int idade){ this.idade=idade; } public void imprime(){ System.out.println(p1.getEscolaridade()); System.out.println(p1.getIdade()); System.out.println(p1.getNome()); } } Exemplo 4: Classe PrincipalCliente que utiliza o mtodo imprime(). package oo; public class PrincipalCliente{ public static void main(String args[]){ Cliente cliente1 = new Cliente(); cliente1.setEscolaridade(Superior Completo); cliente1.setIdade(25); cliente1.setNome(Mario dos Santos); cliente1.imprime(); } } }

LISTA 8

57

Escola Tcnica de Braslia

Java e POO

Desenvolver as classes abaixo e fazer um principal e criar 2 objetos de cada classe, alimentar os objetos e exibir o relatrio. Na classe Funcionario, o mtodo getSalario() calcula o salrio do funcionrio. O mtodo exibeDados() exibe as informaes do funcionrio, inclusive o salrio aproveitando o mtodo getSalario(). Funcionrio String nome int horastrabalhadas float valorhora void setNome(String nome) String getNome() void setHorasTrabalhadas(int ht) int getHorasTrabalhadas() void setValorHora(float vh) float getValorHora() float getSalario() void exibeDados() Na classe conta, o mtodo deposito(float qtd) adiciona a quantidade passada por parmetro ao saldo atual. O mtodo saque(float qtd) retira do saldo a quantidade indicada no parmetro, caso o saldo seja insuficiente deve retornar o valor 1, caso contrrio retorna 0. Conta String conta String cliente float saldo void setCoonta(String cont) String getConta() void setCliente(String cliente) String getCliente() void setSaldo(float sal) float getSaldo() void deposito(float qtd) int saque(float qtd) void relatorio()

Na classe Produto, o mtodo getSituacao() retorna 0 se o estoque estiver acima do estoque mnimo permitido, caso contrrio retorna 1. No mtodo relatorio(), caso o estoque esteja abaixo do permitido deve se informado que necessita comprar mais produto. Produto int codigo String nome float preo int estoque int estoquemin void setCodigo(int cod) int getCodigo() void setNome(String nome)

58

Escola Tcnica de Braslia

Java e POO

String getNome() void setPreco(float p) float getPreco() void setEstoque(int est) int getEstoque() void setEstoqueMinimo(int estmin) int getEstoqueMinimo() int getSituacao() void relatorio()

59