Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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
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
CDTC
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
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
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".
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.
CDTC
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
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
10
CDTC
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
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
Brasil/DF
13
CDTC
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
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
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.
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
Brasil/DF
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.
17
CDTC
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.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
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.
22
CDTC
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
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.
25
CDTC
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?
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
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.
27
CDTC
Brasil/DF
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
Brasil/DF
29
CDTC
Brasil/DF
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
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
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.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.
CDTC
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
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 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
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:
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:
35
CDTC
Brasil/DF
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
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
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:
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
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
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:
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:
System.out.println(var);
Aparecer na tela o valor 1000. Observando o exemplo 5:
40
CDTC
Brasil/DF
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.
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.
do {
41
CDTC
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.
int var = 0; while (var <= 10) { System.out.println (var); var ++; }
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
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.
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
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");
vale 30");
44
CDTC
Brasil/DF
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 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
Brasil/DF
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
Brasil/DF
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.
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
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
Brasil/DF
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); } } }
import java.io.*; class ArqSequencial { public static void main(String[] args) throws IOException { int i; FileReader arq = new FileReader("/home/usr/arqSeq");
49
CDTC
Brasil/DF
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:
CDTC
Brasil/DF
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.
new int[100];
Vejamos agora exemplos de declaraes de arrays unidimensionais e multidimensionais:
51
CDTC
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:
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
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
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
Brasil/DF
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:
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
Brasil/DF
<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
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
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 {
try {
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:
58
CDTC
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"); } }
59
CDTC
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 :
//declarao da superclasse class Colegio{ String nomeColegio; //atributos da classe colegio String endereco; //atributos da classe colegio public String getEndereco(){ //metodo
60
CDTC
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:
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
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.
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
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:
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:
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
Brasil/DF
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
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:
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
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()); } } }
66
CDTC
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
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:
68
CDTC
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