Você está na página 1de 128

JAVA

SUMRIO
Captulo 1: LGICA DE PROGRAMAO ..................................................................................7 Introduo Lgica de Programao ...................................................................................7 SEQUNCIA LGICA...........................................................................................................7 INSTRUES ......................................................................................................................7 ALGORITMO ......................................................................................................................8 PROGRAMAS .....................................................................................................................8 Captulo 2: DESENVOLVENDO ALGORITMOS .........................................................................10 PSEUDOCDIGO ..............................................................................................................10 FASES ...............................................................................................................................10 Algoritmo.........................................................................................................................12 TESTE DE MESA ...............................................................................................................12 Captulo 3: DIAGRAMA DE BLOCO ..........................................................................................14 O QUE UM DIAGRAMA DE BLOCO? .................................................................................14 SIMBOLOGIA....................................................................................................................14 Constantes, Variveis e Tipos de Dados..........................................................................16 Operadores Relacionais...................................................................................................19 Operadores Lgicos .........................................................................................................21 Operaes Lgicas ...........................................................................................................22 Estrutura de Deciso e Repetio .......................................................................................23 CASO SELECIONE / SELECT ... CASE .................................................................................26 COMANDOS DE REPETIO ............................................................................................29 Captulo 4: ESTRUTURAS DE CONTROLE DE FLUXO ...............................................................33 switch case ......................................................................................................................33 Array ................................................................................................................................35 CAPTULO 5: INTRODUO ....................................................................................................38 Aspectos tcnicos ............................................................................................................38 Aspectos conceituais .......................................................................................................38 Java o mesmo que JavaScript ? ....................................................................................41 Programao para a Internet ? ...........................................................................................42 Integrao Java-HTML .....................................................................................................42 A difuso de Java .............................................................................................................43 Origem da Linguagem .........................................................................................................44 Caractersticas da Linguagem ..........................................................................................45 CAPTULO 6: JAVA MACHINE ..................................................................................................46

Java Virtual Machine ...........................................................................................................46 Java Virtual Machine .......................................................................................................46 Compiladores e Interpretadores .....................................................................................46 Arquitetura Java ..............................................................................................................47 Turbinando o interpretador .........................................................................................47 Vantagens ........................................................................................................................48 Desvantagens ..................................................................................................................48 Arquitetura Java Machine ...................................................................................................49 A arquitetura da Mquina Java .......................................................................................49 Java e suas edies .............................................................................................................49 CAPTULO 7: AMBIENTE DE DESENVOLVIMENTO ..................................................................51 Java Development Kit .........................................................................................................51 Eclipse .................................................................................................................................52 Instalao ........................................................................................................................52 Execuo do Eclipse ........................................................................................................52 Criando um projeto .............................................................................................................52 Perpectivas ......................................................................................................................53 Acrescentando uma classe ..............................................................................................53 Executando um programa ...............................................................................................53 Depurando um programa................................................................................................53 Depurando um programa ...................................................................................................54 Mudando a verso do JDK ..................................................................................................54 CAPTULO 8: ESTRUTURA DE UM PROGRAMA JAVA..............................................................55 Requisitos Bsicos ...............................................................................................................55 Requisitos Bsicos exemplo .........................................................................................55 Tipos Bsicos .......................................................................................................................56 Classes Bsicas ....................................................................................................................57 Variveis ..............................................................................................................................58 Declarao e inicializao................................................................................................59 Variveis locais ................................................................................................................59 Converso de tipos ..........................................................................................................59 Operadores e expresses ...................................................................................................60 Operadores aritmticos ..................................................................................................60 Operadores conjugados com atribuio de valores .......................................................60 Operadores de incremento e decremento .....................................................................61

Operadores de comparao ............................................................................................61 Operadores lgicos..........................................................................................................61 Operadores bit a bit ........................................................................................................61 Comandos bsicos ..............................................................................................................62 Comentrios ....................................................................................................................62 Condicionais ....................................................................................................................62 Laos ................................................................................................................................63 Importar para o arquivo fonte as classes ou pacotes indicados .....................................63 Definir o pacote ao qual pertence a classe sendo definida ............................................64 Interrompe a execuo de um bloco indicado ...............................................................64 Forar a prxima iterao do lao indicado ....................................................................64 Parmetros de entrada .......................................................................................................64 Pacotes ............................................................................................................................64 CAPTULO 9: CLASSES E OBJETOS ...........................................................................................66 Programao orientada a objetos ......................................................................................66 O que ? .........................................................................................................................66 Classes e Objetos .............................................................................................................66 Conceito de classe...............................................................................................................67 Atributos, mtodos e interfaces .........................................................................................68 Regras gerais ...................................................................................................................68 Mtodos Especiais ..............................................................................................................69 Construtor .......................................................................................................................69 Mtodo Abstrato .............................................................................................................69 Destrutor .........................................................................................................................69 Definio de uma classe e alocao ...................................................................................70 Construtores e instanciao ...............................................................................................70 Referncias a objetos..........................................................................................................71 Declarao de mtodos ......................................................................................................71 Notao UML ......................................................................................................................72 Sobrecarga de Mtodos ......................................................................................................73 Sobrecarga de construtores ................................................................................................74 Classes e mtodos abstratos ..............................................................................................75 Atributos e mtodos estticos ............................................................................................75 API Java ...............................................................................................................................76 CAPTULO 10: ARRAYS E STRING ............................................................................................77

Alocao de arrays ..........................................................................................................78 Arrays multidimensionais ................................................................................................79 String ...............................................................................................................................80 CAPTULO 11: HERANA E INTERFACES .................................................................................81 Herana ...............................................................................................................................81 Anatomia da herana ......................................................................................................81 Herana e hierarquia de classes ......................................................................................83 Definio de subclasses ...................................................................................................84 Chamada de mtodos na herana ..................................................................................85 Sobrescrita de mtodos ..................................................................................................85 Herana e construtores ......................................................................................................87 Interface ..............................................................................................................................87 Declarao de interfaces ....................................................................................................89 Exemplo do uso de interfaces .............................................................................................90 Definio das classes bases .............................................................................................90 Exemplo - Definio das classes derivadas .....................................................................91 Exemplo - Definio da interface ....................................................................................91 Exemplo - Redefinio das classes bases ........................................................................92 Exemplo - Redefinio da classes ....................................................................................92 Modificador final .............................................................................................................93 CAPTULO 12: ENCAPSULAMENTO .........................................................................................94 Modificadores de acesso ....................................................................................................94 Modificadores de acesso .................................................................................................95 Exemplo ...........................................................................................................................96 Manipulando datas em Java ...................................................................................................97 Date(java.util.Date) .............................................................................................................97 Calendar(java.util.Calendar) ...............................................................................................97 DateFormat(java.text.DateFormat) ....................................................................................98 CAPTULO 13: POLIMORFISMO ............................................................................................102 Exemplo conceitual .......................................................................................................102 Polimorfismo e Herana ................................................................................................103 CAPTULO 14: ENTRADA E SADA .........................................................................................106 Entrada ..............................................................................................................................106 InputStream - exemplo .................................................................................................107 Classes herdadas de InputStream .................................................................................108

Sada - OutputStreams ..................................................................................................109 Readers e Writers ..........................................................................................................110 A classe File .......................................................................................................................111 CAPTULO 15: THREADS ........................................................................................................112 Diagrama ...........................................................................................................................113 Implementao .................................................................................................................113 Sincronizao de threads ..............................................................................................115 CAPTULO 16: EXCEES E ERROS ........................................................................................116 Maneira comum de tratar excees/erros .......................................................................116 Tratamento em Java ......................................................................................................117 Modificador throws ..........................................................................................................118 Tratamento....................................................................................................................119 Passando o tratamento adiante ....................................................................................120 Tratamento mltiplo .....................................................................................................121 A clusula finally ...............................................................................................................121 Definindo excees ...........................................................................................................122 CAPTULO 17: TPICOS AVANADOS ...................................................................................123 Colees ............................................................................................................................123 Networking .......................................................................................................................125 Generics ............................................................................................................................126

CAPTULO 1: LGICA DE PROGRAMAO


INTRODUO LGICA DE PROGRAMAO
A lgica de programao necessria para pessoas que desejam trabalhar com desenvolvimento de sistemas e programas, ela permite definir a sequncia lgica para o desenvolvimento. Ento o que lgica? Lgica de programao a tcnica de encadear pensamentos para atingir determinado objetivo.

SEQUNCIA LGICA
Estes pensamentos podem ser descritos como uma sequncia de instrues, que devem ser seguidas para se cumprir uma determinada tarefa. Sequncia Lgica so passos executados at atingir um objetivo ou soluo de um problema.

INSTRUES
Na linguagem comum, entende-se por instrues um conjunto de regras ou normas definidas para a realizao ou emprego de algo. Em informtica, porm, instruo a informao que indica a um computador uma ao elementar a executar. Convm ressaltar que uma ordem isolada no permite realizar o processo completo, para isso necessrio um conjunto de instrues colocadas em ordem sequencial lgica. Por exemplo, se quisermos fazer uma omelete de batatas, precisaremos colocar em prtica uma srie de instrues: descascar as batatas, bater os ovos, fritar as batatas, etc... evidente que essas instrues tm que ser executadas em uma ordem adequada no se podem descascar as batatas depois de frit-las. Dessa maneira, uma instruo tomada em separado no tem muito sentido; para obtermos o resultado, precisamos colocar em prtica o conjunto de todas as instrues, na ordem correta. Instrues um conjunto de regras ou normas definidas para a realizao ou emprego de algo. Em informtica, o que indica a um computador uma ao elementar a executar.

ALGORITMO
Um algoritmo formalmente uma sequncia finita de passos que levam a execuo de uma tarefa. Podemos pensar em algoritmo como uma receita, uma sequncia de instrues que do cabo de uma meta especfica. Estas tarefas no podem ser redundantes nem subjetivas na sua definio, devem ser claras e precisas. Como exemplos de algoritmos podem citar os algoritmos das operaes bsicas (adio, multiplicao, diviso e subtrao) de nmeros reais decimais. Outros exemplos seriam os manuais de aparelhos eletrnicos, como um videocassete, que explicam passo-apasso como, por exemplo, gravar um evento. At mesmo as coisas mais simples, podem ser descritas por sequncias lgicas. Por exemplo: Chupar uma bala. Pegar a bala Retirar o papel Chupar a bala Jogar o papel no lixo Somar dois nmeros quaisquer. Escreva o primeiro nmero no retngulo A Escreva o segundo nmero no retngulo B Some o nmero do retngulo A com nmero do retngulo B e coloque o resultado no retngulo C

+
Triangulo A Triangulo B

=
Resultado

PROGRAMAS
Os programas de computadores nada mais so do que algoritmos escritos numa linguagem de computador (Pascal, C, Cobol, Fortran, Visual Basic entre outras) e que so interpretados e executados por uma mquina, no caso um computador. Notem que dada esta interpretao rigorosa, um programa por natureza muito especfica e rgida em relao aos algoritmos da vida real.

EXERCCIOS 1. Crie uma sequncia lgica para tomar banho: 2. Faa um algoritmo para somar dois nmeros e multiplicar o resultado pelo primeiro nmero 3. Descreva com detalhes a sequncia lgica para Trocar um pneu de um carro. 4. Faa um algoritmo para trocar uma lmpada. Descreva com detalhes:

CAPTULO 2: DESENVOLVENDO ALGORITMOS


PSEUDOCDIGO
Os algoritmos so descritos em uma linguagem chamada pseudocdigo. Este nome uma aluso posterior implementao em uma linguagem de programao, ou seja, quando formos programar em uma linguagem, por exemplo, Visual Basic, estar gerando cdigo em Visual Basic. Por isso os algoritmos so independentes das linguagens de programao. Ao contrrio de uma linguagem de programao no existe um formalismo rgido de como deve ser escrito o algoritmo. O algoritmo deve ser fcil de interpretar e fcil de codificar. Ou seja, ele deve ser o intermedirio entre a linguagem falada e a linguagem de programao. REGRAS PARA CONSTRUO DO ALGORITMO 1. Para escrever um algoritmo precisamos descrever a sequncia de instrues, de maneira simples e objetiva. Para isso utilizaremos algumas tcnicas: 2. Usar somente um verbo por frase; 3. Imaginar que voc est desenvolvendo um algoritmo para pessoas que no trabalham com informtica; 4. Usar frases curtas e simples; 5. Ser objetivo; 6. Procurar usar palavras que no tenham sentido dbio.

FASES
No captulo anterior vimos que ALGORITMO uma sequncia lgica de instrues que podem ser executadas. importante ressaltar que qualquer tarefa que siga determinado padro pode ser descrita por um algoritmo, como por exemplo: COMO FAZER ARROZ DOCE ou ento CALCULAR O SALDO FINANCEIRO DE UM ESTOQUE. Entretanto ao montar um algoritmo, precisamos primeiro dividir o problema apresentado em trs fases fundamentais.

10

Onde temos: ENTRADA: So os dados de entrada do algoritmo PROCESSAMENTO: So os procedimentos utilizados para chegar ao resultado final SADA: So os dados j processados Analogia com o homem

Exemplo de Algoritmo Imagine o seguinte problema: Calcular a mdia final dos alunos da 3 Srie. Os alunos realizaro quatro provas: P1, P2, P3 e P4. Onde: Mdia Final = P1 + P2 + P3 + P4 4 Para montar o algoritmo proposto, faremos trs perguntas: a) Quais so os dados de entrada? R: Os dados de entrada so P1, P2, P3 e P4

11

b) Qual ser o processamento a ser utilizado? R: O procedimento ser somar todos os dados de entrada e dividi-los por 4 (quatro) P1 + P2 + P3 + P4 4 c) Quais sero os dados de sada? R: O dado de sada ser a mdia final

ALGORITMO
Receba a nota da prova1 Receba a nota de prova2 Receba a nota de prova3 Receba a nota da prova4 Some todas as notas e divida o resultado por 4 Mostre o resultado da diviso

TESTE DE MESA
Aps desenvolver um algoritmo ele dever sempre ser testado. Este teste chamado de TESTE DE MESA, que significa, seguir as instrues do algoritmo de maneira precisa para verificar se o procedimento utilizado est correto ou no. Veja o exemplo: Nota da Prova 1 Nota da Prova 2 Nota da Prova 3 Nota da Prova 4 Utilize a tabela abaixo: P1 P2 P3 P4 MDIA

12

EXERCCIOS 1) Identifique os dados de entrada, processamento e sada no algoritmo abaixo Receba cdigo da pea Receba valor da pea Receba Quantidade de peas Calcule o valor total da pea (Quantidade * Valor da pea) Mostre o cdigo da pea e seu valor total

2) Faa um algoritmo para Calcular o estoque mdio de uma pea, sendo que ESTOQUEMDIO = (QUANTIDADE MNIMA + QUANTIDADE MXIMA) /2 3) Teste o algoritmo anterior com dados definidos por voc.

13

CAPTULO 3: DIAGRAMA DE BLOCO


O QUE UM DIAGRAMA DE BLOCO?
O diagrama de blocos uma forma padronizada e eficaz para representar os passos lgicos de um determinado processamento. Com o diagrama podemos definir uma sequncia de smbolos, com significado bem definido, portanto, sua principal funo a de facilitar a visualizao dos passos de um processamento.

SIMBOLOGIA
Existem diversos smbolos em um diagrama de bloco. No decorrer do curso apresentaremos os mais utilizados. Veja no quadro abaixo alguns dos smbolos que iremos utilizar:

Dentro do smbolo sempre ter algo escrito, pois somente os smbolos no nos dizem nada. Veja no exemplo a seguir: Exemplos de Diagrama de Bloco CHUPAR UMA BALA

CALCULAR A MDIA DE 4 NOTAS

14

Veja que no exemplo da bala seguimos uma sequncia lgica somente com informaes diretas, j no segundo exemplo da mdia utilizamos clculo e exibimos o resultado do mesmo. EXERCCIOS 1. Construa um diagrama de blocos que : Leia a cotao do dlar Leia um valor em dlares Converta esse valor para Real Mostre o resultado 2. Desenvolva um diagrama que: Leia 4 (quatro) nmeros Calcule o quadrado para cada um Somem todos e Mostre o resultado 3. Construa um algoritmo para pagamento de comisso de vendedores de peas, levando-se em considerao que sua comisso ser de 5% do total da venda e que voc tem os seguintes dados:

15

Identificao do vendedor Cdigo da pea Preo unitrio da pea Quantidade vendida E depois construa o diagrama de blocos do algoritmo desenvolvido, e por fim faa um teste de mesa.

CONSTANTES, VARIVEIS E TIPOS DE DADOS.


Variveis e constantes so os elementos bsicos que um programa manipula. Uma varivel um espao reservado na memria do computador para armazenar um tipo de dado determinado. Variveis devem receber nomes para poderem ser referenciadas e modificadas quando necessrio. Um programa deve conter declaraes que especificam de que tipo so as variveis que ele utilizar e s vezes um valor inicial. Tipos podem ser, por exemplo: inteiros, reais, caracteres, etc. As expresses combinam variveis e constantes para calcular novos valores. Constantes Constante um determinado valor fixo que no se modifica ao longo do tempo, durante a execuo de um programa. Conforme o seu tipo, a constante classificada como sendo numrica lgica e literal. Exemplos de constante

Variveis Varivel a representao simblica dos elementos de certo conjunto. Cada varivel corresponde a uma posio de memria, cujo contedo pode se alterado ao longo do tempo durante a execuo de um programa. Embora uma varivel possa assumir diferentes valores, ela s pode armazenar um valor a cada instante.

Exemplos de variveis.

16

Tipos de Variveis As variveis e as constantes podem ser basicamente de quatro tipos: Numricas, caracteres, Alfanumricas ou lgicas. Numricas Especficas para armazenamento de nmeros, que posteriormente podero ser utilizados para clculos. Podem ser ainda classificadas como Inteiras ou Reais. As variveis do tipo inteiro so para armazenamento de nmeros inteiros e as Reais so para o armazenamento de nmeros que possuam casas decimais. Caracteres Especficos para armazenamento de conjunto de caracteres que no contenham nmeros (literais). Ex: nomes. Alfanumricas Especficas para dados que contenham letras e/ou nmeros. Pode em determinados momentos conter somente dados numricos ou somente literais. Se usado somente para armazenamento de nmeros, no poder ser utilizada para operaes matemticas. Lgicas Armazenam somente dados lgicos que podem ser Verdadeiro ou Falso. Declarao de Variveis As variveis s podem armazenar valores de um mesmo tipo, de maneira que tambm so classificadas como sendo numricas lgicas e literais. EXERCCIOS 1. O que uma constante? D dois exemplos. 2. O que uma varivel? D dois exemplos. 3. Faa um teste de mesa no diagrama de bloco abaixo e preencha a tabela ao lado com os dados do teste:

17

4. Sabendo-se que Jos tem direito a 15% de reajuste de salrio, complete o diagrama abaixo:

Operadores Os operadores so meios pelo qual incrementamos, decrementamos, comparamos e avaliamos dados dentro do computador. Temos trs tipos de operadores: Operadores Aritmticos

18

Operadores Relacionais Operadores Lgicos Operadores Aritmticos Os operadores aritmticos so os utilizados para obter resultados numricos. Alm da adio, subtrao, multiplicao e diviso, podem utilizar tambm o operador para exponenciao. Os smbolos para os operadores aritmticos so:

Hierarquia das Operaes Aritmticas 1 ( ) Parnteses 2 Exponenciao 3 Multiplicao, diviso (o que aparecer primeiro) 4 + ou (o que aparecer primeiro) Exemplo

OPERADORES RELACIONAIS
Os operadores relacionais so utilizados para comparar String de caracteres e nmeros. Os valores a serem comparados podem ser caracteres ou variveis. Estes operadores sempre retornam valores lgicos (verdadeiro ou falso/ True ou False) Para

19

estabelecer prioridades no que diz respeito a qual operao executar primeiro, utilize os parnteses. Os operadores relacionais so:

Exemplo: Tendo duas variveis A = 5 e B = 3 Os resultados das expresses seriam:

Smbolo Utilizado para comparao entre expresses

20

OPERADORES LGICOS
Os operadores lgicos servem para combinar resultados de expresses, retornando se o resultado final verdadeiro ou falso. Os operadores lgicos so: E OU NO AND OR NOT

E / AND Uma expresso AND (E) verdadeira se todas as condies forem Verdadeiras OR/OU Uma expresso OR (OU) verdadeira se pelo menos uma condio for verdadeira NOT Um expresso NOT (NO) inverte o valor da expresso ou condio, se verdadeira inverte para falsa e vice-versa. A tabela abaixo mostra todos os valores possveis criados pelos trs operadores lgicos (AND, OR e NOT).

21

Exemplos: Suponha que temos trs variveis A = 5, B = 8 e C =1 Os resultados das expresses seriam:

OPERAES LGICAS
Operaes Lgicas so utilizadas quando se torna necessrio tomar decises em um diagrama de bloco. Num diagrama de bloco, toda deciso ter sempre como resposta o resultado VERDADEIRO ou FALSO. Como no exemplo do algoritmo CHUPAR UMA BALA. Imaginemos que algumas pessoas no gostem de chupar bala de Morango, neste caso teremos que modificar o algoritmo para: Chupar uma bala. Pegar a bala A bala de morango? Se sim, no chupe a bala Se no, continue com o algoritmo Retirar o papel Chupar a bala Jogar o papel no lixo Exemplo: Algoritmo Chupar Bala utilizando diagrama de Blocos

22

EXERCCIOS 1. Elabore um diagrama de blocos que leia um nmero. Se positivo armazene-o em A, se for negativo, em B. No final mostrar o resultado. 2. Ler um nmero e verificar se ele par ou mpar. Quando for par armazenar esse valor em P quando for mpar armazen-lo em I. Exibir P e I no final do processamento. 3. Construa um diagrama de blocos para ler uma varivel numrica N e imprimi-la somente se a mesma for maior que 100, caso contrrio imprimi-la com o valor zero.

ESTRUTURA DE DECISO E REPETIO


Como vimos no captulo anterior em Operaes Lgicas, verificamos que na maioria das vezes necessitamos tomar decises no andamento do algoritmo. Essas decises interferem diretamente no andamento do programa. Trabalharemos com dois tipos de estrutura. A estrutura de Deciso e a estrutura de Repetio Comandos de Deciso Os comandos de deciso ou desvio fazem parte das tcnicas de programao que conduzem a estruturas de programas que no so totalmente seqenciais. Com as instrues de SALTO ou DESVIO pode-se fazer com que o programa proceda de uma ou outra maneira, de acordo com as decises lgicas tomadas em funo dos dados ou

23

resultados anteriores. As principais estruturas de deciso so: Se Ento, Se ento Seno e Caso Selecione. SE ENTO / IF ... THEN A estrutura de deciso SE/IF normalmente vem acompanhada de um comando, ou seja, se determinada condio for satisfeita pelo comando SE/IF ento execute determinado comando. Imagine um algoritmo que determinado aluno somente estar aprovado se sua mdia for maior ou igual a 5.0, veja no exemplo de algoritmo como ficaria. SE MEDIA >= 5.0 ENTO ALUNO APROVADO Em diagrama de blocos ficaria assim:

Em Visual Basic
IF MEDIA >= 5 Then Text1 = APROVADO ENDIF

SE ENTO SENO / IF ... THEN ... ELSE A estrutura de deciso SE/ENTO/SENO, funciona exatamente como a estrutura SE, com apenas uma diferena, em SE somente podemos executar comandos caso a condio seja verdadeira, diferente de SE/SENO pois sempre um comando ser executado independente da condio, ou seja, caso a condio seja verdadeira o comando da condio ser executado, caso contrrio o comando da con dio falsa ser executado Em algoritmo ficaria assim:

24

SE MDIA >= 5.0 ENTO ALUNO APROVADO SENO ALUNO REPROVADO Em diagrama

Em Visual Basic
IF MEDIA >= 5 Then Text1 = APROVADO ELSE Text1 = REPROVADO ENDIF

No exemplo acima est sendo executada uma condio que, se for verdadeira, executa o comando APROVADO, caso contrrio executa o segundo comando REPROVADO. Podemos tambm dentro de uma mesma condio testar outras condies. Como no exemplo abaixo:

25

Em Visual Basic
IF MEDIA >= 5 Then IF MEDIA >= 7.0 then Text1 = Aluno APROVADO ELSE Text1 = Aluno Necessita fazer outra Avaliao ENDIF ELSE Text1 = Aluno REPROVADO ENDIF

CASO SELECIONE / SELECT ... CASE


A estrutura de deciso CASO/SELECIONE utilizada para testar, na condio, uma nica expresso, que produz um resultado, ou, ento, o valor de uma varivel, em que est armazenado um determinado contedo. Compara-se, ento, o resultado obtido no teste com os valores fornecidos em cada clusula Caso. No exemplo do diagrama de blocos abaixo, recebido uma varivel Op e testado seu contedo, caso uma das condies seja satisfeita, atribudo para a varivel Titulo a String Opo X, caso contrrio atribudo String Opo Errada.

26

Em Visual Basic utilizamos a seguinte sequncia de comandos para representar o diagrama anterior.
TITULO = OP = INPUTBOX(DIGITE A OPO) SELECT CASE OP CASE 1 TITULO = OPO 1 CASE 2 TITULO = OPO 2 CASE 3 TITULO = OPO 3 CASE 4 TITULO = OPO 4 CASE 5 TITULO = OPO 5 CASE ELSE TITULO = OPO ERRADA END SELECT LABEL1.CAPTION = TITULO

27

EXERCCIOS 1. Joo Papo-de-Pescador, homem de bem, comprou um microcomputador para controlar o rendimento dirio de seu trabalho. Toda vez que ele traz um peso de peixes maior que o estabelecido pelo regulamento de pesca do estado de So Paulo (50 quilos) deve pagar uma multa de R$ 4,00 por quilo excedente. Joo precisa que voc faa um diagrama de blocos que leia a varivel P (peso de peixes) e verifique se h excesso. Se houver, gravar na varivel E (Excesso) e na varivel M o valor da multa que Joo dever pagar. Caso contrrio mostrar tais variveis com o contedo ZERO. 2. Elabore um diagrama de bloco que leia as variveis C e N, respectivamente cdigo e nmero de horas trabalhadas de um operrio. E calcule o salrio sabendo-se que ele ganha R$ 10,00 por hora. Quando o nmero de horas exceder a 50 calcule o excesso de pagamento armazenando-o na varivel E, caso contrrio zerar tal varivel. A hora excedente de trabalho vale R$ 20,00. No final do processamento imprimir o salrio total e o salrio excedente. 3. Desenvolva um diagrama que: Leia 4 (quatro) nmeros; Calcule o quadrado de cada um; Se o valor resultante do quadrado do terceiro for >= 1000, imprima-o e finalize; Caso contrrio, imprima os valores lidos e seus respectivos quadrados.

4. Faa um diagrama de bloco que leia um nmero inteiro e mostre uma mensagem indicando se este nmero par ou mpar, e se positivo ou negativo. 5. A Secretaria de Meio Ambiente que controla o ndice de poluio mantm 3 grupos de indstrias que so altamente poluentes do meio ambiente. O ndice de poluio aceitvel varia de 0,05 at 0,25. Se o ndice sobe para 0,3 as indstrias do 1 grupo so intimadas a suspenderem suas atividades, se o ndice crescer para 0,4 as industrias do 1 e 2 grupo so intimadas a suspenderem suas atividades, se o ndice atingir 0,5 todos os grupos devem ser notificados a paralisarem suas atividades. Faa um diagrama de bloco que leia o ndice de poluio medido e emita a notificao adequada aos diferentes grupos de empresas. 6. Elabore um algoritmo que dada a idade de um nadador classifique-o em uma das seguintes categorias: Infantil A = 5 a 7 anos

28

Infantil B = 8 a 11 anos Juvenil A = 12 a 13 anos Juvenil B = 14 a 17 anos Adultos = Maiores de 18 anos 7. Elabore um algoritmo que gera e escreve os nmeros mpares dos nmeros lidos entre 100 e 200.

COMANDOS DE REPETIO
Utilizamos os comandos de repetio quando desejamos que um determinado conjunto de instrues ou comandos sejam executados um nmero definido ou indefinido de vezes, ou enquanto um determinado estado de coisas prevalecer ou at que seja alcanado. Trabalharemos com modelos de comandos de repetio: Enquanto x, processar (Do While ...Loop); At que x, processar ... (Do Until ... Loop); Processar ..., Enquanto x (Do ... Loop While); Processar ..., At que x (Do ... Loop Until) Para ... At ... Seguinte (For ... To ... Next) Enquanto x, Processar (Do While ... Loop) Neste caso, o bloco de operaes ser executado enquanto a condio x for verdadeira. O teste da condio ser sempre realizado antes de qualquer operao. Enquanto a condio for verdadeira o processo se repete. Podemos utilizar essa estrutura para trabalharmos com contadores. Em diagrama de bloco a estrutura a seguinte: Exemplo de Contador

29

Em Visual Basic:
Nr = 0 Do While Nr <= 100 Nr = Nr + 1 Loop

At que x, processar ... (Do Until ... Loop) Neste caso, o bloco de operaes ser executado at que a condio seja satisfeita, ou seja, somente executar os comandos enquanto a condio for falsa. Em diagrama de bloco Exemplo de At - Diagrama

Em Visual Basic
Nr = 0 Do Until Nr = 100 Nr = Nr + 1 Loop Label1.Caption = Nr

30

Processar ..., Enquanto x (Do ... Loop While) Neste caso primeiro so executados os comandos, e somente depois realizado o teste da condio. Se a condio for verdadeira, os comandos so executados novamente, caso seja falso encerrado o comando DO.

Em diagrama de bloco

Em Visual Basic
Nr = 0 Do Nr = Nr + 1 Loop While Nr <= 100 Label1.Caption = Nr

Estruturas de controle de fluxo if ... else Comando condicional: executa um bloco de comandos se uma condio for verdadeira. A clusula else (condio falsa) opcional.

31

if (idade >= 18) { Response.Write("Autorizado."); Response.Write("Sua idade : " + idade); } else if (idade > 15 && idade < 18) { Response.Write("Somente com os pais."); Response.Write("Menor de 18 anos."); } else { Response.Write("No autorizado.");

32

CAPTULO 4: ESTRUTURAS DE CONTROLE DE FLUXO


SWITCH CASE
Estrutura de deciso que seleciona um comando com base no valor de uma varivel. A clusula default opcional. Estruturas de repetio for

Estrutura de repetio composta por trs expresses: Inicializao. Condio de parada. Atualizao.

for (int i = 0; i < 10; i++) { Response.Write(i); Response.Write("<br />"); }


Estruturas de repetio while Estrutura de repetio que realiza as operaes indicadas enquanto a condio especificada for verdadeira.

33

Estruturas de repetio do ... while Estrutura de repetio semelhante anterior, porm as condies so verificadas ao final da execuo. As operaes especificadas so executadas pelo menos uma vez. Necessita do caractere ; ao final da estrutura.

Converso de tipos

34

ARRAY
Array um tipo que permite o armazenamento de uma coleo de valores de um mesmo tipo. Arrays so indexados a partir de zero (0). No podem ter seu tamanho alterado depois de instanciados. Para declarar um Array, basta adicionar um par de colchetes logo aps a declarao do tipo dos elementos individuais;

Instanciando arrays

Preenchendo um array

Arrays podem ser: Unidimensionais Bidimensionais Jagged

Unidimensionais

Bidimensionais

Jagged

35

Estruturas de repetio foreach Esta estrutura de repetio uma variao do for. Especifica uma varivel auxiliar e a coleo ou array cujos elementos sero percorridos.

Enumeraes Definindo tipos enumerados

Namespaces Declarando um namespace

36

Namespaces em cadeia

Instruo Using

Comentrios e regies Criando comentrios e regies:

37

CAPTULO 5: INTRODUO
ASPECTOS TCNICOS
Java j nasceu adulto, ou seja, no foi uma linguagem que passou pelo processo tradicional de avaliao, enriquecimento e agregao de recursos. Com isso no se percebe na linguagem estruturas acomodadas a posteriori, ou adaptaes, que para o programador representam verdadeiras armadilhas. Tecnicamente, Java bem homognea em termos de estrutura e sintaxe. Consegue ser verdadeiramente orientada a objetos, e ao mesmo tempo de fcil programao. Em termos de ambiente de desenvolvimento, Java apresenta caractersticas peculiares. Pode comportar o desenvolvimento de uma aplicao de grande porte, tal como C++, e oferece recursos para tal. No entanto pode ser eficientemente usada para aplicaes de poucas linhas, gerando executveis bem reduzidos e enxutos. Java otimiza a gerao de cdigo em funo do tamanho da aplicao. A segurana oferecida ao programador em tempo de compilao e execuo permite a gerao de aplicativos com menos bugs e com menos riscos de perda de controle da execuo, acelerando o processo de desenvolvimento. Java e seus vrios aspectos Aspectos conceituais introduzidos com Java Novo paradigma de computao e redes Novo mercado de servios

ASPECTOS CONCEITUAIS
Java no representa apenas uma linguagem, representa tambm um novo modelo de computao e desenvolvimento sobre a Internet. Podemos dizer que, mesmo que Java no seja a linguagem do sculo XXI, por razes mercadolgicas, o conceito que Java carrega consigo j amplamente explorado pelas linguagens de programao para a Internet que esto surgindo. Este conceito nada mais do que tornar a Internet um meio de interao no apenas entre as pessoas, mas entre as aplicaes e objetos de programao, de forma que os recursos estaro compartilhados nesta grande rede e o seu uso ficar transparente ao usurio final. Este conceito de rede e computao gera uma srie de outros servios e faz com que as empresas de desenvolvimento norteiem seus esforos neste sentido.

38

O que realmente Java ? Limitada ? Simplicidade ou incapacidade ? Interpretada X compilada ? Ineficiente ?

Java uma linguagem limitada? O fato de Java no apresentar alguns recursos disponveis em outras linguagens de alto nvel, tais como ponteiros, destrutores e herana mltipla no a qualifica como inferior nestes aspectos. Com Java possvel realizar praticamente as mesmas coisas que qualquer outra linguagem que utiliza esses recursos, com a vantagem de ter eliminado grande parte das fontes de erros e bugs que prejudicam e atrasam um desenvolvimento. Desta forma, esta simplificao do ponto de vista do programador representou uma enorme complicao para os idealizadores da linguagem, que tiveram que garantir que Java fosse igualmente eficiente com estes recursos a menos. Java ineficiente? Java independente da plataforma. Para chegar a isto o cdigo binrio em Java na realidade um cdigo interpretado. Veremos mais a fundo esta questo posteriormente. Dessa forma, o desempenho de uma aplicao Java depende essencialmente do interpretador utilizado. Com isto, v-se aplicaes idnticas, em mquinas iguais rodando com diferenas de velocidade. Sob este ponto de vista, podemos afirmar que Java ser sempre menos eficiente ou pelo menos igual a uma mesma aplicao em C. A tendncia verificada nos interpretadores Java atingir nveis de performance iguais ao C, com o uso de tcnicas especficas e desenvolvidas especialmente para isto. No entanto o limite superior deve ser o limite imposto por C. Padro ? Cdigo aberto X proprietrio ? Portabilidade X eficincia ? Economicamente vivel ? Custo X benefcio

39

Java um novo padro ? Java no um padro aberto, mas sim uma linguagem definida e controlada pela Sun, no entanto, com ampla participao de comunidades de usurios e com processos de definio e evoluo muito parecidos com os procedimentos adotados pelos softwares de cdigo aberto. Existem solues alternativas a Java, em nveis diferentes. C# da Microsoft, por exemplo, muito simular conceitualmente e em termos de linguagem, sem no entanto compartilhar todas as caractersticas de Java. Java portvel ? A caracterstica multiplataforma de Java torna desnecessria, em princpio, a preocupao com sua portabilidade. No entanto tem-se verificado que surgiram ferramentas que convertem Java para C, a fim de se ganhar em performance. Utiliza-se tambm, e Java suporta, a incluso de rotinas em C nos programas (cdigo nativo). Com isto surgem aplicaes desenvolvidas em Java, mas que so especificas para determinadas plataformas. Neste caso, as consideraes sobre portabilidade em Java passam as ser as mesmas que as aplicadas a C. Java economicamente vivel ? Vrios fatores devem ser levados nesta considerao, entre eles, a real utilidade da linguagem, o esforo de seu aprendizagem e seu poder. O sucesso de uma ferramenta depende do que se pode fazer com ela e com que esforo. Java pretende oferecer o mesmo que C++ em termos de poder de cdigo e ao mesmo tempo oferece um ambiente de desenvolvimento mais bug free e conciso que C, almejando exigir menos esforo que programar em C. Esta ltima caracterstica muito importante porque possibilita o uso de ferramentas de desenvolvimento mais poderosas e automatizadas, semelhantes ao VB, por exemplo. JavaScript ? Programao para desktop ? Executveis linha de comando Programas grficos AWT Swing

Games Programao para dispositivos ? Cartes, Celulares, Palms, etc

40

JAVA O MESMO QUE JAVASCRIPT ?


JavaScript uma outra linguagem, orientada a modelos, e no a objetos, e que tem um nome similar simplesmente porque compartilha os modelos de dados e objetos de Java. Assim, muito pouco do que se aplica a Java pode ser aplicado a JavaScript, que uma linguagem puramente interpretada e portanto goza deste benefcio em sua estrutura de programao. JavaScript utilizado para acrescentar processamento local s pginas HTML, e interage diretamente com as diretivas da pgina. Pode ser considerado como uma espcie de HTML procedural. Convm ressaltar que JavaScript muito poderosa, e pode substituir Java em muitas aplicaes, o que geralmente no levado em conta quando se estuda Java. Programao para desktops ? Java utilizada para o desenvolvimento de aplicaes para desktop, especialmente pelas empresas que desejam ter uma nica ferramenta para diferentes plataformas (Windows, Linux, Unix, Mac, etc.). Java possui todos os recursos para o desenvolvimento de aplicaes completas, inclusive jogos. No entanto, para a execuo de um programa Java num desktop necessrio que este possua uma Java Virtual Machine instalada, como veremos logo mais. A construo de programas grficos pode ser feita com bibliotecas grficas simples (AWT) ou mais ricas (Swing). Programao para dispositivos ? Java amplamente utilizada para o desenvolvimento de aplicaes em dispositivos, especialmente os de pequeno porte, tais como cartes, telefones celulares, computadores de mo e at mesmo robs. A grande vantagem da utilizao de Java que um mesmo programa pode rodar em dispositivos diferentes devido a caracterstica multiplataforma dos programas. Para a programao de dispositivos utilizado um subconjunto das bibliotecas da linguagem, chamado JME (Java Micro Edition). Programao para a Internet ? Applets Servlets EJB StoredProcedures Web Services

41

PROGRAMAO PARA A INTERNET ?


Uma aplicao Web normalmente possui componentes que so executados num servidor Web (ou num servidor de aplicao). Alm desses componentes que rodam no servidor, uma aplicao Web pode depender de componentes que so executados no cliente (navegador) e mesmo componentes que so executados no banco de dados. A linguagem Java pode ser utilizada para a construo de todos esses tipos de componentes. Os componentes que so executados nos navegadores so chamados de Applets. Muitos banco de dados permitem a construo de Stored Procedures escritas em Java. Os componentes que rodam nos servidores podem ser do tipo Servlets ou do tipo Enterprise Java Beans (EJB). Existem ainda os componentes que rodam em servidores que implementam um ou mais WebServices. Independente do tipo de componente, a linguagem a mesma, diferindo apenas a forma como os programas so construdos e a forma como os diferentes servidores, banco de dados ou navegadores suportam a execuo desses componentes. Integrada ao HTML Applets so programas que rodam dentro de uma pgina tempo recorde de difuso busca dos principais fornecedores pela compatibilidade e suporte Java Amplamente difundida

INTEGRAO JAVA-HTML
Java encontra-se totalmente integrado ao HTML nas aplicaes chamadas Applets. Applets so programas em Java que rodam em uma parte da pgina HTML delimitada por um diretiva especfica. No s o espao alocado na pgina definido por diretivas HTML, mas tambm a passagem de parmetros para o applet. Java portanto introduziu novas diretivas linguagem HTML. Outro aspecto a ser considerado a integrao Java-browser, que transcende a simples integrao com o HTML e no se baseia em nenhum padro formal. Java consegue manipular recursos da prpria janela de browser, como por exemple forar a abertura de uma nova instncia do browser. Este tipo de interao mais forte e torna Java mais do que um parceiro do HTML, mas um parceiro do browser.

42

A DIFUSO DE JAVA
Nenhuma outra linguagem conseguiu se difundir em tempo to curto quanto Java. Todos os browsers buscam compatibilidade e grande parte dos servidores de aplicao e banco de dados suportam a linguagem. Existem certificaes de ferramentas que atestam a sua compatibilidade linguagem, garantindo que programas construdos para um servidor possa rodar em qualquer outro. Enorme potencialidade multimdia recursos de IU, I/O e rede Inmeras bibliotecas e ferramentas de terceiros ou em

cdigo aberto Fcil aprendizado Constantemente aprimorada gerao de pacotes e bibliotecas papel de outras companhias Sun no deseja manter o controle

Java rico em recursos Java apresenta todos os recursos para programao de interfaces com usurio, fcil manipulao de I/O e capacidade de interao em ambientes de rede. Todo este conjunto de recursos d linguagem uma enorme potencialidade de aplicaes. Adicionalmente, crescente o nmero de usurios, grupos ou empresas que colaboram com o desenvolvimentos de ferramentas ou bibliotecas, grande parte delas de uso livre. Java pode ser aprendida facilmente Este ponto controverso. Mas podemos dividir a afirmao acima em trs que so mais amplamente aceitas: Java fcil de ser aprendida por quem no conhece nenhuma linguagem de programao; Java muito fcil de ser aprendido para quem j conhece uma linguagem de programao; Java mais fcil de ser aprendida por quem j conhece uma linguagem orientada a objetos.

43

Java constantemente aprimorada Aprimoramento de Java no significa suprir deficincias, mas acrescentar potencialidades cuja necessidade sentida quando se deseja programar para a Internet. A Sun desenvolveu um conjunto de bibliotecas para Java bem completo e que definiu como implementao bsica da linguagem. Outras companhias esto acrescentando novos recursos atravs do fornecimento de novas bibliotecas. A Sun estimula este tipo de atividade e sabe que dele depende o crescimento da linguagem. Alm da iniciativa de companhias, o esforo de grupos de usurios e de comunidades baseadas no cdigo aberto enriquecem o uso da linguagem constantemente.

ORIGEM DA LINGUAGEM
Concebida e desenvolvida pela SunSoft - brao da Sun Suporte e compatibilidade nos produtos da Netscape - importncia fundamental na difuso da linguagem

Herana do C++ e Smalltalk - orientao a objetos Aplicaes Internet Applets e Applications Ambiente destino: Java Machine

A linguagem Java foi concebida e desenvolvida inteiramente pela SunSoft, brao da companhia Sun na poca e responsvel pelo desenvolvimento do software bsico dos equipamentos Sun e que atuava tambm na rea de desenvolvimento de compiladores para outras linguagens. O suporte oferecido desde o incio pela Netscape em seus browsers foi decisivo para a divulgao e difuso de Java. O fascnio causado pelos primeiros applets foi fator de conquista de adeptos em toda a Internet. A SunSoft vinha trabalhando h muito tempo no desenvolvimento de ambientes Smalltalk. Dessa forma, Java herdou a fidelidade do Smalltalk aos conceitos de Programao Orientada a Objetos (OOP), e os recursos concisos, poderosos e prticos do C. Quem conhece C++ percebe que Java se encaixa mais corretamente nos conceitos de OOP e quem conhece Smalltalk percebe que Java permite um controle maior dos recursos do sistema, como C. Portanto um casamento feliz. O grande trunfo de Java permitir que se programem aplicaes que utilizam os recursos da Internet. Com a proliferao dos web servers e a popularizao da Internet, Java ocupou um espao que estava vazio.

44

CARACTERSTICAS DA LINGUAGEM
Totalmente orientada a objetos Multithread (paralelizao de processos) Sintaticamente e morfologicamente quase idntica ao C++ (existem diferenas fundamentais) Ausncia de ponteiros reduo de bugs aumento da segurana

Independente da plataforma Orientada aplicaes de rede (especialmente Web) Quatro Ss : small, simple, safe and secure

Orientada a objetos Implementa os principais conceitos da orientao a objetos. Multithread A facilidade de programar multithreads habilita Java para o desenvolvimento de grandes aplicaes e de IU poderosas. A capacidade da linguagem de fazer um gerenciamento preemptivo deste recurso otimiza e torna geral o seu uso. Formato semelhante ao C++ O formato da linguagem semelhante ao C++ fator importante no reaproveitamento de profissionais de desenvolvimento. No entanto, as diferenas devem ser cuidadosamente estudadas pois so significativas. Ausncia de ponteiros Aumenta a produtividade dos profissionais de desenvolvimento, pois elimina grande fonte de erros. Pode gerar alguma dificuldade na criao de rotinas que utilizariam (em C) aritmtica de ponteiros. Orientada a Web Preenche uma lacuna existente para criao de aplicaes Web, e disto decorre sua caracterstica multiplataforma.

45

CAPTULO 6: JAVA MACHINE


JAVA VIRTUAL MACHINE
Cdigo fonte compilado para cdigo binrio Java, que interpretado e executado em diferentes plataformas

JAVA VIRTUAL MACHINE


Denominao dada ao interpretador Java rodando sobre o sistema operacional de qualquer mquina. Esta combinao (interpretador+OS) tem um comportamento idntico para qualquer OS suportado por Java. Dessa forma, caracteriza-se como uma mquina virtual que executa seu cdigo binrio Java, chamados tambm de bytecodes.

COMPILADORES E INTERPRETADORES

Java Virtual Machine um conceito implementado hoje por um conjunto razovel de interpretadores para as plataformas mais comuns.

46

Verifica-se que existe uma srie de compiladores Java para cada plataforma distinta, mas no entanto existe tambm um nico compilador Java, escrito em Java, utilizado em todas as plataformas. Assim, para se sustentar o conceito de Java Virtual Machine, exige-se apenas interpretadores distintos. O Java Runtime Environment (JRE) um interpretador Java que suporta a execuo de aplicaes Java em desktops. Interpretador Java segue modelo simples e estruturado permitindo grande desempenho. Compilao just-in-time Cache de execuo. Possibilidade de uso de cdigo nativo. Informao extra pode ser passada ao interpretador. Existem tradutores para C.

ARQUITETURA JAVA
Os bytecodes Java so destinados a uma mquina de estrutura simples e poderosa, isto resulta em um interpretador simples e reduzido, no tocante a parte que interage com o cdigo Java. A parte do interpretador que interage com o OS varia em simplicidade conforme o ambiente.

TURBINANDO O INTERPRETADOR
Uma srie de artifcios so utilizados para melhorar a performance de um cdigo Java. Dentre estes podemos citar: Compilao just-in-time: cdigo compilado para cdigo nativo a medida que carregado por download- tcnica usada em aplicaes que trafegam pela rede. Cache: cdigo de maquina interpretado armazenado em cache , evitando a repetio da interpretao de partes repetitivas do cdigo. Acelera execuo de loops. Para programas bem estruturados o ganho de velocidade de execuo pode ser de 10 vezes. Uso de pedaos de cdigo nativo dentro do cdigo Java. Causa perda da caracterstica multiplataforma de uma aplicao que utiliza este recurso. Parmetros extras: informaes relativas mquina onde o cdigo esta sendo interpretado podem acelerar este processo, ou seja, os bytecodes ajudam o interpretador sob determinada plataforma.

47

VANTAGENS
Multiplataforma Compatibilidade Portabilidade Verificao da segurana do cdigo Toda mquina pode ser Java Virtual por software

Alm das vantagens clssicas de utilizar um interpretador Java (compatibilidade, multiplataforma, portabilidade, etc.) um outro ponto deve ser considerado como positivo: a verificao, pelo interpretador, da confiabilidade do programa sendo executado. Isto significa que o interpretador realiza rigorosa verificao a fim de certificarse que o programa Java confivel em termos de utilizao dos recursos da mquina. O interpretador capaz de verificar se um programa est mal intencionado alocando recursos excessivos ou indevidos e bloque-lo. Pode tambm limitar a ao de objetos no corretamente identificados e delimitados criados por programadores experientes - cuja atuao pode significar riscos para o usurio. O interpretador pode bloquear tambm o acesso ao disco local de programas carregados via Internet. Assim, esta caracterstica significa um nvel a mais de segurana oferecido ao usurio de aplicaes Java, cuja origem pode eventualmente ser ignorada.

DESVANTAGENS
Interpretao - queda de desempenho Duas ferramentas: compilador e interpretador Cdigo nativo - plataforma especfica

A interpretao dos bytecodes, por mais que se seja otimizada, tem um custo de performance. No entanto, o crescente desenvolvimento do hardware e os benefcios de segurana trazidos pela interpretao compensam esse custo adicional. O interpretador Java sempre precisa estar instalado na mquina, o que dificulta a execuo dos programas de desktop nos sistemas operacionais que no vm originariamente com o interpretador instalado. A utilizao de cdigo nativo em programas Java vincula a sua exceo s plataformas para as quais o cdigo nativo foi construdo.

48

ARQUITETURA JAVA MACHINE


Conjunto de instrues Bytecodes em geral com 2 operandos e 32 bits Conjunto de registradores (apenas 5) Pilha ilimitada mas imune a overflow Garbage Collector roda em background compresso de memria

A ARQUITETURA DA MQUINA JAVA


A mquina Java ao mesmo tempo simples e poderosa. Simples porque os bytecodes so de tamanho fixo (32 bits) e poderosa porque uma stack-machine, cuja performance tende a ser alta. O conjunto de registradores extras bem reduzido e o controle da pilha rigoroso. O Garbage Collector implementado em Java eficiente e seguro, e est se aprimorando a cada nova verso da linguagem.

JAVA E SUAS EDIES

49

Java 2 Standard Edition a edio de Java feita para rodar em desktops, dispositivos embarcados (robs, eletrodomsticos, etc.) e mquinas de controle em tempo real (robs de preciso, servodispositivos, etc). O JRE (Java Runtime Environment) a maquina virtual sem as ferramentas de compilao, que pode ser utilizada em qualquer computador que ir apenas executar os programas Java. Java 2 Enterprise Edition a edio com todo o suporte para rodar aplicaes em servidores web e servidores de aplicao. Oferece um conjunto completo de bibliotecas que implementam as rigorosas necessidades de um ambiente de execuo seguro e crtico. Java 2 Micro Edition a edio para rodar em dispositivos de pequeno porte, tais como celulares e palms. Est disponvel em uma srie de sub-edies, cada uma mais adequada a um determinado tipo de dispositivo.

50

CAPTULO 7: AMBIENTE DE DESENVOLVIMENTO


A Sun lanou juntamente com a linguagem um kit de desenvolvimento, o Java Development Kit (JDK) Existe um grande conjunto de ferramentas de desenvolvimento disponveis no mercado Livres (Eclipse, NetBeans e Outros) Proprietrios (JBuilder da Borland, Studios da IBM, BEA e Sun, JDev da Oracle e Outros)

A Sun lanou, juntamente com a linguagem, um kit de desenvolvimento que, embora bem poderoso, de difcil uso e no satisfaz as necessidades de um desenvolvedor de mdio porte ou maior, pois apresenta recursos pobres. Ao longo do tempo, outras empresas, ou grupos/comunidades de usurios desenvolveram outras ferramentas. Hoje existem dezenas de ferramentas de cdigo livre e uma outra dezena de boas ferramentas proprietrias.

JAVA DEVELOPMENT KIT

O Java Development Kit a primeira ferramenta para desenvolvimento de Java. Distribuda livremente e desenvolvida pela Sun, dispe de um conjunto mnimo de recursos suficientes para gerar qualquer aplicao.

51

ECLIPSE
Ferramenta de edio, compilao, depurao e execuo de programas Java Cdigo aberto Extensvel por plugins http://www.eclipse.org

O Eclipse uma ferramenta de desenvolvimento de aplicaes Java que pode ser utilizada livremente, sem pagamento de licenas. A grande vantagem do Eclipse a sua arquitetura de plugins, que permite que possa ter seus recursos expandidos indefinidamente.

INSTALAO
Se no estiver instalado na mquina, faa o download e instale a ltima verso do JDK no site http://java.sun.com (siga o link de downloads) Faa o download da ultima verso do binrio do Eclipse no site http://www.eclipse.org Na mquina, basta apenas descomprimir o arquivo de download do Eclipse num diretrio qualquer (C:\soft, por exemplo)

EXECUO DO ECLIPSE
Para rodar o Eclipse basta apenas executar o arquivo C:\soft\eclipse-SDK-3.1.1win32\eclipse\eclipse.exe Sempre que o Eclipse for aberto, ele pede que seja indicado um diretrio de trabalho (workspace), onde ficaro os arquivos Java editados nele.

CRIANDO UM PROJETO
Cada programa Java pode ser composto por vrias classes. Essas classes e as suas configuraes ficam agrupados num PROJETO. Menu File >> New >> Project...

Criao de um projeto Selecionar Java Project Acrescentar o nome do projeto

Selecionar Wizard java Project e completar com o nome do projeto

52

PERPECTIVAS
O Eclipse trabalha com perspectivas, que nada mais so do que vises de seu ambiente de trabalho. Abrir a Perspectiva Java para editar cdigo

Abrir a perspectiva Java

ACRESCENTANDO UMA CLASSE


Criar uma nova classe e adicionar ao projeto No Wizard definir o nome da classe e marcar para criar o mtodo Menu File >> New... >> Class public static void main(String[] args) Criar uma nova classe Atribuir um nome e solicitar a criao do mtodo main Acrescentando uma classe Adicionar a seguinte linha de cdigo ao mtodo main System.out.println(Hello Word); Adicionar cdigo ao mtodo main

EXECUTANDO UM PROGRAMA
Rodar o programa Selecionar o arquivo Java e com o boto direito do mouse escolher Run As >> Java Application (o Eclipse pedir para voc salvar o arquivo, selecione-o e salve-o) Selecionar o projeto e disparar a execuo como Java Application

DEPURANDO UM PROGRAMA
A depurao um recurso necessrio para dar produtividade a qualquer desenvolvimento. Selecionar classe Java e com o boto direito do mouse escolher Debug as >> Java Application...

(o Eclipse pedir para voc mudar a perspectiva para Debug, mas no necessrio fazer isso neste exemplo) Executar linha a linha com a tecla F6 Disparar o depurador

53

DEPURANDO UM PROGRAMA
Para observar o valor de uma varivel coloque o ponteiro do mouse sobre ela Ou mude a perspectiva para Debug (todas as variveis podem ser inspecionadas nessa perspectiva) Menu Window >> Open Perspective >> Debug Para voltar para o programa Java e a execuo do depurador linha a linha mudar a perspectiva pra Java

Menu Window >> Open Perspective >> Java Mudando a perspectiva para Debug

MUDANDO A VERSO DO JDK


No Eclipse pode-se trabalhar com vrias verses do JDK ou JRE Menu Window >> Preferences No item Java/Compiler selecionar a compatibilidade do compilador com a verso do Java (compiler compliance level 1.3, 1.4 ou 5.0) No item Java/ Installed JREs selecionar a verso do JDK ou JRE. Se no estiver instalada a verso desejada clicar em Add... Browse... (e selecionar o folder onde est instalado o JDK ou JRE)

Abrir a configurao do Eclipse Selecionar o nvel de compatibilidade do compilador (1.3, 1.4 ou 5.0)

54

CAPTULO 8: ESTRUTURA DE UM PROGRAMA JAVA


REQUISITOS BSICOS
Um programa Java uma coleo de classes que interagem entre si de forma totalmente orientada a objetos. O mtodo main() de partida do execuo do programa deve pertencer classe principal do programa. O nome do arquivo principal do programa deve ter o mesmo nome que a classe principal (aquela que contm o mtodo main())

O mtodo de partida de um programa Java chamado de main, que deve necessariamente pertencer a uma classe. Esta classe (a qual pertence main), a classe que d nome ao programa.

REQUISITOS BSICOS EXEMPLO

A assinatura de main() deve ser como a mostrada acima O nome do arquivo deve ser HelloWorld.java que depois de compilado gera o arquivo HelloWorld.class

55

Exerccios 1 Digitar, compilar, e depurar o programa HelloWord no Eclipse

TIPOS BSICOS
Tipos primitivos Inteiro: byte short int long float double byte short int long float 8 bits 16 bits 32 bits 64 bits 32 bits

Ponto-flutuante double 64 bits

caracter (unicode) char 16 bits boleano

boolean true ou false So tipos primitivos No so objetos Independem da mquina em termos de preciso e tamanho -128 a 127 -32.768 a 32.767 -2.147.483.648 a 2.147.483.647 -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 -3,4E-38 a 3,4E_38 -1.7E-308 a 1.7E+308

Faixa de valores dos tipos primitivos

56

CLASSES BSICAS
Classes especiais String - implementa um objeto String, de forma mais precisa e clara do que um array de caracteres System - realiza parte da interao do programa com o sistema operacional nativo

Algumas classes em Java assumem um papel especial ou apresentam um comportamento especial. Dentre estas, interessante citar duas: String No so arrays de caracteres. Dispe de mtodos que facilitam seu uso. Um objeto da classe String criado automaticamente quando declara e inicializa uma varivel. Ex. Implementam concatenao (embora Java no implemente sobrecarga de operadores). Ex. Uso do operador +=.

String curso=curso de Java;

curso=Meu primeiro+curso; curso+=Meu primeiro; System contm maioria dos mtodos que interagem com o sistema operacional Ex. System.out.println();

57

VARIVEIS
Declaradas antes de serem utilizadas, em qualquer parte do programa (declarao dar o tipo e o nome) Podem ser inicializadas na declarao Variveis locais devem ser inicializadas antes de serem utilizadas Podem ser utilizados sufixos para definir o tipo de um literal

As variveis em Java podem ser declaradas em praticamente qualquer parte do programa. Lembrar que no existem variveis globais. Uma vez que todo o programa est encapsulado dentro de classes, as variveis mais externas deste programa pertencem a esta classe. Existem portanto dois tipos de variveis: De classe ou de instncia Locais, a funes ou blocos

As restries aplicadas s variveis so: Nomes das variveis:


No podem comear por nmero Cuidado com smbolos que representam operadores: *, +, etc Conjunto de caracteres Unicode (existem excees)

Tipos:
Primitivos Classe ou interface Array

Sufixos
L ou l para long D ou d para double F ou f para float

58

DECLARAO E INICIALIZAO

Os literais, quando digitados na notao hexadecimal devem vir precedidos de 0X ou 0x. Os literais, quando digitados na notao octal devem vir precedidos de 0.

VARIVEIS LOCAIS
Podem ser utilizadas dentro do mtodo ou bloco onde foram declaradas Podem ser utilizadas dentro da classe ou objeto, ou at mesmo por outras classes e objetos, dependendo de sua acessibilidade.

CONVERSO DE TIPOS
Implcita: de tipos menores para tipos maiores (em nmeros de bits do tipo)

byte b = 5; int a = b; // 5 convertido para inteiro float f = 123.756F; double d = f;

Explcita: de tipos maiores para tipos menores (em nmeros de bits do tipo). Deve ser feito casting.

long l = 12000000L; int i = (int)l; double d = 395E+45; float f = (float)d;

59

Converso implcita aquela onde o valor no corre o risco de sofrer alguma perda, porque a capacidade do tipo convertido maior que a capacidade do tipo original. Para fazer essa converso basta fazer a atribuio direta dos valores. Converso explcita aquela onde o valor do tipo original corre o risco de ser alterado, porque a capacidade do tipo convertido menor. Converses explcitas somente podem ser feitas com o uso do casting, que definir junto ao valor original, o tipo para o qual se quer a converso, entre parnteses.

OPERADORES E EXPRESSES
Operadores aritmticos Bsicos + , - , *, / e % O sinal menos ( - ) pode ser usado como operador unrio a=a+b a=a-b a=a*b a=a/b

Operadores conjugados com atribuio de valores

a+=b <=> a-=b <=> a*=b <=> a/=b <=>

Cuidado com a ordem de avaliao das expresso !

OPERADORES ARITMTICOS
Bsicos: + (adio), - (subtrao), * (multiplicao), / (diviso) e % (mdulo, ou seja, resto da diviso inteira) O sinal menos ( - ) pode ser usado como operador unrio Tipo do resultado: o mais preciso entre os tipos dos operandos. Portanto 26/7=3, uma vez que o resultado inteiro

OPERADORES CONJUGADOS COM ATRIBUIO DE VALORES


a+=b <=> a-=b a/=b <=> <=> a*=b <=> a=a+b a=a-b a=a*b a=a/b

Cuidado com a ordem de avaliao das expresso, pois uma mesma expresso lgica pode afetar de forma diferente o resultado esperado.

60

OPERADORES DE INCREMENTO E DECREMENTO


a++ ou ++a a-- ou --a <=> <=> a=a+1 a=a-1

Cuidado, b=a++ no fornece o mesmo resultado que b=++a !!! O operador de incremento, quando colocado antes da varivel, faz com que ela seja incrementada antes de ser utilizada. O operador de incremento quando colocado depois, faz com que a o valor da varivel seja utilizado antes do incremento. int a = 5; int b = a++; // resulta em b com valor 5. a = 5; b = ++a; // resulta em b com valor 6.

OPERADORES DE COMPARAO
== != < > <= >= igual diferente menor maior menor ou igual maior ou igual

OPERADORES LGICOS
& ou && <=> | ou || ! <=> <=> AND OR NOT

Existem diferenas entre & e &&; e entre | e || !!! Os operadores && e || somente podem ser aplicados a tipos booleanos. Os operadores & e | podem ser aplicados a qualquer tipo primitivo, sendo que nesse caso ele realiza a operao bit a bit entre os bits dos operandos.

OPERADORES BIT A BIT


& | ^ <=> <=> <=> AND OR XOR

61

<< >> ~ >>>

<=> <=>

deslocamento esquerda deslocamento direita <=> <=> complemento desl. direita, preenchimento com zero

COMANDOS BSICOS
COMENTRIOS
Comentrios de uma linha Comentrios de mltiplas linhas
// linha comentada /* Linhas comentadas linhas comentadas */

Comentrios que aparecem na gerao automtica de cdigo (javadoc)

/**Linhas comentadas linhas comentadas */

CONDICIONAIS
if (condio) { // bloco de cdigo } else { // bloco de cdigo }

Comando if else A condio sempre deve ser um literal, varivel ou expresso booleana (incluem-se a tambm os retornos de mtodos). Quando o bloco de cdigo possuir apenas uma linha, no so necessrias as chaves. O uso do else opcional.

switch(expressao) { case valor: // bloco de cdigo break; // outros cases default: // bloco de cdigo }

Comando switch

62

A expresso deve ser uma varivel ou expresso que resulte num nmero inteiro ou num nmero que possa ser convertido para inteiro (byte, short e char). O valor deve ser sempre um literal inteiro. O break no obrigatrio. Nesse caso a execuo do programa prossegue para o prximo bloco de cdigo. O default no obrigatrio. No caso de nenhum case ser igual a expresso, nenhum cdigo executado.

LAOS

while(condio) { // bloco de cdigo } do { // bloco de cdigo } while (condio);

Comandos while e do while A condio sempre deve ser um literal, varivel ou expresso booleana (incluem-se ai tambm os retornos de mtodos). Quando o bloco de cdigo possuir apenas uma linha, no so necessrias as chaves.

Exemplos:
while(i<2) { ... i++; } do { ... i++; } while (i<10);

IMPORTAR PARA O ARQUIVO FONTE AS CLASSES OU PACOTES INDICADOS


import <classe ou pacote>;

A importao de arquivos ou pacotes deve ser feita sempre no incio do arquivo Java.

63

DEFINIR O PACOTE AO QUAL PERTENCE A CLASSE SENDO DEFINIDA


package <nome do pacote>;

A definio do pacote deve sempre ser feito antes da definio de qualquer classe ou interface no arquivo Java.

INTERROMPE A EXECUO DE UM BLOCO INDICADO


break [label];

O break somente pode interromper bloco que o englobem. Como a definio desse label opcional, na sua ausncia, o bloco mais interno e prximo do break que o interrompido. O mesmo vale para o continue, com relao aos laos. Caso o label seja especificado, esses comandos interrompem o lao identificado pelo label.

FORAR A PRXIMA ITERAO DO LAO INDICADO


continue [label];

PARMETROS DE ENTRADA
Um programa de linha de comando pode receber parmetros pela prpria linha de comando. O parmetro String[] do main que recebe os valores passados pela linha de comando. Programa para testar parmetros de entrada
public class TesteParametro { public static void main(String[] args) { for(int i=0; i< args.length; i++) { System.out.println(args[i]); } } }

PACOTES
Define o nome completo da classe (fully qualified name class) Uso da palavra reservada package Primeira linha til do programa Uma outro arquivo fonte referencia uma classe pelo seu nome completo ou com o uso de import O import tambm pode importar atributos estticos de classes

64

import java.lang.Math.PI;

O nome completo de uma classe compreende o nome do pacote ao qual ela pertence junto com nome com o qual ela foi declarada. A classe Date, do Java, est no pacote java.util, portanto seu nome completo java.util.Date. Num arquivo fonte qualquer, para se utilizar a classe Date ou importamos o pacote no incio do fonte ou a referenciamos pelo seu nome completo.
import java.util.Date; ... Date dt = new Date();

Ou
import java.util.*; // importa todas as classes do pacote ... Date dt = new Date();

Ou
java.util.Date dt = new java.util.Date();

A classe String, do Java, por exemplo, est no pacote java.lang, portanto o nome completo dessa classe java.lang.String. No entanto, o pacote java.lang automaticamente importado por todos os arquivos fontes. A definio do pacote ao qual pertence uma classe feita usando package br.com.empresa.nomepacote; public class NomeClasse {...} Essa classe, tem o nome completo br.com.empresa.nomepacote.NomeClasse

65

CAPTULO 9: CLASSES E OBJETOS


PROGRAMAO ORIENTADA A OBJETOS
O QUE ?
Unidades de cdigo que interagem so os objetos Classes atributos e comportamento - variveis e mtodos variveis e mtodos internos podem no ser visveis externamente classes podem ser definidas de forma incremental (herana)

Para que serve ? Metodologia eficiente Programas grandes e desenvolvidos por equipes Grande ndice de reaproveitamento do cdigo

CLASSES E OBJETOS
Objetos so entes Classes so definies

Objetos so modelados como os objetos do mundo real, ou seja, possuem existncia fsica dentro de um programa, ocupando espao de memria e armazenando as informaes pertinentes. Classes so definies genricas de objetos (moldes de objetos). Podem existir portanto vrios objetos de uma nica classe. Classes so definidas a fim de que a partir delas possam ser gerados os objetos que assumem aquelas propriedades e executam aquela funcionalidade definida na classe.

66

Importante Definir cuidadosamente uma classe levando-se em conta aspectos de funcionalidade, generalidade e acessibilidade Nomenclatura: classes definidas e objetos instanciados (ou seja, um objeto uma instncia de uma dada classe) Definir funcionalmente as classes - torna mais lgico o encapsulamento. Definir claramente que elementos compem a interface - permite que outros usem seus objetos de forma simples e correta. Partir de classes mais genricas - facilita reaproveitamento do cdigo ao mesmo tempo que define o alcance da classe. Ter em mente que as classes so definidas e os objetos declarados. Portanto, todo objeto criado ocupa espao no seu programa ou na mquina rodando o programa, e deve-se evitar criar objetos no utilizados. Considerar aspectos de segurana na definio da acessibilidade da classe. Nomenclatura de linguagem: classes so definidas e objetos so instanciados (ou seja, um objeto uma instncia de uma dada classe).

CONCEITO DE CLASSE

Conceito de classe Uma classe contm uma definio de um conjunto de variveis e funes que so encapsuladas conjuntamente e compartilham o mesmo escopo de definies. Assim, uma classe definida por seus atributos (variveis) e comportamento (mtodos ou funes). Estas caractersticas permitem que a classe assuma em papel dentro de um programa unicamente em termos de suas propriedades, ou seja, fatores externos classe no podem afet-la, alm do permitido por ela. Este encapsulamento utilizado com uma

67

srie de benefcios em relao ao conceito convencional de programao no orientada a objetos. Toda classe definida em termos de sua interface e sua implementao. A figura a seguir ilustra esse conceito.

ATRIBUTOS, MTODOS E INTERFACES


Mtodos: comportamento do objeto
<Modificadores> <tipo de retorno> <nome do mtodo>(<lista de parmetros>) { //blocos de comandos }

Interface: mtodos ou variveis visveis ao mundo exterior Variveis: so locais ao objeto e implementam o conceito de atributos ou propriedades de um objeto. Mtodos: so locais ao objeto e implementam o conceito de comportamento do objeto, ou como suas propriedades se relacionam, tanto entre si, como com o mundo exterior. Interface: so mtodos ou variveis visveis ao mundo exterior ao objeto. a parte do objeto que interage com os outros objetos de um programa

REGRAS GERAIS
Atributos: clareza Mtodos abrangncia Interfaces Atributos: Claras e significativas com respeito s propriedades que representam Podem ser outras classes segurana

Mtodos Deve abranger, por definio, todo o comportamento desejado da classe, inclusive aqueles ainda no implementados, ou que devem ser implementados por subclasses

Interfaces Mais segurana se implementada apenas com mtodos

68

Verificao de parmetros de entrada Mnima, mas funcional. Deve-se buscar o compromisso ideal entre estas caractersticas.

MTODOS ESPECIAIS
Construtor inicializa o objeto deve ter o mesmo nome da classe Mtodo declarado mas no definido Finaliza objeto

Mtodos Abstratos Destrutor

CONSTRUTOR
Mtodo que inicializa o objeto. o primeiro mtodo chamado quando o objeto criado (instanciado) e somente pode ser chamado nesta situao Usado para inicializar atributos do objeto e executar os mtodos de inicializao (abrir um arquivo, por exemplo) Deve ter o mesmo nome da classe; no possui valor de retorno e podem existir em qualquer nmero para uma mesma classe (diferem pelo nmero de argumentos)

MTODO ABSTRATO
Mtodo declarado mas no definido, usado para forar a implementao de um comportamento desejado nas subclasses que herdarem este mtodo

DESTRUTOR
Finaliza objeto, limpa variveis e libera recursos. Em Java no pode ser invocado diretamente. invocado na dealocao do objeto. Chama-se finalize e tem o mesmo nome pra todos as classes.

69

DEFINIO DE UMA CLASSE E ALOCAO


Declarao da classe
public class Biometrica { public int altura, peso, idade; }

Declarao do objeto Instanciao do objeto

Biometrica entrada, saida; entrada = new Biometrica (); saida = new Biometrica ();

Declarao da classe A classe Biometrica possui trs atributos pblicos. Declarao do objeto A declarao do objeto nada mais do declarar as variveis que apontaro para as instncias. Na declarao, os objetos no esto ainda instanciados, mas apenas nomeados. Instanciao de objetos Os objetos sempre so instanciados pelo operador new, que invoca um construtor da classe. Nesse exemplo, o construtor default foi utilizado. O construtor default definido implicitamente a todas as classes que no possuem construtor definido. Ele um construtor que no recebe argumento nenhum.

CONSTRUTORES E INSTANCIAO
Definir um construtor mais til
public class Biometrica { public int altura, peso, idade; public Biometrica (int altura, int peso, int idade) { this.altura = altura; this.peso = peso; this.idade = idade; } }

Instanciao de objetos

70

entrada = new Biometrica (120, 34, 12); saida = new Biometrica (134, 42, 15);

Construtores podem ser definidos em qualquer nmero, desde que difiram entre si na lista de argumentos que recebem. A palavra reservada this, dentro de uma classe, refere-se instncia corrente dessa classe. Assim, this.altura refere-se ao atributo altura da classe, enquanto a varivel local altura no referenciada por ela.

REFERNCIAS A OBJETOS
Declarao de recebem outra instncias objetos que
entrada = new Biometrica (120, 34, 12); saida = new Biometrica (134, 42, 15); Biometrica aux1 = entrada; aux1.peso = 35;

Objetos declarados (mas no instanciados) podem ser atribudas a objetos instanciados. Nesse caso, tem-se duas referncias para o mesmo objeto. Qualquer alterao feita atravs de qualquer referncia afeta o objeto em questo.

DECLARAO DE MTODOS
Mtodos so funes internas classe

Um mtodo uma funo definida dentro de uma classe e que implementa um comportamento desta classe. Quando no possuir tipo de retorno deve ser utilizada a palavra chave void.
public void incrementarIdade() {

71

this.idade++; }

Os argumentos de um mtodo devem ser definidos pelos seus tipos.


public void acrescentarAltura(int aumento) { this.altura += aumento; }

NOTAO UML
UML: Unified Modeling Language Padro para especificao de sistemas orientado a objetos Classe

Nome da classe Atributos Mtodos / Construtores

A notao UML um padro utilizado amplamente para especificar sistemas orientados a objetos. O diagrama de classes um dos mais utilizados. A notao para especificar uma classe um retngulo que possui trs regies: um com o nome da classe, outro com os seus atributos e um terceiro com os seus mtodos ou construtores. Os atributos so especificados com seus tipos e sua acessibilidade: + para acesso pblico - para atributos privados Os mtodos so especificados com seus tipos de retorno e lista de argumentos, alm da acessibilidade, como os atributos.

72

SOBRECARGA DE MTODOS
Definio de mltiplos mtodos com o mesmo nome mas tipos de parmetros diferentes

Polimorfismo de mtodos ou sobrecarga de mtodos permite que mtodos com o mesmo nome sejam implementados de forma diferente. Isto se torna muito til quando empregado para prover o mesmo comportament o para conjunto de parmetros diferentes. Por exemplo, um conjunto de mtodos chamados soma pode ser definido para executar a soma entre inteiros, floats e strings, e o emprego do mesmo nome facilita a programao e a leitura do cdigo. Mtodos com mesmo nome mas lista de argumentos diferentes
public void setPeso(int peso) { this.peso = peso; } public void setPeso(int peso, int redutor) { this.setPeso(peso redutor); }

Invocao dos diferentes mtodos


entrada.setPeso(55); entrada.setPeso(48, 5);

A identificao de qual mtodo foi invocado feita pelos argumentos. Mtodos sobrecarregados devem possuir listas de argumentos diferentes em quantidade e ou tipos. Mtodos com mesma assinatura causam erro de compilao
void resize(int x, int y, int dx, int dy) { this.x=x; this.y=y; this.dx=dx; this.dy=dy; } void resize(int x1, int y1, int x2, int y2) { x=x1; y=y1; dx=x2-x1; dy=y2-y1; }

Tipo de retorno no diferenciam mtodos


int calc(int a, int b, int c, int d) {..} float calc(int a, int b, int c, int d) {..}

73

CUIDADO: os nomes dos argumentos no diferenciam um mtodo do outro, portanto dois mtodos com lista de argumentos em igual nmero e tipos, mas com nomes diferentes no so sobrecarregados e geram um erro de compilao.

SOBRECARGA DE CONSTRUTORES
Construtores com lista de argumentos diferentes

public Biometrica(int altura, int peso, int idade) { this.peso = peso; this.altura = altura; this.idade = idade; } public Biometrica(int altura, int idade) { this(altura, altura 110, idade); }

Invocao dos diferentes construtores

entrada = new Biometrica(155, 49, 17); saida = new Biometrica(180, 21);

Da mesma forma que mtodos, construtores tambm podem ser sobrecarregados. A diferenciao ocorre da mesma forma, pela lista de argumentos. A invocao de um construtor dentro de outro utiliza a notao this(...), onde, pela lista de argumentos passados identificado o construtor invocado. A identificao de qual construtor foi invocado feita pelos argumentos. Construtores sobrecarregados devem possuir listas de argumentos diferentes em quantidade e ou tipos. CUIDADO: os nomes dos argumentos no diferenciam um construtor do outro, portanto dois construtores com lista de argumentos em igual nmero e tipos, mas com nomes diferentes no so sobrecarregados e geram um erro de compilao.

74

CLASSES E MTODOS ABSTRATOS


Mtodos abstratos so aqueles que no possuem implementao Uma classe com apenas um mtodo abstrato no pode ser instanciada e tambm chamada de classe abstrata Pertence a interface da classe, impondo um contrato para as subclasses (no prximo captulo isso ser estudado)

Classes abstratas no podem ser instanciadas, uma vez que falta parte de sua implementao. Uma classe abstrata serve para estabelecer uma interface cuja subclasses, se precisarem ser instanciadas, necessariamente tero que implementar. Nos captulos seguintes, quando for tratado o tema Polimorfismo, ficar claro a vantagem do uso de classes abstratas.

ATRIBUTOS E MTODOS ESTTICOS


Atributos e mtodos de classe Alocao na classe Compartilhados entre todos os objetos da classe

Atributos e mtodos estticos so tambm chamados de atributos ou mtodos de classe, em contraposio aos atributos e mtodos de instncia, que assumem um valor para cada instncia (objeto).

75

So alocados uma nica vez em memria, e permanecem alocados enquanto a classe estiver carregada. Um atributo esttico compartilhado entre todos os objetos da classe. Se o atributo for pblico, outras classes e objetos tambm utilizam a sua nica alocao em memria.

API JAVA
A documentao de todas as classes Java que vem junto com a JVM deve ser abaixada separadamente no site java.sun.com Procurar pelo download Documentation Abaixar o arquivo comprimido Descomprimir num diretrio e abrir o index.html de J2SE(TM) Development Kit

76

CAPTULO 10: ARRAYS E STRING


Arrays Declarao String palavras[]; int arrVal[]; ou ou String[] palavras; Data[] vencimentos; int[] arrVal;

Data vencimentos[]; ou

Instanciao do Array arrVal=new int[200]; vencimentos =new Data[10]; String*+ frase = ,Estas, palavras, formam, a, frase); Acesso arrVal[0]=23; vencimento[8] = new Data(23, 4, 2005); String s = frase[2]; Tamanho int l = arrVal.length;

Um array muito semelhante a um objeto em Java. Ele precisa ser declarado e instanciado. Isso pode ser feito numa mesma linha:
Data[] vencimentos =new Data[10];

Esse objeto array tem um nico atributo j pr-definido chamado length, que d o tamanho o array. Em Java um array delimitado na sua instanciao. Assim, os casos de referncia a ndices no existentes no podem ocorrer. Isso garante uma forma segura, direta e simples de uso de arrays. Os ndices dos arrays sempre se iniciam em 0. Assim, um array de N elementos, pode ser indexado de 0 a N-1.
int[] intervalos = {2, 5, 6}; int x = intervalos[0]; // x recebe 2 int y = intervalos[3]; // ERRO! //Array de 3 elementos tem //ndices de 0 a 2

Arrays podem ser de tipos primitivos ou de objetos. No caso de array de objetos convm notar que a instanciao do array no instancia os objetos que ele pode conter.

77

ALOCAO DE ARRAYS
Array de tipos primitivos
byte[] mascara; mascara = new byte[5]; mascara[2] = 5; byte[] aux = mascara; aux[0] = 7;

Um array, ao ser declarado, apenas reserva uma referncia que pode apontar para um objeto array. No exemplo, mascara apenas uma referncia. Mais de uma referncia podem apontar para o mesmo array, assim como ocorrem para referncias de objetos. No exemplo, mascara e aux apontam para o mesmo array. Um array de tipos primitivos, ao ser instanciado, tem o seu espao alocado em memria, e todos valores alocados so inicializados com 0.
Data[] vctos; vctos = new Data[3]; vctos[0] = new Data(2, 3, 2004); vctos[2] = new Data(10, 12, 2003); vctos[1] = vctos[2]; vctos[1].setDia(23);

Arrays de objetos

Um array de objetos, ao ser instanciado, tem o seu espao alocado em memria, e todos valores alocados so inicializados com null. Cada elemento do array precisa ser instanciado individualmente e comporta-se como uma referncia para o objeto alocado para ele. Expresses do tipo vctos[1].setDia(23) servem para acessar os objetos de cada posio do array.

78

ARRAYS MULTIDIMENSIONAIS
Arrays de dimenses homogneas
int[][] matriz = new int[5][3]; matriz[0][2] = 67; Ponto[][][] cubo = new Ponto[3][6][2]; cubo[2][5][1] = new Ponto(34, 65);

Arrays de dimenses heterogneas

int[][] amostras = new int[3][]; amostras[0] = new int[3]; amostras[1] = new int[4]; amostras[2] = new int[2]; amostras[2][1] = 15; amostras[0][1] = 56; amostras[1][2] = 31;

Arrays multidimensionais com dimenses homogneas podem ser instanciados numa nica linha de comando, passando-se as duas dimenses.
int[][] matriz = new int[5][3];

As dimenses podem ser obtidas separadamente: matriz.lenght resulta em 5 e matriz[0].length resulta em 3. Arrays com dimenses heterogneas precisam ter cada dimenso alocada separadamente. Na instanciao da primeira dimenso, as demais so deixadas sem valor.
int[][] amostras = new int[3][];

E depois, para cada posio da primeira dimenso devem ser alocadas as demais dimenses.
amostras[0] = new int[3]; amostras[1] = new int[4]; amostras[2] = new int[2];

79

STRING
String uma classe, no um tipo primitivo String tem alguns comportamentos especiais, tpicos de tipos primitivos Instanciao semelhante a inicializao

String s = teste;

Concatenao

s = um outro + teste;

Strings so sempre constantes Strings devem ser comparadas como objetos (usar mtodo Equals da classe String)

str1.Equals(str2)

String em Java uma classe que tem alguns comportamentos diferenciados das demais classes. Uma String pode ser instanciada da mesma forma que um tipo primitivo inicializado. Reparar que continua sendo uma instanciao, ou seja, um objeto criado em memria. Strings podem ser concatenadas com o operador +. Essa operao de concatenao gera uma outra String. Strings devem ser comparadas atravs do mtodo Equals, da prpria classe. Esse mtodo compara caractere a caractere duas Strings. O operador == ao ser aplicado sobre Strings compara as referncias e no os contedos. Muitas vezes esse operador tem resultado semelhante ao mtodo Equals, isso porque a Java Virtual Machine procura compartilhar as Strings iguais, evitando a mltipla instanciao de Strings iguais. Isso s possvel porque Strings so constantes.

80

CAPTULO INTERFACES
HERANA

11:

HERANA

Forma pela qual uma nova classes definida a partir de outra, preservando sua interface e acrescentando ou alterando sua implementao Forma pela qual novas classes so definidas de forma incremental Definio de uma nova classe especificando uma classe me e um conjunto adicional de atributos e/ou mtodos A classe definida desta forma herda todas os atributos e mtodos da classe me A acessibilidade da interface da classe me no pode ser redefinida na classe herdada Java no permite herana mltipla com classes, mas apenas com interfaces.

ANATOMIA DA HERANA

81

82

Dada uma classe me com sua implementao e sua interface, vemos que uma classe filha pode ser definida com sua interface e sua implementao a partir da classe me com as seguintes caractersticas: A interface original da classe me mantida. A herana nunca perde interface. A classe filha pode estender a interface. A implementao da classe me totalmente herdada pela filha, no entanto parte dessa implementao pode ser sobrescrita pela classe filha. Nesse caso, sob a interface herdada da classe me podem estar implementaes completamente diferentes. A classe filha pode estender a implementao.

HERANA E HIERARQUIA DE CLASSES


Cl1 a superclasse de Cl1_1 e Cl1_2 Cl1_1 e Cl1_2 so subclasses de Cl1 Cada classe pode possuir uma nica superclasse Cada classe pode possuir qualquer nmero de subclasses Cl1_1_1 e Cl_1_2 so classes distintas, bem como Cl1_2_1.

Notao UML

83

A aplicao de herana cria uma hierarquia de classes, onde as classes primrias so mais genricas e as classes finais so mais especficas. O esquema hierrquico de classes permite estabelecer relaes especiais entre determinadas classes, ou seja, uma subclasse tem um relacionamento diferenciado com sua superclasse e esta por sua vez engloba vrias caractersticas comuns a todas as suas subclasses. A utilizao destas relaes especiais d um grande poder a um programa orientado a objetos. Na figura acima pode-se ver como a notao UML para indicar herana.

DEFINIO DE SUBCLASSES
Uso da palavra reservada extends

A palavra chave extends usada para estabelecer uma relao de herana entre duas classes. Gerente subclasse de Funcionrio, e Funcionrio, por sua vez, superclasse de Gerente. Note que a relao estabelece que todas as propriedades de Funcionrio so herdadas por Gerente, que tambm pode definir propriedades adicionais.

84

CHAMADA DE MTODOS NA HERANA

Uma das relaes especiais entre superclasse e subclasse o compartilhamento de mtodos. O esquema de herana responsvel pela determinao do local exato da definio de um mtodo, no definida na subclasse, mas em um de seus ancestrais.

SOBRESCRITA DE MTODOS
Classe Funcionario com mtodo para calcular custo mensal total do Funcionario

Sobrescrita de mtodos

85

Classe Gerente com o mesmo mtodo

Na classe Gerente a implementao do mtodo obterCusto() deve ser diferente, pois deve levar em conta o bnus que somente o gerente recebe. Quando uma subclasse reimplementa um mtodo da superclasse, diz-se que esse mtodo foi sobrescrito na subclasse. Nesse caso, a implementao que veio por herana de Funcionario foi descartada. Gerente com sobrescrita de mtodos, mas utilizando o mtodo da superclasse

Ao sobrescrever um mtodo, uma subclasse deve reaproveitar o mtodo original, a fim de no reescrever regras. A sobrecarga de mtodos deve preferencialmente prover um comportamento adicional nova classe. Sendo assim, o comportamento original, herdado da superclasse, deve colaborar para compor tambm o novo comportamento.

86

A palavra reservada super tem a funo de referenciar membros definidos na superclasse. Assim, super.obterCusto() referencia o mtodo definido na superclasse (Funcionario).

HERANA E CONSTRUTORES
Construtores no so herdados Construtor de Funcionario
public Funcionario(String nome, double salario) { this.nome = nome; this.salario = salario; } Construtor de Gerente public Gerente(String nome, double salario, double bonus) { super(nome, salario); this.bonus = bonus; }

Os construtores de uma classe no so herdados pelas suas subclasses. No entanto, as regras definidas nos construtores das superclasses podem e devem ser reutilizadas nos construtores das subclasses. Na classe Gerente, o uso de super(...) invoca o construtor da superclasse e portanto utiliza o comportamento j definido em Funcionario.

INTERFACE
Interfaces so conjunto de atributos estticas ou mtodos abstratos que estabelecem uma srie de comportamentos que se espera da classe que a implementa Classes e interfaces so equivalentes, exceto pelo fato que interfaces no podem ser instanciadas Interface uma classe abstrata com todos os mtodos abstratos Herana mltipla em Java Cada classe pode ter apenas UMA superclasse e implementar VRIAS interfaces. Interfaces so conjunto de atributos estticos (varivel nica compartilhada por todos os objetos de uma mesma classe) e/ou mtodos abstratos (mtodos com assinatura definida, mas corpo no definido) que estabelecem uma srie de comportamentos que se espera da classe que a implementa.

87

Ausncia de herana mltipla em Java uma limitao amenizada pelo emprego de interfaces. Java permite que uma classe implemente uma ou mais interfaces.

88

Vantagem: Duas classes distintas que implementam a mesma interface respondem a um conjunto idntico de funes (embora no necessariamente da mesma forma) Classes e interfaces so equivalentes, exceto pelo fato que interfaces no podem ser instanciadas. Interface uma classe abstrata com todos os mtodos abstratos.

DECLARAO DE INTERFACES

public interface Colaborador { public double obterCusto(); }

Declarao de uma interface

Implementao de uma interface

public class Consultor implements Colaborador { public double valorHora; public int totalHoras; public double obterCusto() { return this.valorHora * this.totalHoras; } }

Uma interface declarada com o uso da palavra reservada interface, que elimina a necessidade de declarar os mtodos como abstratos. Numa interface, todos os mtodos so necessariamente abstratos. Uma classe pode implementar uma ou mais interfaces. Para a classe ser concreta (no abstrata) necessrio que todos os mtodos das interfaces que ela implementa sejam implementados. Na notao UML uma interface representada como uma classe, mas marcada com o esteretipo de interface (um crculo no canto superior direito do retngulo da classe)

89

EXEMPLO DO USO DE INTERFACES


Exemplo: Vamos supor um programa usado por um pais fictcio que cobra um imposto nico anual sobre todas as propriedades e/ou bens de seus cidados. Vamos limitar os bens a imvies e automveis e modelar as classes que comporiam este programa. Como se trata e um pas moderno, as unidades de registro so os bens e no as pessoas (direito privacidade) Como existem vrios tipos de imveis e automveis, convm criar as classes bsicas a partir das quais so herdados os vrios registros (classes) diferentes Vamos simplificar nosso exemplo !

DEFINIO DAS CLASSES BASES

Uma interface utilizada para se definir um contrato que deve ser obedecido por todas as classes que a implementam. No exemplo dado, so definidas duas hierarquias de classes, uma relacionadas a bens mveis e outra a bens imveis. Como so hierarquias distintas, no existe uma superclasse comum a todas essas classes que forma um contrato para todas ao mesmo tempo. A soluo, ento, definir uma interface que fora a implementao de um mtodo que se deseja que todas as classes implementem.

90

EXEMPLO - DEFINIO DAS CLASSES DERIVADAS

EXEMPLO - DEFINIO DA INTERFACE


Imposto nico se aplica a todos os bens, portanto a todas as classes anteriores. O clculo pode ser distinto, mas existe um procedimento nico na cobrana, clculo e registro, portanto pode ser implementada uma interface para isto

O modificar final quando aplicado a variveis as tornam constantes, ou seja, uma vez atribudas, no podem ser alteradas.

91

EXEMPLO - REDEFINIO DAS CLASSES BASES

Ao definir que as classes bases implementam a interface IUSB, fora-se que todas as suas subclasses devam implementar os mtodos definidos na interface. Como as classes bases no implementam (nesse exemplo) os mtodos abstratos da interface, elas devem ser declaradas abstratas (pois possuem agora mtodos abstratos, herdados da interface).

EXEMPLO - REDEFINIO DA CLASSES

92

As subclasses de Imovel e de Auto que forem concretas (podem ser instanciadas) devem agora implementar os mtodos definidos pela interface. Notar que essas subclasses no so abstratas, porque no possuem mais mtodos abstratos. Exerccios 1 Codificar e testar o exemplo de uso de interfaces

MODIFICADOR FINAL
O modificador final quando aplicado a variveis as transformam em constantes. Uma vez atribudas, no podem mais ser alteradas. O modificador final quando aplicado a mtodos impedem que eles sejam sobrescritos. O modificador final quando aplicado a classes, impede que elas sejam utilizadas como superclasses. Ou seja, uma classe final no pode ser herdada por nenhuma outra classe.

93

CAPTULO 12: ENCAPSULAMENTO


a caracterstica da orientao a objetos que permite que uma classe defina a acessibilidade de seus membros Outras classes ou objetos de outras classes somente tem acesso aos membros cuja classe deu acesso Nem mesmo uma subclasse pode ter acesso a membros que a superclasse no deu acessibilidade

O encapsulamento uma caracterstica que confere a classe o poder de determinar como ser o acesso a seus membros. Essa caracterstica possibilita que atributos sejam corretamente protegidos de acessos indevidos. Com o uso correto do encapsulamento evita-se que objetos assumam valores de propriedades inconsistentes. Evita-se tambm que comportamentos no pblicos de uma classe sejam utilizadas externamente a ela. Os modificadores de acesso so os instrumentos da linguagem para definir o encapsulamento.

MODIFICADORES DE ACESSO
Palavras reservadas que determinam o acesso permitido a classes e seus membros o public o protected o private Notao UML ( + , - e #) o + public o - private o # protected

94

Em Java existem 4 modificadores de acesso: os trs indicados pelas palavras chaves public, protected e private, mais o modificador dado pela ausncia de palavra chave. Ou seja, a ausncia de modificador de acesso um definio de acessibilidade tambm. A notao UML emprega os smbolos + para indicar que um membro pblico, - para privado e # para protegido.

public
Aplicado a classes e interfaces: determinam que a classe pode ser utilizada livremente por qualquer uma outra classe ou interface. Aplicada a membros: determinam que o membro pode ser utilizado livremente por qualquer outra classe.

protected
No se aplica a classes e interfaces Aplicada a membros: determinam que o membro pode ser invocado ou utilizado apenas por classes do mesmo pacote ou por subclasses.

MODIFICADORES DE ACESSO
Sem modificador private No se aplica a classes e interfaces Aplicada a membros: determinam que o membro pode ser invocado ou utilizado apenas pela prpria classe. Aplicado a classes e interfaces: determinam que a classe pode ser utilizada apenas no mesmo pacote. Aplicada a membros: determinam que o membro pode ser utilizado apenas no mesmo pacote.

95

EXEMPLO

Todos os atributos de Data so privados, o que impede que eles recebam diretamente valores vindos externamente a classe. Assim data1.dia = 35, no permitindo, evitando datas inconsistentes. Para atribuir um valor a um atributo de Data deve-se utilizar um mtodo pblico. Na implementao desses mtodos garantido a consistncia dos seus atributos. Assim, a cada ms permitido um valor mximo para o dia. Se o usurio de um objeto da classe Data passar como argumento algum valor incompatvel, o mtodo impede que esse valor chegue ao atributo. Construtor de Data

96

O construtor deve garantir tambm o encapsulamento.

MANIPULANDO DATAS EM JAVA


DATE(JAVA.UTIL.DATE)
A classe Date armazena uma data e hora, que internamente armazenada com um inteiro long que o numero de milissegundos que se passou desde 01/01/1970. Esta classe bem simples de se trabalhar, mas muitos de seus mtodos foram depreciados por no trabalhar muito bem com internacionalizao e etc. Para obter a data atual se basta criar um objeto Date sem nenhum parmetro.
Date d = new Date();

CALENDAR(JAVA.UTIL.CALENDAR)
A classe Calendar sendo uma classe abstrata no pode ser instanciada com o operador new, ela deve ser criada utilizando um operador esttico sobrecarregado getInstance(). Na maioria das vezes voc vai receber uma instncia de Java.util.GregorianCalendar.
Calendar c = Calendar.getIntance();

Com a instncia de Calendar devemos configurar uma data e podemos fazer isso de duas formas: Mtodos set
c.set(ano,mes,dia); c.set(ano,ms,dia,hora,minuto); c.set(ano,ms,dia,hora,minuto,segundo);

Mtodo setTime
c.setTime(new Date() );

A classe Calendar tambm nos fornece vrias constantes que utilizaremos para manipular uma data entre elas. Com a data devidamente configurada podemos realizar diversas operaes com a data:

97

Para adicionar ou subtrair um dia, hora, ms ou ano utilizamos o mtodo add. O mtodo add aceita dois parmetros, sendo o primeiro um constante inteira que representa a unidade da data que queremos modificar(dia, ms , ano, etc) e o segundo quantas vezes ser adicionada/subtrada esta unidade. A unidade informada utilizando constantes fornecidas pela classe Calendar que pode ser: Dia:
Calendar.DAY_OF_MONTH Calendar.DAY_OF_WEEK Calendar.DAY_OF_YEAR

Ms:
Calendar.MONTH

Ano:
Calendar.YEAR

Hora:
Calendar.HOUR Calendar.HOUR_OF_DAY

Segundos:
Calendar.SECOND

Veja o exemplo abaixo:


Date d= new Date(); Calendar c = Calendar.getInstance(); c.add(Calendar.DAY_OF_YEAR,5 );//adicionamos 5 dias a data aual c.add(Calendar.MONTH,3 );//adicionamos 3 mses a data atual c.add(Calendar.YEAR,1 );//adicionamos 1 ano a data atual

DATEFORMAT(JAVA.TEXT.DATEFORMAT)
Bom agora sabemos como manipula datas, agora precisamos formatar a data para apresentao. A classe DateFormat nos fornece uma maneira simples de format-la e permite a internacionalizao a partir da classe Locale.
Date d = new Date(); Calendar c = Calendar.getInstance(); c.setTime(d); DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT); System.out.println( df.format(c.getTime()) );

98

Para obtermos uma String da data utilizamos o mtodo format que retorna uma String no formato especificado no mtodo getDateInstance(). A sada do exemplo acima ser algo como 03/04/10. A classe DateForma nos fornece vrios tipos de formato para data como:
Dateformat.SHORT // 03/06/13 Dateformat.MEDIUM // 03/06/2013 Dateformat.LONG //3 de Junho de 2013 Dateformat.FULL //Segunda, 3 de Junho de 2013

Embora para muitos casos estes formatos sero suficientes algumas vezes necessitamos de uma formato vem personalizado. Isso pode ser feio atravs de um subclasse de DateFormat a SimpleDateFormat.
Date hoje = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); System.out.println( sdf.format(hoje));

O construtor de SimpleDateFormat recebe uma String que representa o formato da data. Os smbolos utilizados para cada campo da data pode ser visto na tabela abaixo abaixo:

Smbolo G y M d h H m s S E D F w

Significado era designator year month in year day in month hour in am/pm (1~12) hour in day (0~23) minute in hour second in minute millisecond day in week day in year day of week in month week in year

Apresentao (Text) (Number) (Text & Number) (Number) (Number) (Number) (Number) (Number) (Number) (Text) (Number) (Number) (Number)

Exemplo AD 1996 July & 07 10 12 0 30 55 978 Tuesday 189 2 (2nd Wed in July) 27

99

W a k K z

week in month am/pm marker hour in day (1~24) hour in am/pm (0~11) time zone

(Number) (Text) (Number) (Number) (Text)

2 PM 24 0 Pacific Standard Time

Como vimos o dia da semana pode ser escrito por extenso, que lngua ele ser utilizada? Normalmente o ingls, mas se quisermos que seja na lngua de um local diferente? Para isso utilizaremos a internacionalizao com a classe Locate que recebe em seu construtor a lngua e o pas que queremos utilizar:
Locale brasil = new Locale("pt","br");//portugues do brasil Locale japao = new Locale("ja");// japao

O objeto locale de Locale pode ser utilizado tanto com a classe DateFormat quanto com a classe SimpleDateFormat.
Date hoje = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("E dd ",new Locale("pt","br")); System.out.println( sdf.format(hoje)); DateFormat df = DateFormat.getDateInstance(DateFormat.FULL,new Locale("pt","br")); System.out.println( df.format(hoje));

Para finalizar como covertermos uma String em um objeto Date


Date d = new Date(); SimpleDateFormat df = new SimpleDateFormat("DD/MM/yyyy"); try { d = df.parse("25/03/2010"); } catch (ParseException ex) { ex.printStackTrace(); } System.out.println( df.format(d));

100

O mtdo parse da classe DateFormat e <strong.simpledateformat< strong=""> recebe uma string e convertepara um objeto Date</strong.simpledateformat<> Exerccios 1 Digitar e testar a classe Data deste captulo 2 Encapsular corretamente as classes Conta e ContaEspecial do captulo anterior.

101

CAPTULO 13: POLIMORFISMO


Caracterstica que permite que uma mesma interface assuma implementaes distintas. Classes com interfaces semelhantes, mas implementaes diferentes so polimrficas.

Polimorfismo a caracterstica da orientao a objetos que determina que uma interface e sua implementao so elementos distintos de uma classe. Assim, classes diferentes podem implementar a mesma interface. So classes polimrficas.

EXEMPLO CONCEITUAL

As classes polimrficas do uma grande flexibilidade para o desenvolvimento de aplicaes onde os contratos estabelecidos entre os objetos so muito bem definidos (essas contratos so as interfaces atravs das quais os objetos interagem entre si). Um objeto (da classe A), construdo para trabalhar com um segundo objeto (da classe B), no conhece a implementao desse segundo, mas apenas a sua interface (IB). Um outro objeto (da classe C, mas com a mesma interface de B) pode substituir esse segundo objeto, sem necessidade de alteraes na classe A.

102

public interface IB { ... } public class B implements IB { ...} public class C implements IB { ...} public class A { private IB obj; public void setObj(IB obj) { this.obj = obj; } } A a = new A(); a.setObj(new B()); a.setObj(new C());

Notao UML

POLIMORFISMO E HERANA
Uma subclasse implementa a interface da superclasse Classes numa mesma hierarquia podem ser polimrficas pela interface mais genrica

103

Se a classe A dependente de B, ento qualquer instncia de B, C, D, E, F ou G pode ser utilizadas nesta dependncia Exemplo completo

Comentrios e cdigo: No diagrama UML esto indicados apenas os principais atributos e mtodos. O cdigo est completo. O esteretipo <<abstract>> indica que a classe ou o mtodo so abstratos. A classe DeptoPessoal no est completa.

Colaborador Classe abstrata. Um construtor que recebe o nome. Um mtodo abstrato, que dever ser implementado por todas as subclasses.

104

abstract public class Colaborador { private String nome; abstract public double obterCusto(); public String obterNome() { return this.nome; } public Colaborador(String nome) { this.nome = nome; } }

105

CAPTULO 14: ENTRADA E SADA


Conceito de stream Classes bsicas o InputSream o OutputStream o so simtricas Podem ser aninhadas (flexibilidade)

Stream um conceito que representa qualquer caminho de comunicao entre uma fonte de informao e seu destino. Este conceito pode ser empregado para qualquer fonte ou destino de informao, e torna-se til porque padroniza esta comunicao independentemente destes. Assim, a classe stream implementa os mesmos mtodos, seja o stream origirrio (ou destinatrio) um dispositivo de I/O, a memria, outra aplicao ou outro thread da mesma aplicao. Os streams que implementam I/O so os mais empregados e o escopo maior desta seo. Os streams de entrada e sada so simtricos em muitos aspectos. Assim, apenas um dos casos ser estudado detalhadamente. A possibilidade de aninhar classes de stream em Java torna seu uso muito flexvel e prtico.

ENTRADA
InputStream - mtodos o read() o skip() o available() o mark() o reset() o close()

106

A classe bsica que implementa streams de entrada chamada de InputStream. Esta classe incorpora uma srie de mtodos. Os principais so descritos abaixo: read(): realiza a leitura de bytes do stream; skip(): ignora um nmero de bytes do stream, passado como seu parmetro; available(): retorna o nmero de bytes disponveis no stream; mark(): marca uma posio sobre o stream; reset(): retorna posio marcada por mark(); close(): fecha o stream (no obrigatrio).

INPUTSTREAM - EXEMPLO

No exemplo, a primeira chamada a read() realiza a leitura de um nico byte. Na segunda chamada, a varivel buffer preenchida com bytes do stream (desde que existam). Na terceira chamada, a leitura realizada a partir da posio 300 do stream. O mtodo mark() exige como parmetro o nmero de bytes do stream onde se estende a sua validade. Assim, se um reset() for chamado aps 1024 posies j percorridas, um erro ser gerado. Este mecanismo fora o progamador a alocar recursos bem definidos para o uso do mark().

107

CLASSES HERDADAS DE INPUTSTREAM


ByteArrayInputStream e StringBufferInputStream cria um stream a partir de um buffer ou de uma string FileInputString o tipo mais comum de stream o pode abrir e acessar arquivos do sistema o pode tratar como stream arquivos j abertos Exemplo:
InputStream filein= new FileInputStream(/usr/fulano/arquivo);

As demais classes de streams de entrada so herdadas a partir de InputStream. ByteArrayStream e StringBufferStream criam um stream a partir de buffer de bytes ou a partir de uma string, respectivamente. Portanto agem de forma inversa ao mostrado no exemplo anterior. FileInputString permite a abertura a manipulao de stream originrios de arquivos do sistema. Juntamente com FileOutputStream fornecem a base de acesso a arquivos em Java. FilterInputStream o fornece base para classes de stream que possam ser aninhadas Subclasses de FilterInputStream o BufferedInputStream : stream com cache o DataInputStream: stream de tipos distintos (e no somente de bytes, como vimos at agora) o PushBackInputStream: implementa o mtodo unread(), que coloca de volta no stream um byte j lido. FilterInputStream a classe bsica que implementa a base para classes de stream que possam ser aninhadas. O aninhamento de classes torna bem flexvel o uso dos streams, como pode ser visto nos exemplos abaixo.

108

Algumas classes so geradas diretamente de FilterInputString e implementam algumas facilidades bsicas no uso de streams, tais como cache e interpretao de tipos. Uma exemplo de aninhamento de stream:
InputStream sin= new BufferdInputStream(new FileInputStream(arquivo));

Esta declarao cria um stream originrio de um arquivo do sistema e ao mesmo tempo utiliza cache. Podem ser feitos quantos aninhamentos se desejar, desde que as classes aninhada sejam subclasses de FilterInputStream. PipedInputStream o stream que estabelece comunicao entre dois threads SequenceInputStream o executa a concatenao de streams Exemplo:
InputStream sin1 = new FileInputStream(metade1); InputStream sin2 = new FileInputStream(metade2); InputString sin=new SequnceInputStream(sn1, sn2);

Existem outras classes no mencionadas aqui pois so de uso muito restrito. No entanto, na literatura avanada podem ser encontradas algumas descries.

SADA - OUTPUTSTREAMS
Simtrico a InputStream o implementa write() ao invs de read(), em todas as suas subclasses herdeiras o flush() o close()

109

PrintStream o no tem InputStream correspondent o System.out.print() o System.out.println();

No convm repetir todo o texto para as classes OutputStream e suas subclasses. trivial compreender que o seu comportamento simtrico em relao ao fluxo do stream, com respeito as classes de InputStream. Evidentemente o mtodo read() e seus equivalentes substitudo pelo mtodo write() (e seus equivalentes). Alm desse, existe o mtodo flush() que fora o stream a escrever na sada os dados que eventualmente estejam em cache ou temporariamente em algum lugar. A classe PrintStream no encontra correspondente nos streams de entrada. Ela j foi usada neste curso, uma vez que a varivel de classe System.out contm uma instncia deste classe.

READERS E WRITERS
As classes de manipulao de streams trabalham com bytes. Para se trabalhar com caracteres utilizam-se os Reader e Writers, que so equivalentes respectivamente aos streams de entrada e sada. Superclasse: Reader BufferedReader, FilterReader, StringReader, InputStreamReader (ponte entre streams e readers) Superclasse: Writer BufferedWriter, FilterWriter, StringWriter, OutputStreamReader (ponte entre streams e writers)

Para a manipulao de arquivos o uso de Readers e Writers mais prtico.


FileInputStream fis = new FileInputStream("C:\\arquivo.txt"); InputStreamReader isr = new InputStreamReader(fis); BufferedReader in = new BufferedReader(isr); System.out.println(in.readLine());

110

Observar que o arquivo foi aberto usando um stream e manipulado usando um reader. Para isso foi usada a ponte entre eles.

A CLASSE FILE
Manipula arquivos e diretrios (e no seu contedo) Teste dos atributos do arquivo: canRead, canWrite, isHidden, isFile, isDirectory Manipulao fsica getAbsolutePath, getName, createNewFile, renameTo, length Manipulao de diretrios listFiles, mkdir

O mesmo exemplo anterior agora utilizando a classe File. File file = new File("C:\\arquivo.txt"); FileInputStream fis = new FileInputStream(file); InputStreamReader isr = new InputStreamReader(fis); BufferedReader in = new BufferedReader(isr); System.out.println(in.readLine());

Exerccios
1 - Faa uma aplicao em que mostre na tela o contedo de um arquivo qualquer. 2 Faa uma aplicao que copie o contedo de um arquivo de caracteres para o outro, substituindo todas as letras pela sua letra seguinte (a por b, b por c, etc). Faa o processo inverso tambm. Utilize Readers e Writers. 3 - Faa uma aplicao que fique esperando strings na entrada padro e as mostre na sada padro. A aplicao espera a entrada de uma linha e aps a ENTER, mostra esta linha.

111

CAPTULO 15: THREADS


Possibilidade de executar simultaneamente vrias threads de um nico programa A execuo do programa no segue um padro linear, mais derivativo e paralelo Usar multithread uma boa prtica, no entanto a maioria dos servidores Web e de Aplicao realizam isso implicitamente Situaes necessrias: loops infinitos (animao, sockets agents) longs trechos de cdigo sem interao com terceiros mltiplas instncias de um mesmo trecho de programa

Multithread a capacidade de um programa de rodar diferentes trechos (ou diferentes instncias do mesmo trecho) de forma independente. Permite por exemplo que o programa realize tarefas em background enquanto mantm viva a interface com o usurio. O uso de multithread em Java fcil e implementado diretamente pela linguagem, ou seja, o controle dos diferentes threads feito automaticamente. Um exemplo de uso de multithread so os prprios browsers Internet. Enquanto um thread realiza a busca dos dados na rede, o que muita vezes ocorre de forma lenta, outros threads permitem que a pgina sendo carregada j seja exposta na tela, com rolagem, e links ativos. Num ambiente de janelas fica evidente que a programao em threads fundamental.

112

DIAGRAMA
Fluxo de um programa multi-thread

O diagrama acima d uma ideia do fluxo de execuo de um programa multithread. Todas as linhas mostradas so implementadas com threads, inclusive a linha principal. Esta uma boa poltica de programao. Verifica-se que alguns threads podem ter curta durao (inicializao) e outros podem ficar rodando indefinidamente em loop infinito, tais como processos permanentes em background, terminando apenas quando a aplicao finaliza. Um bom procedimento finalizar todos os threads iniciados antes de terminar a execuo do programa. Isto no obrigatrio, mas no seguir esta regra pode compromete recursos do sistema de forma indesejvel.

IMPLEMENTAO
Classe deve implementar interface Runnable Classe deve possuir uma varivel que contenha um tipo Thread Mtodo start() deve ser invocado para disparar um novo thread O mtodo run() deve conter o cdigo que roda dentro do thread

113

A criao de uma classe para trabalhar com multithreads muito simples. Basicamente deve-se declarar a classe com a interface Runnable, portanto com a assinatura:
public class RelogioMultiThread implements Runnable { . }

Esta interface fora a implementao um mtodo run() que agora deve passar a conter todo o cdigo a ser executado dentro do thread. Uma aplicao com multithread mostrada nas pginas seguintes. o exemplo de Relgio rodando dentro de um thread, enquanto a aplicao principal continua seu fluxo normal de execuo.

Exemplo

114

SINCRONIZAO DE THREADS
Mecanismo para evitar que um mesmo trecho de cdigo seja executado por dois threads simultaneamente Manipulao de recursos nicos (arquivos, entrada e sada, variveis) que no podem ser acessados simultaneamente.

public synchronized void metodo() { ... // acesso a recursos de forma nica } // dentro de um mtodo qualquer.. synchronized(this) { ... // acesso a recursos de forma nica }

A sincronizao de acesso a recursos que so compartilhados entre threads muito til para evitar erros de acesso simultneas, em recursos que no o suportam, ou no podem ter acessos simultneos, como por exemplos, arquivos abertos, variveis de controle, etc. A sincronizao pode ser feita pela mtodo usando o modificador synchronized, onde todo o corpo do mtodo somente pode ser executado por um thread de cada vez; ou pelo bloco synchronized(objeto) {...} onde o bloco executado por um nico thread de cada vez. Quando mais de um thread tenta usar os mtodos/blocos sincronizados, o interpretador enfileira-os, suspendendo aqueles que esto esperando sua vez de execuo.

Exerccios
1 - Faa uma aplicao que dispare trs threads. Cada um deles deve mostrar na sada padro, em um loop infinito, o instante que ele roda (com System.out.println( ... + new java.util.Date()). 2 - Coloque um contador em cada thread e verifique quantas vezes cada um deles executa o System.out.println 3 Crie uma pilha de dados cujos acessos (push e pop) sejam sincronizados

115

CAPTULO 16: EXCEES E ERROS


Tratamento de situaes eventuais mas que comprometem a correta execuo do programa Maneira simplificada de extensivamente capturar situaes de excees e erros Situaes previsveis, mas genricas Java fora o tratamento em muitos casos, nem que seja passar a exceo/erro para o sistema.

O tratamento de excees e erros em Java uma forma de tornar o cdigo mais previsvel e controlvel. Por outro lado tambm uma forma de facilitar a programao de rotinas necessrias a esse tratamento. Normalmente as situaes de excees e erros, como o prprio nome diz, so eventuais. No entanto seu tratamento necessrio para um bom cdigo. Uma sistemtica de tratamento destas condies pode abranger grandes pores de cdigo, de forma complexa e extensa. Java prov uma maneira de sistematizar o tratamento destas situaes, a fim de facilitar a programao. Ao mesmo tempo que permite a extenso desta sistemtica para grande parte do cdigo de forma simplificada. Muitos dos mtodos dos pacotes bsicos de Java necessitam que o usurio defina um tratamento de erro especfico. Isto pode ser to simples ou to complexo, tanto quanto queira o programador. Por fim, importante salientar que o tratamento de excees/erros no um cdigo mgico que vai tornar seu programa error-free. As situaes tratadas podem ser bem genricas, mas devem ser previsveis.

MANEIRA COMUM DE TRATAR EXCEES/ERROS


repetitiva e extensa dificulta o cdigo alta relao custo benefcio, mas necessrio

int valret=metodo_que_preve_exc(); switch (valret) { case }

116

A maneira convencional de tratar excees e erros tende a ser cansativa, repetitiva e extensa. Exige alteraes na funcionalidade propriamente dita do cdigo. Pode tambm exigir o uso de variveis globais na passagem de indicadores de erros. Esta abordagem, alm de pouco prtica, passa a ser irritante quando necessita ser utilizada em grande parte do cdigo. Tem-se uma forma de programao de alto custo, com benefcios pouco utilizados (j que as ocorrncia so raras), mas no entanto necessria.

TRATAMENTO EM JAVA
Excees e erros so modelados por objetos (classe bsica chama-se Throwable) Atitudes do programador: avisar usurio do mtodo que uma exceo pode ser gerada; tratamento in loco da exceo; passagem da exceo adiante.

As excees e erros so modelados por objetos herdados da classe bsica Throwable. Este modelamento em objetos permite estabelecer uma hierarquia de erros, muito til na definio de tratamento especficos e/ou genricos. Diante de um mtodo que pode gerar alguma condio de exceo ou erro, o programador pode tomar trs atitudes: no capturar, declarar a passagem da exceo/erro para uma classe especfica e no implementar o seu tratamento; capturar e tratar a condio in loco, capturar e passar a condio para o nvel superior de seu cdigo.

Cada situao em particular pode exigir uma atitude especfica do programador. No entanto a alternativa de tratar a condio localmente a mais esperada normalmente, por motivos bvios.

117

MODIFICADOR THROWS
Uso da palavra reservada throws indica que mtodo pode gerar uma condio de exceo/erro Normalmente deixa o tratamento a cargo de quem utilizar o mtodo No muito prtico para projetos em equipes

A palavra reservada throw aplicado a um mtodo indica que aquele mtodo pode gerar uma exceo/erro do tipo definido pela clusula throws. Esta declarao apenas diz ao usurio daquele mtodo que tipo de excees/erros pode-se esperar de sua execuo. Fornece uma informao muito til, mas no prov uma forma de tratar esta condio. Este o esquema bsico de indicao de condio de excees/erros em Java e que muitos mtodos das bibliotecas bsicas de interfaces implementam. Isto acaba forando o usurio destas interfaces a capturar e tratar os erros passados.

118

TRATAMENTO
Uso de try,- catch (Erro e) ,-

O tratamento local de excees/erros exige um pouco mais de cdigo, mas representa a forma mais clara e completa de programar este tipo de tratamento. Nesta caso, o usurio usa a clusula try aplicada a um bloco para especificar que espera capturar uma condio de exceo/erro naquele bloco. Ao fim do bloco try, a clusula catch captura a exceo/erro especfico (indicado entre parnteses) e determina um tratamento. Em outras palavras: o programa tenta rodar o cdigo dentro do primeiro bloco; caso alguma condio de exceo/erro surja, tratadores especficos so chamados nos blocos seguintes. Esta forma direta permite que condies de excees/erros gerem apenas um desvio do cdigo para um tratador especfico. Este desvio completamente definido e delimitado pelo clusula catch, e portanto no desestrutura o cdigo, como alguns poderiam supor. Definir um tratamento passa a ser a parte complexa do cdigo e em geral exige experincia do programador. Basicamente devemos nos preocupar com as excees mais comuns e fornecer um tratamento curto e rpido. Como o prprio nome diz, estas so condio especiais e o bom senso diz o quanto de esforo devemos colocar no tratamento de condies que podem comprometer o resultado do nosso cdigo.

119

PASSANDO O TRATAMENTO ADIANTE


Capturar a exceo mas passar o seu tratamento adiante Utilizar com excees bsicas quando se sabe que o nvel externo tem condies de trat-la

Uma outra alternativa para tratamento de exceo/erro captur-lo e simplesmente pass-lo adiante. Este erro ento passado para o nvel imediatamente externo classe em questo. Se a classe mais externa no tratar este erro, ento este passado novamente para a prxima classe e assim sucessivamente at chegar ao sistema. importante observar que as excees lanadas com o comando throw, precisam ser declaradas no mtodo com o palavra reservada throws. Adoo desta atitude mais aconselhvel para erros bsicos do sistema, onde sabemos ter o sistema condies de trat-lo.

120

TRATAMENTO MLTIPLO

Um bloco try pode capturar tantos erros quanto se queira. A nica ressalva a ser feita quanto ao ordenamento dos tratadores no clusulas catch. necessrio que os erros mais especficos sejam declarados primeiros. Assim, como no exemplo acima, apenas uma condio muito particular e pouco provvel iria chamar um tratamento de baixo nvel, de um objeto da classe bsica Throwable.

A CLUSULA FINALLY
Alm de mltiplos catches, uma clusula finally pode ser acrescentado ao tratamento de excees. O bloco finally sempre executado, independente da captura da exceo

121

DEFININDO EXCEES
Erros e excees podem ser definidas pelo desenvolvedor Qualquer subclasse de Throwable pode ser definida como um erro ou exceo Para a definio de excees normalmente se utiliza como superclasse a classe Exception.

O mecanismo de captura e lanamento de excees pode ser utilizado para trabalhar com excees definidas pelo desenvolvedor, dando uma grande flexibilidade de programao. muito comum se utilizar esse mecanismo para definir desvios no fluxo de programao, com excees associadas a regras de execuo do programa e no apenas a falhas. Exerccios 1 - Faa uma classe que represente uma data (dia, ms e ano). Defina excees e lance-as, no construtor, para datas inconsistentes. 2 Faa um programa que leia uma data do teclado, e devolva para uma o usurio uma mensagem amigvel caso a data seja inconsistente.

122

CAPTULO 17: TPICOS AVANADOS


Colees Networking Generics

COLEES
Java oferece uma srie de classes que estruturam objetos de uma forma mais prtica do que arrays o Listas o Listas ligadas o Hashtables o Caractersticas o Sincronizadas para acessos em mltiplos threads o Mtodos de ordenao o Estruturas com uso de tipos especficos (generics) No pacote java.util existe uma srie de classes que implementam a interface Collection. Todas as classes concretas que implementam essa interface so estruturas para armazenar um conjunto de objetos com as mais variadas finalidades. As principais classes desse pacote so: ArrayList e Vector: Arrays de tamanho ajustvel aos elementos armazenados. Hashtable: Armazena pares chave-valores, com mtodos que facilitam a busca dos valores pelas suas chaves. LinkedList: Lista duplamente ligada. Stack: pilha

123

Observar na documentao da API quais dessas colees permitem acesso sincronizado a seus elementos. A classe Arrays possui uma sria de mtodos de ordenao de arrays. A maioria das classes que manipulam colees so parametrizadas por tipos.
import java.util.*; public class Listas { public static void main(String[] args) { ArrayList<String> arr = new ArrayList<String>(); arr.add("um"); arr.add("dois"); for(String s: arr){ System.out.println(s); } } }

Iteratores o As colees podem ser percorridas com iteratores, que podem ser obtidos diretamente delas

Iterator it = colecao.iterator(); hasNext() testa se existem elemento ainda next() retorna prximo elemento Exemplo do uso de iteratores: import java.util.*; public class Listas { public static void main(String[] args) { ArrayList<String> arr = new ArrayList<String>(); arr.add("um"); arr.add("dois"); Iterator it = arr.iterator(); while(it.hasNext()) { System.out.println(it.next()); } } }

124

Exerccios
1 Faa uma classe que funciona como uma fbrica de Datas. A cada data que o programa precisar ele pede para um mtodo esttico dessa classe. Esse mtodo verifica se existe uma Data previamente criada (e armazenada num Hashtable), retornando-a. Se a data no existir, ento ele criada e armazenada no Hashtable. Dessa forma, uma nica instncia de cada data existe em todo o programa. 2 Faa um mtodo nesse classe que coloque num array, em ordem cronolgica, todas as datas armazenadas por ela. 3 Liste todas as chaves do Hashtable usando um iterador.

NETWORKING
URLConnection Efetua uma conexo com um servidor Web. Permite o envio de dados e recebimento de arquivos de um servidor Web (pginas HTML, imagens, etc.) A classe URLConnection permite uma maneira fcil e simples de abrir uma conexo com qualquer servidor na Internet.
import java.net.*; import java.io.*; public class Conexao { public static void main(String[] args) throws Exception{ URL url = new URL("http", "127.0.0.1", 8080, "/index.htm"); BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream())); String linha = null; while((linha = reader.readLine()) !=null) System.out.println(linha); } }

Exerccio 1. Escrever um programa que l uma pgina da internet cuja URL foi digitada pelo usurio na linha de comando. ServerSocket e Socket Servidor e cliente TCP/IP, para envio de pacotes TCP/IP sobre a rede.

125

Servidor fica escutando (listening, em ingls) uma porta TCP/IP, esperando por conexes.
import java.net.*; import java.io.*; public class Servidor { public static void main(String[] args) throws Exception{ ServerSocket servidor = new ServerSocket(10000); while(true) { Socket socket = servidor.accept(); OutputStream saida = socket.getOutputStream(); saida.write("Conectou!".getBytes()); saida.close(); socket.close(); } } }

Cliente se conecta na porta do servidor.


import java.net.*; import java.io.*; public class Cliente { public static void main(String[] args) throws Exception{ Socket socket = new Socket("127.0.0.1", 10000); InputStream entrada = socket.getInputStream(); byte[] bytes = new byte[100]; entrada.read(bytes); for(int i=0; i<100; i++) { if(bytes[i]==0) break; System.out.print((char)bytes[i]); } } }

Exerccio 1. Escrever um cliente socket que envia dados para um servidor socket.

GENERICS
Declarao de classes e mtodos com tipos parametrizados Os tipos so resolvidos em tempo de compilao Eliminao de casting

126

Exemplo que utiliza uma pilha de uma classe definida pelo desenvolvedor. Notar que a pilha manipula apenas o tipo parametrizado (Dupla).
import java.util.*; public class Generic { public static void main(String[] args) { Stack<Dupla> pilha = new Stack<Dupla>(); pilha.add(new Dupla(1,34)); pilha.add(new Dupla(2,67)); for(Dupla d : pilha) { System.out.println(d.toString()); } } } class Dupla { Dupla(int a, int b) { this.a = a; this.b = b; } int a, b; public String toString() { return "(" + this.a + "," + this.b + ")"; } }

Agora a classe Dupla foi parametrizada para servir como dupla de dois tipos parametrizados quaisquer. Notar que na instanciao dos objetos os tipos so passados como parmetros.
public class Generic { public static void main(String[] args) { Stack<Dupla> pilha = new Stack<Dupla>(); pilha.add(new Dupla<Integer, String>(1,"trinta e quatro")); pilha.add(new Dupla<Integer, String>(2,"sesseta e sete")); pilha.add(new Dupla<String, String>("tres", "quarenta")); for(Dupla d : pilha) { System.out.println(d.toString()); } } } class Dupla<E, T> { E e; T t; Dupla(E e, T t) { this.e = e; this.t = t; } public String toString() { return "(" + e.toString() + "," + t.toString() + ")"; }

127

Por fim, usando o wildcard de tipos <?>.


public class Generic { public static void main(String[] args) { Stack<Dupla> pilha = new Stack<Dupla>(); pilha.add(new Dupla<Integer, Integer>(1,34)); pilha.add(new Dupla<Integer, String>(2,"sesseta e sete")); pilha.add(new Dupla<String, String>("tres", "quarenta")); for(Dupla d : pilha) { println(d); } } public static void println(Dupla<?,?> dupla) { System.out.println(dupla.toString());} }

128