Você está na página 1de 70

Java Basico

Verso 1.0.0

Sumrio
I Sobre essa Apostila 3 5 10 19
20 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 21 21 21 21 22 22 23 23 23 24 24 24 25 25 26 27 29 32 32 32 34 35 36

II Informaes Bsicas III GNU Free Documentation License IV Java Bsico

1 O que Java 2 Plano de ensino 2.1 Objetivo . . . 2.2 Pblico Alvo . 2.3 Pr-requisitos 2.4 Descrio . . 2.5 Metodologia . 2.6 Cronograma 2.7 Programa . . 2.8 Avaliao . . 2.9 Bibliograa .

3 Introduo 3.1 Histrico . . . . . . . . . . . . . . . . . . . . 3.1.1 Histria . . . . . . . . . . . . . . . . 3.2 Instalao . . . . . . . . . . . . . . . . . . . 3.2.1 Instalao atravs de pacote binrio 3.2.2 Distribuies derivadas do Debian . 3.3 Introduo Linguagem . . . . . . . . . . . 3.4 Tipos de dados . . . . . . . . . . . . . . . . 4 Conceitos Bsicos 4.1 Classes, Objetos, Atributos e Mtodos 4.1.1 Classes . . . . . . . . . . . . . 4.1.2 Objetos . . . . . . . . . . . . . 4.1.3 Atributos . . . . . . . . . . . . 4.1.4 Atributos estticos . . . . . . . . . . . . . . . . . . . . . .

CDTC

Centro de Difuso de Tecnologia e Conhecimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Brasil/DF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 41 41 42 46 47 49 51 51 55 57 57 59 59 60 61 62 62 64

4.1.5 Mtodos . . . . . . . . . . 4.2 Estruturas de Controle . . . . . . 4.2.1 Estruturas de Repetio . 4.2.2 Estruturas Condicionais . 4.3 E/S Teclado e Arquivo . . . . . . 4.3.1 E/S Teclado . . . . . . . . 4.3.2 E/S Arquivo . . . . . . . . 4.4 Vetores e Cadeia de Caracteres 4.4.1 Vetores . . . . . . . . . . 4.4.2 Cadeia de Caracteres . .

5 Conceitos Avanados 5.1 Tratamento de erros . . . . . . . . . . . . 5.2 Encapsulamento, Herana e Polimorsmo 5.2.1 Encapsulamento . . . . . . . . . . 5.2.2 Herana . . . . . . . . . . . . . . . 5.2.3 Polimorsmo . . . . . . . . . . . . 5.3 Interfaces Grcas . . . . . . . . . . . . . 5.3.1 Gerncia de Janelas . . . . . . . . 5.4 Threads . . . . . . . . . . . . . . . . . . .

Parte I

Sobre essa Apostila

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Contedo
O contedo dessa apostila fruto da compilao de diversos materiais livres publicados na internet, disponveis em diversos sites ou originalmente produzido no CDTC (http://www.cdtc.org.br.) O formato original deste material bem como sua atualizao est disponvel dentro da licena GNU Free Documentation License, cujo teor integral encontra-se aqui reproduzido na seo de mesmo nome, tendo inclusive uma verso traduzida (no ocial). A reviso e alterao vem sendo realizada pelo CDTC (suporte@cdtc.org.br) desde outubro de 2006. Crticas e sugestes construtivas sero bem-vindas a qualquer hora.

Autores
A autoria deste de responsabilidade de Edson Hungria Junior (hungria@cdtc.org.br) . O texto original faz parte do projeto Centro de Difuso de Tecnologia e Conhecimento que vm sendo realizado pelo ITI (Instituto Nacional de Tecnologia da Informao) em conjunto com outros parceiros institucionais, e com as universidades federais brasileiras que tem produzido e utilizado Software Livre apoiando inclusive a comunidade Free Software junto a outras entidades no pas. Informaes adicionais podem ser obtidas atravs do email ouvidoria@cdtc.org.br, ou da home page da entidade, atravs da URL http://www.cdtc.org.br.

Garantias
O material contido nesta apostila isento de garantias e o seu uso de inteira responsabilidade do usurio/leitor. Os autores, bem como o ITI e seus parceiros, no se responsabilizam direta ou indiretamente por qualquer prejuzo oriundo da utilizao do material aqui contido.

Licena
Copyright 2006, Instituto Nacional de Tecnologia da Informao (cdtc@iti.gov.br) . Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Chapter being SOBRE ESSA APOSTILA. A copy of the license is included in the section entitled GNU Free Documentation License.

Parte II

Informaes Bsicas

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Sobre o CDTC
Objetivo Geral O Projeto CDTC visa a promoo e o desenvolvimento de aes que incentivem a disseminao de solues que utilizem padres abertos e no proprietrios de tecnologia, em proveito do desenvolvimento social, cultural, poltico, tecnolgico e econmico da sociedade brasileira. Objetivo Especco Auxiliar o Governo Federal na implantao do plano nacional de software no-proprietrio e de cdigo fonte aberto, identicando e mobilizando grupos de formadores de opinio dentre os servidores pblicos e agentes polticos da Unio Federal, estimulando e incentivando o mercado nacional a adotar novos modelos de negcio da tecnologia da informao e de novos negcios de comunicao com base em software no-proprietrio e de cdigo fonte aberto, oferecendo treinamento especco para tcnicos, prossionais de suporte e funcionrios pblicos usurios, criando grupos de funcionrios pblicos que iro treinar outros funcionrios pblicos e atuar como incentivadores e defensores dos produtos de software no proprietrios e cdigo fonte aberto, oferecendo contedo tcnico on-line para servios de suporte, ferramentas para desenvolvimento de produtos de software no proprietrios e do seu cdigo fonte livre, articulando redes de terceiros (dentro e fora do governo) fornecedoras de educao, pesquisa, desenvolvimento e teste de produtos de software livre.

Guia do aluno
Neste guia, voc ter reunidas uma srie de informaes importantes para que voc comece seu curso. So elas: Licenas para cpia de material disponvel; Os 10 mandamentos do aluno de Educao a Distncia; Como participar dos foruns e da wikipdia; Primeiros passos. muito importante que voc entre em contato com TODAS estas informaes, seguindo o roteiro acima.

Licena
Copyright 2006, Instituto Nacional de Tecnologia da Informao (cdtc@iti.gov.br). 6

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

dada permisso para copiar, distribuir e/ou modicar este documento sob os termos da Licena de Documentao Livre GNU, Verso 1.1 ou qualquer verso posterior pblicada pela Free Software Foundation; com o Capitulo Invariante SOBRE ESSA APOSTILA. Uma cpia da licena est inclusa na seo entitulada "Licena de Documentao Livre GNU".

Os 10 mandamentos do aluno de educao online

1. Acesso Internet: ter endereo eletrnico, um provedor e um equipamento adequado pr-requisito para a participao nos cursos a distncia; 2. Habilidade e disposio para operar programas: ter conhecimentos bsicos de Informtica necessrio para poder executar as tarefas; 3. Vontade para aprender colaborativamente: interagir, ser participativo no ensino a distncia conta muitos pontos, pois ir colaborar para o processo ensino-aprendizagem pessoal, dos colegas e dos professores; 4. Comportamentos compatveis com a etiqueta: mostrar-se interessado em conhecer seus colegas de turma respeitando-os e se fazendo ser respeitado pelos mesmos; 5. Organizao pessoal: planejar e organizar tudo fundamental para facilitar a sua reviso e a sua recuperao de materiais; 6. Vontade para realizar as atividades no tempo correto: anotar todas as suas obrigaes e realiz-las em tempo real; 7. Curiosidade e abertura para inovaes: aceitar novas idias e inovar sempre; 8. Flexibilidade e adaptao: requisitos necessrio mudana tecnolgica, aprendizagens e descobertas; 9. Objetividade em sua comunicao: comunicar-se de forma clara, breve e transparente ponto - chave na comunicao pela Internet; 10. Responsabilidade: ser responsvel por seu prprio aprendizado. O ambiente virtual no controla a sua dedicao, mas reete os resultados do seu esforo e da sua colaborao.

Como participar dos fruns e Wikipdia


Voc tem um problema e precisa de ajuda? Podemos te ajudar de 2 formas: A primeira o uso dos fruns de notcias e de dvidas gerais que se distinguem pelo uso: . O frum de notcias tem por objetivo disponibilizar um meio de acesso rpido a informaes que sejam pertinentes ao curso (avisos, notcias). As mensagens postadas nele so enviadas a 7

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

todos participantes. Assim, se o monitor ou algum outro participante tiver uma informao que interesse ao grupo, favor post-la aqui. Porm, se o que voc deseja resolver alguma dvida ou discutir algum tpico especco do curso. recomendado que voc faa uso do Frum de dvidas gerais que lhe d recursos mais efetivos para esta prtica. . O frum de dvidas gerais tem por objetivo disponibilizar um meio fcil, rpido e interativo para solucionar suas dvidas e trocar experincias. As mensagens postadas nele so enviadas a todos participantes do curso. Assim, ca muito mais fcil obter respostas, j que todos podem ajudar. Se voc receber uma mensagem com algum tpico que saiba responder, no se preocupe com a formalizao ou a gramtica. Responda! E no se esquea de que antes de abrir um novo tpico recomendvel ver se a sua pergunta j foi feita por outro participante. A segunda forma se d pelas Wikis: . Uma wiki uma pgina web que pode ser editada colaborativamente, ou seja, qualquer participante pode inserir, editar, apagar textos. As verses antigas vo sendo arquivadas e podem ser recuperadas a qualquer momento que um dos participantes o desejar. Assim, ela oferece um timo suporte a processos de aprendizagem colaborativa. A maior wiki na web o site "Wikipdia", uma experincia grandiosa de construo de uma enciclopdia de forma colaborativa, por pessoas de todas as partes do mundo. Acesse-a em portugus pelos links: Pgina principal da Wiki - http://pt.wikipedia.org/wiki/ Agradecemos antecipadamente a sua colaborao com a aprendizagem do grupo!

Primeiros Passos
Para uma melhor aprendizagem recomendvel que voc siga os seguintes passos: Ler o Plano de Ensino e entender a que seu curso se dispe a ensinar; Ler a Ambientao do Moodle para aprender a navegar neste ambiente e se utilizar das ferramentas bsicas do mesmo; Entrar nas lies seguindo a seqncia descrita no Plano de Ensino; Qualquer dvida, reporte ao Frum de Dvidas Gerais.

Perl do Tutor
Segue-se uma descrio do tutor ideal, baseada no feedback de alunos e de tutores. O tutor ideal um modelo de excelncia: consistente, justo e prossional nos respectivos valores e atitudes, incentiva mas honesto, imparcial, amvel, positivo, respeitador, aceita as idias dos estudantes, paciente, pessoal, tolerante, apreciativo, compreensivo e pronto a ajudar. 8

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

A classicao por um tutor desta natureza proporciona o melhor feedback possvel, crucial, e, para a maior parte dos alunos, constitui o ponto central do processo de aprendizagem. Este tutor ou instrutor: fornece explicaes claras acerca do que ele espera e do estilo de classicao que ir utilizar; gosta que lhe faam perguntas adicionais; identica as nossas falhas, mas corrige-as amavelmente, diz um estudante, e explica porque motivo a classicao foi ou no foi atribuda; tece comentrios completos e construtivos, mas de forma agradvel (em contraste com um reparo de um estudante: os comentrios deixam-nos com uma sensao de crtica, de ameaa e de nervossismo) d uma ajuda complementar para encorajar um estudante em diculdade; esclarece pontos que no foram entendidos, ou corretamente aprendidos anteriormente; ajuda o estudante a alcanar os seus objetivos; exvel quando necessrio; mostra um interesse genuno em motivar os alunos (mesmo os principiantes e, por isso, talvez numa fase menos interessante para o tutor); escreve todas as correes de forma legvel e com um nvel de pormenorizao adequado; acima de tudo, devolve os trabalhos rapidamente;

Parte III

GNU Free Documentation License

10

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

(Traduzido pelo Joo S. O. Bueno atravs do CIPSGA em 2001) Esta uma traduo no ocial da Licena de Documentao Livre GNU em Portugus Brasileiro. Ela no publicada pela Free Software Foundation, e no se aplica legalmente a distribuio de textos que usem a GFDL - apenas o texto original em Ingls da GNU FDL faz isso. Entretanto, ns esperamos que esta traduo ajude falantes de portugus a entenderem melhor a GFDL. This is an unofcial translation of the GNU General Documentation License into Brazilian Portuguese. It was not published by the Free Software Foundation, and does not legally state the distribution terms for software that uses the GFDLonly the original English text of the GFDL does that. However, we hope that this translation will help Portuguese speakers understand the GFDL better. Licena de Documentao Livre GNU Verso 1.1, Maro de 2000 Copyright (C) 2000 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA permitido a qualquer um copiar e distribuir cpias exatas deste documento de licena, mas no permitido alter-lo.

INTRODUO
O propsito desta Licena deixar um manual, livro-texto ou outro documento escrito "livre"no sentido de liberdade: assegurar a qualquer um a efetiva liberdade de copi-lo ou redistribui-lo, com ou sem modicaes, comercialmente ou no. Secundariamente, esta Licena mantm para o autor e editor uma forma de ter crdito por seu trabalho, sem ser considerado responsvel pelas modicaes feitas por terceiros. Esta Licena um tipo de "copyleft"("direitos revertidos"), o que signica que derivaes do documento precisam ser livres no mesmo sentido. Ela complementa a GNU Licena Pblica Geral (GNU GPL), que um copyleft para software livre. Ns zemos esta Licena para que seja usada em manuais de software livre, por que software livre precisa de documentao livre: um programa livre deve ser acompanhado de manuais que provenham as mesmas liberdades que o software possui. Mas esta Licena no est restrita a manuais de software; ela pode ser usada para qualquer trabalho em texto, independentemente do assunto ou se ele publicado como um livro impresso. Ns recomendamos esta Licena principalmente para trabalhos cujo propsito seja de introduo ou referncia.

APLICABILIDADE E DEFINIES
Esta Licena se aplica a qualquer manual ou outro texto que contenha uma nota colocada pelo detentor dos direitos autorais dizendo que ele pode ser distribudo sob os termos desta Licena. O "Documento"abaixo se refere a qualquer manual ou texto. Qualquer pessoa do pblico um

11

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

licenciado e referida como "voc". Uma "Verso Modicada"do Documento se refere a qualquer trabalho contendo o documento ou uma parte dele, quer copiada exatamente, quer com modicaes e/ou traduzida em outra lngua. Uma "Seo Secundria" um apndice ou uma seo inicial do Documento que trata exclusivamente da relao dos editores ou dos autores do Documento com o assunto geral do Documento (ou assuntos relacionados) e no contm nada que poderia ser includo diretamente nesse assunto geral (Por exemplo, se o Documento em parte um livro texto de matemtica, a Seo Secundria pode no explicar nada de matemtica). Essa relao poderia ser uma questo de ligao histrica com o assunto, ou matrias relacionadas, ou de posies legais, comerciais, loscas, ticas ou polticas relacionadas ao mesmo. As "Sees Invariantes"so certas Sees Secundrias cujos ttulos so designados, como sendo de Sees Invariantes, na nota que diz que o Documento publicado sob esta Licena. Os "Textos de Capa"so certos trechos curtos de texto que so listados, como Textos de Capa Frontal ou Textos da Quarta Capa, na nota que diz que o texto publicado sob esta Licena. Uma cpia "Transparente"do Documento signica uma cpia que pode ser lida automaticamente, representada num formato cuja especicao esteja disponvel ao pblico geral, cujos contedos possam ser vistos e editados diretamente e sem mecanismos especiais com editores de texto genricos ou (para imagens compostas de pixels) programas de pintura genricos ou (para desenhos) por algum editor de desenhos grandemente difundido, e que seja passvel de servir como entrada a formatadores de texto ou para traduo automtica para uma variedade de formatos que sirvam de entrada para formatadores de texto. Uma cpia feita em um formato de arquivo outrossim Transparente cuja constituio tenha sido projetada para atrapalhar ou desencorajar modicaes subsequentes pelos leitores no Transparente. Uma cpia que no "Transparente" chamada de "Opaca". Exemplos de formatos que podem ser usados para cpias Transparentes incluem ASCII simples sem marcaes, formato de entrada do Texinfo, formato de entrada do LaTex, SGML ou XML usando uma DTD disponibilizada publicamente, e HTML simples, compatvel com os padres, e projetado para ser modicado por pessoas. Formatos opacos incluem PostScript, PDF, formatos proprietrios que podem ser lidos e editados apenas com processadores de texto proprietrios, SGML ou XML para os quais a DTD e/ou ferramentas de processamento e edio no estejam disponveis para o pblico, e HTML gerado automaticamente por alguns editores de texto com nalidade apenas de sada. A "Pgina do Ttulo"signica, para um livro impresso, a pgina do ttulo propriamente dita, mais quaisquer pginas subsequentes quantas forem necessrias para conter, de forma legvel, o material que esta Licena requer que aparea na pgina do ttulo. Para trabalhos que no tenham uma pgina do ttulo, "Pgina do Ttulo"signica o texto prximo da apario mais proeminente do ttulo do trabalho, precedendo o incio do corpo do texto.

12

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

FAZENDO CPIAS EXATAS


Voc pode copiar e distribuir o Documento em qualquer meio, de forma comercial ou no comercial, desde que esta Licena, as notas de copyright, e a nota de licena dizendo que esta Licena se aplica ao documento estejam reproduzidas em todas as cpias, e que voc no acrescente nenhuma outra condio, quaisquer que sejam, s desta Licena. Voc no pode usar medidas tcnicas para obstruir ou controlar a leitura ou confeco de cpias subsequentes das cpias que voc zer ou distribuir. Entretanto, voc pode aceitar compensao em troca de cpias. Se voc distribuir uma quantidade grande o suciente de cpias, voc tambm precisa respeitar as condies da seo 3. Voc tambm pode emprestar cpias, sob as mesmas condies colocadas acima, e tambm pode exibir cpias publicamente.

FAZENDO CPIAS EM QUANTIDADE


Se voc publicar cpias do Documento em nmero maior que 100, e a nota de licena do Documento obrigar Textos de Capa, voc precisar incluir as cpias em capas que tragam, clara e legivelmente, todos esses Textos de Capa: Textos de Capa da Frente na capa da frente, e Textos da Quarta Capa na capa de trs. Ambas as capas tambm precisam identicar clara e legivelmente voc como o editor dessas cpias. A capa da frente precisa apresentar o ttulo completo com todas as palavras do ttulo igualmente proeminentes e visveis. Voc pode adicionar outros materiais s capas. Fazer cpias com modicaes limitadas s capas, tanto quanto estas preservem o ttulo do documento e satisfaam a essas condies, pode ser tratado como cpia exata em outros aspectos. Se os textos requeridos em qualquer das capas for muito volumoso para caber de forma legvel, voc deve colocar os primeiros (tantos quantos couberem de forma razovel) na capa verdadeira, e continuar os outros nas pginas adjacentes. Se voc publicar ou distribuir cpias Opacas do Documento em nmero maior que 100, voc precisa ou incluir uma cpia Transparente que possa ser lida automaticamente com cada cpia Opaca, ou informar, em ou com, cada cpia Opaca a localizao de uma cpia Transparente completa do Documento acessvel publicamente em uma rede de computadores, qual o pblico usurio de redes tenha acesso a download gratuito e annimo utilizando padres pblicos de protocolos de rede. Se voc utilizar o segundo mtodo, voc precisar tomar cuidados razoavelmente prudentes, quando iniciar a distribuio de cpias Opacas em quantidade, para assegurar que esta cpia Transparente vai permanecer acessvel desta forma na localizao especicada por pelo menos um ano depois da ltima vez em que voc distribuir uma cpia Opaca (diretamente ou atravs de seus agentes ou distribuidores) daquela edio para o pblico. pedido, mas no obrigatrio, que voc contate os autores do Documento bem antes de redistribuir qualquer grande nmero de cpias, para lhes dar uma oportunidade de prover voc com uma verso atualizada do Documento.

13

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

MODIFICAES
Voc pode copiar e distribuir uma Verso Modicada do Documento sob as condies das sees 2 e 3 acima, desde que voc publique a Verso Modicada estritamente sob esta Licena, com a Verso Modicada tomando o papel do Documento, de forma a licenciar a distribuio e modicao da Verso Modicada para quem quer que possua uma cpia da mesma. Alm disso, voc precisa fazer o seguinte na verso modicada: A. Usar na Pgina de Ttulo (e nas capas, se houver alguma) um ttulo distinto daquele do Documento, e daqueles de verses anteriores (que deveriam, se houvesse algum, estarem listados na seo "Histrico do Documento"). Voc pode usar o mesmo ttulo de uma verso anterior se o editor original daquela verso lhe der permisso; B. Listar na Pgina de Ttulo, como autores, uma ou mais das pessoas ou entidades responsveis pela autoria das modicaes na Verso Modicada, conjuntamente com pelo menos cinco dos autores principais do Documento (todos os seus autores principais, se ele tiver menos que cinco); C. Colocar na Pgina de Ttulo o nome do editor da Verso Modicada, como o editor; D. Preservar todas as notas de copyright do Documento; E. Adicionar uma nota de copyright apropriada para suas prprias modicaes adjacente s outras notas de copyright; F. Incluir, imediatamente depois das notas de copyright, uma nota de licena dando ao pblico o direito de usar a Verso Modicada sob os termos desta Licena, na forma mostrada no tpico abaixo; G. Preservar nessa nota de licena as listas completas das Sees Invariantes e os Textos de Capa requeridos dados na nota de licena do Documento; H. Incluir uma cpia inalterada desta Licena; I. Preservar a seo entitulada "Histrico", e seu ttulo, e adicionar mesma um item dizendo pelo menos o ttulo, ano, novos autores e editor da Verso Modicada como dados na Pgina de Ttulo. Se no houver uma sesso denominada "Histrico"no Documento, criar uma dizendo o ttulo, ano, autores, e editor do Documento como dados em sua Pgina de Ttulo, ento adicionar um item descrevendo a Verso Modicada, tal como descrito na sentena anterior; J. Preservar o endereo de rede, se algum, dado no Documento para acesso pblico a uma cpia Transparente do Documento, e da mesma forma, as localizaes de rede dadas no Documento para as verses anteriores em que ele foi baseado. Elas podem ser colocadas na seo "Histrico". Voc pode omitir uma localizao na rede para um trabalho que tenha sido publicado pelo menos quatro anos antes do Documento, ou se o editor original da verso a que ela se rera der sua permisso; K. Em qualquer seo entitulada "Agradecimentos"ou "Dedicatrias", preservar o ttulo da 14

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

seo e preservar a seo em toda substncia e m de cada um dos agradecimentos de contribuidores e/ou dedicatrias dados; L. Preservar todas as Sees Invariantes do Documento, inalteradas em seus textos ou em seus ttulos. Nmeros de seo ou equivalentes no so considerados parte dos ttulos da seo; M. Apagar qualquer seo entitulada "Endossos". Tal sesso no pode ser includa na Verso Modicada; N. No reentitular qualquer seo existente com o ttulo "Endossos"ou com qualquer outro ttulo dado a uma Seo Invariante. Se a Verso Modicada incluir novas sees iniciais ou apndices que se qualiquem como Sees Secundrias e no contenham nenhum material copiado do Documento, voc pode optar por designar alguma ou todas aquelas sees como invariantes. Para fazer isso, adicione seus ttulos lista de Sees Invariantes na nota de licena da Verso Modicada. Esses ttulos precisam ser diferentes de qualquer outro ttulo de seo. Voc pode adicionar uma seo entitulada "Endossos", desde que ela no contenha qualquer coisa alm de endossos da sua Verso Modicada por vrias pessoas ou entidades - por exemplo, declaraes de revisores ou de que o texto foi aprovado por uma organizao como a denio ocial de um padro. Voc pode adicionar uma passagem de at cinco palavras como um Texto de Capa da Frente , e uma passagem de at 25 palavras como um Texto de Quarta Capa, ao nal da lista de Textos de Capa na Verso Modicada. Somente uma passagem de Texto da Capa da Frente e uma de Texto da Quarta Capa podem ser adicionados por (ou por acordos feitos por) qualquer entidade. Se o Documento j incluir um texto de capa para a mesma capa, adicionado previamente por voc ou por acordo feito com alguma entidade para a qual voc esteja agindo, voc no pode adicionar um outro; mas voc pode trocar o antigo, com permisso explcita do editor anterior que adicionou a passagem antiga. O(s) autor(es) e editor(es) do Documento no do permisso por esta Licena para que seus nomes sejam usados para publicidade ou para assegurar ou implicar endossamento de qualquer Verso Modicada.

COMBINANDO DOCUMENTOS
Voc pode combinar o Documento com outros documentos publicados sob esta Licena, sob os termos denidos na seo 4 acima para verses modicadas, desde que voc inclua na combinao todas as Sees Invariantes de todos os documentos originais, sem modicaes, e liste todas elas como Sees Invariantes de seu trabalho combinado em sua nota de licena. O trabalho combinado precisa conter apenas uma cpia desta Licena, e Sees Invariantes Idnticas com multiplas ocorrncias podem ser substitudas por apenas uma cpia. Se houver mltiplas Sees Invariantes com o mesmo nome mas com contedos distintos, faa o ttulo de 15

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

cada seo nico adicionando ao nal do mesmo, em parnteses, o nome do autor ou editor origianl daquela seo, se for conhecido, ou um nmero que seja nico. Faa o mesmo ajuste nos ttulos de seo na lista de Sees Invariantes nota de licena do trabalho combinado. Na combinao, voc precisa combinar quaisquer sees entituladas "Histrico"dos diversos documentos originais, formando uma seo entitulada "Histrico"; da mesma forma combine quaisquer sees entituladas "Agradecimentos", ou "Dedicatrias". Voc precisa apagar todas as sees entituladas como "Endosso".

COLETNEAS DE DOCUMENTOS
Voc pode fazer uma coletnea consitindo do Documento e outros documentos publicados sob esta Licena, e substituir as cpias individuais desta Licena nos vrios documentos com uma nica cpia incluida na coletnea, desde que voc siga as regras desta Licena para cpia exata de cada um dos Documentos em todos os outros aspectos. Voc pode extrair um nico documento de tal coletnea, e distribu-lo individualmente sob esta Licena, desde que voc insira uma cpia desta Licena no documento extrado, e siga esta Licena em todos os outros aspectos relacionados cpia exata daquele documento.

AGREGAO COM TRABALHOS INDEPENDENTES


Uma compilao do Documento ou derivados dele com outros trabalhos ou documentos separados e independentes, em um volume ou mdia de distribuio, no conta como uma Verso Modicada do Documento, desde que nenhum copyright de compilao seja reclamado pela compilao. Tal compilao chamada um "agregado", e esta Licena no se aplica aos outros trabalhos auto-contidos compilados junto com o Documento, s por conta de terem sido assim compilados, e eles no so trabalhos derivados do Documento. Se o requerido para o Texto de Capa na seo 3 for aplicvel a essas cpias do Documento, ento, se o Documento constituir menos de um quarto de todo o agregado, os Textos de Capa do Documento podem ser colocados em capas adjacentes ao Documento dentro do agregado. Seno eles precisaro aparecer nas capas de todo o agregado.

TRADUO
Traduo considerada como um tipo de modicao, ento voc pode distribuir tradues do Documento sob os termos da seo 4. A substituio de Sees Invariantes por tradues requer uma permisso especial dos detentores do copyright das mesmas, mas voc pode incluir tradues de algumas ou de todas as Sees Invariantes em adio s verses orignais dessas Sees Invariantes. Voc pode incluir uma traduo desta Licena desde que voc tambm inclua a verso original em Ingls desta Licena. No caso de discordncia entre a traduo e a

16

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

verso original em Ingls desta Licena, a verso original em Ingls prevalecer.

TRMINO
Voc no pode copiar, modicar, sublicenciar, ou distribuir o Documento exceto como expressamente especicado sob esta Licena. Qualquer outra tentativa de copiar, modicar, sublicenciar, ou distribuir o Documento nula, e resultar automaticamente no trmino de seus direitos sob esta Licena. Entretanto, terceiros que tenham recebido cpias, ou direitos de voc sob esta Licena no tero suas licenas terminadas, tanto quanto esses terceiros permaneam em total acordo com esta Licena.

REVISES FUTURAS DESTA LICENA


A Free Software Foundation pode publicar novas verses revisadas da Licena de Documentao Livre GNU de tempos em tempos. Tais novas verses sero similares em espirito verso presente, mas podem diferir em detalhes ao abordarem novos porblemas e preocupaes. Veja http://www.gnu.org/copyleft/. A cada verso da Licena dado um nmero de verso distinto. Se o Documento especicar que uma verso particular desta Licena "ou qualquer verso posterior"se aplica ao mesmo, voc tem a opo de seguir os termos e condies daquela verso especca, ou de qualquer verso posterior que tenha sido publicada (no como rascunho) pela Free Software Foundation. Se o Documento no especicar um nmero de Verso desta Licena, voc pode escolher qualquer verso j publicada (no como rascunho) pela Free Software Foundation. ADENDO: Como usar esta Licena para seus documentos Para usar esta Licena num documento que voc escreveu, inclua uma cpia desta Licena no documento e ponha as seguintes notas de copyright e licenas logo aps a pgina de ttulo: Copyright (c) ANO SEU NOME. dada permisso para copiar, distribuir e/ou modicar este documento sob os termos da Licena de Documentao Livre GNU, Verso 1.1 ou qualquer verso posterior publicada pela Free Software Foundation; com as Sees Invariantes sendo LISTE SEUS TTULOS, com os Textos da Capa da Frente sendo LISTE, e com os Textos da Quarta-Capa sendo LISTE. Uma cpia da licena est inclusa na seo entitulada "Licena de Documentao Livre GNU". Se voc no tiver nenhuma Seo Invariante, escreva "sem Sees Invariantes"ao invs de dizer quais so invariantes. Se voc no tiver Textos de Capa da Frente, escreva "sem Textos de Capa da Frente"ao invs de "com os Textos de Capa da Frente sendo LISTE"; o mesmo para os Textos da Quarta Capa. Se o seu documento contiver exemplos no triviais de cdigo de programas, ns recomendamos a publicao desses exemplos em paralelo sob a sua escolha de licena de software livre,

17

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

tal como a GNU General Public License, para permitir o seu uso em software livre.

18

Parte IV

Java Bsico

19

Captulo 1

O que Java

Java uma linguagem de programao orientada a objetos, segura, robusta, distribuda, multiplataforma e de alto desempenho. Esta linguagem possui estrutura muito semelhante das linguagens C e C++, muito embora tenham losoas diferentes. So esses e outros motivos que a tornam uma linguagem to atraente tanto para usurios e programadores experientes quanto para os iniciantes. Este curso, ser baseado na distribuio Debian e possibilitar ao usurio aprender os conceitos, estruturas, declaraes, mtodos e funes bsicas dessa linguagem. Alm da criao de aplicativos e programas que iro inserir o usurio dentro do universo JAVA.

20

Captulo 2

Plano de ensino
2.1 Objetivo
Qualicar tcnicos e programadores na linguagem de programao Java.

2.2 Pblico Alvo


Tcnicos e Programadores que desejam trabalhar com Java.

2.3 Pr-requisitos
Os usurios devero ser, necessariamente, indicados por empresas pblicas e ter conhecimento bsico acerca da lgica de programao.

2.4 Descrio
O curso ser realizado na modalidade Educao a Distncia e utilizar a Plataforma Moodle como ferramenta de aprendizagem. Ele ser dividido em tpicos e cada um deles composto por um conjunto de atividades (lies, fruns, glossrios, questionrios e outros) que devero ser executadas de acordo com as instrues fornecidas. O material didtico est disponvel on-line de acordo com as datas pr-estabelecidas em cada tpico. A verso adotada do Java a 1.5.0, caso possua outra verso instalada podero ocorrer poucas diferenas. Todo o material est no formato de lies e estar disponvel ao longo do curso. As lies podero ser acessadas quantas vezes forem necessrias. Aconselhamos a leitura de "Ambientao do Moodle", para que voc conhea o produto de Ensino a Distncia, evitando diculdades advindas do "desconhecimento"sobre o mesmo. Ao nal de cada lio haver uma questo referente mdulo estudado anteriormente que tambm poder conter perguntas sobre os textos indicados caso existam. No nal do curso haver uma prova de Avaliao de Aprendizagem no formato da construo de um programa. Utilize o material de cada semana e os exemplos disponibilizados para se preparar para prova. As lies contm o contudo principal. Elas podero ser acessadas quantas vezes forem necessrias, desde que esteja dentro da semana programada. Ao nal de uma lio, voc receber uma nota de acordo com o seu desempenho. Responda com ateno s perguntas de cada lio, 21

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

pois elas sero consideradas na sua nota nal. Caso sua nota numa determinada lio for menor do que 6.0, sugerimos que voc faa novamente esta lio. Os instrutores estaro a sua disposio ao longo de todo curso. Qualquer dvida deve ser disponibilizada no frum ou enviada por e-mail. Diariamente os monitores daro respostas e esclarecimentos.

2.5 Metodologia
O curso est dividido da seguinte maneira:

2.6 Cronograma
Semana 1 - Introduo
Histrico; Instalao; Introduo linguagem; Tipos de Dados.

Semana 2 - Conceitos Bsicos


Classe, Objetos, Atributos e Mtodos; Estruturas de Controle; E/S Teclado e Arquivos; Vetores e Cadeia de Caracteres.

Semana 3 - Conceitos Avanados


Tratamento de Erros; Encapsulamento, Herana e Polimorsmo; Interfaces Grcas; Threads; Avaliao de Aprendizagem.

22

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

2.7 Programa
O curso de Java oferecer o seguinte contedo: Introduo Conceitos Bsicos e Avanados de Orientao Objeto

2.8 Avaliao
Toda a avaliao ser feita on-line. Aspectos a serem considerados na avaliao: Iniciativa e autonomia no processo de aprendizagem e de produo de conhecimento; Capacidade de pesquisa e abordagem criativa na soluo dos problemas apresentados. Instrumentos de avaliao: Participao ativa nas atividades programadas; Avaliao de Aprendizagem ao nal do curso; O participante far vrias avaliaes referente ao contedo do curso. Para a aprovao e obteno do certicado o participante dever obter nota nal maior ou igual a 6.0 de acordo com a frmula abaixo: Nota Final = ((ML x 7) + (AF x 3)) / 10 AF = Nota da Avaliao de Aprendizagem ML = Mdia aritmtica das Avaliaes de Lies

2.9 Bibliograa
Site ofcial: http://www.sun.com Guias em Portugus: http://br.sun.com, http://www.javafree.org, http://www.portaljava.com.br Guias extras: Pinheiro, Francisco A. C.Fundamentos de Computao e Orientao a Objetos Usando Java, LTC - Livros Tcnicos e Cientcos Editora S/A, Rio de Janeiro, 2006. ftp://ftp.unicamp.br/pub/apoio/treinamentos/linguagens/java_basico.pdf http://www.ime.usp.br/ mms/mac2121s2003/mac2121s2003aula28.pdf http://www.inf.puc-rio.br/ jmacedo/doc/inf1341%209%20JavaConcorrencia.pdf

23

Captulo 3

Introduo
Apresentao geral e histrico da linguagem Java

3.1 Histrico
O que Java? Java uma linguagem de programao orientada objetos resultado de um consistente desenvolvimento e trabalho de pesquisa realizado por projetistas da Sun Microsystems, que introduziu a linguagem no mercado em 1995. Mais do que uma simples linguagem de programao Java um ambiente de desenvolvimento e execuo de programas, uma plataforma segura e capaz proporcionar as facilidades da orientao objetos aliadas uma portabilidade instrnseca que facilita a sua integrao aos diversos ambientes existentes.

3.1.1 Histria
Um grupo de engenheiros da Sun Microsystems denominado Green, em 1991, foram encarregados de criar uma nova gerao de computadores inteligentes, simples e portteis capazes de se comunicar entre si, ou seja, com uma capacidade de uso potencialmente alta. Para tal, era necessrio que fosse utilizada uma plataforma de desenvolvimento em que os softwares pudessem ser portveis para os mais diferentes equipamentos como controles de TV, telefones, fornos, geladeiras, etc. O C++ foi a primeira escolha como ponto de partida para tal desenvolvimento. No entanto, as facilidades de orientao objeto introduzidas pelo C++ no foram sucientes para alcanar tudo aquilo que o grupo almejava. Foi ento que James Gosling, coordenador do projeto Green, optou pela criao de uma nova linguagem de programao que fosse realmente porttil, simples e interpretada. Assim surgiu o Oak(carvalho em ingls), que em 1995 aps vrias melhorias muda de nome, por problemas de direitos autorais, e passa a ser chamado de Java. Hoje, Java no utilizada em eletrodomsticos(pelo menos comercialmente). Ao invs disso, juntamente com o crescimento da Internet e o desenvolvimento dos applets(mini-aplicativos)ela se tornou um das linguagens de programao mais utilizadas no mundo. As especicaes da linguagem Java so mantidas uniformes atravs de um processo comunitrio gerido pela Sun Microsystems, que tambm detentora da marca registrada com o nome da linguagem.

24

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Caractersticas principais da linguagem Java so: Orientada a objeto por basear-se nos quatro princpios do paradigma da programao que so: Abstrao, encapsulamento, herana e polimorsmo; Neutra porque a Mquina Virtual Java (JVM) pode ser implementada em qualquer plataforma; Distribuda por suportar vrios tipos de conectividade em aplicaes distribudas na rede; Sem ponteiros pois a JVM possui o garbage collector capaz de gerenciar automtica e dinmicamente a memria; Segura protege as "mquinas-alvo"contra quaisquer operaes em seus sistema de arquivos por aplicaes obtidas pela rede, j que os applets so desenhados para existirem na mquina cliente somente em tempo de execuo. A maioria dessas caractersticas da linguagem sero desenvolvidas durante o curso.

3.2 Instalao
Temos nossa disposio uma variedade de mtodos de instalao do Java, podendo variar dependendo da distribuio GNU/Linux sendo utilizada. importante notar que diferentes mtodos de instalao podero prover verses diferentes do software. Neste curso, por exemplo, utilizaremos a verso 1.5.0, o pacote disponvel no repositrio testing/non-free do Debian. Vale observar que o pacote do Java se encontra na seo non-free, o que indica que ele considerado no-livre. Isto ocorre porque ele possui uma licena que no considerada livre pelos padres do Debian. Podemos diferenciar os mtodos de instalao basicamente entre aqueles que utilizam pacotes pr-compilados da prpria distribuio, ou aqueles que utilizam um binrio genrico para Linux, provido pela prpria Sun Microsystems. Distribuies derivadas do Debian utilizam pacotes nativos s distribuies (.deb), e para instal-los simplesmente os descompactam e movem os arquivos para os lugares apropriados. J o pacote binrio da Sun dever ser baixado do site do fabricante, e prosseguiremos com a instalao do mesmo.

3.2.1 Instalao atravs de pacote binrio


O primeiro mtodo que iremos abordar quanto instalao do Java ser o da instalao do pacote binrio provido pela Sun. Para atingir sucesso por esse mtodo de instalao devemos saber como obter esse pacote e instal-lo, alm de adicionar entradas apropriadas nos arquivos de congurao do sistema. O pacote binrio do Java pode ser obtido a partir do site da Sun, na pgina de downloads do Java SE( http://java.sun.com/javase/downloads/index_jdk5.jsp). Nesta pgina, podemos observar que existem vrias verses a serem baixadas, porm a que (provavelmente) se adequa sua necessidade a JDK 5.0 Update 11, que inclui o Runtime Environment para o Java (JRE) e tambm o development kit (JDK) bsico para o Java.

25

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Clicando no referido link, voc dever aceitar a licena e baixar o pacote apropriado para o seu sistema operacional, que, no caso do autor, Linux self-extracting le para arquiteturas de 32 bits (para 64 bits, o pacote se chama Linux x64 self-extracting le). Caso esteja utilizando distribuies derivadas de Red Hat, voc pode ainda obter o RPM, caso queira. Obtido o pacote, agora voc deve descompact-lo, o que implica apenas executar o arquivo em questo, j que ele tem a extenso (.bin) . Caso ele no esteja executvel, pode ser necessrio dar permisses de execuo ao arquivo utilizando o comando: $ chmod a+x jdk(...).bin Feito isso, execute o arquivo com o comando: $ ./jdk(...).bin Recomenda-se que, antes de executar este arquivo, voc o mova para o diretrio /opt, que segundo a FHS (File Hierarchy System) o diretrio padro para instalaes de programas independentemente instalados. Outro benefcio que todos os usurios da mquina podero utilizar-se do software, pois o /opt legvel para todos do sistema. Para faz-lo, porm, voc dever ser o usurio root, j que apenas este possui privilgios de escrita nesse diretrio. Seguidos estes passos, um diretrio ser gerado (caso tenha seguido o conselho, dentro do /opt), contendo binrios, documentao e arquivos adicionais da JDK e JRE do Java. Agora, basta adicionar o caminho desses binrios ao caminho de busca de binrios do sistema, designado pela varivel de ambiente $ PATH , setada pelo arquivo de congurao /etc/prole. Para adicionar esses binrios do Java a esse caminho, voc pode atualizar a varivel $ PATH (o que ser apagado aps o prximo reboot do computador) ou setar a varivel PATH no /etc/prole, que lido pelo sistema. Pronto, instalamos o Java atravs de seu pacote binrio! No foi nada difcil, no mesmo?

3.2.2 Distribuies derivadas do Debian


Para instalar o Java em distribuies derivadas do Debian podemos simplesmente utilizar o gerenciador de pacotes nativo, o apt-get. Vale lembrar que, como o Java no considerado livre pelos padres do Debian, voc deve adicionar a seo non-free sua lista de repositrios. Feito isso, devemos primeiramente buscar o nome do pacote correspondente ao Java utilizando o comando apt-cache:

hungria@debian3:~$ apt-cache search java5 sun-java5-bin - Sun Java(TM) Runtime Environment (JRE) 5.0 sun-java5-demo - Sun Java(TM) Development Kit (JDK) 5.0 demos and examples sun-java5-doc - Sun JDK(TM) Documention -- integration installer sun-java5-fonts - Lucida TrueType fonts (from the Sun JRE) sun-java5-jdk - Sun Java(TM) Development Kit (JDK) 5.0 sun-java5-jre - Sun Java(TM) Runtime Environment (JRE) 5.0 sun-java5-plugin - The Java(TM) Plug-in, Java SE 5.0 sun-java5-source - Sun Java(TM) Development Kit (JDK) 5.0 source files hungria@debian3:~$

26

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Como podemos ver, o nome do pacote correspondente ao Java JDK sun-java5-jdk, acompanhado de uma srie de bibliotecas e plugins. Sabendo disso, basta-nos agora instalar, como usurio root, o pacote utilizando o comando apt-get:

debian3:~# apt-get install sun-java5-jdk Reading package lists... Done Building dependency tree... Done The following extra packages will be installed: odbcinst1debian1 sun-java5-bin sun-java5-demo sun-java5-jre unixodbc Suggested packages: sun-java5-doc sun-java5-source sun-java5-plugin ia32-sun-java5-plugin sun-java5-fonts ttf-baekmuk ttf-sazanami-gothic ttf-sazanami-mincho ttf-arphic-bsmi00lp libmyodbc odbc-postgresql libct1 Recommended packages: gsfonts-x11 The following NEW packages will be installed odbcinst1debian1 sun-java5-bin sun-java5-demo sun-java5-jdk sun-java5-jre unixodbc 0 upgraded, 6 newly installed, 0 to remove and 58 not upgraded. Need to get 45.1MB of archives. After unpacking 114MB of additional disk space will be used. Do you want to continue [Y/n]? y 0% [Connecting to ftp.at.debian.org] debian3:~#
Pronto, agora j temos o JDK Java instalado atravs do gerenciador de pacotes apt-get. Foi bem fcil tambm, no ? Vale lembrar que os exemplos acima foram testados na distribuio Debian GNU/Linux, porm poderiam ser executados da mesma maneira em qualquer outra distribuio compatvel com o Debian, como o Ubuntu Linux, Kurumin ou Knoppix, dentre outras.

3.3 Introduo Linguagem


Aspectos de programao
Um programa a implementao de um algoritmo em uma linguagem de programao. O algoritmo precisa ser bem denido do incio ao m, tendo comandos ordenados e nitos capazes de produzirem um resultado visvel. Para programar bem deve-se fazer um algoritmo apropriado e ter um conhecimento lxico, sinttico e semntico da linguagem de programao a ser utlizada. No campo lxico as linguagens de programao permitem que o programador crie novas palavras, desde que se respeite as regras nativas da linguagem. J a sintaxe habilita o programador a exercer sua funo de implementar o algoritmo atravs do uso de smbolos, termos e palavras que formaro expresses vlidas. Finalmente, a semntica a representao do resultado observvel do algoritmo implementado na mquina pelo programador.

27

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Estrutura, Compilao e Execuo


Um programa um texto (chamado de programa fonte) que possui comandos e declaraes necessrias para a implementao de um algoritmo que traduzido para um produto equivalente escrito em comandos binrios (cdigo binrio) os quais so executados pelo computador. O processo de traduo chamado de compilao e posteriormente a ele se produz a ligao do cdigo binrio a outros cdigos para se obter nalmente o programa executvel. O programa executvel carregado na memria e colocado sob o controle de um ambiente de execuo, que faz com que cada comando seja executado pelo processador. Todo programa deve ter uma estrutura que permita denir seu inicio e m, de tal forma que o ambiente de execuo possa identicar precisamente o ponto de entrada do programa, isto , o primeiro comando que ser executado e o trmino da execuo.

A estrutura de um programa em Java


Os programas orientados a objetos so baseados no conceito classe. Cada classe contm as declaraes e os comandos que, em conjunto, implementam o algoritmo do programa. Estes comandos so organizados na forma de mtodos e devem possuir um mtodo principal que o ponto de incio da execuo, a partir dele os demais mtodos so acionados. Em Java, especicamente, a sua estrutura consiste de um conjunto de unidades de compilao. Cada uma delas contm as especicaes de classes e interfaces, juntamente com as declaraes necessrias para a compilao. Quando compiladas essas unidades geram arquivos com os cdigos binrios referentes s classes e interfaces nelas descritas. A estrutura bsica de uma classe consiste de uma palavra chave class, de um identicador (o nome da classe), e de um corpo que delimitado por chaves e contm opcionalmente declaraes e comandos prprios da classe.

Programando em Java
Em Java todos os arquivos com os respectivos cdigos podem ser escritos em um editor de texto utilizando UNICODE e terminadas com a extenso (.java). Cada arquivo representa uma unidade de compilao, podendo conter uma ou mais especicaes de classes e interfaces. Em java temos alguns comandos que nos ajudam na compilao e execuo dos programas, como o comando javac e o comando java. javac: ele o compilador da linguagem Java que ao ser executado este comando em um arquivo que contenha o codigo da linguagem, ir gerar um segundo cdigo contendo o cdigo binrio que utilizado para a execuo do programa. Para compilar seu cdigo digite javac NomeDoArquivo.java. java: O executvel Java a mquina virtual Java (JVM), ou seja, o programa responsvel pela execuo do cdigo compilado pelo javac. Para fazer uso do comando digite java NomeDoArquivo, para executar um arquivo no deve-se colocar a sua extenso.

Comentrios
Os comentrios so textos normalmente explicativos que servem para informar tanto o programador que o escreveu quanto outros que venham a utilizar ou somente ler aquele cdigo. Em Java os comentrios podem ser de trs tipos: 28

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Uma linha - Utiliza duas barras // marcando seu incio. Exemplo:

// tudo aps as barras considerado como comentrio


Mltiplas linhas - Utiliza barra asterisco no incio /* e asterisco barra no m */. Exemplo:

/* comentrio inicial e final de multiplas linhas */


Documentao - Semelhante ao de mltiplas linhas mas com propsito de documentar o cdigo. Exemplo:

/* comentrio de documentao * pode conter diversas * linhas */

3.4 Tipos de dados


Variveis
Na linguagem Java todas as variveis tm seus tipos de dados denidos. Os tipos de dados denem quais so os valores que uma varivel pode armazenar e quais operaes pode executar. Esses tipos bsicos so os mesmos para qualquer ambiente de programao Java, por se tratar de uma linguagem portvel. As variveis locais so declaradas no corpo de um mtodo*, existindo somente durante a atividade dele. J as variveis de instncia e variveis de classe so declaradas ambas no corpo de uma classe*, mas as de instncia especicam atributos prprios de cada objeto da classe, enquanto que as de classe especicam atributos comuns a todos objetos da classe. Existem tambm as variveis paramtricas que so declaradas como tratadoras de exceo, construtoras e parmetros formais de mtodos. So variveis declaradas na especicao de um mtodo, estas variveis possuem algum valor que ser usado no mtodo invocado. Seu uso semelhante ao das variveis locais podendo ser modicado o seu valor. As variveis paramtricas so criadas quando chamadas ao mtodo que pertencem e existem s durante a execuo do mtodo. Existem duas maneiras de atribuir os valores s variveis paramtricas, passagem de argumento por valor ou por referncia.

Passagem de argumentos por valor


Na passagem por valor feita a chamada a um mtodo e os parmetros reais utilizados na chamada so avaliados, produzindo valores que so atribudos aos parmetros formais correspondentes. Falando de forma mais simplicada, o mtodo cria uma "cpia"dos valores dos argumentos para que sejam utilizados somente dentro do mtodo. Portanto, por mais que se alterem esses valores, eles no afetaro as variveis externas ao mtodo.

29

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Passagem de argumentos por referncia


Ao se invocar uma funo ou procedimento, as variveis paramtricas armazenam uma referncia aos parmetros reais em vez de uma cpia do valor, como feito na passagem por valor. Mas, este tipo de passagem em Java no implementada, isto acontece porque em Java no existem ponteiros, existem objetos. Assim, toda varivel do tipo "objeto" na realidade uma referncia para aquela instncia do objeto. Mais simplicadamente, os argumentos passados por referncia tero seu valor alterado dentro e fora do mtodo, pois no feita uma cpia daquela varivel. Obs:. Variveis do tipo de dados primitivo so passadas por valor. Objetos (o contedo) no so passados diretamente para mtodos. Em vez disso, so passados aos mtodos referncias a objetos. As prprias referncias tambm so passadas por valor. Quando um mtodo recebe uma referncia a um objeto, o mtodo pode manipular o objeto diretamente. *Os conceitos de Mtodo e Classe sero abordados em prximas lies.

Escopo de variveis
O escopo de uma varivel a parte do programa no qual pode-se diretamente referenci-la. Uma varivel local tem seu escopo com alcance somente dentro do bloco onde ela foi declarada. Bloco este que em Java delimitado por chaves { }. As variveis de instncia e de classe tm escopo com alcance em todo o corpo da classe em que foram declaradas.

Tipos bsicos
Existem oito tipos primitivos em Java, todo o resto objeto. Estes tipos caram na linguagem pela sua velocidade de interao e, por isso, no foram transformados em Objetos. Como no so objetos a sua declarao j cria a varivel em memria no necessitando de construtores. Inteiros Tipo byte short int long Tamanho 8 bits 16 bits 32 bits 64 bits Valor -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

Reais ou Ponto Flutuante Tipo oat double Tamanho 32 bits 64 bits Valor - 1.40239846E-45 a + 3.40282347E + 38 - 4.94065645841246544E-324 a + 1.79769313486231570E + 308

Outros Tipos Tipo char boolean Tamanho 16 bits 8 bits Valor 0 a 65535 true ou false 30 Descrio Um caractere valor booleano(V ou F)

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

OPERADORES
Executam alguma funo sobre os operandos. Existem operadores unrios que requerem s um operando e operadores binrios e ternrios que requerem dois e trs operandos respectivamente. Depois de ser executada uma determinada funo um operador retorna um valor, sendo que esse valor e o tipo de retorno dependem do operador e de seus operandos. Operadores Binrios Operador + (Adio) - (Subtrao) * (Multiplicao) / (Diviso) % (Resto) Operadores Unrios Operador ++ ++ Uso X++ ++X X X Descrio Utiliza valor de X antes de fazer o incremento Incrementa antes de usar o valor de X Utiliza valor de X antes de fazer o decremento Decrementa antes de usar o valor de X Uso X+Y X-Y X*Y X/Y X%Y Descrio Soma X e Y Subtrai Y de X Multiplica X de Y Divide X por Y Resto da divisao de X por Y

Incrementar signica somar 1 Decrementar signica subtrar 1

Operadores Condicionais e Relacionais Operador > >= < <= == != Uso X>Y X >= Y X<Y X <= Y X == Y X != Y Retorna verdadeiro se X maior que Y X maior ou igual a Y X menor que Y X menor ou igual a Y X e Y so iguais X e Y so diferentes

Operadores Binrios Condicionais Operador && || ! & | Uso X && Y X || Y !X X&Y X|Y XY Retorna verdadeiro se X e Y Verdadeiros, se X falso, no avalia Y X ou Y Verdadeiro, se X verdadeiro, no avalia Y X Falso A operao "e"bit-a-bit entre X e Y, sempre avalia X e Y A operao "ou"bit-a-bit entre X ou Y, sempre avalia X e Y A operao "ou exclusivo"xOR entre X e Y, sempre avalia X e Y

31

Captulo 4

Conceitos Bsicos
Conceitos Bsicos da Orientao a Objeto

4.1 Classes, Objetos, Atributos e Mtodos


Conceitos de Classe e Objeto so centrais para a programao orientada a objeto, por isso extremamente necessria a sua compreenso.

4.1.1 Classes
Uma classe o elemento bsico da programao orientada a objetos que dene as formas e comportamentos dos objetos pertencentes ela. Tambm pode ser entendida como uma estrutura que associa atributos(dados) e mtodos(funes), controlando o acesso a estes. Ou seja, denir uma classe implica em especicar seus objetos. Para a criao de uma classe coloca-se um comando que inicia a declarao da classe. Aps a palavra-chave class segue-se o nome da classe, que deve ser um identicador vlido para a linguagem. Os modicadores indicam como classe pode ser utilizada por outras classes e aplicaes. Nota: Usualmente recomenda-se que as classes sejam declaradas utilizando nomes iniciados com letras maisculas enquanto que nomes variveis ou instncias de objetos sejam iniciados com letras minsculas. No caso de duas ou mais palavras, as palavras a partir da segunda devem iniciar com letra maiscula para substituir o espao. Veja o exemplo: Por exemplo se o nome fosse "Nome da coisa", caso esse fosse o nome de uma classe deveria car assim: "NomeDaCoisa", .Se fosse o nome de uma varivel, ento deveria car assim: "nomeDaCoisa". Porm, lembre-se que isso apenas uma recomendao. Mas bom segui-la para que o cdigo possa ser lido com facilidade por outro programador, e at mesmo por voc.

Sintaxe: [modificador] class <NomeClasse>{ <corpo classe> }


Exemplo:

public class ExemploDeClasse{ //atributos //mtodos }


32

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Modicadores
A primeira palavra nos d a possibilidade de atribuir permisses de acesso nossa classe, neste caso nossa permisso de tipo pblica (public). Uma classe public acessvel irrestritamente por qualquer outra classe que pertena ao mesmo pacote, ou seja, que estejam localizadas no mesmo diretrio bem seja diretamente ou por herana. Um pacote(pakage) em Java um diretrio que contenha um conjunto de classes. Os pacotes, em certa medida, equivalem s bibliotecas(libraries) de outras linguagens de programao. Existem tambm os modicadores privado(private) e protegido(protected) que sero melhor abordados no captulo de Conceitos Avanados. Exemplos de uso de pacotes:

/* O ponto seguido do asterisco indica que todas classes dentro do pacote sero importadas */ import java.io.*; import java.lang.Math; import java.awt.*;
O corpo da classe normalmente segue a seguinte seqencia: Variveis de classe Atributos Construtores Mtodos

Pode tambm conter um mtodo main, que utilizado pelo interpretador Java para dar incio execuo de uma aplicao. Exemplo 1:

class Estudante { /* declarao dos atributos da classe estudante */ String aluno; String matricula; /* mtodos da classe estudante */ void setAluno (String novoAluno){ aluno = novoAluno; } void setMatricula (String novaMatricula){ matrcula = novaMatricula; } void impEstudante (){ System.out.println( "aluno: "+aluno); System.out.println( "matricula: "+matricula); }

33

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Em nossa classe Estudante temos 3 mtodos setAluno, setMatricula e impEstudante, os dois primeiros usam parmetros e servem para modicar os atributos aluno e matricula do objeto que os executa. O ltimo mtodo contm a solicitao de um objeto referenciado por System.out para que este execute seu mtodo println, o qual far com que seja impresso na tela o aluno e sua matrcula. A palavra void indica que os mtodos no retornam valores.

4.1.2 Objetos
atravs deles que praticamente todo o processamento ocorre em aplicaes desenvolvidas com linguagens de programao orientadas a objetos. Toda linguagem de programao orientada a objetos oferece mecanismos para denir os tipos de objetos para cada aplicao atravs do conceito de classes. Objetos so a instncia de uma classe. Em outras palavras, so um pedao de memria reservada para armazenar os dados e os mtodos declarados na classe. Um objeto no mais que uma abstrao que contm um identicador, um estado e um conjunto de operaes que ele consegue realizar. Eles indicam ao computador como proceder em determinadas situaes. Os identicadores so denidos pelo ambiente ao serem criados, seu estado determinado pelos valores referentes a seus atributos e as operaes executadas so implementadas por meio de cdigo (chamado mtodo). No objeto pode-se executar os mtodos que foram denidos, alm de poder acessar e alterar dados.

Criando Objetos
Para, praticamente, toda classe existe denido algum mtodo (metodo()), que usado para criar os objetos da classe. Estes mtodos usados para a criao de objetos so chamados de construtores e se caracterizam por no possuir valor de retorno. A criao de um objeto da classe "Exemplo" feita atravs do comando:

new Exemplo();
Sendo iniciada a execuo do construtor da classe. Exemplo2: Suponhamos que num programa temos duas classes a Classe1 e a Classe2.

class Classe1 { int soma; void somar(){ //algum cdigo aqui } }


Criaremos o objeto assim:

class Classe2 { public static void main(String[] args) { /* Criando o objeto que referencia a Classe1 */ Classe1 objeto = new Classe1(); int obj = objeto.soma; // referenciando atributos da classe Classe1 } }
34

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

A referncia de um objeto se faz com a indicao do objeto sendo concatenado ao nome do atributo atravs de um ponto (objeto.soma).

4.1.3 Atributos
Atributos so um modo de modicar uma ou mais declaraes(as quais so feitas no corpo da classe, fora dos mtodos). Um atributo de uma classe a prpria varivel da classe que se destina a armazenar informaes singulares daquela classe. Exemplo:

/* Camiseta.java */ public class Camiseta { /* Atributos */ String cor; }


Naturalmente foi denida a classe Camiseta com seu atributo singular cor que poder armazenar dados sobre aquela camiseta. Outros atributos podem ser adicionados como, tamanho por exemplo. Ou seja, diversos atributos podem descrever vrios aspectos de um objeto. Exemplo:

public class Camiseta { String cor; char tamanho; float preco; }

Referncia de Atributos
Pode-se referir aos atributos de um objeto das seguintes formas: Pelo nome do atributo, se a referncia e o atributo referenciado pertencem mesma classe. Exemplo:

cor = verde;
A referncia acima s poder ser feita em mtodos da prpria classe onde o atributo cor foi declarado, no caso na classe Camiseta. Pela identicao do objeto seguida de um ponto seguido do nome do atributo. Isso ocorre quando a referncia feita a um atributo de um determinado objeto. Exemplo:

Camiseta objeto = new Camiseta(); /* criando o objeto camiseta */ objeto.cor = "verde";


Pela identicao de uma classe seguida de um ponto seguido do nome do atributo, quando se trata de atributos estticos.

35

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

4.1.4 Atributos estticos


Os atributos estticos so declarados com o modicador static, estes atributos se aplicam a funes e dados. Sua declarao no aplicada a uma instncia particular do objeto, mas ao tipo do objeto. A varivel totalDeAlunos, ao ser declarada como um atributo esttico (static int totalDeAlunos), permite que seu valor seja compartilhado por todos os objetos da classe Aluno. Ou seja, todas as instncias estaro compartilhando a mesma poro de dado. Exemplo de uma referncia de atributo a objetos especcos:

class Aluno { char turma; static int totalDeAlunos; int matricula; void imprimeAluno() { System.out.println("Matricula: " + matricula); System.out.println("Turma: " + turma); } } class CriadorObjetos{ public static void main(String[] arg){ Aluno obj1 = new Aluno(); Aluno obj2 = new Aluno(); obj1.totalDeAlunos++; obj2.totalDeAlunos++; obj1.matricula = 1; obj2.matricula = 2; obj1.turma = 'K'; obj2.turma = 'F'; System.out.println("Dados do aluno 1"); obj1.imprimeAluno(); System.out.println("Dados do aluno 2"); obj2.imprimeAluno(); } }
Ser impresso na tela:

Dados do aluno 1 Matricula: 1 Turma: K Dados do aluno 2 Matricula: 2 Turma: F Quantidade de alunos: 2

36

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Repare que "totalDeAlunos"foi incrementado em cada objeto, porm seu valor compartilhado pelos dois objetos. Note que o melhor jeito de referenciar uma varivel esttica utilizando o nome da classe e no o nome do objeto. Por exemplo: As linhas:

obj1.totalDeAlunos++; obj2.totalDeAlunos++;
Ficariam melhor se substitudas por:

Aluno.totalDeAlunos++; Aluno.totalDeAlunos++;
OBS:. O uso abusivo de elementos estticos desencorajado, pois elementos estticos so armazenados uma vez na memria e todos os objetos com acesso permitido acessaro o mesmo local. Isso pode ser fonte de inconsistncia j que diversos objetos estaro lendo e escrevendo no mesmo local concorrentemente. Adicionalmente, na orientao objeto deve-se evitar que informaes desnecessrias sejam visveis por objetos externos. Em nosso programa, foi mais efetivo denir a varivel totalDeAlunos como esttica, j que o totalDeAlunos um valor compartilhado por todos os alunos, e no especco de cada aluno, como a matrcula.

4.1.5 Mtodos
Na seqncia sero relembrados os conceitos de classe e objeto, porque necessrio que os manipulemos perfeitamente para poder entender tudo o que ser apresentado nesta lio. Objetos so instncias de classes. Ao serem criados, possuem uma identicao nica que atribuda pelo ambiente e um conjunto de atributos que o caracteriza. Estes atributos assumem valores que compem o estado do objeto, e cada objeto executa operaes denidas atravs de cdigos chamados mtodos. Nas classes encontramos os objetos e suas devidas descries, isto , as classes descrevem os atributos de seus objetos, bem como os mtodos que eles podem executar.

Mtodos
Nas linguagens orientadas a objetos os mtodos so usados para implementar operaes que sero usadas pelos objetos criados no programa. Os mtodos denem as aes a serem tomadas em diversos momentos da execuo de um programa, dando dinamismo capaz de permitir que os objetos, em muitos casos, imitem o comportamento de objetos reais. So os mtodos que realizam todas as tarefas para as quais o programa foi escrito, por exemplo, fazer clculos, resumir informaes de um arquivo, criar grcos, etc.

Chamando Mtodos
Podemos chamar um mtodo explicitamente ou implicitamente. A chamada explcita se d atravs da execuo de um comando ou por meio de uma expresso que contm o nome do mtodo. Por exemplo ao chamar o mtodo System.out.println (sua funo imprimir na tela) fazemos uma chamada explcita. Chamada implcita ocorre quando o interpretador Java chama 37

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

um mtodo por sua prpria deliberao. Por exemplo quando o interpretador Java chama o mtodo main para iniciar a execuo do programa.

Declarando Mtodos
Os mtodos so declarados como parte da especicao de uma classe. Sintaxe:

<tipo de retorno> <nome do mtodo> { <corpo do mtodo> }


Caso seja necessrio, podemos ter nos mtodos um valor de retorno. Na sintaxe acima se utilizarmos void no lugar de <tipo de retorno>, signica que o mtodo no retorna nenhum valor. O <nome do mtodo> um identicador que dene o nome pelo qual o mtodo conhecido, o <corpo do mtodo> contm todas as declaraes e especicaes necessrias para que quando seja chamado os comandos sejam executados. Nos mtodos tambm podemos fazer uso de moderador de acesso como public, protected e private que so empregados para restringir o acesso a um mtodo. Os modicadores permitem dar algumas propriedades ao mtodo. Exemplo 1:

class Exemplo1 { public static int soma(int num, int num2 ) { int res = 0; res = num + num2; return res; } }
Para retornar o resultado da soma que de tipo inteiro necessrio colocar a palavra chave int antes do nome do mtodo. O mtodo termina quando o comando return executado. Exemplo2:

class Exemplo2 { public static String somaPositivos (int num, int num2 ) { int res = 0; if ((num < 0) || (num2 < 0)) return "numeros negativos"; System.out.println(num + num2); return "fim de programa"; } }
No mtodo somaPositivos temos um if que testa se as variveis num e num2 so maiores que zero. Se no forem, ele d um return e sai do mtodo, caso contrrio, imprime a soma de num e num2 e posteriormente d um return e sai do mtodo. O comando if ser visto mais detalhadamente na seguinte lio. 38

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Referindo-se a mtodos
Se a referncia e o mtodo so da mesma classe, ento nos referimos a ele pelo seu nome. Quando se quer invocar a execuo do mtodo por um objeto especco, faz-se a referncia pela identicao de um objeto seguido do nome do mtodo. Para mtodos estticos, faz-se a identicao de uma classe seguida do nome do mtodo que se quer dentro desta classe. Exemplo 3:

class Exemplo3{ int x; int soma; static int quantidadeSomas = 0; void somaX(){ quantidadeSomas++; soma += x; imprime(); /*referencia ao mtodo */ } void imprime(){ System.out.println("Soma dessa instncia: " + soma); System.out.println("fim de programa"); } static void conta() { System.out.println("Quantidade de somas feitas: " + quantidadeSomas); }

Neste exemplo, a referncia ao mtodo imprime feita s pelo nome porque ele pertence mesma classe do mtodo (somaX()) que a chamou.

class Exemplo3TestDrive { public static void main(String[] arg){ Exemplo3 obj = new Exemplo3(); obj.x = 21; obj.somaX(); /* executar mtodo por um objeto */ Exemplo3.conta(); /* executar o mtodo esttico da classe Exemplo3 */ Exemplo3 obj2 = new Exemplo3(); obj2.x = 23; obj2.somaX(); Exemplo3.conta(); } }
No caso do Exemplo3TestDrive o mtodo somaX() teve que ser chamado utilizando o objeto instnciado, j o mtodo conta() foi chamado utilizando o nome da classe (pois um mtodo esttico). 39

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Mtodo println
Este mtodo executado pelo objeto referenciado System.out e imprime o argumento que recebe. Para imprimir uma seqencia de caracteres, necessrio que a seqencia seja colocada entre aspas duplas, exemplo:

System.out.println("Imprimindo seqencia de caracteres");


Aparecer na tela do computador:

Imprimindo seqencia de caracteres


Os caracteres so impressos exatamente como so escritos. O println aps imprimir da um salto de linha, enquanto o print imprime os argumentos mas no produz salto de linha. Exemplo 4:

class Exemplo4 { public static void main ( String [] argumento) { System.out.print("Imprimindo primeira linha "); System.out.println("Imprimindo segunda linha "); System.out.println("Imprimindo terceira linha "); } }
Aparecer na tela do computador:

Imprimindo primeira linha Imprimindo segunda linha Imprimindo terceira linha


Na primeira impresso est sendo usado o mtodo print, por isso no se produz salto de linha e a segunda impresso aparece na mesma linha da primeira. Para imprimir uma varivel, ela passada como argumento sem fazer uso das aspas duplas. Por exemplo: se a vriavel var tem como valor 1000, usamos a seguinte seqencia de comandos para imprimir este valor.

System.out.println(var);
Aparecer na tela o valor 1000. Observando o exemplo 5:

void impEstudante (){ System.out.println("Aluno: " + aluno); System.out.println("Matricula: "+ matricula); }


Podemos observar que neste mtodo para cada println so passados dois argumentos, uma seqencia de caracteres e uma varivel, o smbolo de adio "+"serve para indicar que outro argumento ser impresso.

40

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

4.2 Estruturas de Controle


Na execuo de programas as aes primitivas nem sempre so executadas na ordem em que so escritas, devido lgica de programao que foi aplicada na construo do algoritmo. Isto acontece porque s vezes necessitamos que determinada parte do programa deva repetir-se algumas vezes ou que uma parte do programa deva ser executada de acordo com uma condio.

4.2.1 Estruturas de Repetio


Os ciclos de repetio em sua estrutura possuem um conjunto de comandos e uma condio.

Comando While
Na execuo do comando while primeiro testa-se a <condio>. Se a condio resultar em falso o comando termina passando o controle para posio aps a chave de fechamento do comando. Se resultar em verdadeiro uma nova iterao tem incio e o controle passa para o primeiro comando da clusula de repetio.

Sintaxe: while (<condio>){ <comandos>; }


Exemplo:

while (cont != 0) { cont = cont -1; }


Na primeira linha testado se cont diferente de zero, se for, ento so executados os comandos que esto dentro do bloco while, mas se a condio no satisfeita o ciclo de repetio termina e o controle passa para a primeira linha depois do bloco.

Comando do-while
Este comando parecido ao while sua diferena que a condio testada aps a execuo do bloco de instrues. Portanto, este bloco executado no mnimo uma vez.

Sintaxe: do { <comandos>; } while (<condio>);


Exemplo:

do {

cont = cont - 1; } while (cont != 0);


Neste exemplo, o controle esta no bloco do comando do, onde primeiro so executadas todas as instrues, neste caso subtrai-se um da varivel cont, posteriormente testada a condio que, caso seja satisfeita (verdadeira), o controle volta para o comando do e se repete o procedimento. Mas se no for satisfeita (falso), termina o ciclo de repetio e o controle passa para a primeira linha que est depois do comando while.

41

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Comando For
Como os comandos anteriores, o comando for serve para repetir um conjunto de instrues, diferindo dos demais pela existncia de procedimentos executados no inico de sua estrutura. Na execuo do comando for o <comando inicial> executado (Caso ele no exista nenhuma ao realizada nesse passo). Em seguida a <condio de parada> avaliada e se o resultado for falso o comando termina. Se o resultado for verdadeiro uma nova interao tem incio e o controle passa para o primeiro comando da clusula de repetio.

Sintaxe: for (<comando inicial> ; <condio de parada> ; <clusula_fim_iterao>){ }


Possui um cabealho com trs elementos separados por ponto e vrgula, no primeiro elemento declaramos o tipo de varivel que vamos utilizar e atribuimos um valor inicial para ela. No segundo elemento declarada a condio de parada e no terceiro temos a clusula de m de iterao. Exemplo:

for ( int var = 0; var <= 10; var++){ System.out.println(var); }


Neste exemplo, primeiro foi declarada uma varivel var de tipo inteiro com um valor inicial de zero, depois testada a condio que se for satisfeita ser impresso o valor de var, seno terminar o ciclo de repetio e o controle passar para o primeiro comando que estiver depois do bloco for . OBS :. O exemplo usando for acima equivale ao cdigo abaixo usando o while:

int var = 0; while (var <= 10) { System.out.println (var); var ++; }

4.2.2 Estruturas Condicionais


A estrutura condicional faz com que o uxo de execuo de um programa seja desviado, pois s vezes precisamos executar um bloco de aes ou uma seqncia de aes primitivas apenas se uma determinada condio for satisfeita.

Comando if
Sua sintaxe if (<condio>) <comandos> , ela nos diz que se a condio for verdadeira as aes que seguem sero executadas. Veja o exemplo:

if (x > 0) { ++x; }
L-se: se x for maior que zero ento incremente um em x.

42

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Comando else
No caso em que a condio for falsa, por exemplo se x no maior que zero ento outras aes sero executadas, neste caso utilizamos o comando else. Tenha em mente que sempre antes de um else deve existir um if.

Sintaxe: if (<condio>) { <comandos> } else { <comandos> }


Exemplo:

if (x > 0) ++x; else --x;


Tomando x menor que zero, o programa passa o controle para o if e testa a primeira condio, como ela falsa o controle passa para o else e executa o que esta no bloco dele, neste caso ser decrementado o valor da varivel x. Veja que no foi necessrio colocar chaves no if e no else, isto acontece porque para cada um deles temos um nico comando, portanto podem ser suprimidas as chaves. Exemplo 1:

class Exemplo1 { public static void main (String [] arg){ int num = 10; float x; if (num != 0) { x = 100/num; if( x > 10) System.out.println(x + " > 10"); else System.out.println(x + " <= 10"); } System.out.println("fim de programa"); } }
Neste programa testamos no primeiro if se num diferente de zero, se for, ento 100 dividido por num. Posteriormente se faz um novo teste na condio do segundo if , se o valor obtido em x for maior que 10, ento imprime x > 10, seno o controle vai para o else e impresso x < 10, terminando assim o bloco do primeiro if . Por ltimo impresso a palavra m de programa. No caso em que num igual a zero, a condio testada no primeiro if ser falsa e, portanto, controle no entra no bloco do if, sendo passado o controle primeira linha de comando depois do if , consequentemente ser impresso m de programa.

Comando switch
O comando switch tambm desvia, por meio de um teste na condio, o controle do programa para outro trecho, trabalhando de forma semelhante ao if, sua diferena que pode tratar mais de dois blocos de execuo. Sintaxe: 43

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

switch (<expresso>){ case <valor1>:<comandos 1> break; case <valor2>:<comandos 2> break; . . . default: <comandos default> }
No comando switch a <expresso> que passada ser testada nas diferentes clusulas case. A <expresso> comparada com o rtulo (no caso <valor1> e <valor2>) em cada clusula case. A comparao feita do primeiro comando case at o ltimo, ordenadamente, se ela for igual ao valor de alguma das clusulas o controle passa para ela e sero executados todos seus comandos. Em seguida o controle passa para o primeiro comando aps este rtulo. Se nenhum rtulo for igual a <expresso>, ento verica-se a existncia de um rtulo default. Caso exista, os comandos de default sero executados. Se no existir um rtulo default o uxo do programa segue sem desvio feito pelo comando switch. O break utilizado para sair do switch transferindo o controle para o comando seguinte. Se o break utilizado em comandos internos outros comandos apenas o mais interno interrompido. Exemplo 2:

import java.io.*; class Exemplo2 { public static void main(String[] arg){ int x = 21; switch (x) { case 1: { System.out.println("x break; } case 21: { System.out.println("x break; } default: { System.out.println("x break; } case 30: { System.out.println("x break; } } } }

vale 1");

vale 21");

no valido, nesse caso");

vale 30");

44

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Se o valor de x for 1 aparecer na tela:

x vale 1
Se o valor de x for 21 aparecer na tela:

x vale 21
Se o valor de x no for 1 ou 21 ou 30, ento aparecer na tela:

x no valido, nesse caso


Se o valor de x for 30 aparecer na tela:

x vale 30
Como o valor de x no existe em nenhuma clusula o controle desviado para o comando default, prosseguindo-se a partir deste ponto com a execuo dos outros comandos. Exemplo 3:

import java.io.*; class Exemplo3 { public static void main(String[] arg){ int x = 10; switch (x) { case 1: System.out.println("rtulo 1"); break; case 2: x = 2+x; switch (x){ case 4: System.out.println("dentro do segundo switch"); break; case 7: System.out.println ("no segundo switch"); break; } System.out.println("fora do segundo switch"); break; } } }
Se o valor de x 1 ento impresso na tela rtulo 1 e sai do switch terminando o programa. Se o valor de x 2 o controle vai para classe 2, e incrementado 2 varivel x que ca valendo 4 agora. O controle passado para o segundo switch em case 4 impresso na tela a frase dentro do segundo switch , posteriormente encontra-se um break que faz o controle sair do segundo switch, depois impresso a frase fora do segundo switch e logo encontramos um break com o qual samos do primeiro switch e termina o programa.

45

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

4.3 E/S Teclado e Arquivo


Obtendo Valores do Teclado
Para poder obter os valores do usurio a partir do teclado necessrio criar uma classe auxiliar que chamaremos de Teclado. Ela ser criada em um arquivo com nome de Teclado.java e deve ser colocada no mesmo pacote ou diretrio da outra classe onde ela ser usada.

import java.io.*; public class Teclado { private BufferedReader fonte = new BufferedReader( new InputStreamReader(System.in)); public int lerInteiro() { while (true) { try { return Integer.parseInt(fonte.readLine()); } catch (IOException e) {} catch (NumberFormatException e) { System.out.println("Numero invalido!"); System.out.print("Por favor, digite um numero inteiro: "); } } } public double lerReal() { while (true) { try { return Double.parseDouble(fonte.readLine()); } catch (IOException e) {} catch (NumberFormatException e) { System.out.println("Numero invalido!"); System.out.print("Por favor, digite um numero real: "); } } } public String lerLinha() { String linha = null; try { linha = fonte.readLine(); } catch (IOException e) {} return linha; }

Nesta classe Teclado, temos 3 mtodos public int lerInteiro(),public doublelerReal() e public String lerLinha(), que nos permitem ler inteiros, reais e strings. NOTA: No se preocupe por no conseguir entender a classe Teclado completamente, pois ela possui assuntos mais avanadas que sero vistos mais para frente. Por enquanto voc s precisa saber como us-la para obter dados do teclado. 46

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

4.3.1 E/S Teclado Vias Lgicas de comunicao


O canal comunicante entre um repositrio de dados e um programa a representao da chamada via lgica de comunicao. Essas vias diferenciam operaes fsicas (dependem de repositrios e fontes) das operaes lgicas (gravao e leitura). As vias podem ser de entrada, de sada ou de ambas(entrada e sada). Vias de entrada - Estabelecem um canal comunicao entre uma fonte onde os dados so lidos e o programa leitor. Vias de sada - Estabelecem um canal comunicao entre uma repositrio onde os dados so lidos e o programa gravador. Vias de entrada e sada - Estabelecem um canal comunicao entre uma fonte ou repositrio com um programa permitindo leitura e/ou gravao. A implementao das vias se d em classes que contenham mtodos apropriados de leitura, gravao e conexo entre fontes e repositrios de dados. O comando new o responsvel por criar um objeto capaz de implementar uma via de comunicao. O objeto recm-criado ento deve ser associado fonte ou repositrio de dados, passando-se sua identicao como argumento que use seus mtodos de gravao e leitura. Exemplo:

new FileReader("dados.txt");
O arquivo identicado por dados.txt est associado ao objeto da classe FileReader que implementa a via de entrada criada pelo comando new no exemplo anterior.

Vias padres para gravao e leitura


A classe System e seus atributos in e out esto diponveis automaticamente pelo ambiente Java associados ao teclado e ao vdeo. O mtodo read (leitura) pode ser usado atravs do objeto in. Enquanto que o objeto out permite o uso dos mtodos print (imprime algo mantendo o cursor na mesma linha) e println(imprime algo transferindo o cursor para prxima linha).

System.in.read(); System.out.print(); System.out.println();

Leitura de dado
Na execuo do mtodo read se a tecla x for digitada teremos a impresso do valor 120, que o cdigo inteiro correspondente letra x. Ou seja, o mtodo read pertencente classe InputStream retorna valores inteiros(tipo int) ao ler um byte da fonte de dados.Exemplo:

47

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

import java.io.*; class Leitura{ public static void main (String[] args) throws IOException { int lido = System.in.read(); System.out.print(lido); } }
As declaraes import java.io.* e throws IOException sero melhor abordadas na lio de tratamento de erros. Por hora basta saber que a primeira declarao serve para importar as classes de entrada e sada e a segunda serve para posteriormente tratar possveis erros tambm de entrada e sada.

Leitura da linha
O mtodo readLine da classe BufferedReader permite leitura de todo o contedo de uma linha. Esse mtodo usa leituras provenientes da classe InputStreamReader. Sendo assim, a fonte de dados informada deve ser implementada a partir de um objeto da classe InputStreamReader para a classe BufferedReader. Exemplo1:

import java.io.*; class LerLinha { public static void main (String[] args) throws IOException { BufferedReader teclado = new BufferedReader( new InputStreamReader(System.in)); System.out.print("Digite algo: "); String linha = teclado.readLine(); System.out.print("Voce digitou: " + linha); } }
Exemplo2:

import java.util.*; class LerLinha2 { public static void main(String[] args) { Scanner teclado = new Scanner(System.in); System.out.print("Digite algo: "); String linha = teclado.nextLine(); System.out.print("Voce digitou: "+linha); } }
A declarao import java.util.* necessria para localizar a classe Scanner e usar o mtodo nextLine() tento o teclado como fonte de dados.

48

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Leitura de valores mltiplos


Com objetos da classe StringTokenizer pode-se ler valores mltiplos do teclado que foram digitados numa mesma linha, sendo que esses dados sero tratados como sequncia de caracteres chamados tokens. O espao o delimitador padro dos tokens, mas o delimitador pode ser alterado. Exemplo: A sequncia de caracteres "leitura de 4 tokens "contm 4 tokens. O mtodo nextToken retorna o prximo token como uma sequncia de caracteres. J os mtodos hasMoreTokens e hasMoreElements determinam a existncia de mais tokens na sequncia de caracteres caso o valor true tenha sido retornado.

import java.io.*; import java.util.*; class SeqCaracteres { public static void main(String[] args) throws IOException { BufferedReader teclado = new BufferedReader( new InputStreamReader(System.in)); StringTokenizer linha = null; System.out.print("Digite algo: "); linha = new StringTokenizer(teclado.readLine()); while (linha.hasMoreElements()) { String token = linha.nextToken(); System.out.println("valor: "+token); } } }

4.3.2 E/S Arquivo


So um conjunto de dados armazenados em um formato especco. Eles podem ser textos(dados gravados em formas de caracteres) ou binrios(dados gravados usando-se tipos primitivos da linguagem) que tm diferenas apenas lgicas. O acesso aos arquivos pode ser feito sequencialmente ou randomicamente. No primeiro o cursor sempre move-se pra frente com gravao e leituras sequenciais. J no segundo o cursor movimenta-se para frente e para trs, o que permite regravaes e releitura de dados de maneira no sequencial.

Leitura e Gravao de arquivos sequenciais


Primeiro identica-se um arquivo passando o caminho para determinar a localizao dele. Em seguida o ambiente de execuo deve localiz-lo e prepar-lo para leitura ou gravao. Finalmente, fecha-se o arquivo. O mtodo read da classe FileReader aps ler o caractere retorna o inteiro que corresponde ao cdigo do caractere lido e identica o m do arquivo pelo valor -1.

import java.io.*; class ArqSequencial { public static void main(String[] args) throws IOException { int i; FileReader arq = new FileReader("/home/usr/arqSeq");
49

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

while ((i = arq.read()) != -1) System.out.print(i+"."); arq.close();

O mtodo readLine da classe BufferedReader l um arquivo linha a linha e identica o m do arquivo pelo valor null.

import java.io.*; class LinhaArqSequencial { public static void main(String[] args) throws IOException { FileReader fonte = new FileReader("/home/usr/linhaArqSeq"); BufferedReader arq = new BufferedReader(fonte); String linha; while ((linha = arq.readLine()) != null) System.out.println(linha); arq.close(); } }
O mtodo write da classe FileWriter grava um caractere ou uma sequncia de caracteres. Se o argumento for do tipo int o mtodo grava o cdigo correspondente ao valor. Se for char ou String sero gravados como caractere e sequncia de caracteres respectivamente.

import java.io.*; class Soma { public static void main(String[] args) throws IOException { FileWriter arq = new FileWriter("/home/usr/soma"); String s1 = "Um mais um igual a "; String s2 = " e dois mais dois igual a "; char d = '4'; arq.write(s1); arq.write(50); arq.write(s2); arq.write(d); arq.close(); } }
Ser criado um arquivo texto chamdo soma no diretrio /home/usr cujo contedo ser:

Um mais um igual a 2 e dois mais dois igual a 4


Obs: necessria ter permisso de gravao no diretrio /home/usr. Os objetos da classe DataInputStream e DataOutputStream permitem respectivamente leitura(pelo mtodo read<tipo>) e gravao(pelo mtodo de write<tipo>) direta de tipos primitivos. Por exemplo dados gravados com mtodo writeInt devem ser lidos pelo mtodos readInt. Um arquivo acessado atravs de um objeto da classe DataInputStream tem seu nal indicado pela ocorrncia da exceo EOFException. Isso para prevenir que o mtodo read<tipo> de tente continuar lendo depois o m do arquivo. 50

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Leitura e gravao de arquivos randmicos


A classe RandomAcessFile poussui mtodos write<tipo> e read<tipo> para cada tipo primitivo Java. Tais mtodos devem ser usados em conjunto, ou sejam, dados gravados por um write<tipo> devem ser lidos por read<tipo>. Essa classe deve conter, alm da identicao do arquivo, o modo de utilizao separados por vrgula. Sintaxe:

new RandomAcessFile("/home/usr/arquivo","rw" );
r - abre o arquivo apenas para leitura. rw - abre o arquivo para leitura e gravao. rws e rwd - abrem o arquivo para leitura e gravao, garantindo o sincronismo entre as operaes lgicas e fsicas de entrada e sada. Outros mtodos teis so: seek(x) - posiciona o cursor no incio do byte de ordem x. length - retorna o tamanho do arquivo em bytes. getFilePointer - retorna a posio corrente do cursor. setLength(x) - dene um novo tamanho para o arquivo.

4.4 Vetores e Cadeia de Caracteres


4.4.1 Vetores
Tambm conhecidos como arrays, so seqncias de elementos de um determinado tipo, em um nmero pr-determinado de dimenses (vetores de uma, duas ou mais dimenses, por exemplo). Arrays so ditos unidimensionais quando possuem apenas uma dimenso, podendo assim referenciar seus elementos atravs de um nico ndice numrico, geralmente entre colchetes (vetor[1]). Arrays multidimensionais so aqueles em que devemos referenciar cada elemento atravs de dois ou mais ndices numricos(vetor[1][2]). Podemos implementar matrizes facilmente atravs dessa possibilidade de manipulao de arrays. Arrays so referenciados como variveis, cabendo ao programador determinar qual o tipo deste vetor. Alm de denirmos o nome do array, devemos tambm denir portanto o tipo deste array e quantas dimenses possuir. Como dito anteriormente, as dimenses so especicadas por pares de colchetes, quando declaramos o array. O comando new seguido do nome da classe e da quantidade de elementos da sua dimenso pode criar explicitamente objetos que representam vetores. Exemplo de um vetor de inteiros de 100 elementos:

new int[100];
Vejamos agora exemplos de declaraes de arrays unidimensionais e multidimensionais:

51

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Uma dimenso
A B C D

Multidimensionais (matriz)
A D G J B E H K C F I L

Para declarar arrays usaremos a seguinte sintaxe, que j foi apresentada: Unidimensional: tipo nome_array[]; Multidimensionais: tipo nome_array[][]; sendo que nos primeiros colchetes temos o nmero de linhas da matriz e no segundo o nmero de colunas. Exemplo:

int numeros[10]; char Lista[5][4];


Os elementos dos vetores so referenciados por seu ndice que sua prpria posio no vetor. O atributo length serve para indicar quantidade de elementos de um vetor.

Array Unidimensional
Podemos utilizar arrays para evitar o uso de mltiplas variveis redundantes em um programa, facilitando a manipulao de grande quantidade de dados. Normalmente, manipula-se uma estrutura utilizando for para percorrer o array, conforme o exemplo abaixo:

class EscreveVetor { public static void main(String[ ] args) { int[ ] lnum = new int[100]; Teclado tec = new Teclado(); System.out.println("Digite ate 100 numeros (0 para parar): "); int qtd = 0; for (; qtd < 100; qtd++) { int valor = tec.lerInteiro(); if (valor == 0) break; lnum[qtd] = valor; } for (int i = qtd - 1; i > -1 ; i--) System.out.print(lnum[i]+" "); } }
Exemplo 2:

52

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

import java.io.*; public class EscrevePolinomio { public static void main (String[] args) { Teclado tec = new Teclado(); double[] n = new double[5], n1 = new double[5]; int j = 0, tam; /* Lao de leitura dos coeficientes */ for (int i = 0; i <= 3; i++) { System.out.print("Digite o "+(i+1)+" coeficiente: "); n[i] = tec.lerReal(); if (n[i] == 0){ j = j + 1; } } System.out.println(""); System.out.print(""); /* Lao condicional para a impressao da expressao */ for (int i=0; i <= 3; i++){ if( n[i] != 0 && n[i] > 0 && i == 0){ System.out.print(n[i]+"X^3"); } if( n[i] != 0 && n[i] < 0 && i == 0){ System.out.print(n[i]+"X^3"); } if( n[i] != 0 && n[i] > 0 && i == 1){ System.out.print(" + "+n[i]+"X^2"); } if( n[i] != 0 && n[i] < 0 && i == 1){ System.out.print(" "+n[i]+"X^2"); } if( n[i] != 0 && n[i] > 0 && i == 2){ System.out.print(" + "+n[i]+"X"); } if( n[i] != 0 && n[i] < 0 && i == 2){ System.out.print(" "+n[i]+"X"); } if( n[i] != 0 && n[i] > 0 && i == 3){ System.out.print(" + "+n[i]); } if( n[i] != 0 && n[i] < 0 && i == 3){ System.out.print(" "+n[i]); } } System.out.println(""); System.out.println(""); System.out.println("Fim de programa"); } }
53

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

O ciclo de repetio for usado para percorrer o array e guardar em cada posio um valor real. Lembre-se de que a primeira posio do vetor inicia com o nmero zero, por isso nossa varivel de posio est declarada com o valor inicial de zero. Para imprimir os elementos de um vetor se o segundo for foi utilizado.

Array Multidimensional
A criao de matrizes muito parecida ao vetor unidimensional, podemos criar arrays de muitas dimenses: int array[][] => array de duas dimenses. int array[][][] => array de tres dimenses. int array[][][][] => array de quatro dimenses. Para criar um array de n dimenses, devemos colocar n colchetes abertos e fechados.

Percorrer Matriz
Para percorrer uma Matriz faremos uso de dois for, um percorre as linhas enquanto o outro percorre as colunas, exemplo:

class EscreveMatriz { public static void main(String[] args) { Teclado tec = new Teclado(); int L, C; do { System.out.print("Digite a qtd de linhas: "); L = tec.lerInteiro(); } while (L <= 0); do { System.out.print("Digite a qtd de colunas: "); C = tec.lerInteiro(); } while (C <= 0); int[] mat[] = new int[L][C]; System.out.print("Digite,coluna a coluna, os elementos "); System.out.println("de uma matriz "+L+"x"+C); for (int j = 0; j < C; j++) for (int i = 0; i < L; i++) { System.out.print("digite o elem ("+(i+1)+","+(j+1)+"): "); mat[i][j] = tec.lerInteiro(); } for (int i = 0; i < mat.length; i++) { for (int j = 0; j < mat[i].length; j++) System.out.print(mat[i][j]+" "); System.out.println(); } } }
54

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

4.4.2 Cadeia de Caracteres


Representam uma seqncia de caracteres e so implementadas como objetos da classe String. Uma cadeia de caractere o nico objeto que possui uma representao no cdigo fonte do programa, ou seja, uma cadeia de caractere o nico objeto que tem um literal na linguagem Java.

System.out.println(21); System.out.println("meu programa");


O literal 21 de tipo int e a cadeia de caracteres "meu programa" de tipo String. O int um tipo primitivo e a cadeia de caracteres de tipo String (que uma classe em Java). Quando temos String str; estamos denindo uma varivel com nome str de tipo String, mas o seu contedo no denido. Agora deniremos o contedo da varivel, String str = "programa"; o contedo corresponde a um endereo de memria onde o compilador montou um objeto contendo a cadeia de caracteres "programa". Para construir um novo objeto usamos new. A expresso str = new String("oi"); corresponde a um construtor. Um construtor instrui o operador new em como deve ser construdo o novo objeto.

Algumas operaes Concatenao


Esta operao feita em operandos de tipo String por meio do smbolo (mais) +, se o operando que est sendo concatenado no for de tipo String, ele ser transformado antes da concatenao na cadeia de caracteres que o representa. Exemplo 1:

class Exemplo1{ public static void main (String[] arg){ String aluno; String nome = "Felipe"; int matricula = 3219; String curso = new String(" Computacao "); aluno = nome + curso + matricula; System.out.println(aluno); } }
Aparecer na tela do computador:

Felipe Computacao 3219

Subcadeia
Fazendo uso do mtodo substring() podemos obter uma subcadeia de uma cadeia de caracteres. O mtodo recebe um valor inteiro e ele retorna a subcadeia formada pelos caracteres a partir da posio dada pelo valor inteiro. Exemplo: 55

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

String x; String srt = "testando metodo subcadeia"; x = srt.substring(9);


Ento na varivel x produz-se a cadeia de caracteres: "metodo subcadeia". Podemos converter o contedo de uma cadeia de caracteres em um tipo primitivo atravs dos mtodos parse<tipo> das classes <tipo>. Existe um mtodo para cada tipo primitivo Java. Exemplos:

Byte.parseByte Short.parseShort Integer.parseInt Boolean.parseBoolean


Alguns outros mtodos que permitem fazer certas operaes:

<retorno> <objeto>.<mtodo>([<parmetro>]);
int str.length() : Retorna o tamanho da cadeia de caracteres referenciado pelo nome str ; int str.compareTo(String str2) : Sendo executado por um objeto instanciado str, compara lexicogracamente a cadeia str com str2, retorna um inteiro negativo se str precede (em ordem da tabela UNICODE, que alfabtica) str2 e positivo se str2 precede str, caso sejam iguais retorna o valor zero; char str.charAt(int ind) : Usa o inteiro ind e retorna o caracter que est na posio do ndice ind do objeto referenciado pelo nome str ; String str.toLowerCase() : Todos os caracteres so convertidos a minscula. O str deve ser um objeto instanciado do tipo String; String str.toUpperCase() : Todos os caracteres so convertidos a maiscula. O str deve ser um objeto instanciado do tipo String.

56

Captulo 5

Conceitos Avanados
Conceitos Avanados da Orientao a Objeto

5.1 Tratamento de erros


Na execuo de um programa podem ocorrer erros que podem tanto causar a interrupo do programa quanto produzir resultados incorretos ou comportamento inesperado. Existem erros de lgica e erros de execuo.

Erros Lgicos
Estes erros se apresentam no desenvolvimento de um algoritmo no apropriado para solucionar o problema que se prope. Estes erros no necessariamente causam interrupo na execuo do programa.

Erros de Execuo
So erros mais especcos em relao aos lgicos, que decorrem de uma operao invlida e causam interrupo na execuo do programa. Este tipo de erro depende da plataforma e da linguagem que est sendo utilizada, por exemplo se realizamos uma diviso por zero vai causar um erro de execuo. Ao se causar um erro a execuo interrompida e enviado um sinal ao programa indicando que a operao no pode ser realizada. As linguagens de programao possuem formas para identicar e tratar os erros de execuo. Em Java eles so detectados pela JVM e um objeto de uma classe que caracteriza o erro criada. Notica-se o programa da operao invlida e caso seja possvel trat-lo, pode-se acessar o objeto que caracteriza o erro. Os erros so caracterizados por objetos de classes especcas, estas classes so classe Error e classe Exception. Funcionam como superclasses, mas ambas so subclasses da classe Throwable. Classe Error: a classe Error, com suas subclasses, utilizada para indicar erros graves que no se espera que sejam tratados pelo programas. Classe Exception: Esta classe indica erros que podem e devem ser tratados pelos programas, como por exemplo erros aritmticos. 57

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Comando Try
Os tratamentos de erros so feitos pelo comando try, em suas sintaxes temos um corpo e a ele associadas vrias clusulas catch. Quando o controle est no bloco do comando try o ambiente passa a monitorar todos os comandos declarados em seu bloco (corpo). Se nenhum erro aparecer o comando try termina, mas se ocorrer algum erro a clusula catch acionada imediatamente, ao m da execuo da clusula catch o comando try termina normalmente e o uxo passa para o prximo comando aps ele.

try {

res = 100/num; System.out.println("100/"+num+" = "+res); }catch (ArithmeticExecption e) { System.out.println("no se pode calcular"); }


Aqui tratado o erro em que num tenha o valor zero, neste caso um erro aritmtico que tratado na clusula catch.

try {

int num = Interger.parseInt(teclado.readLine()); }catch (NumberFormatException e) { System.out.println("digitou um valor no inteiro"); }


Neste tratado a entrada de um nmero no inteiro.

Clusula Finally
Esta clusula sempre executada e se encontra no corpo do comando try, caso no se produza nenhum erro os comandos so executados e o controle passa para a clusula nally. Caso ocorra algum erro o controle passa para a clusula catch onde tratado o erro e depois enviado para a clusula nally.

try {

int num = Interger.parseInt(teclado.readLine()); }catch (NumberFormatException e) { System.out.println("digitou um valor no inteiro"); }finally { System.out.println("saindo do bloco try"); }
Caso ocorra um erro no programa ser impresso na tela:

digitou um valor no inteiro saindo do bloco try

58

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Propagando erros
A clusula throws indica que o mtodo pode gerar erros das classes relacionadas, que devem ser subclasses de Throwable, que precisam ser tratados pelos mtodos chamadores. Ou seja, erros das classes relacionadas ou de alguma subclasse tm seu tratamento postergado. O comando throw usado para criar erros que no ocorreriam em sitaes normais. Exemplo de tratamento de erros:

import java.io.*; class TratandoErrodeFormato { public static void main(String[] arg) throws IOException { BufferedReader teclado = new BufferedReader( new InputStreamReader(System.in)); System.out.print("Digite um numero: "); int num = 0; while (true) { try { num = Integer.parseInt(teclado.readLine()); break; }catch (NumberFormatException e) { System.out.print("Por favor, digite um valor inteiro: "); } } System.out.println("O numero digitado foi: "+num); System.out.println("fim de programa"); } }

5.2 Encapsulamento, Herana e Polimorsmo


5.2.1 Encapsulamento
a capacidade de poder restringir ou controlar na classe o acesso e a visibilidade a seus elementos. normalmente feito atravs de um qualicador. Os qualicadores, que so palavras reservadas, permitem a visibilidade a um determinado atributo ou mtodo denido. Em Java existem os qualicadores private, public, protected e "sem"qualicador (quando no especicamos os qualicadores, automaticamente adotado o qualicador em nvel de pacote - package), estas palavras reservadas permitem restringir o acesso s declaraes de uma classe e prpria classe. O conceito de encapsulamento est intimamente relacionado ao conceito de abstrao na programao. A abstrao o processo de "esconder"dos detalhes de implementao para que o programador possa se preocupar somente com a "essncia". O encapsulamento, atravs da sua restrio de visibilidade dos elementos internos classe, permite a abstrao. Benefcios de se restringir uma classe: Cdigo de programa legvel; Minimizao de erros;

59

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Facilidade de modicao; Facilidade de extenso; Programa mais seguro (pois pode-se controlar os usos).

Qualicadores
public: permite que os atributos e mtodos sejam acessveis a todos os mtodos de todas as classes, isto , sejam acessados por cdigos externos; private: os atributos e mtodos s podem ser acessados por mtodos que pertenam mesma classe deles. Este o mais rgido nvel de acesso; protected: o acesso dos mtodos ou atributos pode ser feito na prpria classe ou em subclasses, isto quer dizer, em classes lhas; "sem"qualicador ou em nvel de pacotes: os atributos e mtodos so acessveis pela prpria classe ou por classes que pertencem ao mesmo pacote (package) em que foram criados. Exemplo:

public class nome_classe{ //declarao inicial da classe de tipo public private int valor; private float valor2; //atributos da classe public void exemplo(){} } //fim da classe

5.2.2 Herana
Denida como a habilidade de uma classe poder herdar caractersticas de uma outra. A classe que recebe a herana dita como derivada da classe ou subclasse. A subclasse inclui o comportamento da superclasse e d a possibilidade de adicionar-lhe funcionalidades. Esta propriedade de uma classe poder herdar caractersticas de outra e assim sucessivamente chamado de hierarquia de classes. Podemos imaginar a hierarquia como uma rvore genealgica, onde temos a superclasse pai e a partir dele as subclasses lhos. Este mecanismo permite que a mesma poro de cdigo projetada para a classe pai possa ser utilizada para a classe lho sem alterao do cdigo. Utilizamos a palavra chave extends para declarar uma herana de classe. A sintaxe :

<qualificador> [static] class <nome_subclasse> extends <nome_superclasse> {<cdigo_classe_filho> }


Exemplo:

//declarao da superclasse class Colegio{ String nomeColegio; //atributos da classe colegio String endereco; //atributos da classe colegio public String getEndereco(){ //metodo
60

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

return endereco; } } // fim da superclasse // declarao subclasse class ColegioParticular extends Colegio{ float custoMensal;//atributo adicional superclasse public String toString(){//metodo adicional superclasse return "Sou o colegio particular " + nomeColegio; // Usa-se o "nomeColegio" declarado na superclasse pois no usamos "protected" } } //fim da subclasse
OBS:. A herana uma relao do tipo " um". Ou seja, se a classe Mamiferos herda (extends) a classe Animal, estamos dizendo que os Mamferos so tambm Animais. Essa a idia que o Java implementa como herana, portanto, um programa criado para rodar com a classe Animal rodar tambm com a classe Mamifero. Uma visualizao da herana:

Figura 5.1: Exemplo de Herana

5.2.3 Polimorsmo
o princpio pelo qual um mesmo comando tem diferentes comportamentos dependendo do contexto em que esto sendo usados. A forma mais comum de implementar polimorsmo usando, em heranas, mtodos com o mesmo nome nas subclasses de uma determinada classe, mas com contedo diferente. As subclasses invocam mtodos que tm a mesma identicao (nome), mas as classes derivadas possuem distintos comportamentos. Como exemplo, suponha que a classe Filho1 e Filho2 herdam da superclasse Pai e as trs classes possuem um mtodo com o nome metodoQualquer. Suponha tambm que obj seja declarado como um objeto da classe Pai. Ou seja, ele pode referenciar Pai, Filho1 e Filho2 graas herana. Ento, o comando obj.metodoQualquer() pode ter diferentes comportamentos dependendo do que classe o obj estiver instanciando naquela poro do cdigo. 61

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Em uma mquina virtual Java, uma chamada a um mtodo (a execuo de um mtodo) ocorre da maneira abaixo: Ao fazer a chamada de um mtodo apartir de um objeto de uma classe A, gera-se a busca do mtodo nesta classe, caso ele no seja encontrado realizada a busca na superclasse (que chamaremos de classe B ) da classe A, caso no seja encontrado na classe B feita a busca na sua superclasse, isto feito ate encontrar o mtodo ou at chegar na raiz da hierarquia de classes (que, por padro, a classe Object). Encontrado o mtodo ele executado e qualquer outra chamada dentro dele gera a mesma busca do mtodo desde essa classe. Ento, mesmo que um determinado mtodo esteja j denido em uma superclasse, voc pode a reescrever em uma subclasse, pois a mquina virtual sempre procurar o mtodo na prpria classe primeiro. Essa propriedade facilita o polimorsmo de um mtodo. OBS:. Temos o polimorsmo em operadores tambm. Por exemplo, a operao "+"(adio) retorna a soma caso os operandos sejam nmeros, enquanto que far uma concatenao caso os operadores sejam uma String.

5.3 Interfaces Grcas


5.3.1 Gerncia de Janelas
Em Java existem vrios pacotes com classes especcas para criao de interfaces grcas, sendo que os mais conhecidos so awt(abstract window toolkit) e swing que uma extenso do pacote awt.

Janelas de Dilogo
No pacote swing existe a classe JOptionPane que possui mtodos estticos responsveis pelo surgimento de janelas que param a execuo do programa at que a janela seja destruda ou alguma ao(pressionar o boto) seja realizada. Isso cria uma interao com usurio sendo feita por botes, mensagens informativas ou cones. Fornecimento de informao:

import javax.swing.*; import javax.swing.JOptionPane; class JanelaAviso { public static void main(String[] arg) { JOptionPane.showMessageDialog(null,"Pressione OK para iniciar", "JanelaAviso",JOptionPane.WARNING_MESSAGE); JOptionPane.showMessageDialog(null,"Pressione OK para terminar"); System.out.println("fim do programa"); } }
O mtodo showMessageDialog mostra uma mensagem e espera conrmao do usurio. Sintaxe:

void showMessageDialog(Component comp, Object mensagem); void showMessageDialog(Component comp, Object mensagem, String titulo, int tipodeMensagem);
62

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

As variveis mesagem e titulo so menemnicas(correspondem prpria mensagem e ttulo da janela) e aparecero tem todos os mtodos abaixo. J o tipodeMensagem pode ser:

ERROR_MESSAGE, WARNING_MESSAGE, QUESTION_MESSAGE, PLAIN_MESSAGE e INFORMATION_MESSAGE


Solicitando informaes:

import javax.swing.*; import javax.swing.JOptionPane; class JanelaSolicita { public static void main(String[] arg) { int[] aceitoNum = new int[5]; String aceitoStr = ""; int op = 0, num = 0, ind = 0; do { num = (int)Math.floor(100*Math.random()); op = JOptionPane.showConfirmDialog(null,"Aceita o valor" +num+"?","JanelaSolicita",JOptionPane.YES_NO_OPTION); if (op == JOptionPane.YES_OPTION) aceitoNum[ind++] = num; } while (ind < 5); for (int i = 0; i < ind; i++) aceitoStr = aceitoStr+" "+aceitoNum[i]; JOptionPane.showMessageDialog(null, aceitoStr); System.out.println("fim do programa"); } } int showConfirmDialog(Component comp, Object mensagem, String titulo, int tipodeBotoes); int showConfirmDialog(Component comp, Object mensagem);
O primeiro mtodo mostra uma janela de opes com botes de conmao para o usurio. J o segundo mostra uma janela com trs botes(YES, NO e CANCEL).O tipodeBotao pode ser:

DEFAULT_OPTION, YES_NO_OPTION, YES_NO_CANCEL_OPTION, OK_CANCEL_OPTION


O DEFAULT_OPTION mostra apenas o boto OK, os demais so menemnicos. Obtendo valores:

import javax.swing.*; import javax.swing.JOptionPane; class JanelaObter { public static void main(String[] arg) { int[] aceitoNum = new int[5]; String aceitoStr = ""; for (int i = 0; i < 5; i++) { String texto = JOptionPane.showInputDialog(
63

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

} JOptionPane.showMessageDialog(null, aceitoStr, "Numeros Digitados",JOptionPane.INFORMATION_MESSAGE); System.out.println("fim do programa");

null,"Digite o "+(i+1)+". numero"); aceitoNum[i] = Integer.parseInt(texto); aceitoStr = aceitoStr+" "+texto;

String showInputDialog(Component comp, Object mensagem); String showInputDialog(Component comp, Object mensagem, Object valorInserir);
O primeiro mtodo mostra uma janela para recebimento de dados. O segundo mostra o campo texto que preenchido com o contedo de valorInserir. Depois de digitar os dados no campo texto e o boto OK for pressionado, o mtodo retornar o contedo digitado em forma de cadeia de caracteres. O retorno ser vazio caso o boto CANCEL seja pressionado ou seja destruda a janela.

Gerncia de layout
Saber gerenciar janelas signica controlar a posio dos componetes, sendo capaz de redesenh-los ou reposicion-los quando necessrio for, segundo polticas previamente determinadas. Usa-se normalmente um dos gerentes disponveis no ambiente Java como uma das classes que implementam a interface LayoutManager.

Gerncia de eventos
Esses gerentes que monitoram eventos do ambiente e noticam as aplicaes sob seu controle da ocorrncia de tais eventos. Os gerentes denem modelos, classes, fontes e registradores de eventos para trat-los. Para cada classe de eventos h uma interface que especica mtodos que devem ser executados de acordo com o tipo de evento. Obs:. Os conceitos de gerncia de layout e eventos, assim como o estudo de interfaces grcas em Java, que foram aqui abordados so meramente introdutrios. Seria necessrio um novo curso para desenvolvimento pleno de tais assuntos, o que foge do escopo deste curso.

5.4 Threads
At o momento foram vistos programas cuja execuo tem apenas um nico uxo. Em Java, pode-se lanar mltiplas atividades dentro de um nico processo. A isso chamamos Threads ou MultiThreading ou, ainda, sub-processos no sistema operacional. Um programa em execuo dito como um processo. Um processo em adamento aloca diversos recursos como memria, hd e outros sendo que o sistema operacional o responsvel por esse controle. J quem controla as vrias threads dentro do programa o prprio interpretador Java. Por isso o uso de threads proporciona um maior desempenho em ambientes mulltiprocessados, simplica a modelagem de algumas aplicaes e tem um custo menor de gerenciamento em relao aos processos.

64

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

H duas maneiras de se implementar threads em Java, usando-se herana ou implementando uma interface. Uma thread tm os seguintes estados: Criada, em Execuo, Suspensa ou Morta.

Principais Mtodos
run() - Executa as atividades da thread. Se este mtodo naliza, a thread tambm o faz; start() - Determina a execuo da thread. Chama o mtodo run() antes de nalizar; sleep(int x) - Coloca a thread para dormir por x milisegundos; join() - Espera o trmino da thread para qual foi mandada a mensagem para poder ser liberada; interrupt() - Interrompe a execuo da thread; interrupted() - Testa se a thread est ou no est interrompida.

Usando Herana
Para usar herana deve-se estender a classe Thread que pertence ao pacote java.lang.Thread. Nossa classe deve sobrescrever o mtodo public void run(). O mtodo run() sempre chamado quando uma linha de execuo criada para o objeto. Sintaxe:

public Thread (String nomedaThread); public Thread();


Exemplo1:

class Tarefa1 extends Thread { public void run() { for(int i=0; i<1000; i++) System.out.println("Herana"); } }
Exemplo2:

// ThreadTest1.java public class ThreadTest1 extends Object { public static void main(String args[]){ new ThreadTest1(); } ThreadTest1(){ Contador cc = new Contador(); for (int i=0; i<5; i++){ System.out.println("(ThreadTest1) Contador = " + cc.proximoValor()); } ClasseNormal CN = new ClasseNormal();
65

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

CN.func(cc); for (int i=0; i<5; i++) { System.out.println("(ThreadTest1) Contador = " + cc.proximoValor()); }

class Contador { int ct = 0; public Contador() { } int proximoValor() { ct++; try{ Thread.sleep(500); }catch (Exception e) { } return ct; } } class ClasseNormal { void func(Contador cx) { for (int i=0; i<5; i++) { System.out.println("(ClasseNormal) Contador = " + cx.proximoValor()); } } }

Usando a interface Runnable


Toda classe que implementa a interface Runnable nos obriga a especicar o mtodo public void run(), que ser executado no momento em que a linha de execuo do programa inicializada. Se a classe Filha implementar a interface Runnable, ela se capacita a ser tratada como se fosse um objeto do tipo da interface Runnable. Sintaxe:

public class Filha extends Pai implements Runnable;


Despois de criada a classe Thread passando para o seu construtor a referncia do objeto que implementar a interface Runnable, temos:

Thread umaTarefa = new Thread(Runnable objetodaThread);


ou

Thread umaTarefa = new Thread(Runnable objetodaThread, String nomedaThread);


Exemplo3:

66

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

class Tarefa2 implements Runnable { public void run() { for(int i=0; i<1000; i++) System.out.println("Runnable"); } }
Exemplo4:

// ThreadTest2.java import java.lang.Thread; public class ThreadTest2 extends Object { public static void main(String args[]) { new ThreadTest2(); } ThreadTest2() { Contador cc = new Contador(); for (int i=0; i<5; i++) { System.out.println("(ThreadTest2) Contador = " + cc.proximoValor()); } ThreadClass1 objetoThread = new ThreadClass1(cc); Thread thread = new Thread(objetoThread); thread.start(); for (int i=0; i<5; i++) { System.out.println("(ThreadTest2) Contador = " + cc.proximoValor()); } } } class Contador { int ct = 0; public Contador() {} int proximoValor() { ct++; try { Thread.sleep(500); }catch (Exception e) { } return ct; } } class ThreadClass1 implements Runnable { Contador cx = null; ThreadClass1(Contador cz) { cx = cz; } public void run(){
67

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

func(); } void func() { for (int i=0; i<5; i++) { System.out.println("(ThreadClass1) Contador = " + cx.proximoValor()); } }
Para usar as classes(Tarefa1 e Tarefa2) dos exemplos 1 e 3 deve-se acrescentar:

Thread comHeranca = new Tarefa1(); Thread comRunnable = new Thread(new Tarefa2()); comHeranca.start(); comRunnable.start();

Prioridades de Threads
Em Java, a prioridade determinada como um valor inteiro de 1 10. A prioridade 10 a maior, a 1 a menor e a 5 a prioridade padro. A thread herda a prioridade da thread que a criou. Mtodos:

void setPriority(int prioridade); int getPriority();

Sincronismo entre Threads


Mesmo sendo o mais eciente dentre os processos, as threads tm a desvantagem de tornar o interpretador pouco eciente. Isso porque o uso de memria compartilhada entre as threads obriga o programador a sincronizar as aes de suas threads. Para tal, existe no ambiente Java locks ou monitores. O lock funciona como uma permisso para determinar que apenas uma thread possa utilizar um recurso por vez. Os locks so obtidos atravs do comando synchronized. Sintaxe(Os comandos abaixo so equivalentes:

synchronized public void sincronizando() { algumaAcao(); }


ou

public void sincronizando() { synchronized(this) { algumaAcao(); } }

68

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Alguns mtodos da classe Object implementam o conceito de locks noticando as threads para indicar se elas devem ser suspensas ou se devem voltar a car em execuo. Para tal, ser utilizado o lock do objeto chamado pela thread para realizar as noticaes necessrias. Por isso, antes de chamar um dos trs mtodos(wait(), notify() ou notifyAll()), o lock deve ser obtido utilizando-se o comando synchronized. wait() - Suspende a thread chamadora do mtodo at que tempo especicado como argumento tenha passado ou at que outra thread a acorde; notify() - Acorda, se existir alguma thread que esteja esperando um evendo neste objeto; notifyAll() - Acorda todas as threads que estejam esperando neste objeto.

69

Você também pode gostar