SlideShare uma empresa Scribd logo
1 de 70
Baixar para ler offline
Java Basico
Versão 1.0.0
Sumário
I Sobre essa Apostila 3
II Informações Básicas 5
III GNU Free Documentation License 10
IV Java Básico 19
1 O que é Java 20
2 Plano de ensino 21
2.1 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.2 Público Alvo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.3 Pré-requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.4 Descrição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.5 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.6 Cronograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.7 Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.8 Avaliação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.9 Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3 Introdução 24
3.1 Histórico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.1.1 História . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.2 Instalação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.2.1 Instalação através de pacote binário . . . . . . . . . . . . . . . . . . . . . . . 25
3.2.2 Distribuições derivadas do Debian . . . . . . . . . . . . . . . . . . . . . . . . 26
3.3 Introdução à Linguagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.4 Tipos de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4 Conceitos Básicos 32
4.1 Classes, Objetos, Atributos e Métodos . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.1.1 Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.1.2 Objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.1.3 Atributos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.1.4 Atributos estáticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
1
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
4.1.5 Métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.2 Estruturas de Controle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.2.1 Estruturas de Repetição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.2.2 Estruturas Condicionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.3 E/S Teclado e Arquivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.3.1 E/S Teclado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.3.2 E/S Arquivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.4 Vetores e Cadeia de Caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.4.1 Vetores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.4.2 Cadeia de Caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5 Conceitos Avançados 57
5.1 Tratamento de erros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.2 Encapsulamento, Herança e Polimorfismo . . . . . . . . . . . . . . . . . . . . . . . . 59
5.2.1 Encapsulamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
5.2.2 Herança . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
5.2.3 Polimorfismo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.3 Interfaces Gráficas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
5.3.1 Gerência de Janelas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
5.4 Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
2
Parte I
Sobre essa Apostila
3
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Conteúdo
O conteúdo dessa apostila é fruto da compilação de diversos materiais livres publicados na in-
ternet, disponíveis em diversos sites ou originalmente produzido no CDTC (http://www.cdtc.org.br.)
O formato original deste material bem como sua atualização está disponível dentro da licença
GNU Free Documentation License, cujo teor integral encontra-se aqui reproduzido na seção de
mesmo nome, tendo inclusive uma versão traduzida (não oficial).
A revisão e alteração vem sendo realizada pelo CDTC (suporte@cdtc.org.br) desde outubro
de 2006. Críticas e sugestões construtivas serão 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 Difusão de Tecnologia e Conhecimento que
vêm sendo realizado pelo ITI (Instituto Nacional de Tecnologia da Informação) 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 país.
Informações adicionais podem ser obtidas através do email ouvidoria@cdtc.org.br, ou da
home page da entidade, através da URL http://www.cdtc.org.br.
Garantias
O material contido nesta apostila é isento de garantias e o seu uso é de inteira responsabi-
lidade do usuário/leitor. Os autores, bem como o ITI e seus parceiros, não se responsabilizam
direta ou indiretamente por qualquer prejuízo oriundo da utilização do material aqui contido.
Licença
Copyright ©2006, Instituto Nacional de Tecnologia da Informação (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 APOS-
TILA. A copy of the license is included in the section entitled GNU Free Documentation
License.
4
Parte II
Informações Básicas
5
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Sobre o CDTC
Objetivo Geral
O Projeto CDTC visa a promoção e o desenvolvimento de ações que incentivem a dissemina-
ção de soluções que utilizem padrões abertos e não proprietários de tecnologia, em proveito do
desenvolvimento social, cultural, político, tecnológico e econômico da sociedade brasileira.
Objetivo Específico
Auxiliar o Governo Federal na implantação do plano nacional de software não-proprietário e
de código fonte aberto, identificando e mobilizando grupos de formadores de opinião dentre os
servidores públicos e agentes políticos da União Federal, estimulando e incentivando o mercado
nacional a adotar novos modelos de negócio da tecnologia da informação e de novos negócios
de comunicação com base em software não-proprietário e de código fonte aberto, oferecendo
treinamento específico para técnicos, profissionais de suporte e funcionários públicos usuários,
criando grupos de funcionários públicos que irão treinar outros funcionários públicos e atuar como
incentivadores e defensores dos produtos de software não proprietários e código fonte aberto, ofe-
recendo conteúdo técnico on-line para serviços de suporte, ferramentas para desenvolvimento de
produtos de software não proprietários e do seu código fonte livre, articulando redes de terceiros
(dentro e fora do governo) fornecedoras de educação, pesquisa, desenvolvimento e teste de pro-
dutos de software livre.
Guia do aluno
Neste guia, você terá reunidas uma série de informações importantes para que você comece
seu curso. São elas:
• Licenças para cópia de material disponível;
• Os 10 mandamentos do aluno de Educação a Distância;
• Como participar dos foruns e da wikipédia;
• Primeiros passos.
É muito importante que você entre em contato com TODAS estas informações, seguindo o
roteiro acima.
Licença
Copyright ©2006, Instituto Nacional de Tecnologia da Informação (cdtc@iti.gov.br).
6
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos
da Licença de Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior
públicada pela Free Software Foundation; com o Capitulo Invariante SOBRE ESSA
APOSTILA. Uma cópia da licença está inclusa na seção entitulada "Licença de Docu-
mentação Livre GNU".
Os 10 mandamentos do aluno de educação online
• 1. Acesso à Internet: ter endereço eletrônico, um provedor e um equipamento adequado é
pré-requisito para a participação nos cursos a distância;
• 2. Habilidade e disposição para operar programas: ter conhecimentos básicos de Informá-
tica é necessário para poder executar as tarefas;
• 3. Vontade para aprender colaborativamente: interagir, ser participativo no ensino a distân-
cia conta muitos pontos, pois irá colaborar para o processo ensino-aprendizagem pessoal,
dos colegas e dos professores;
• 4. Comportamentos compatíveis com a etiqueta: mostrar-se interessado em conhecer seus
colegas de turma respeitando-os e se fazendo ser respeitado pelos mesmos;
• 5. Organização pessoal: planejar e organizar tudo é fundamental para facilitar a sua revisão
e a sua recuperação de materiais;
• 6. Vontade para realizar as atividades no tempo correto: anotar todas as suas obrigações e
realizá-las em tempo real;
• 7. Curiosidade e abertura para inovações: aceitar novas idéias e inovar sempre;
• 8. Flexibilidade e adaptação: requisitos necessário à mudança tecnológica, aprendizagens
e descobertas;
• 9. Objetividade em sua comunicação: comunicar-se de forma clara, breve e transparente é
ponto - chave na comunicação pela Internet;
• 10. Responsabilidade: ser responsável por seu próprio aprendizado. O ambiente virtual não
controla a sua dedicação, mas reflete os resultados do seu esforço e da sua colaboração.
Como participar dos fóruns e Wikipédia
Você tem um problema e precisa de ajuda?
Podemos te ajudar de 2 formas:
A primeira é o uso dos fóruns de notícias e de dúvidas gerais que se distinguem pelo uso:
. O fórum de notícias tem por objetivo disponibilizar um meio de acesso rápido a informações
que sejam pertinentes ao curso (avisos, notícias). As mensagens postadas nele são enviadas a
7
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
todos participantes. Assim, se o monitor ou algum outro participante tiver uma informação que
interesse ao grupo, favor postá-la aqui.
Porém, se o que você deseja é resolver alguma dúvida ou discutir algum tópico específico do
curso. É recomendado que você faça uso do Fórum de dúvidas gerais que lhe dá recursos mais
efetivos para esta prática.
. O fórum de dúvidas gerais tem por objetivo disponibilizar um meio fácil, rápido e interativo
para solucionar suas dúvidas e trocar experiências. As mensagens postadas nele são enviadas
a todos participantes do curso. Assim, fica muito mais fácil obter respostas, já que todos podem
ajudar.
Se você receber uma mensagem com algum tópico que saiba responder, não se preocupe com a
formalização ou a gramática. Responda! E não se esqueça de que antes de abrir um novo tópico
é recomendável ver se a sua pergunta já foi feita por outro participante.
A segunda forma se dá pelas Wikis:
. Uma wiki é uma página web que pode ser editada colaborativamente, ou seja, qualquer par-
ticipante pode inserir, editar, apagar textos. As versões antigas vão 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 "Wikipé-
dia", uma experiência grandiosa de construção de uma enciclopédia de forma colaborativa, por
pessoas de todas as partes do mundo. Acesse-a em português pelos links:
• Página principal da Wiki - http://pt.wikipedia.org/wiki/
Agradecemos antecipadamente a sua colaboração com a aprendizagem do grupo!
Primeiros Passos
Para uma melhor aprendizagem é recomendável que você siga os seguintes passos:
• Ler o Plano de Ensino e entender a que seu curso se dispõe a ensinar;
• Ler a Ambientação do Moodle para aprender a navegar neste ambiente e se utilizar das
ferramentas básicas do mesmo;
• Entrar nas lições seguindo a seqüência descrita no Plano de Ensino;
• Qualquer dúvida, reporte ao Fórum de Dúvidas Gerais.
Perfil do Tutor
Segue-se uma descrição do tutor ideal, baseada no feedback de alunos e de tutores.
O tutor ideal é um modelo de excelência: é consistente, justo e profissional nos respectivos
valores e atitudes, incentiva mas é honesto, imparcial, amável, positivo, respeitador, aceita as
idéias dos estudantes, é paciente, pessoal, tolerante, apreciativo, compreensivo e pronto a ajudar.
8
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
A classificação por um tutor desta natureza proporciona o melhor feedback possível, é crucial, e,
para a maior parte dos alunos, constitui o ponto central do processo de aprendizagem.’ Este tutor
ou instrutor:
• fornece explicações claras acerca do que ele espera e do estilo de classificação que irá
utilizar;
• gosta que lhe façam perguntas adicionais;
• identifica as nossas falhas, mas corrige-as amavelmente’, diz um estudante, ’e explica por-
que motivo a classificação foi ou não foi atribuída’;
• tece comentários completos e construtivos, mas de forma agradável (em contraste com um
reparo de um estudante: ’os comentários deixam-nos com uma sensação de crítica, de
ameaça e de nervossismo’)
• dá uma ajuda complementar para encorajar um estudante em dificuldade;
• esclarece pontos que não foram entendidos, ou corretamente aprendidos anteriormente;
• ajuda o estudante a alcançar os seus objetivos;
• é flexível quando necessário;
• mostra um interesse genuíno em motivar os alunos (mesmo os principiantes e, por isso,
talvez numa fase menos interessante para o tutor);
• escreve todas as correções de forma legível e com um nível de pormenorização adequado;
• acima de tudo, devolve os trabalhos rapidamente;
9
Parte III
GNU Free Documentation License
10
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
(Traduzido pelo João S. O. Bueno através do CIPSGA em 2001)
Esta é uma tradução não oficial da Licença de Documentação Livre GNU em Português Brasi-
leiro. Ela não é publicada pela Free Software Foundation, e não se aplica legalmente a distribuição
de textos que usem a GFDL - apenas o texto original em Inglês da GNU FDL faz isso. Entretanto,
nós esperamos que esta tradução ajude falantes de português a entenderem melhor a GFDL.
This is an unofficial translation of the GNU General Documentation License into Brazilian Por-
tuguese. It was not published by the Free Software Foundation, and does not legally state the
distribution terms for software that uses the GFDL–only the original English text of the GFDL does
that. However, we hope that this translation will help Portuguese speakers understand the GFDL
better.
Licença de Documentação Livre GNU Versão 1.1, Março 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 cópias exatas deste documento de licença, mas
não é permitido alterá-lo.
INTRODUÇÃO
O propósito desta Licença é 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 modificações, comercialmente ou não. Secundariamente, esta Licença mantém
para o autor e editor uma forma de ter crédito por seu trabalho, sem ser considerado responsável
pelas modificações feitas por terceiros.
Esta Licença é um tipo de "copyleft"("direitos revertidos"), o que significa que derivações do
documento precisam ser livres no mesmo sentido. Ela complementa a GNU Licença Pública Ge-
ral (GNU GPL), que é um copyleft para software livre.
Nós fizemos esta Licença para que seja usada em manuais de software livre, por que software
livre precisa de documentação livre: um programa livre deve ser acompanhado de manuais que
provenham as mesmas liberdades que o software possui. Mas esta Licença não 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. Nós recomendamos esta Licença prin-
cipalmente para trabalhos cujo propósito seja de introdução ou referência.
APLICABILIDADE E DEFINIÇÕES
Esta Licença se aplica a qualquer manual ou outro texto que contenha uma nota colocada pelo
detentor dos direitos autorais dizendo que ele pode ser distribuído sob os termos desta Licença.
O "Documento"abaixo se refere a qualquer manual ou texto. Qualquer pessoa do público é um
11
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
licenciado e é referida como "você".
Uma "Versão Modificada"do Documento se refere a qualquer trabalho contendo o documento
ou uma parte dele, quer copiada exatamente, quer com modificações e/ou traduzida em outra
língua.
Uma "Seção Secundária"é um apêndice ou uma seção inicial do Documento que trata ex-
clusivamente da relação dos editores ou dos autores do Documento com o assunto geral do
Documento (ou assuntos relacionados) e não contém nada que poderia ser incluído diretamente
nesse assunto geral (Por exemplo, se o Documento é em parte um livro texto de matemática, a
Seção Secundária pode não explicar nada de matemática).
Essa relação poderia ser uma questão de ligação histórica com o assunto, ou matérias relaci-
onadas, ou de posições legais, comerciais, filosóficas, éticas ou políticas relacionadas ao mesmo.
As "Seções Invariantes"são certas Seções Secundárias cujos títulos são designados, como
sendo de Seções Invariantes, na nota que diz que o Documento é publicado sob esta Licença.
Os "Textos de Capa"são certos trechos curtos de texto que são listados, como Textos de Capa
Frontal ou Textos da Quarta Capa, na nota que diz que o texto é publicado sob esta Licença.
Uma cópia "Transparente"do Documento significa uma cópia que pode ser lida automatica-
mente, representada num formato cuja especificação esteja disponível ao público geral, cujos
conteúdos possam ser vistos e editados diretamente e sem mecanismos especiais com editores
de texto genéricos ou (para imagens compostas de pixels) programas de pintura genéricos ou
(para desenhos) por algum editor de desenhos grandemente difundido, e que seja passível de
servir como entrada a formatadores de texto ou para tradução automática para uma variedade
de formatos que sirvam de entrada para formatadores de texto. Uma cópia feita em um formato
de arquivo outrossim Transparente cuja constituição tenha sido projetada para atrapalhar ou de-
sencorajar modificações subsequentes pelos leitores não é Transparente. Uma cópia que não é
"Transparente"é chamada de "Opaca".
Exemplos de formatos que podem ser usados para cópias Transparentes incluem ASCII sim-
ples sem marcações, formato de entrada do Texinfo, formato de entrada do LaTex, SGML ou XML
usando uma DTD disponibilizada publicamente, e HTML simples, compatível com os padrões, e
projetado para ser modificado por pessoas. Formatos opacos incluem PostScript, PDF, formatos
proprietários que podem ser lidos e editados apenas com processadores de texto proprietários,
SGML ou XML para os quais a DTD e/ou ferramentas de processamento e edição não estejam
disponíveis para o público, e HTML gerado automaticamente por alguns editores de texto com
finalidade apenas de saída.
A "Página do Título"significa, para um livro impresso, a página do título propriamente dita,
mais quaisquer páginas subsequentes quantas forem necessárias para conter, de forma legível,
o material que esta Licença requer que apareça na página do título. Para trabalhos que não
tenham uma página do título, "Página do Título"significa o texto próximo da aparição mais proe-
minente do título do trabalho, precedendo o início do corpo do texto.
12
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
FAZENDO CÓPIAS EXATAS
Você pode copiar e distribuir o Documento em qualquer meio, de forma comercial ou não
comercial, desde que esta Licença, as notas de copyright, e a nota de licença dizendo que esta
Licença se aplica ao documento estejam reproduzidas em todas as cópias, e que você não acres-
cente nenhuma outra condição, quaisquer que sejam, às desta Licença.
Você não pode usar medidas técnicas para obstruir ou controlar a leitura ou confecção de
cópias subsequentes das cópias que você fizer ou distribuir. Entretanto, você pode aceitar com-
pensação em troca de cópias. Se você distribuir uma quantidade grande o suficiente de cópias,
você também precisa respeitar as condições da seção 3.
Você também pode emprestar cópias, sob as mesmas condições colocadas acima, e também
pode exibir cópias publicamente.
FAZENDO CÓPIAS EM QUANTIDADE
Se você publicar cópias do Documento em número maior que 100, e a nota de licença do
Documento obrigar Textos de Capa, você precisará incluir as cópias 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 trás. Ambas as capas também precisam identificar clara e
legivelmente você como o editor dessas cópias. A capa da frente precisa apresentar o título com-
pleto com todas as palavras do título igualmente proeminentes e visíveis. Você pode adicionar
outros materiais às capas. Fazer cópias com modificações limitadas às capas, tanto quanto estas
preservem o título do documento e satisfaçam a essas condições, pode ser tratado como cópia
exata em outros aspectos.
Se os textos requeridos em qualquer das capas for muito volumoso para caber de forma
legível, você deve colocar os primeiros (tantos quantos couberem de forma razoável) na capa
verdadeira, e continuar os outros nas páginas adjacentes.
Se você publicar ou distribuir cópias Opacas do Documento em número maior que 100, você
precisa ou incluir uma cópia Transparente que possa ser lida automaticamente com cada cópia
Opaca, ou informar, em ou com, cada cópia Opaca a localização de uma cópia Transparente
completa do Documento acessível publicamente em uma rede de computadores, à qual o público
usuário de redes tenha acesso a download gratuito e anônimo utilizando padrões públicos de
protocolos de rede. Se você utilizar o segundo método, você precisará tomar cuidados razoavel-
mente prudentes, quando iniciar a distribuição de cópias Opacas em quantidade, para assegurar
que esta cópia Transparente vai permanecer acessível desta forma na localização especificada
por pelo menos um ano depois da última vez em que você distribuir uma cópia Opaca (direta-
mente ou através de seus agentes ou distribuidores) daquela edição para o público.
É pedido, mas não é obrigatório, que você contate os autores do Documento bem antes de
redistribuir qualquer grande número de cópias, para lhes dar uma oportunidade de prover você
com uma versão atualizada do Documento.
13
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
MODIFICAÇÕES
Você pode copiar e distribuir uma Versão Modificada do Documento sob as condições das se-
ções 2 e 3 acima, desde que você publique a Versão Modificada estritamente sob esta Licença,
com a Versão Modificada tomando o papel do Documento, de forma a licenciar a distribuição
e modificação da Versão Modificada para quem quer que possua uma cópia da mesma. Além
disso, você precisa fazer o seguinte na versão modificada:
A. Usar na Página de Título (e nas capas, se houver alguma) um título distinto daquele do Do-
cumento, e daqueles de versões anteriores (que deveriam, se houvesse algum, estarem listados
na seção "Histórico do Documento"). Você pode usar o mesmo título de uma versão anterior se
o editor original daquela versão lhe der permissão;
B. Listar na Página de Título, como autores, uma ou mais das pessoas ou entidades responsá-
veis pela autoria das modificações na Versão Modificada, conjuntamente com pelo menos cinco
dos autores principais do Documento (todos os seus autores principais, se ele tiver menos que
cinco);
C. Colocar na Página de Título o nome do editor da Versão Modificada, como o editor;
D. Preservar todas as notas de copyright do Documento;
E. Adicionar uma nota de copyright apropriada para suas próprias modificações adjacente às
outras notas de copyright;
F. Incluir, imediatamente depois das notas de copyright, uma nota de licença dando ao público
o direito de usar a Versão Modificada sob os termos desta Licença, na forma mostrada no tópico
abaixo;
G. Preservar nessa nota de licença as listas completas das Seções Invariantes e os Textos de
Capa requeridos dados na nota de licença do Documento;
H. Incluir uma cópia inalterada desta Licença;
I. Preservar a seção entitulada "Histórico", e seu título, e adicionar à mesma um item dizendo
pelo menos o título, ano, novos autores e editor da Versão Modificada como dados na Página de
Título. Se não houver uma sessão denominada "Histórico"no Documento, criar uma dizendo o
título, ano, autores, e editor do Documento como dados em sua Página de Título, então adicionar
um item descrevendo a Versão Modificada, tal como descrito na sentença anterior;
J. Preservar o endereço de rede, se algum, dado no Documento para acesso público a uma
cópia Transparente do Documento, e da mesma forma, as localizações de rede dadas no Docu-
mento para as versões anteriores em que ele foi baseado. Elas podem ser colocadas na seção
"Histórico". Você pode omitir uma localização na rede para um trabalho que tenha sido publicado
pelo menos quatro anos antes do Documento, ou se o editor original da versão a que ela se refira
der sua permissão;
K. Em qualquer seção entitulada "Agradecimentos"ou "Dedicatórias", preservar o título da
14
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
seção e preservar a seção em toda substância e fim de cada um dos agradecimentos de contri-
buidores e/ou dedicatórias dados;
L. Preservar todas as Seções Invariantes do Documento, inalteradas em seus textos ou em
seus títulos. Números de seção ou equivalentes não são considerados parte dos títulos da seção;
M. Apagar qualquer seção entitulada "Endossos". Tal sessão não pode ser incluída na Versão
Modificada;
N. Não reentitular qualquer seção existente com o título "Endossos"ou com qualquer outro
título dado a uma Seção Invariante.
Se a Versão Modificada incluir novas seções iniciais ou apêndices que se qualifiquem como
Seções Secundárias e não contenham nenhum material copiado do Documento, você pode optar
por designar alguma ou todas aquelas seções como invariantes. Para fazer isso, adicione seus
títulos à lista de Seções Invariantes na nota de licença da Versão Modificada. Esses títulos preci-
sam ser diferentes de qualquer outro título de seção.
Você pode adicionar uma seção entitulada "Endossos", desde que ela não contenha qual-
quer coisa além de endossos da sua Versão Modificada por várias pessoas ou entidades - por
exemplo, declarações de revisores ou de que o texto foi aprovado por uma organização como a
definição oficial de um padrão.
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 final da lista de Textos
de Capa na Versão Modificada. 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ê não pode
adicionar um outro; mas você pode trocar o antigo, com permissão explícita do editor anterior que
adicionou a passagem antiga.
O(s) autor(es) e editor(es) do Documento não dão permissão por esta Licença para que seus
nomes sejam usados para publicidade ou para assegurar ou implicar endossamento de qualquer
Versão Modificada.
COMBINANDO DOCUMENTOS
Você pode combinar o Documento com outros documentos publicados sob esta Licença, sob
os termos definidos na seção 4 acima para versões modificadas, desde que você inclua na com-
binação todas as Seções Invariantes de todos os documentos originais, sem modificações, e liste
todas elas como Seções Invariantes de seu trabalho combinado em sua nota de licença.
O trabalho combinado precisa conter apenas uma cópia desta Licença, e Seções Invariantes
Idênticas com multiplas ocorrências podem ser substituídas por apenas uma cópia. Se houver
múltiplas Seções Invariantes com o mesmo nome mas com conteúdos distintos, faça o título de
15
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
cada seção único adicionando ao final do mesmo, em parênteses, o nome do autor ou editor
origianl daquela seção, se for conhecido, ou um número que seja único. Faça o mesmo ajuste
nos títulos de seção na lista de Seções Invariantes nota de licença do trabalho combinado.
Na combinação, você precisa combinar quaisquer seções entituladas "Histórico"dos diver-
sos documentos originais, formando uma seção entitulada "Histórico"; da mesma forma combine
quaisquer seções entituladas "Agradecimentos", ou "Dedicatórias". Você precisa apagar todas as
seções entituladas como "Endosso".
COLETÂNEAS DE DOCUMENTOS
Você pode fazer uma coletânea consitindo do Documento e outros documentos publicados
sob esta Licença, e substituir as cópias individuais desta Licença nos vários documentos com
uma única cópia incluida na coletânea, desde que você siga as regras desta Licença para cópia
exata de cada um dos Documentos em todos os outros aspectos.
Você pode extrair um único documento de tal coletânea, e distribuí-lo individualmente sob
esta Licença, desde que você insira uma cópia desta Licença no documento extraído, e siga esta
Licença em todos os outros aspectos relacionados à cópia exata daquele documento.
AGREGAÇÃO COM TRABALHOS INDEPENDENTES
Uma compilação do Documento ou derivados dele com outros trabalhos ou documentos se-
parados e independentes, em um volume ou mídia de distribuição, não conta como uma Ver-
são Modificada do Documento, desde que nenhum copyright de compilação seja reclamado pela
compilação. Tal compilação é chamada um "agregado", e esta Licença não se aplica aos outros
trabalhos auto-contidos compilados junto com o Documento, só por conta de terem sido assim
compilados, e eles não são trabalhos derivados do Documento.
Se o requerido para o Texto de Capa na seção 3 for aplicável a essas cópias do Documento,
então, 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.
Senão eles precisarão aparecer nas capas de todo o agregado.
TRADUÇÃO
Tradução é considerada como um tipo de modificação, então você pode distribuir traduções
do Documento sob os termos da seção 4. A substituição de Seções Invariantes por traduções
requer uma permissão especial dos detentores do copyright das mesmas, mas você pode incluir
traduções de algumas ou de todas as Seções Invariantes em adição às versões orignais dessas
Seções Invariantes. Você pode incluir uma tradução desta Licença desde que você também in-
clua a versão original em Inglês desta Licença. No caso de discordância entre a tradução e a
16
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
versão original em Inglês desta Licença, a versão original em Inglês prevalecerá.
TÉRMINO
Você não pode copiar, modificar, sublicenciar, ou distribuir o Documento exceto como expres-
samente especificado sob esta Licença. Qualquer outra tentativa de copiar, modificar, sublicen-
ciar, ou distribuir o Documento é nula, e resultará automaticamente no término de seus direitos
sob esta Licença. Entretanto, terceiros que tenham recebido cópias, ou direitos de você sob esta
Licença não terão suas licenças terminadas, tanto quanto esses terceiros permaneçam em total
acordo com esta Licença.
REVISÕES FUTURAS DESTA LICENÇA
A Free Software Foundation pode publicar novas versões revisadas da Licença de Documen-
tação Livre GNU de tempos em tempos. Tais novas versões serão similares em espirito à versão
presente, mas podem diferir em detalhes ao abordarem novos porblemas e preocupações. Veja
http://www.gnu.org/copyleft/.
A cada versão da Licença é dado um número de versão distinto. Se o Documento especificar
que uma versão particular desta Licença "ou qualquer versão posterior"se aplica ao mesmo, você
tem a opção de seguir os termos e condições daquela versão específica, ou de qualquer versão
posterior que tenha sido publicada (não como rascunho) pela Free Software Foundation. Se o
Documento não especificar um número de Versão desta Licença, você pode escolher qualquer
versão já publicada (não como rascunho) pela Free Software Foundation.
ADENDO: Como usar esta Licença para seus documentos
Para usar esta Licença num documento que você escreveu, inclua uma cópia desta Licença
no documento e ponha as seguintes notas de copyright e licenças logo após a página de título:
Copyright (c) ANO SEU NOME.
É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos da Licença
de Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior publicada pela Free Soft-
ware Foundation; com as Seções Invariantes sendo LISTE SEUS TÍTULOS, com os Textos da
Capa da Frente sendo LISTE, e com os Textos da Quarta-Capa sendo LISTE. Uma cópia da li-
cença está inclusa na seção entitulada "Licença de Documentação Livre GNU".
Se você não tiver nenhuma Seção Invariante, escreva "sem Seções Invariantes"ao invés de
dizer quais são invariantes. Se você não tiver Textos de Capa da Frente, escreva "sem Textos de
Capa da Frente"ao invés de "com os Textos de Capa da Frente sendo LISTE"; o mesmo para os
Textos da Quarta Capa.
Se o seu documento contiver exemplos não triviais de código de programas, nós recomenda-
mos a publicação desses exemplos em paralelo sob a sua escolha de licença de software livre,
17
CDTC Centro de Difusão 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 Básico
19
Capítulo 1
O que é Java
Java é uma linguagem de programação orientada a objetos, segura, robusta, distribuída, mul-
tiplataforma e de alto desempenho. Esta linguagem possui estrutura muito semelhante à das
linguagens C e C++, muito embora tenham filosofias diferentes. São esses e outros motivos que
a tornam uma linguagem tão atraente tanto para usuários e programadores experientes quanto
para os iniciantes.
Este curso, será baseado na distribuição Debian e possibilitará ao usuário aprender os con-
ceitos, estruturas, declarações, métodos e funções básicas dessa linguagem. Além da criação
de aplicativos e programas que irão inserir o usuário dentro do universo JAVA.
20
Capítulo 2
Plano de ensino
2.1 Objetivo
Qualificar técnicos e programadores na linguagem de programação Java.
2.2 Público Alvo
Técnicos e Programadores que desejam trabalhar com Java.
2.3 Pré-requisitos
Os usuários deverão ser, necessariamente, indicados por empresas públicas e ter conheci-
mento básico acerca da lógica de programação.
2.4 Descrição
O curso será realizado na modalidade Educação a Distância e utilizará a Plataforma Moodle
como ferramenta de aprendizagem. Ele será dividido em tópicos e cada um deles é composto
por um conjunto de atividades (lições, fóruns, glossários, questionários e outros) que deverão ser
executadas de acordo com as instruções fornecidas. O material didático está disponível on-line
de acordo com as datas pré-estabelecidas em cada tópico. A versão adotada do Java é a 1.5.0,
caso possua outra versão instalada poderão ocorrer poucas diferenças.
Todo o material está no formato de lições e estará disponível ao longo do curso. As lições
poderão ser acessadas quantas vezes forem necessárias. Aconselhamos a leitura de "Ambien-
tação do Moodle", para que você conheça o produto de Ensino a Distância, evitando dificuldades
advindas do "desconhecimento"sobre o mesmo.
Ao final de cada lição haverá uma questão referente módulo estudado anteriormente que
também poderá conter perguntas sobre os textos indicados caso existam. No final do curso
haverá uma prova de Avaliação de Aprendizagem no formato da construção de um programa.
Utilize o material de cada semana e os exemplos disponibilizados para se preparar para prova.
As lições contém o contéudo principal. Elas poderão ser acessadas quantas vezes forem ne-
cessárias, desde que esteja dentro da semana programada. Ao final de uma lição, você receberá
uma nota de acordo com o seu desempenho. Responda com atenção às perguntas de cada lição,
21
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
pois elas serão consideradas na sua nota final. Caso sua nota numa determinada lição for menor
do que 6.0, sugerimos que você faça novamente esta lição.
Os instrutores estarão a sua disposição ao longo de todo curso. Qualquer dúvida deve ser
disponibilizada no fórum ou enviada por e-mail. Diariamente os monitores darão respostas e
esclarecimentos.
2.5 Metodologia
O curso está dividido da seguinte maneira:
2.6 Cronograma
Semana 1 - Introdução
• Histórico;
• Instalação;
• Introdução à linguagem;
• Tipos de Dados.
Semana 2 - Conceitos Básicos
• Classe, Objetos, Atributos e Métodos;
• Estruturas de Controle;
• E/S Teclado e Arquivos;
• Vetores e Cadeia de Caracteres.
Semana 3 - Conceitos Avançados
• Tratamento de Erros;
• Encapsulamento, Herança e Polimorfismo;
• Interfaces Gráficas;
• Threads;
• Avaliação de Aprendizagem.
22
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
2.7 Programa
O curso de Java oferecerá o seguinte conteúdo:
• Introdução
• Conceitos Básicos e Avançados de Orientação à Objeto
2.8 Avaliação
Toda a avaliação será feita on-line.
Aspectos a serem considerados na avaliação:
• Iniciativa e autonomia no processo de aprendizagem e de produção de conhecimento;
• Capacidade de pesquisa e abordagem criativa na solução dos problemas apresentados.
Instrumentos de avaliação:
• Participação ativa nas atividades programadas;
• Avaliação de Aprendizagem ao final do curso;
• O participante fará várias avaliações referente ao conteúdo do curso. Para a aprovação e
obtenção do certificado o participante deverá obter nota final maior ou igual a 6.0 de acordo
com a fórmula abaixo:
• Nota Final = ((ML x 7) + (AF x 3)) / 10
• AF = Nota da Avaliação de Aprendizagem
• ML = Média aritmética das Avaliações de Lições
2.9 Bibliografia
• Site official: http://www.sun.com
• Guias em Português: http://br.sun.com, http://www.javafree.org, http://www.portaljava.com.br
• Guias extras: Pinheiro, Francisco A. C.Fundamentos de Computação e Orientação a Obje-
tos Usando Java, LTC - Livros Técnicos e Científicos 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
Capítulo 3
Introdução
Apresentação geral e histórico da linguagem Java
3.1 Histórico
O que é Java?
Java é uma linguagem de programação orientada à objetos resultado de um consistente de-
senvolvimento e trabalho de pesquisa realizado por projetistas da Sun Microsystems, que intro-
duziu a linguagem no mercado em 1995. Mais do que uma simples linguagem de programação
Java é um ambiente de desenvolvimento e execução de programas, uma plataforma segura e
capaz proporcionar as facilidades da orientação à objetos aliadas à uma portabilidade instrínseca
que facilita a sua integração aos diversos ambientes existentes.
3.1.1 História
Um grupo de engenheiros da Sun Microsystems denominado Green, em 1991, foram encar-
regados de criar uma nova geração de computadores inteligentes, simples e portáteis capazes
de se comunicar entre si, ou seja, com uma capacidade de uso potencialmente alta. Para tal, era
necessário que fosse utilizada uma plataforma de desenvolvimento em que os softwares pudes-
sem ser portáveis 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 orientação à objeto introduzidas pelo C++ não foram suficientes para alcançar tudo
aquilo que o grupo almejava. Foi então que James Gosling, coordenador do projeto Green, optou
pela criação de uma nova linguagem de programação que fosse realmente portátil, simples e
interpretada. Assim surgiu o Oak(carvalho em inglês), que em 1995 após várias melhorias muda
de nome, por problemas de direitos autorais, e passa a ser chamado de Java.
Hoje, Java não é utilizada em eletrodomésticos(pelo menos comercialmente). Ao invés disso,
juntamente com o crescimento da Internet e o desenvolvimento dos applets(mini-aplicativos)ela
se tornou um das linguagens de programação mais utilizadas no mundo.
As especificações da linguagem Java são mantidas uniformes através de um processo comu-
nitário gerido pela Sun Microsystems, que é também detentora da marca registrada com o nome
da linguagem.
24
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Características principais da linguagem Java são:
• Orientada a objeto por basear-se nos quatro princípios do paradigma da programação que
são:
• Abstração, encapsulamento, herança e polimorfismo;
• Neutra porque a Máquina Virtual Java (JVM) pode ser implementada em qualquer plata-
forma;
• Distribuída por suportar vários tipos de conectividade em aplicações distribuídas na rede;
• Sem ponteiros pois a JVM possui o garbage collector capaz de gerenciar automática e
dinâmicamente a memória;
• Segura protege as "máquinas-alvo"contra quaisquer operações em seus sistema de arqui-
vos por aplicações obtidas pela rede, já que os applets são desenhados para existirem na
máquina cliente somente em tempo de execução.
A maioria dessas características da linguagem serão desenvolvidas durante o curso.
3.2 Instalação
Temos à nossa disposição uma variedade de métodos de instalação do Java, podendo variar
dependendo da distribuição GNU/Linux sendo utilizada.
É importante notar que diferentes métodos de instalação poderão prover versões diferentes do
software. Neste curso, por exemplo, utilizaremos a versão 1.5.0, o pacote disponível no repositório
testing/non-free do Debian. Vale observar que o pacote do Java se encontra na seção non-free,
o que indica que ele é considerado não-livre. Isto ocorre porque ele possui uma licença que não
é considerada livre pelos padrões do Debian.
Podemos diferenciar os métodos de instalação basicamente entre aqueles que utilizam pa-
cotes pré-compilados da própria distribuição, ou aqueles que utilizam um binário genérico para
Linux, provido pela própria Sun Microsystems.
Distribuições derivadas do Debian utilizam pacotes nativos às distribuições (.deb), e para
instalá-los simplesmente os descompactam e movem os arquivos para os lugares apropriados.
Já o pacote binário da Sun deverá ser baixado do site do fabricante, e prosseguiremos com a
instalação do mesmo.
3.2.1 Instalação através de pacote binário
O primeiro método que iremos abordar quanto à instalação do Java será o da instalação do
pacote binário provido pela Sun. Para atingir sucesso por esse método de instalação devemos
saber como obter esse pacote e instalá-lo, além de adicionar entradas apropriadas nos arquivos
de configuração do sistema.
O pacote binário do Java pode ser obtido a partir do site da Sun, na página de downloads do
Java SE( http://java.sun.com/javase/downloads/index_jdk5.jsp).
Nesta página, podemos observar que existem várias versões a serem baixadas, porém a que
(provavelmente) se adequa à sua necessidade é a JDK 5.0 Update 11, que inclui o Runtime
Environment para o Java (JRE) e também o development kit (JDK) básico para o Java.
25
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Clicando no referido link, você deverá aceitar a licença e baixar o pacote apropriado para o
seu sistema operacional, que, no caso do autor, é Linux self-extracting file para arquiteturas
de 32 bits (para 64 bits, o pacote se chama Linux x64 self-extracting file). Caso esteja utilizando
distribuições 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 questão, já que ele tem a extensão (.bin) . Caso ele não esteja executável, pode ser neces-
sário dar permissões de execução 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 diretório /opt, que
segundo a FHS (File Hierarchy System) é o diretório padrão para instalações de programas
independentemente instalados. Outro benefício é que todos os usuários da máquina poderão
utilizar-se do software, pois o /opt é legível para todos do sistema. Para fazê-lo, porém, você
deverá ser o usuário root, já que apenas este possui privilégios de escrita nesse diretório.
Seguidos estes passos, um diretório será gerado (caso tenha seguido o conselho, dentro do
/opt), contendo binários, documentação e arquivos adicionais da JDK e JRE do Java. Agora,
basta adicionar o caminho desses binários ao caminho de busca de binários do sistema, desig-
nado pela variável de ambiente $ PATH , setada pelo arquivo de configuração /etc/profile.
Para adicionar esses binários do Java a esse caminho, você pode atualizar a variável $
PATH (o que será apagado após o próximo reboot do computador) ou setar a variável PATH
no /etc/profile, que é lido pelo sistema.
Pronto, instalamos o Java através de seu pacote binário! Não foi nada difícil, não é mesmo?
3.2.2 Distribuições derivadas do Debian
Para instalar o Java em distribuições derivadas do Debian podemos simplesmente utilizar o
gerenciador de pacotes nativo, o apt-get. Vale lembrar que, como o Java não é considerado
livre pelos padrões do Debian, você deve adicionar a seção non-free à sua lista de repositórios.
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 Difusão de Tecnologia e Conhecimento Brasil/DF
Como podemos ver, o nome do pacote correspondente ao Java JDK é sun-java5-jdk, acom-
panhado de uma série de bibliotecas e plugins. Sabendo disso, basta-nos agora instalar, como
usuário 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 através do gerenciador de pacotes apt-get. Foi
bem fácil também, não é?
Vale lembrar que os exemplos acima foram testados na distribuição Debian GNU/Linux, po-
rém poderiam ser executados da mesma maneira em qualquer outra distribuição compatível com
o Debian, como o Ubuntu Linux, Kurumin ou Knoppix, dentre outras.
3.3 Introdução à Linguagem
Aspectos de programação
Um programa é a implementação de um algoritmo em uma linguagem de programação. O
algoritmo precisa ser bem definido do início ao fim, tendo comandos ordenados e finitos capazes
de produzirem um resultado visível. Para programar bem deve-se fazer um algoritmo apropriado
e ter um conhecimento léxico, sintático e semântico da linguagem de programação a ser utlizada.
No campo léxico as linguagens de programação permitem que o programador crie novas pa-
lavras, desde que se respeite as regras nativas da linguagem. Já a sintaxe habilita o programador
a exercer sua função de implementar o algoritmo através do uso de símbolos, termos e pala-
vras que formarão expressões válidas. Finalmente, a semântica é a representação do resultado
observável do algoritmo implementado na máquina pelo programador.
27
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Estrutura, Compilação e Execução
Um programa é um texto (chamado de programa fonte) que possui comandos e declarações
necessárias para a implementação de um algoritmo que é traduzido para um produto equivalente
escrito em comandos binários (código binário) os quais são executados pelo computador. O
processo de tradução é chamado de compilação e posteriormente a ele se produz a ligação do
código binário a outros códigos para se obter finalmente o programa executável.
O programa executável é carregado na memória e colocado sob o controle de um ambiente
de execução, que faz com que cada comando seja executado pelo processador.
Todo programa deve ter uma estrutura que permita definir seu inicio e fim, de tal forma que o
ambiente de execução possa identificar precisamente o ponto de entrada do programa, isto é, o
primeiro comando que será executado e o término da execução.
A estrutura de um programa em Java
Os programas orientados a objetos são baseados no conceito classe. Cada classe contém
as declarações e os comandos que, em conjunto, implementam o algoritmo do programa. Estes
comandos são organizados na forma de métodos e devem possuir um método principal que é o
ponto de início da execução, a partir dele os demais métodos são acionados.
Em Java, especificamente, a sua estrutura consiste de um conjunto de unidades de com-
pilação. Cada uma delas contêm as especificações de classes e interfaces, juntamente com as
declarações necessárias para a compilação. Quando compiladas essas unidades geram arquivos
com os códigos binários referentes às classes e interfaces nelas descritas.
A estrutura básica de uma classe consiste de uma palavra chave class, de um identifica-
dor (o nome da classe), e de um corpo que é delimitado por chaves e contém opcionalmente
declarações e comandos próprios da classe.
Programando em Java
Em Java todos os arquivos com os respectivos códigos podem ser escritos em um editor de
texto utilizando UNICODE e terminadas com a extensão (.java). Cada arquivo representa uma
unidade de compilação, podendo conter uma ou mais especificações de classes e interfaces.
Em java temos alguns comandos que nos ajudam na compilação e execução 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 código contendo o código
binário que é utilizado para a execução do programa. Para compilar seu código digite javac
NomeDoArquivo.java.
java: O executável Java é a máquina virtual Java (JVM), ou seja, é o programa respon-
sável pela execução do código compilado pelo javac. Para fazer uso do comando digite java
NomeDoArquivo, para executar um arquivo não deve-se colocar a sua extensão.
Comentários
Os comentários são textos normalmente explicativos que servem para informar tanto o pro-
gramador que o escreveu quanto outros que venham a utilizar ou somente ler aquele código. Em
Java os comentários podem ser de três tipos:
28
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Uma linha - Utiliza duas barras // marcando seu início. Exemplo:
// tudo após as barras é considerado como comentário
Múltiplas linhas - Utiliza barra asterisco no início /* e asterisco barra no fim */. Exemplo:
/* comentário inicial
e final de multiplas linhas */
Documentação - Semelhante ao de múltiplas linhas mas com propósito de documentar o
código. Exemplo:
/* comentário de documentação
* pode conter diversas
* linhas
*/
3.4 Tipos de dados
Variáveis
Na linguagem Java todas as variáveis têm seus tipos de dados definidos. Os tipos de dados
definem quais são os valores que uma variável pode armazenar e quais operações pode executar.
Esses tipos básicos são os mesmos para qualquer ambiente de programação Java, por se tratar
de uma linguagem portável.
As variáveis locais são declaradas no corpo de um método*, existindo somente durante a
atividade dele. Já as variáveis de instância e variáveis de classe são declaradas ambas no
corpo de uma classe*, mas as de instância especificam atributos próprios de cada objeto da
classe, enquanto que as de classe especificam atributos comuns a todos objetos da classe.
Existem também as variáveis paramétricas que são declaradas como tratadoras de exceção,
construtoras e parâmetros formais de métodos. São variáveis declaradas na especificação de um
método, estas variáveis possuem algum valor que será usado no método invocado. Seu uso é
semelhante ao das variáveis locais podendo ser modificado o seu valor.
As variáveis paramétricas são criadas quando chamadas ao método que pertencem e existem
só durante a execução do método. Existem duas maneiras de atribuir os valores às variáveis
paramétricas, passagem de argumento por valor ou por referência.
Passagem de argumentos por valor
Na passagem por valor é feita a chamada a um método e os parâmetros reais utilizados na
chamada são avaliados, produzindo valores que são atribuídos aos parâmetros formais corres-
pondentes.
Falando de forma mais simplificada, o método cria uma "cópia"dos valores dos argumentos
para que sejam utilizados somente dentro do método. Portanto, por mais que se alterem esses
valores, eles não afetarão as variáveis externas ao método.
29
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Passagem de argumentos por referência
Ao se invocar uma função ou procedimento, as variáveis paramétricas armazenam uma re-
ferência aos parâmetros reais em vez de uma cópia do valor, como é feito na passagem por
valor. Mas, este tipo de passagem em Java não é implementada, isto acontece porque em Java
não existem ponteiros, existem objetos. Assim, toda variável do tipo "objeto"é na realidade uma
referência para aquela instância do objeto.
Mais simplificadamente, os argumentos passados por referência terão seu valor alterado den-
tro e fora do método, pois não é feita uma cópia daquela variável.
Obs:. Variáveis do tipo de dados primitivo são passadas por valor. Objetos (o conteúdo) não
são passados diretamente para métodos. Em vez disso, são passados aos métodos referências
a objetos. As próprias referências também são passadas por valor. Quando um método recebe
uma referência a um objeto, o método pode manipular o objeto diretamente.
*Os conceitos de Método e Classe serão abordados em próximas lições.
Escopo de variáveis
O escopo de uma variável é a parte do programa no qual pode-se diretamente referenciá-la.
Uma variável local tem seu escopo com alcance somente dentro do bloco onde ela foi declarada.
Bloco este que em Java é delimitado por chaves { }.
As variáveis de instância e de classe têm escopo com alcance em todo o corpo da classe em
que foram declaradas.
Tipos básicos
Existem oito tipos primitivos em Java, todo o resto é objeto. Estes tipos ficaram na linguagem
pela sua velocidade de interação e, por isso, não foram transformados em Objetos. Como não
são objetos a sua declaração já cria a variável em memória não necessitando de construtores.
Inteiros
Tipo Tamanho Valor
byte 8 bits -128 a 127
short 16 bits -32.768 a 32.767
int 32 bits -2.147.483.648 a 2.147.483.647
long 64 bits -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807
Reais ou Ponto Flutuante
Tipo Tamanho Valor
float 32 bits - 1.40239846E-45 a + 3.40282347E + 38
double 64 bits - 4.94065645841246544E-324 a + 1.79769313486231570E + 308
Outros Tipos
Tipo Tamanho Valor Descrição
char 16 bits 0 a 65535 Um caractere
boolean 8 bits true ou false valor booleano(V ou F)
30
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
OPERADORES
Executam alguma função sobre os operandos. Existem operadores unários que requerem só
um operando e operadores binários e ternários que requerem dois e três operandos respectiva-
mente. Depois de ser executada uma determinada função um operador retorna um valor, sendo
que esse valor e o tipo de retorno dependem do operador e de seus operandos.
Operadores Binários
Operador Uso Descrição
+ (Adição) X + Y Soma X e Y
- (Subtração) X - Y Subtrai Y de X
* (Multiplicação) X * Y Multiplica X de Y
/ (Divisão) X / Y Divide X por Y
% (Resto) X % Y Resto da divisao de X por Y
Operadores Unários
Operador Uso Descrição
++ X++ Utiliza valor de X antes de fazer o incremento
++ ++X Incrementa antes de usar o valor de X
– X– Utiliza valor de X antes de fazer o decremento
– X– Decrementa antes de usar o valor de X
• Incrementar significa somar 1
• Decrementar significa subtraír 1
Operadores Condicionais e Relacionais
Operador Uso Retorna verdadeiro se
> X > Y X é maior que Y
>= X >= Y X é maior ou igual a Y
< X < Y X é menor que Y
<= X <= Y X é menor ou igual a Y
== X == Y X e Y são iguais
!= X != Y X e Y são diferentes
Operadores Binários Condicionais
Operador Uso Retorna verdadeiro se
&& X && Y X e Y Verdadeiros, se X é falso, não avalia Y
|| X || Y X ou Y Verdadeiro, se X é verdadeiro, não avalia Y
! !X X é Falso
& X & Y A operação "e"bit-a-bit entre X e Y, sempre avalia X e Y
| X | Y A operação "ou"bit-a-bit entre X ou Y, sempre avalia X e Y
ˆ X ˆ Y A operação "ou exclusivo"xOR entre X e Y, sempre avalia X e Y
31
Capítulo 4
Conceitos Básicos
Conceitos Básicos da Orientação a Objeto
4.1 Classes, Objetos, Atributos e Métodos
Conceitos de Classe e Objeto são centrais para a programação orientada a objeto, por isso é
extremamente necessária a sua compreensão.
4.1.1 Classes
Uma classe é o elemento básico da programação orientada a objetos que define as formas
e comportamentos dos objetos pertencentes à ela. Também pode ser entendida como uma es-
trutura que associa atributos(dados) e métodos(funções), controlando o acesso a estes. Ou seja,
definir uma classe implica em especificar seus objetos.
Para a criação de uma classe coloca-se um comando que inicia a declaração da classe. Após
a palavra-chave class segue-se o nome da classe, que deve ser um identificador válido para
a linguagem. Os modificadores indicam como classe pode ser utilizada por outras classes e
aplicações.
Nota: Usualmente recomenda-se que as classes sejam declaradas utilizando nomes iniciados
com letras maiúsculas enquanto que nomes variáveis ou instâncias de objetos sejam iniciados
com letras minúsculas. No caso de duas ou mais palavras, as palavras a partir da segunda
devem iniciar com letra maiúscula para substituir o espaço. Veja o exemplo:
Por exemplo se o nome fosse "Nome da coisa", caso esse fosse o nome de uma classe
deveria ficar assim: "NomeDaCoisa", .Se fosse o nome de uma variável, então deveria ficar
assim: "nomeDaCoisa". Porém, lembre-se que isso é apenas uma recomendação. Mas é bom
segui-la para que o código possa ser lido com facilidade por outro programador, e até mesmo por
você.
Sintaxe: [modificador] class <NomeClasse>{ <corpo classe> }
Exemplo:
public class ExemploDeClasse{
//atributos
//métodos
}
32
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Modificadores
A primeira palavra nos dá a possibilidade de atribuir permissões de acesso à nossa classe,
neste caso nossa permissão é de tipo pública (public). Uma classe public é acessível irrestrita-
mente por qualquer outra classe que pertença ao mesmo pacote, ou seja, que estejam localizadas
no mesmo diretório bem seja diretamente ou por herança.
Um pacote(pakage) em Java é um diretório que contenha um conjunto de classes. Os paco-
tes, em certa medida, equivalem às bibliotecas(libraries) de outras linguagens de programação.
Existem também os modificadores privado(private) e protegido(protected) que serão melhor
abordados no capítulo de Conceitos Avançados. Exemplos de uso de pacotes:
/* O ponto seguido do asterisco indica que todas classes dentro do pacote
serão importadas */
import java.io.*;
import java.lang.Math;
import java.awt.*;
O corpo da classe normalmente segue a seguinte seqüencia:
• Variáveis de classe
• Atributos
• Construtores
• Métodos
Pode também conter um método main, que é utilizado pelo interpretador Java para dar início
à execução de uma aplicação.
Exemplo 1:
class Estudante {
/* declaração dos atributos da classe estudante */
String aluno;
String matricula;
/* métodos da classe estudante */
void setAluno (String novoAluno){
aluno = novoAluno;
}
void setMatricula (String novaMatricula){
matrícula = novaMatricula;
}
void impEstudante (){
System.out.println( "aluno: "+aluno);
System.out.println( "matricula: "+matricula);
}
}
33
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Em nossa classe Estudante temos 3 métodos setAluno, setMatricula e impEstudante, os
dois primeiros usam parâmetros e servem para modificar os atributos aluno e matricula do objeto
que os executa. O último método contém a solicitação de um objeto referenciado por System.out
para que este execute seu método println, o qual fará com que seja impresso na tela o aluno e
sua matrícula.
A palavra void indica que os métodos não retornam valores.
4.1.2 Objetos
É através deles que praticamente todo o processamento ocorre em aplicações desenvolvidas
com linguagens de programação orientadas a objetos. Toda linguagem de programação orientada
a objetos oferece mecanismos para definir os tipos de objetos para cada aplicação através do
conceito de classes.
Objetos são a instância de uma classe. Em outras palavras, são um pedaço de memória
reservada para armazenar os dados e os métodos declarados na classe. Um objeto não é mais
que uma abstração que contém um identificador, um estado e um conjunto de operações que ele
consegue realizar. Eles indicam ao computador como proceder em determinadas situações.
Os identificadores são definidos pelo ambiente ao serem criados, seu estado é determinado
pelos valores referentes a seus atributos e as operações executadas são implementadas por meio
de código (chamado método). No objeto pode-se executar os métodos que foram definidos, além
de poder acessar e alterar dados.
Criando Objetos
Para, praticamente, toda classe existe definido algum método (metodo()), que é usado para
criar os objetos da classe. Estes métodos usados para a criação de objetos são chamados de
construtores e se caracterizam por não possuir valor de retorno.
A criação de um objeto da classe "Exemplo"é feita através do comando:
new Exemplo();
Sendo iniciada a execução do construtor da classe.
Exemplo2: Suponhamos que num programa temos duas classes a Classe1 e a Classe2.
class Classe1 {
int soma;
void somar(){
//algum código 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 Difusão de Tecnologia e Conhecimento Brasil/DF
A referência de um objeto se faz com a indicação do objeto sendo concatenado ao nome do
atributo através de um ponto (objeto.soma).
4.1.3 Atributos
Atributos são um modo de modificar uma ou mais declarações(as quais são feitas no corpo
da classe, fora dos métodos). Um atributo de uma classe é a própria variável da classe que se
destina a armazenar informações singulares daquela classe. Exemplo:
/* Camiseta.java */
public class Camiseta {
/* Atributos */
String cor;
}
Naturalmente foi definida a classe Camiseta com seu atributo singular cor que poderá arma-
zenar dados sobre aquela camiseta. Outros atributos podem ser adicionados como, tamanho por
exemplo. Ou seja, diversos atributos podem descrever vários aspectos de um objeto. Exemplo:
public class Camiseta {
String cor;
char tamanho;
float preco;
}
Referência de Atributos
Pode-se referir aos atributos de um objeto das seguintes formas:
Pelo nome do atributo, se a referência e o atributo referenciado pertencem à mesma classe.
Exemplo:
cor = verde;
A referência acima só poderá ser feita em métodos da própria classe onde o atributo cor foi
declarado, no caso na classe Camiseta.
Pela identificação do objeto seguida de um ponto seguido do nome do atributo. Isso é ocorre
quando a referência é feita a um atributo de um determinado objeto. Exemplo:
Camiseta objeto = new Camiseta(); /* criando o objeto camiseta */
objeto.cor = "verde";
Pela identificação de uma classe seguida de um ponto seguido do nome do atributo, quando
se trata de atributos estáticos.
35
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
4.1.4 Atributos estáticos
Os atributos estáticos são declarados com o modificador static, estes atributos se aplicam a
funções e dados. Sua declaração não é aplicada a uma instância particular do objeto, mas ao
tipo do objeto.
A variável totalDeAlunos, ao ser declarada como um atributo estático (static int totalDe-
Alunos), permite que seu valor seja compartilhado por todos os objetos da classe Aluno. Ou
seja, todas as instâncias estarão compartilhando a mesma porção de dado. Exemplo de uma
referência de atributo a objetos específicos:
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 Difusão de Tecnologia e Conhecimento Brasil/DF
Repare que "totalDeAlunos"foi incrementado em cada objeto, porém seu valor é compartilhado
pelos dois objetos. Note que o melhor jeito de referenciar uma variável estática é utilizando o
nome da classe e não o nome do objeto. Por exemplo:
As linhas:
obj1.totalDeAlunos++;
obj2.totalDeAlunos++;
Ficariam melhor se substituídas por:
Aluno.totalDeAlunos++;
Aluno.totalDeAlunos++;
OBS:. O uso abusivo de elementos estáticos é desencorajado, pois elementos estáticos são
armazenados uma vez na memória e todos os objetos com acesso permitido acessarão o mesmo
local. Isso pode ser fonte de inconsistência já que diversos objetos estarão lendo e escrevendo
no mesmo local concorrentemente. Adicionalmente, na orientação à objeto deve-se evitar que
informações desnecessárias sejam visíveis por objetos externos.
Em nosso programa, foi mais efetivo definir a variável totalDeAlunos como estática, já que o
totalDeAlunos é um valor compartilhado por todos os alunos, e não específico de cada aluno,
como a matrícula.
4.1.5 Métodos
Na seqüência serão relembrados os conceitos de classe e objeto, porque é necessário que
os manipulemos perfeitamente para poder entender tudo o que será apresentado nesta lição.
Objetos são instâncias de classes. Ao serem criados, possuem uma identificação única que
é atribuída pelo ambiente e um conjunto de atributos que o caracteriza. Estes atributos assumem
valores que compõem o estado do objeto, e cada objeto executa operações definidas através de
códigos chamados métodos.
Nas classes encontramos os objetos e suas devidas descrições, isto é , as classes descrevem
os atributos de seus objetos, bem como os métodos que eles podem executar.
Métodos
Nas linguagens orientadas a objetos os métodos são usados para implementar operações
que serão usadas pelos objetos criados no programa.
Os métodos definem as ações a serem tomadas em diversos momentos da execução de
um programa, dando dinamismo capaz de permitir que os objetos, em muitos casos, imitem o
comportamento de objetos reais. São os métodos que realizam todas as tarefas para as quais
o programa foi escrito, por exemplo, fazer cálculos, resumir informações de um arquivo, criar
gráficos, etc.
Chamando Métodos
Podemos chamar um método explicitamente ou implicitamente. A chamada explícita se dá
através da execução de um comando ou por meio de uma expressão que contém o nome do
método. Por exemplo ao chamar o método System.out.println (sua função é imprimir na tela)
fazemos uma chamada explícita. Chamada implícita ocorre quando o interpretador Java chama
37
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
um método por sua própria deliberação. Por exemplo quando o interpretador Java chama o
método main para iniciar a execução do programa.
Declarando Métodos
Os métodos são declarados como parte da especificação de uma classe.
Sintaxe:
<tipo de retorno> <nome do método> {
<corpo do método>
}
Caso seja necessário, podemos ter nos métodos um valor de retorno. Na sintaxe acima se
utilizarmos void no lugar de <tipo de retorno>, significa que o método não retorna nenhum valor.
O <nome do método> é um identificador que define o nome pelo qual o método é conhecido,
o <corpo do método> contém todas as declarações e especificações necessárias para que
quando seja chamado os comandos sejam executados.
Nos métodos também podemos fazer uso de moderador de acesso como public, protected e
private que são empregados para restringir o acesso a um método. Os modificadores permitem
dar algumas propriedades ao método.
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 é necessário colocar a palavra chave
int antes do nome do método.
O método 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 método somaPositivos temos um if que testa se as variáveis num e num2 são maiores
que zero. Se não forem, ele dá um return e sai do método, caso contrário, imprime a soma de
num e num2 e posteriormente dá um return e sai do método. O comando if será visto mais
detalhadamente na seguinte lição.
38
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Referindo-se a métodos
Se a referência e o método são da mesma classe, então nos referimos a ele pelo seu nome.
Quando se quer invocar a execução do método por um objeto específico, faz-se a referência
pela identificação de um objeto seguido do nome do método.
Para métodos estáticos, faz-se a identificação de uma classe seguida do nome do método
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 método */
}
void imprime(){
System.out.println("Soma dessa instância: " + soma);
System.out.println("fim de programa");
}
static void conta() {
System.out.println("Quantidade de somas feitas: " + quantidadeSomas);
}
}
Neste exemplo, a referência ao método imprime é feita só pelo nome porque ele pertence à
mesma classe do método (somaX()) que a chamou.
class Exemplo3TestDrive {
public static void main(String[] arg){
Exemplo3 obj = new Exemplo3();
obj.x = 21;
obj.somaX(); /* executar método por um objeto */
Exemplo3.conta(); /* executar o método estático da classe Exemplo3 */
Exemplo3 obj2 = new Exemplo3();
obj2.x = 23;
obj2.somaX();
Exemplo3.conta();
}
}
No caso do Exemplo3TestDrive o método somaX() teve que ser chamado utilizando o objeto
instânciado, já o método conta() foi chamado utilizando o nome da classe (pois é um método
estático).
39
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Método println
Este método é executado pelo objeto referenciado System.out e imprime o argumento que
recebe.
Para imprimir uma seqüencia de caracteres, é necessário que a seqüencia seja colocada
entre aspas duplas, exemplo:
System.out.println("Imprimindo seqüencia de caracteres");
Aparecerá na tela do computador:
Imprimindo seqüencia de caracteres
Os caracteres são impressos exatamente como são escritos. O println após imprimir da um
salto de linha, enquanto o print imprime os argumentos mas não 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 impressão está sendo usado o método print, por isso não se produz salto de linha
e a segunda impressão aparece na mesma linha da primeira.
Para imprimir uma variável, ela é passada como argumento sem fazer uso das aspas duplas.
Por exemplo: se a váriavel var tem como valor 1000, usamos a seguinte seqüencia 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 método para cada println são passados dois argumentos, uma
seqüencia de caracteres e uma variável, o símbolo de adição "+"serve para indicar que outro
argumento será impresso.
40
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
4.2 Estruturas de Controle
Na execução de programas as ações primitivas nem sempre são executadas na ordem em
que são escritas, devido à lógica de programação que foi aplicada na construção 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 condição.
4.2.1 Estruturas de Repetição
Os ciclos de repetição em sua estrutura possuem um conjunto de comandos e uma condição.
Comando While
Na execução do comando while primeiro testa-se a <condição>. Se a condição resultar em
falso o comando termina passando o controle para posição após a chave de fechamento do
comando. Se resultar em verdadeiro uma nova iteração tem início e o controle passa para o
primeiro comando da cláusula de repetição.
Sintaxe: while (<condição>){ <comandos>; }
Exemplo:
while (cont != 0) {
cont = cont -1;
}
Na primeira linha é testado se cont é diferente de zero, se for, então são executados os
comandos que estão dentro do bloco while, mas se a condição não é satisfeita o ciclo de repetição
termina e o controle passa para a primeira linha depois do bloco.
Comando do-while
Este comando é parecido ao while sua diferença é que a condição é testada após a execução
do bloco de instruções. Portanto, este bloco é executado no mínimo uma vez.
Sintaxe: do { <comandos>; } while (<condição>);
Exemplo:
do {
cont = cont - 1;
} while (cont != 0);
Neste exemplo, o controle esta no bloco do comando do, onde primeiro são executadas todas
as instruções, neste caso subtrai-se um da variável cont, posteriormente é testada a condição
que, caso seja satisfeita (verdadeira), o controle volta para o comando do e se repete o proce-
dimento. Mas se não for satisfeita (falso), termina o ciclo de repetição e o controle passa para a
primeira linha que está depois do comando while.
41
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Comando For
Como os comandos anteriores, o comando for serve para repetir um conjunto de instruções,
diferindo dos demais pela existência de procedimentos executados no inicío de sua estrutura.
Na execução do comando for o <comando inicial> é executado (Caso ele não exista ne-
nhuma ação é realizada nesse passo). Em seguida a <condição de parada> é avaliada e se
o resultado for falso o comando termina. Se o resultado for verdadeiro uma nova interação tem
início e o controle passa para o primeiro comando da cláusula de repetição.
Sintaxe: for (<comando inicial> ; <condição de parada> ; <cláusula_fim_iteração>){ }
Possui um cabeçalho com três elementos separados por ponto e vírgula, no primeiro elemento
declaramos o tipo de variável que vamos utilizar e atribuimos um valor inicial para ela. No segundo
elemento é declarada a condição de parada e no terceiro temos a cláusula de fim de iteração.
Exemplo:
for ( int var = 0; var <= 10; var++){
System.out.println(var);
}
Neste exemplo, primeiro foi declarada uma variável var de tipo inteiro com um valor inicial
de zero, depois é testada a condição que se for satisfeita será impresso o valor de var, senão
terminará o ciclo de repetição e o controle passará para o primeiro comando que estiver depois
do bloco for .
OBS :. O exemplo usando for acima equivale ao código 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 fluxo de execução de um programa seja desviado, pois
às vezes precisamos executar um bloco de ações ou uma seqüência de ações primitivas apenas
se uma determinada condição for satisfeita.
Comando if
Sua sintaxe é if (<condição>) <comandos> , ela nos diz que se a condição for verdadeira
as ações que seguem serão executadas. Veja o exemplo:
if (x > 0) {
++x;
}
Lê-se: se x for maior que zero então incremente um em x.
42
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Comando else
No caso em que a condição for falsa, por exemplo se x não é maior que zero então outras
ações serão executadas, neste caso utilizamos o comando else. Tenha em mente que sempre
antes de um else deve existir um if.
Sintaxe: if (<condição>) { <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 condição,
como ela é falsa o controle passa para o else e executa o que esta no bloco dele, neste caso
será decrementado o valor da variável x. Veja que não foi necessário 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, então 100 é dividido
por num. Posteriormente se faz um novo teste na condição do segundo if , se o valor obtido em
x for maior que 10, então imprime x > 10, senão o controle vai para o else e é impresso x < 10,
terminando assim o bloco do primeiro if . Por último é impresso a palavra fim de programa.
No caso em que num é igual a zero, a condição testada no primeiro if será falsa e, portanto,
controle não entra no bloco do if, sendo passado o controle à primeira linha de comando depois
do if , consequentemente será impresso fim de programa.
Comando switch
O comando switch também desvia, por meio de um teste na condição, o controle do programa
para outro trecho, trabalhando de forma semelhante ao if, sua diferença é que pode tratar mais
de dois blocos de execução. Sintaxe:
43
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
switch (<expressão>){
case <valor1>:<comandos 1>
break;
case <valor2>:<comandos 2>
break;
.
.
.
default: <comandos default>
}
No comando switch a <expressão> que é passada será testada nas diferentes cláusulas
case. A <expressão> é comparada com o rótulo (no caso <valor1> e <valor2>) em cada cláu-
sula case. A comparação é feita do primeiro comando case até o último, ordenadamente, se ela
for igual ao valor de alguma das cláusulas o controle passa para ela e serão executados todos
seus comandos. Em seguida o controle passa para o primeiro comando após este rótulo.
Se nenhum rótulo for igual a <expressão>, então verifica-se a existência de um rótulo default.
Caso exista, os comandos de default serão executados. Se não existir um rótulo default o fluxo
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 vale 1");
break;
}
case 21: {
System.out.println("x vale 21");
break;
}
default: {
System.out.println("x não é valido, nesse caso");
break;
}
case 30: {
System.out.println("x vale 30");
break;
}
}
}
}
44
CDTC Centro de Difusão 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 não for 1 ou 21 ou 30, então aparecerá na tela:
x não é valido, nesse caso
Se o valor de x for 30 aparecerá na tela:
x vale 30
Como o valor de x não existe em nenhuma cláusula o controle é desviado para o comando
default, prosseguindo-se a partir deste ponto com a execução 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("rótulo 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 então é impresso na tela rótulo 1 e sai do switch terminando o programa.
Se o valor de x é 2 o controle vai para classe 2, e é incrementado 2 à variável x que fica 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 saímos do primeiro switch e termina o programa.
45
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
4.3 E/S Teclado e Arquivo
Obtendo Valores do Teclado
Para poder obter os valores do usuário a partir do teclado é necessário 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 diretório 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 métodos public int lerInteiro(),public doublelerReal() e pu-
blic String lerLinha(), que nos permitem ler inteiros, reais e strings.
NOTA: Não se preocupe por não conseguir entender a classe Teclado completamente,
pois ela possui assuntos mais avançadas que serão vistos mais para frente. Por enquanto
você só precisa saber como usá-la para obter dados do teclado.
46
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
4.3.1 E/S Teclado
Vias Lógicas de comunicação
O canal comunicante entre um repositório de dados e um programa é a representação da
chamada via lógica de comunicação. Essas vias diferenciam operações físicas (dependem de
repositórios e fontes) das operações lógicas (gravação e leitura). As vias podem ser de entrada,
de saída ou de ambas(entrada e saída).
• Vias de entrada - Estabelecem um canal comunicação entre uma fonte onde os dados são
lidos e o programa leitor.
• Vias de saída - Estabelecem um canal comunicação entre uma repositório onde os dados
são lidos e o programa gravador.
• Vias de entrada e saída - Estabelecem um canal comunicação entre uma fonte ou reposi-
tório com um programa permitindo leitura e/ou gravação.
A implementação das vias se dá em classes que contenham métodos apropriados de leitura,
gravação e conexão entre fontes e repositórios de dados. O comando new é o responsável por
criar um objeto capaz de implementar uma via de comunicação. O objeto recém-criado então deve
ser associado à fonte ou repositório de dados, passando-se sua identificação como argumento
que use seus métodos de gravação e leitura.
Exemplo:
new FileReader("dados.txt");
O arquivo identificado por dados.txt está associado ao objeto da classe FileReader que im-
plementa a via de entrada criada pelo comando new no exemplo anterior.
Vias padrões para gravação e leitura
A classe System e seus atributos in e out estão diponíveis automaticamente pelo ambiente
Java associados ao teclado e ao vídeo. O método read (leitura) pode ser usado através do objeto
in. Enquanto que o objeto out permite o uso dos métodos print (imprime algo mantendo o cursor
na mesma linha) e println(imprime algo transferindo o cursor para próxima linha).
System.in.read();
System.out.print();
System.out.println();
Leitura de dado
Na execução do método read se a tecla x for digitada teremos a impressão do valor 120,
que é o código inteiro correspondente à letra x. Ou seja, o método read pertencente à classe
InputStream retorna valores inteiros(tipo int) ao ler um byte da fonte de dados.Exemplo:
47
CDTC Centro de Difusão 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 declarações import java.io.* e throws IOException serão melhor abordadas na lição de
tratamento de erros. Por hora basta saber que a primeira declaração serve para importar as
classes de entrada e saída e a segunda serve para posteriormente tratar possíveis erros também
de entrada e saída.
Leitura da linha
O método readLine da classe BufferedReader permite leitura de todo o conteúdo de uma li-
nha. Esse método 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 declaração import java.util.* é necessária para localizar a classe Scanner e usar o método
nextLine() tento o teclado como fonte de dados.
48
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Leitura de valores múltiplos
Com objetos da classe StringTokenizer pode-se ler valores múltiplos do teclado que foram
digitados numa mesma linha, sendo que esses dados serão tratados como sequência de carac-
teres chamados tokens. O espaço é o delimitador padrão dos tokens, mas o delimitador pode
ser alterado. Exemplo:
A sequência de caracteres "leitura de 4 tokens "contém 4 tokens.
O método nextToken retorna o próximo token como uma sequência de caracteres. Já os mé-
todos hasMoreTokens e hasMoreElements determinam a existência de mais tokens na sequên-
cia 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
São um conjunto de dados armazenados em um formato específico. Eles podem ser tex-
tos(dados gravados em formas de caracteres) ou binários(dados gravados usando-se tipos pri-
mitivos da linguagem) que têm diferenças apenas lógicas. O acesso aos arquivos pode ser feito
sequencialmente ou randomicamente. No primeiro o cursor sempre move-se pra frente com
gravação e leituras sequenciais. Já no segundo o cursor movimenta-se para frente e para trás, o
que permite regravações e releitura de dados de maneira não sequencial.
Leitura e Gravação de arquivos sequenciais
Primeiro identifica-se um arquivo passando o caminho para determinar a localização dele.
Em seguida o ambiente de execução deve localizá-lo e prepará-lo para leitura ou gravação. Fi-
nalmente, fecha-se o arquivo.
O método read da classe FileReader após ler o caractere retorna o inteiro que corresponde
ao código do caractere lido e identifica o fim 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 Difusão de Tecnologia e Conhecimento Brasil/DF
while ((i = arq.read()) != -1)
System.out.print(i+".");
arq.close();
}
}
O método readLine da classe BufferedReader lê um arquivo linha a linha e identifica o fim
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 método write da classe FileWriter grava um caractere ou uma sequência de caracteres.
Se o argumento for do tipo int o método grava o código correspondente ao valor. Se for char ou
String serão gravados como caractere e sequência 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 diretório /home/usr cujo conteúdo será:
Um mais um é igual a 2 e dois mais dois é igual a 4
Obs: É necessária ter permissão de gravação no diretório /home/usr.
Os objetos da classe DataInputStream e DataOutputStream permitem respectivamente lei-
tura(pelo método read<tipo>) e gravação(pelo método de write<tipo>) direta de tipos primitivos.
Por exemplo dados gravados com método writeInt devem ser lidos pelo métodos readInt.
Um arquivo acessado através de um objeto da classe DataInputStream tem seu final indicado
pela ocorrência da exceção EOFException. Isso para prevenir que o método read<tipo> de tente
continuar lendo depois o fim do arquivo.
50
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Leitura e gravação de arquivos randômicos
A classe RandomAcessFile poussui métodos write<tipo> e read<tipo> para cada tipo pri-
mitivo Java. Tais métodos devem ser usados em conjunto, ou sejam, dados gravados por um
write<tipo> devem ser lidos por read<tipo>. Essa classe deve conter, além da identificação do
arquivo, o modo de utilização separados por vírgula. Sintaxe:
new RandomAcessFile("/home/usr/arquivo","rw" );
• r - abre o arquivo apenas para leitura.
• rw - abre o arquivo para leitura e gravação.
• rws e rwd - abrem o arquivo para leitura e gravação, garantindo o sincronismo entre as
operações lógicas e físicas de entrada e saída.
Outros métodos úteis são:
• seek(x) - posiciona o cursor no início do byte de ordem x.
• length - retorna o tamanho do arquivo em bytes.
• getFilePointer - retorna a posição corrente do cursor.
• setLength(x) - define um novo tamanho para o arquivo.
4.4 Vetores e Cadeia de Caracteres
4.4.1 Vetores
Também conhecidos como arrays, são seqüências de elementos de um determinado tipo,
em um número pré-determinado de dimensões (vetores de uma, duas ou mais dimensões, por
exemplo).
Arrays são ditos unidimensionais quando possuem apenas uma dimensão, podendo assim
referenciar seus elementos através de um único índice numérico, geralmente entre colchetes
(vetor[1]). Arrays multidimensionais são aqueles em que devemos referenciar cada elemento
através de dois ou mais índices numéricos(vetor[1][2]). Podemos implementar matrizes facil-
mente através dessa possibilidade de manipulação de arrays.
Arrays são referenciados como variáveis, cabendo ao programador determinar qual o tipo
deste vetor. Além de definirmos o nome do array, devemos também definir portanto o tipo deste
array e quantas dimensões possuirá. Como dito anteriormente, as dimensões são especificadas
por pares de colchetes, quando declaramos o array.
O comando new seguido do nome da classe e da quantidade de elementos da sua dimensão
pode criar explicitamente objetos que representam vetores. Exemplo de um vetor de inteiros de
100 elementos:
new int[100];
Vejamos agora exemplos de declarações de arrays unidimensionais e multidimensionais:
51
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Uma dimensão
A B C D
Multidimensionais (matriz)
A B C
D E F
G H I
J K 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 nú-
mero de linhas da matriz e no segundo o número de colunas.
Exemplo:
int numeros[10];
char Lista[5][4];
Os elementos dos vetores são referenciados por seu índice que é sua própria posição no
vetor. O atributo length serve para indicar quantidade de elementos de um vetor.
Array Unidimensional
Podemos utilizar arrays para evitar o uso de múltiplas variáveis redundantes em um programa,
facilitando a manipulação de grande quantidade de dados. Normalmente, manipula-se uma es-
trutura 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
Java Básico: Guia Completo
Java Básico: Guia Completo
Java Básico: Guia Completo
Java Básico: Guia Completo
Java Básico: Guia Completo
Java Básico: Guia Completo
Java Básico: Guia Completo
Java Básico: Guia Completo
Java Básico: Guia Completo
Java Básico: Guia Completo
Java Básico: Guia Completo
Java Básico: Guia Completo
Java Básico: Guia Completo
Java Básico: Guia Completo
Java Básico: Guia Completo
Java Básico: Guia Completo
Java Básico: Guia Completo

Mais conteúdo relacionado

Mais procurados

Tcl tk
Tcl tkTcl tk
Tcl tkTiago
 
Selinux
SelinuxSelinux
SelinuxTiago
 
Servidor de emails_seguro
Servidor de emails_seguroServidor de emails_seguro
Servidor de emails_seguroTiago
 
Screen
ScreenScreen
ScreenTiago
 
X dialog
X dialogX dialog
X dialogTiago
 
Tunelamento
TunelamentoTunelamento
TunelamentoTiago
 
Wx python
Wx pythonWx python
Wx pythonTiago
 
Pascal
PascalPascal
PascalTiago
 
Squid guard
Squid guardSquid guard
Squid guardTiago
 
Apostila cdtc dotproject
Apostila cdtc dotprojectApostila cdtc dotproject
Apostila cdtc dotprojectTiago
 
Programacao php moodle
Programacao php moodleProgramacao php moodle
Programacao php moodleTiago
 
Drupal
DrupalDrupal
DrupalTiago
 

Mais procurados (20)

Tcl tk
Tcl tkTcl tk
Tcl tk
 
Selinux
SelinuxSelinux
Selinux
 
Servidor de emails_seguro
Servidor de emails_seguroServidor de emails_seguro
Servidor de emails_seguro
 
Screen
ScreenScreen
Screen
 
X dialog
X dialogX dialog
X dialog
 
Samba
SambaSamba
Samba
 
Tunelamento
TunelamentoTunelamento
Tunelamento
 
Wx python
Wx pythonWx python
Wx python
 
Zope
ZopeZope
Zope
 
Pascal
PascalPascal
Pascal
 
Sql
SqlSql
Sql
 
Squid guard
Squid guardSquid guard
Squid guard
 
Uml
UmlUml
Uml
 
Qemu
QemuQemu
Qemu
 
Inkscape
InkscapeInkscape
Inkscape
 
Linguagem Ruby
Linguagem RubyLinguagem Ruby
Linguagem Ruby
 
Apostila cdtc dotproject
Apostila cdtc dotprojectApostila cdtc dotproject
Apostila cdtc dotproject
 
Vim
VimVim
Vim
 
Programacao php moodle
Programacao php moodleProgramacao php moodle
Programacao php moodle
 
Drupal
DrupalDrupal
Drupal
 

Semelhante a Java Básico: Guia Completo

Javascript
JavascriptJavascript
JavascriptTiago
 
Quanta
QuantaQuanta
QuantaTiago
 
Programacao gtk
Programacao gtkProgramacao gtk
Programacao gtkTiago
 
Open solaris
Open solarisOpen solaris
Open solarisTiago
 
Python gtk
Python gtkPython gtk
Python gtkTiago
 
Iptables
IptablesIptables
IptablesTiago
 
Linguagem c
Linguagem cLinguagem c
Linguagem cTiago
 
Linguagem ruby
Linguagem rubyLinguagem ruby
Linguagem rubyTiago
 
Planejamento em desenvolvimento_de_sistemas
Planejamento em desenvolvimento_de_sistemasPlanejamento em desenvolvimento_de_sistemas
Planejamento em desenvolvimento_de_sistemasTiago
 
Monitoramento
MonitoramentoMonitoramento
MonitoramentoTiago
 
Ruby on rails
Ruby on railsRuby on rails
Ruby on railsTiago
 
Instalacao xoops
Instalacao xoopsInstalacao xoops
Instalacao xoopsTiago
 
Drivers de dispostivos_linux
Drivers de dispostivos_linuxDrivers de dispostivos_linux
Drivers de dispostivos_linuxTiago
 
Postfix
PostfixPostfix
PostfixTiago
 

Semelhante a Java Básico: Guia Completo (20)

Javascript
JavascriptJavascript
Javascript
 
Quanta
QuantaQuanta
Quanta
 
Horde
HordeHorde
Horde
 
Programacao gtk
Programacao gtkProgramacao gtk
Programacao gtk
 
Open solaris
Open solarisOpen solaris
Open solaris
 
Python gtk
Python gtkPython gtk
Python gtk
 
Iptables
IptablesIptables
Iptables
 
Linguagem c
Linguagem cLinguagem c
Linguagem c
 
Linguagem ruby
Linguagem rubyLinguagem ruby
Linguagem ruby
 
Planejamento em desenvolvimento_de_sistemas
Planejamento em desenvolvimento_de_sistemasPlanejamento em desenvolvimento_de_sistemas
Planejamento em desenvolvimento_de_sistemas
 
Monitoramento
MonitoramentoMonitoramento
Monitoramento
 
Ltsp
LtspLtsp
Ltsp
 
Plone
PlonePlone
Plone
 
Zope
ZopeZope
Zope
 
Ruby on rails
Ruby on railsRuby on rails
Ruby on rails
 
Instalacao xoops
Instalacao xoopsInstalacao xoops
Instalacao xoops
 
Drivers de dispostivos_linux
Drivers de dispostivos_linuxDrivers de dispostivos_linux
Drivers de dispostivos_linux
 
J2me
J2meJ2me
J2me
 
Postfix
PostfixPostfix
Postfix
 
Squid
SquidSquid
Squid
 

Mais de Tiago

6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascal6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascalTiago
 
Guia rapido de_pascal
Guia rapido de_pascalGuia rapido de_pascal
Guia rapido de_pascalTiago
 
Python bge
Python bgePython bge
Python bgeTiago
 
Curso python
Curso pythonCurso python
Curso pythonTiago
 
Curso python
Curso pythonCurso python
Curso pythonTiago
 
Aula 01 python
Aula 01 pythonAula 01 python
Aula 01 pythonTiago
 
Threading in c_sharp
Threading in c_sharpThreading in c_sharp
Threading in c_sharpTiago
 
Retirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharpRetirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharpTiago
 
Remover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharpRemover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharpTiago
 
Obter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharpObter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharpTiago
 
Metodo using no_c_sharp
Metodo using no_c_sharpMetodo using no_c_sharp
Metodo using no_c_sharpTiago
 
Introdução ao c# para iniciantes
Introdução ao c# para iniciantesIntrodução ao c# para iniciantes
Introdução ao c# para iniciantesTiago
 
Interfaces windows em c sharp
Interfaces windows em c sharpInterfaces windows em c sharp
Interfaces windows em c sharpTiago
 
Filestream sistema arquivos
Filestream  sistema arquivosFilestream  sistema arquivos
Filestream sistema arquivosTiago
 
Curso linux professor rafael
Curso linux professor rafaelCurso linux professor rafael
Curso linux professor rafaelTiago
 
Curso de shell
Curso de shellCurso de shell
Curso de shellTiago
 
Controle lpt em_c_sharp
Controle lpt em_c_sharpControle lpt em_c_sharp
Controle lpt em_c_sharpTiago
 
Classes csharp
Classes csharpClasses csharp
Classes csharpTiago
 
C# o basico
C#   o basicoC#   o basico
C# o basicoTiago
 
C# classes
C#   classesC#   classes
C# classesTiago
 

Mais de Tiago (20)

6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascal6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascal
 
Guia rapido de_pascal
Guia rapido de_pascalGuia rapido de_pascal
Guia rapido de_pascal
 
Python bge
Python bgePython bge
Python bge
 
Curso python
Curso pythonCurso python
Curso python
 
Curso python
Curso pythonCurso python
Curso python
 
Aula 01 python
Aula 01 pythonAula 01 python
Aula 01 python
 
Threading in c_sharp
Threading in c_sharpThreading in c_sharp
Threading in c_sharp
 
Retirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharpRetirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharp
 
Remover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharpRemover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharp
 
Obter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharpObter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharp
 
Metodo using no_c_sharp
Metodo using no_c_sharpMetodo using no_c_sharp
Metodo using no_c_sharp
 
Introdução ao c# para iniciantes
Introdução ao c# para iniciantesIntrodução ao c# para iniciantes
Introdução ao c# para iniciantes
 
Interfaces windows em c sharp
Interfaces windows em c sharpInterfaces windows em c sharp
Interfaces windows em c sharp
 
Filestream sistema arquivos
Filestream  sistema arquivosFilestream  sistema arquivos
Filestream sistema arquivos
 
Curso linux professor rafael
Curso linux professor rafaelCurso linux professor rafael
Curso linux professor rafael
 
Curso de shell
Curso de shellCurso de shell
Curso de shell
 
Controle lpt em_c_sharp
Controle lpt em_c_sharpControle lpt em_c_sharp
Controle lpt em_c_sharp
 
Classes csharp
Classes csharpClasses csharp
Classes csharp
 
C# o basico
C#   o basicoC#   o basico
C# o basico
 
C# classes
C#   classesC#   classes
C# classes
 

Último

Orientações para a análise do poema Orfeu Rebelde.pptx
Orientações para a análise do poema Orfeu Rebelde.pptxOrientações para a análise do poema Orfeu Rebelde.pptx
Orientações para a análise do poema Orfeu Rebelde.pptxJMTCS
 
VACINAR E DOAR, É SÓ COMEÇAR - - 1º BIMESTRE
VACINAR E DOAR, É SÓ COMEÇAR - - 1º BIMESTREVACINAR E DOAR, É SÓ COMEÇAR - - 1º BIMESTRE
VACINAR E DOAR, É SÓ COMEÇAR - - 1º BIMESTREIVONETETAVARESRAMOS
 
organizaao-do-clube-de-lideres-ctd-aamar_compress.pdf
organizaao-do-clube-de-lideres-ctd-aamar_compress.pdforganizaao-do-clube-de-lideres-ctd-aamar_compress.pdf
organizaao-do-clube-de-lideres-ctd-aamar_compress.pdfCarlosRodrigues832670
 
Revolução Industrial - Revolução Industrial .pptx
Revolução Industrial - Revolução Industrial .pptxRevolução Industrial - Revolução Industrial .pptx
Revolução Industrial - Revolução Industrial .pptxHlioMachado1
 
EVANGELISMO É MISSÕES ATUALIZADO 2024.pptx
EVANGELISMO É MISSÕES ATUALIZADO 2024.pptxEVANGELISMO É MISSÕES ATUALIZADO 2024.pptx
EVANGELISMO É MISSÕES ATUALIZADO 2024.pptxHenriqueLuciano2
 
Baladão sobre Variação Linguistica para o spaece.pptx
Baladão sobre Variação Linguistica para o spaece.pptxBaladão sobre Variação Linguistica para o spaece.pptx
Baladão sobre Variação Linguistica para o spaece.pptxacaciocarmo1
 
19 de abril - Dia dos povos indigenas brasileiros
19 de abril - Dia dos povos indigenas brasileiros19 de abril - Dia dos povos indigenas brasileiros
19 de abril - Dia dos povos indigenas brasileirosMary Alvarenga
 
v19n2s3a25.pdfgcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
v19n2s3a25.pdfgcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbv19n2s3a25.pdfgcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
v19n2s3a25.pdfgcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbyasminlarissa371
 
Apreciação crítica -exercícios de escrita
Apreciação crítica -exercícios de escritaApreciação crítica -exercícios de escrita
Apreciação crítica -exercícios de escritaeliana862656
 
TREINAMENTO - BOAS PRATICAS DE HIGIENE NA COZINHA.ppt
TREINAMENTO - BOAS PRATICAS DE HIGIENE NA COZINHA.pptTREINAMENTO - BOAS PRATICAS DE HIGIENE NA COZINHA.ppt
TREINAMENTO - BOAS PRATICAS DE HIGIENE NA COZINHA.pptAlineSilvaPotuk
 
Slides Lição 01, Central Gospel, Os Sinais do Fim dos Tempos 2Tr24.pptx
Slides Lição 01, Central Gospel, Os Sinais do Fim dos Tempos 2Tr24.pptxSlides Lição 01, Central Gospel, Os Sinais do Fim dos Tempos 2Tr24.pptx
Slides Lição 01, Central Gospel, Os Sinais do Fim dos Tempos 2Tr24.pptxLuizHenriquedeAlmeid6
 
AVALIAÇÃO INTEGRADA 1ª SÉRIE - EM - 1º BIMESTRE ITINERÁRIO CIÊNCIAS DAS NATUREZA
AVALIAÇÃO INTEGRADA 1ª SÉRIE - EM - 1º BIMESTRE ITINERÁRIO CIÊNCIAS DAS NATUREZAAVALIAÇÃO INTEGRADA 1ª SÉRIE - EM - 1º BIMESTRE ITINERÁRIO CIÊNCIAS DAS NATUREZA
AVALIAÇÃO INTEGRADA 1ª SÉRIE - EM - 1º BIMESTRE ITINERÁRIO CIÊNCIAS DAS NATUREZAEdioFnaf
 
A Inteligência Artificial na Educação e a Inclusão Linguística
A Inteligência Artificial na Educação e a Inclusão LinguísticaA Inteligência Artificial na Educação e a Inclusão Linguística
A Inteligência Artificial na Educação e a Inclusão LinguísticaFernanda Ledesma
 
Slides Lição 3, CPAD, O Céu - o Destino do Cristão, 2Tr24,.pptx
Slides Lição 3, CPAD, O Céu - o Destino do Cristão, 2Tr24,.pptxSlides Lição 3, CPAD, O Céu - o Destino do Cristão, 2Tr24,.pptx
Slides Lição 3, CPAD, O Céu - o Destino do Cristão, 2Tr24,.pptxLuizHenriquedeAlmeid6
 
Prova de Empreendedorismo com gabarito.pptx
Prova de Empreendedorismo com gabarito.pptxProva de Empreendedorismo com gabarito.pptx
Prova de Empreendedorismo com gabarito.pptxJosAurelioGoesChaves
 
QUIZ – GEOGRAFIA - 8º ANO - PROVA MENSAL.pptx
QUIZ – GEOGRAFIA - 8º ANO - PROVA MENSAL.pptxQUIZ – GEOGRAFIA - 8º ANO - PROVA MENSAL.pptx
QUIZ – GEOGRAFIA - 8º ANO - PROVA MENSAL.pptxAntonioVieira539017
 
Projeto leitura HTPC abril - FORMAÇÃP SOBRE O PROJETO
Projeto leitura HTPC abril - FORMAÇÃP SOBRE O PROJETOProjeto leitura HTPC abril - FORMAÇÃP SOBRE O PROJETO
Projeto leitura HTPC abril - FORMAÇÃP SOBRE O PROJETODouglasVasconcelosMa
 
Mini livro sanfona - Diga não ao bullying
Mini livro sanfona - Diga não ao  bullyingMini livro sanfona - Diga não ao  bullying
Mini livro sanfona - Diga não ao bullyingMary Alvarenga
 
Sistema de Bibliotecas UCS - A descoberta da terra
Sistema de Bibliotecas UCS  - A descoberta da terraSistema de Bibliotecas UCS  - A descoberta da terra
Sistema de Bibliotecas UCS - A descoberta da terraBiblioteca UCS
 
Slides Lição 3, Betel, Ordenança para congregar e prestar culto racional, 2Tr...
Slides Lição 3, Betel, Ordenança para congregar e prestar culto racional, 2Tr...Slides Lição 3, Betel, Ordenança para congregar e prestar culto racional, 2Tr...
Slides Lição 3, Betel, Ordenança para congregar e prestar culto racional, 2Tr...LuizHenriquedeAlmeid6
 

Último (20)

Orientações para a análise do poema Orfeu Rebelde.pptx
Orientações para a análise do poema Orfeu Rebelde.pptxOrientações para a análise do poema Orfeu Rebelde.pptx
Orientações para a análise do poema Orfeu Rebelde.pptx
 
VACINAR E DOAR, É SÓ COMEÇAR - - 1º BIMESTRE
VACINAR E DOAR, É SÓ COMEÇAR - - 1º BIMESTREVACINAR E DOAR, É SÓ COMEÇAR - - 1º BIMESTRE
VACINAR E DOAR, É SÓ COMEÇAR - - 1º BIMESTRE
 
organizaao-do-clube-de-lideres-ctd-aamar_compress.pdf
organizaao-do-clube-de-lideres-ctd-aamar_compress.pdforganizaao-do-clube-de-lideres-ctd-aamar_compress.pdf
organizaao-do-clube-de-lideres-ctd-aamar_compress.pdf
 
Revolução Industrial - Revolução Industrial .pptx
Revolução Industrial - Revolução Industrial .pptxRevolução Industrial - Revolução Industrial .pptx
Revolução Industrial - Revolução Industrial .pptx
 
EVANGELISMO É MISSÕES ATUALIZADO 2024.pptx
EVANGELISMO É MISSÕES ATUALIZADO 2024.pptxEVANGELISMO É MISSÕES ATUALIZADO 2024.pptx
EVANGELISMO É MISSÕES ATUALIZADO 2024.pptx
 
Baladão sobre Variação Linguistica para o spaece.pptx
Baladão sobre Variação Linguistica para o spaece.pptxBaladão sobre Variação Linguistica para o spaece.pptx
Baladão sobre Variação Linguistica para o spaece.pptx
 
19 de abril - Dia dos povos indigenas brasileiros
19 de abril - Dia dos povos indigenas brasileiros19 de abril - Dia dos povos indigenas brasileiros
19 de abril - Dia dos povos indigenas brasileiros
 
v19n2s3a25.pdfgcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
v19n2s3a25.pdfgcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbv19n2s3a25.pdfgcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
v19n2s3a25.pdfgcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
 
Apreciação crítica -exercícios de escrita
Apreciação crítica -exercícios de escritaApreciação crítica -exercícios de escrita
Apreciação crítica -exercícios de escrita
 
TREINAMENTO - BOAS PRATICAS DE HIGIENE NA COZINHA.ppt
TREINAMENTO - BOAS PRATICAS DE HIGIENE NA COZINHA.pptTREINAMENTO - BOAS PRATICAS DE HIGIENE NA COZINHA.ppt
TREINAMENTO - BOAS PRATICAS DE HIGIENE NA COZINHA.ppt
 
Slides Lição 01, Central Gospel, Os Sinais do Fim dos Tempos 2Tr24.pptx
Slides Lição 01, Central Gospel, Os Sinais do Fim dos Tempos 2Tr24.pptxSlides Lição 01, Central Gospel, Os Sinais do Fim dos Tempos 2Tr24.pptx
Slides Lição 01, Central Gospel, Os Sinais do Fim dos Tempos 2Tr24.pptx
 
AVALIAÇÃO INTEGRADA 1ª SÉRIE - EM - 1º BIMESTRE ITINERÁRIO CIÊNCIAS DAS NATUREZA
AVALIAÇÃO INTEGRADA 1ª SÉRIE - EM - 1º BIMESTRE ITINERÁRIO CIÊNCIAS DAS NATUREZAAVALIAÇÃO INTEGRADA 1ª SÉRIE - EM - 1º BIMESTRE ITINERÁRIO CIÊNCIAS DAS NATUREZA
AVALIAÇÃO INTEGRADA 1ª SÉRIE - EM - 1º BIMESTRE ITINERÁRIO CIÊNCIAS DAS NATUREZA
 
A Inteligência Artificial na Educação e a Inclusão Linguística
A Inteligência Artificial na Educação e a Inclusão LinguísticaA Inteligência Artificial na Educação e a Inclusão Linguística
A Inteligência Artificial na Educação e a Inclusão Linguística
 
Slides Lição 3, CPAD, O Céu - o Destino do Cristão, 2Tr24,.pptx
Slides Lição 3, CPAD, O Céu - o Destino do Cristão, 2Tr24,.pptxSlides Lição 3, CPAD, O Céu - o Destino do Cristão, 2Tr24,.pptx
Slides Lição 3, CPAD, O Céu - o Destino do Cristão, 2Tr24,.pptx
 
Prova de Empreendedorismo com gabarito.pptx
Prova de Empreendedorismo com gabarito.pptxProva de Empreendedorismo com gabarito.pptx
Prova de Empreendedorismo com gabarito.pptx
 
QUIZ – GEOGRAFIA - 8º ANO - PROVA MENSAL.pptx
QUIZ – GEOGRAFIA - 8º ANO - PROVA MENSAL.pptxQUIZ – GEOGRAFIA - 8º ANO - PROVA MENSAL.pptx
QUIZ – GEOGRAFIA - 8º ANO - PROVA MENSAL.pptx
 
Projeto leitura HTPC abril - FORMAÇÃP SOBRE O PROJETO
Projeto leitura HTPC abril - FORMAÇÃP SOBRE O PROJETOProjeto leitura HTPC abril - FORMAÇÃP SOBRE O PROJETO
Projeto leitura HTPC abril - FORMAÇÃP SOBRE O PROJETO
 
Mini livro sanfona - Diga não ao bullying
Mini livro sanfona - Diga não ao  bullyingMini livro sanfona - Diga não ao  bullying
Mini livro sanfona - Diga não ao bullying
 
Sistema de Bibliotecas UCS - A descoberta da terra
Sistema de Bibliotecas UCS  - A descoberta da terraSistema de Bibliotecas UCS  - A descoberta da terra
Sistema de Bibliotecas UCS - A descoberta da terra
 
Slides Lição 3, Betel, Ordenança para congregar e prestar culto racional, 2Tr...
Slides Lição 3, Betel, Ordenança para congregar e prestar culto racional, 2Tr...Slides Lição 3, Betel, Ordenança para congregar e prestar culto racional, 2Tr...
Slides Lição 3, Betel, Ordenança para congregar e prestar culto racional, 2Tr...
 

Java Básico: Guia Completo

  • 2. Sumário I Sobre essa Apostila 3 II Informações Básicas 5 III GNU Free Documentation License 10 IV Java Básico 19 1 O que é Java 20 2 Plano de ensino 21 2.1 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.2 Público Alvo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.3 Pré-requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.4 Descrição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.5 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.6 Cronograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.7 Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.8 Avaliação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.9 Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3 Introdução 24 3.1 Histórico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.1.1 História . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.2 Instalação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.2.1 Instalação através de pacote binário . . . . . . . . . . . . . . . . . . . . . . . 25 3.2.2 Distribuições derivadas do Debian . . . . . . . . . . . . . . . . . . . . . . . . 26 3.3 Introdução à Linguagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.4 Tipos de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 4 Conceitos Básicos 32 4.1 Classes, Objetos, Atributos e Métodos . . . . . . . . . . . . . . . . . . . . . . . . . . 32 4.1.1 Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 4.1.2 Objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 4.1.3 Atributos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 4.1.4 Atributos estáticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 1
  • 3. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF 4.1.5 Métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 4.2 Estruturas de Controle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 4.2.1 Estruturas de Repetição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 4.2.2 Estruturas Condicionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 4.3 E/S Teclado e Arquivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 4.3.1 E/S Teclado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 4.3.2 E/S Arquivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 4.4 Vetores e Cadeia de Caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 4.4.1 Vetores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 4.4.2 Cadeia de Caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 5 Conceitos Avançados 57 5.1 Tratamento de erros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 5.2 Encapsulamento, Herança e Polimorfismo . . . . . . . . . . . . . . . . . . . . . . . . 59 5.2.1 Encapsulamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 5.2.2 Herança . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 5.2.3 Polimorfismo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 5.3 Interfaces Gráficas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 5.3.1 Gerência de Janelas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 5.4 Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 2
  • 4. Parte I Sobre essa Apostila 3
  • 5. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Conteúdo O conteúdo dessa apostila é fruto da compilação de diversos materiais livres publicados na in- ternet, disponíveis em diversos sites ou originalmente produzido no CDTC (http://www.cdtc.org.br.) O formato original deste material bem como sua atualização está disponível dentro da licença GNU Free Documentation License, cujo teor integral encontra-se aqui reproduzido na seção de mesmo nome, tendo inclusive uma versão traduzida (não oficial). A revisão e alteração vem sendo realizada pelo CDTC (suporte@cdtc.org.br) desde outubro de 2006. Críticas e sugestões construtivas serão 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 Difusão de Tecnologia e Conhecimento que vêm sendo realizado pelo ITI (Instituto Nacional de Tecnologia da Informação) 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 país. Informações adicionais podem ser obtidas através do email ouvidoria@cdtc.org.br, ou da home page da entidade, através da URL http://www.cdtc.org.br. Garantias O material contido nesta apostila é isento de garantias e o seu uso é de inteira responsabi- lidade do usuário/leitor. Os autores, bem como o ITI e seus parceiros, não se responsabilizam direta ou indiretamente por qualquer prejuízo oriundo da utilização do material aqui contido. Licença Copyright ©2006, Instituto Nacional de Tecnologia da Informação (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 APOS- TILA. A copy of the license is included in the section entitled GNU Free Documentation License. 4
  • 7. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Sobre o CDTC Objetivo Geral O Projeto CDTC visa a promoção e o desenvolvimento de ações que incentivem a dissemina- ção de soluções que utilizem padrões abertos e não proprietários de tecnologia, em proveito do desenvolvimento social, cultural, político, tecnológico e econômico da sociedade brasileira. Objetivo Específico Auxiliar o Governo Federal na implantação do plano nacional de software não-proprietário e de código fonte aberto, identificando e mobilizando grupos de formadores de opinião dentre os servidores públicos e agentes políticos da União Federal, estimulando e incentivando o mercado nacional a adotar novos modelos de negócio da tecnologia da informação e de novos negócios de comunicação com base em software não-proprietário e de código fonte aberto, oferecendo treinamento específico para técnicos, profissionais de suporte e funcionários públicos usuários, criando grupos de funcionários públicos que irão treinar outros funcionários públicos e atuar como incentivadores e defensores dos produtos de software não proprietários e código fonte aberto, ofe- recendo conteúdo técnico on-line para serviços de suporte, ferramentas para desenvolvimento de produtos de software não proprietários e do seu código fonte livre, articulando redes de terceiros (dentro e fora do governo) fornecedoras de educação, pesquisa, desenvolvimento e teste de pro- dutos de software livre. Guia do aluno Neste guia, você terá reunidas uma série de informações importantes para que você comece seu curso. São elas: • Licenças para cópia de material disponível; • Os 10 mandamentos do aluno de Educação a Distância; • Como participar dos foruns e da wikipédia; • Primeiros passos. É muito importante que você entre em contato com TODAS estas informações, seguindo o roteiro acima. Licença Copyright ©2006, Instituto Nacional de Tecnologia da Informação (cdtc@iti.gov.br). 6
  • 8. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos da Licença de Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior públicada pela Free Software Foundation; com o Capitulo Invariante SOBRE ESSA APOSTILA. Uma cópia da licença está inclusa na seção entitulada "Licença de Docu- mentação Livre GNU". Os 10 mandamentos do aluno de educação online • 1. Acesso à Internet: ter endereço eletrônico, um provedor e um equipamento adequado é pré-requisito para a participação nos cursos a distância; • 2. Habilidade e disposição para operar programas: ter conhecimentos básicos de Informá- tica é necessário para poder executar as tarefas; • 3. Vontade para aprender colaborativamente: interagir, ser participativo no ensino a distân- cia conta muitos pontos, pois irá colaborar para o processo ensino-aprendizagem pessoal, dos colegas e dos professores; • 4. Comportamentos compatíveis com a etiqueta: mostrar-se interessado em conhecer seus colegas de turma respeitando-os e se fazendo ser respeitado pelos mesmos; • 5. Organização pessoal: planejar e organizar tudo é fundamental para facilitar a sua revisão e a sua recuperação de materiais; • 6. Vontade para realizar as atividades no tempo correto: anotar todas as suas obrigações e realizá-las em tempo real; • 7. Curiosidade e abertura para inovações: aceitar novas idéias e inovar sempre; • 8. Flexibilidade e adaptação: requisitos necessário à mudança tecnológica, aprendizagens e descobertas; • 9. Objetividade em sua comunicação: comunicar-se de forma clara, breve e transparente é ponto - chave na comunicação pela Internet; • 10. Responsabilidade: ser responsável por seu próprio aprendizado. O ambiente virtual não controla a sua dedicação, mas reflete os resultados do seu esforço e da sua colaboração. Como participar dos fóruns e Wikipédia Você tem um problema e precisa de ajuda? Podemos te ajudar de 2 formas: A primeira é o uso dos fóruns de notícias e de dúvidas gerais que se distinguem pelo uso: . O fórum de notícias tem por objetivo disponibilizar um meio de acesso rápido a informações que sejam pertinentes ao curso (avisos, notícias). As mensagens postadas nele são enviadas a 7
  • 9. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF todos participantes. Assim, se o monitor ou algum outro participante tiver uma informação que interesse ao grupo, favor postá-la aqui. Porém, se o que você deseja é resolver alguma dúvida ou discutir algum tópico específico do curso. É recomendado que você faça uso do Fórum de dúvidas gerais que lhe dá recursos mais efetivos para esta prática. . O fórum de dúvidas gerais tem por objetivo disponibilizar um meio fácil, rápido e interativo para solucionar suas dúvidas e trocar experiências. As mensagens postadas nele são enviadas a todos participantes do curso. Assim, fica muito mais fácil obter respostas, já que todos podem ajudar. Se você receber uma mensagem com algum tópico que saiba responder, não se preocupe com a formalização ou a gramática. Responda! E não se esqueça de que antes de abrir um novo tópico é recomendável ver se a sua pergunta já foi feita por outro participante. A segunda forma se dá pelas Wikis: . Uma wiki é uma página web que pode ser editada colaborativamente, ou seja, qualquer par- ticipante pode inserir, editar, apagar textos. As versões antigas vão 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 "Wikipé- dia", uma experiência grandiosa de construção de uma enciclopédia de forma colaborativa, por pessoas de todas as partes do mundo. Acesse-a em português pelos links: • Página principal da Wiki - http://pt.wikipedia.org/wiki/ Agradecemos antecipadamente a sua colaboração com a aprendizagem do grupo! Primeiros Passos Para uma melhor aprendizagem é recomendável que você siga os seguintes passos: • Ler o Plano de Ensino e entender a que seu curso se dispõe a ensinar; • Ler a Ambientação do Moodle para aprender a navegar neste ambiente e se utilizar das ferramentas básicas do mesmo; • Entrar nas lições seguindo a seqüência descrita no Plano de Ensino; • Qualquer dúvida, reporte ao Fórum de Dúvidas Gerais. Perfil do Tutor Segue-se uma descrição do tutor ideal, baseada no feedback de alunos e de tutores. O tutor ideal é um modelo de excelência: é consistente, justo e profissional nos respectivos valores e atitudes, incentiva mas é honesto, imparcial, amável, positivo, respeitador, aceita as idéias dos estudantes, é paciente, pessoal, tolerante, apreciativo, compreensivo e pronto a ajudar. 8
  • 10. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF A classificação por um tutor desta natureza proporciona o melhor feedback possível, é crucial, e, para a maior parte dos alunos, constitui o ponto central do processo de aprendizagem.’ Este tutor ou instrutor: • fornece explicações claras acerca do que ele espera e do estilo de classificação que irá utilizar; • gosta que lhe façam perguntas adicionais; • identifica as nossas falhas, mas corrige-as amavelmente’, diz um estudante, ’e explica por- que motivo a classificação foi ou não foi atribuída’; • tece comentários completos e construtivos, mas de forma agradável (em contraste com um reparo de um estudante: ’os comentários deixam-nos com uma sensação de crítica, de ameaça e de nervossismo’) • dá uma ajuda complementar para encorajar um estudante em dificuldade; • esclarece pontos que não foram entendidos, ou corretamente aprendidos anteriormente; • ajuda o estudante a alcançar os seus objetivos; • é flexível quando necessário; • mostra um interesse genuíno em motivar os alunos (mesmo os principiantes e, por isso, talvez numa fase menos interessante para o tutor); • escreve todas as correções de forma legível e com um nível de pormenorização adequado; • acima de tudo, devolve os trabalhos rapidamente; 9
  • 11. Parte III GNU Free Documentation License 10
  • 12. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF (Traduzido pelo João S. O. Bueno através do CIPSGA em 2001) Esta é uma tradução não oficial da Licença de Documentação Livre GNU em Português Brasi- leiro. Ela não é publicada pela Free Software Foundation, e não se aplica legalmente a distribuição de textos que usem a GFDL - apenas o texto original em Inglês da GNU FDL faz isso. Entretanto, nós esperamos que esta tradução ajude falantes de português a entenderem melhor a GFDL. This is an unofficial translation of the GNU General Documentation License into Brazilian Por- tuguese. It was not published by the Free Software Foundation, and does not legally state the distribution terms for software that uses the GFDL–only the original English text of the GFDL does that. However, we hope that this translation will help Portuguese speakers understand the GFDL better. Licença de Documentação Livre GNU Versão 1.1, Março 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 cópias exatas deste documento de licença, mas não é permitido alterá-lo. INTRODUÇÃO O propósito desta Licença é 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 modificações, comercialmente ou não. Secundariamente, esta Licença mantém para o autor e editor uma forma de ter crédito por seu trabalho, sem ser considerado responsável pelas modificações feitas por terceiros. Esta Licença é um tipo de "copyleft"("direitos revertidos"), o que significa que derivações do documento precisam ser livres no mesmo sentido. Ela complementa a GNU Licença Pública Ge- ral (GNU GPL), que é um copyleft para software livre. Nós fizemos esta Licença para que seja usada em manuais de software livre, por que software livre precisa de documentação livre: um programa livre deve ser acompanhado de manuais que provenham as mesmas liberdades que o software possui. Mas esta Licença não 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. Nós recomendamos esta Licença prin- cipalmente para trabalhos cujo propósito seja de introdução ou referência. APLICABILIDADE E DEFINIÇÕES Esta Licença se aplica a qualquer manual ou outro texto que contenha uma nota colocada pelo detentor dos direitos autorais dizendo que ele pode ser distribuído sob os termos desta Licença. O "Documento"abaixo se refere a qualquer manual ou texto. Qualquer pessoa do público é um 11
  • 13. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF licenciado e é referida como "você". Uma "Versão Modificada"do Documento se refere a qualquer trabalho contendo o documento ou uma parte dele, quer copiada exatamente, quer com modificações e/ou traduzida em outra língua. Uma "Seção Secundária"é um apêndice ou uma seção inicial do Documento que trata ex- clusivamente da relação dos editores ou dos autores do Documento com o assunto geral do Documento (ou assuntos relacionados) e não contém nada que poderia ser incluído diretamente nesse assunto geral (Por exemplo, se o Documento é em parte um livro texto de matemática, a Seção Secundária pode não explicar nada de matemática). Essa relação poderia ser uma questão de ligação histórica com o assunto, ou matérias relaci- onadas, ou de posições legais, comerciais, filosóficas, éticas ou políticas relacionadas ao mesmo. As "Seções Invariantes"são certas Seções Secundárias cujos títulos são designados, como sendo de Seções Invariantes, na nota que diz que o Documento é publicado sob esta Licença. Os "Textos de Capa"são certos trechos curtos de texto que são listados, como Textos de Capa Frontal ou Textos da Quarta Capa, na nota que diz que o texto é publicado sob esta Licença. Uma cópia "Transparente"do Documento significa uma cópia que pode ser lida automatica- mente, representada num formato cuja especificação esteja disponível ao público geral, cujos conteúdos possam ser vistos e editados diretamente e sem mecanismos especiais com editores de texto genéricos ou (para imagens compostas de pixels) programas de pintura genéricos ou (para desenhos) por algum editor de desenhos grandemente difundido, e que seja passível de servir como entrada a formatadores de texto ou para tradução automática para uma variedade de formatos que sirvam de entrada para formatadores de texto. Uma cópia feita em um formato de arquivo outrossim Transparente cuja constituição tenha sido projetada para atrapalhar ou de- sencorajar modificações subsequentes pelos leitores não é Transparente. Uma cópia que não é "Transparente"é chamada de "Opaca". Exemplos de formatos que podem ser usados para cópias Transparentes incluem ASCII sim- ples sem marcações, formato de entrada do Texinfo, formato de entrada do LaTex, SGML ou XML usando uma DTD disponibilizada publicamente, e HTML simples, compatível com os padrões, e projetado para ser modificado por pessoas. Formatos opacos incluem PostScript, PDF, formatos proprietários que podem ser lidos e editados apenas com processadores de texto proprietários, SGML ou XML para os quais a DTD e/ou ferramentas de processamento e edição não estejam disponíveis para o público, e HTML gerado automaticamente por alguns editores de texto com finalidade apenas de saída. A "Página do Título"significa, para um livro impresso, a página do título propriamente dita, mais quaisquer páginas subsequentes quantas forem necessárias para conter, de forma legível, o material que esta Licença requer que apareça na página do título. Para trabalhos que não tenham uma página do título, "Página do Título"significa o texto próximo da aparição mais proe- minente do título do trabalho, precedendo o início do corpo do texto. 12
  • 14. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF FAZENDO CÓPIAS EXATAS Você pode copiar e distribuir o Documento em qualquer meio, de forma comercial ou não comercial, desde que esta Licença, as notas de copyright, e a nota de licença dizendo que esta Licença se aplica ao documento estejam reproduzidas em todas as cópias, e que você não acres- cente nenhuma outra condição, quaisquer que sejam, às desta Licença. Você não pode usar medidas técnicas para obstruir ou controlar a leitura ou confecção de cópias subsequentes das cópias que você fizer ou distribuir. Entretanto, você pode aceitar com- pensação em troca de cópias. Se você distribuir uma quantidade grande o suficiente de cópias, você também precisa respeitar as condições da seção 3. Você também pode emprestar cópias, sob as mesmas condições colocadas acima, e também pode exibir cópias publicamente. FAZENDO CÓPIAS EM QUANTIDADE Se você publicar cópias do Documento em número maior que 100, e a nota de licença do Documento obrigar Textos de Capa, você precisará incluir as cópias 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 trás. Ambas as capas também precisam identificar clara e legivelmente você como o editor dessas cópias. A capa da frente precisa apresentar o título com- pleto com todas as palavras do título igualmente proeminentes e visíveis. Você pode adicionar outros materiais às capas. Fazer cópias com modificações limitadas às capas, tanto quanto estas preservem o título do documento e satisfaçam a essas condições, pode ser tratado como cópia exata em outros aspectos. Se os textos requeridos em qualquer das capas for muito volumoso para caber de forma legível, você deve colocar os primeiros (tantos quantos couberem de forma razoável) na capa verdadeira, e continuar os outros nas páginas adjacentes. Se você publicar ou distribuir cópias Opacas do Documento em número maior que 100, você precisa ou incluir uma cópia Transparente que possa ser lida automaticamente com cada cópia Opaca, ou informar, em ou com, cada cópia Opaca a localização de uma cópia Transparente completa do Documento acessível publicamente em uma rede de computadores, à qual o público usuário de redes tenha acesso a download gratuito e anônimo utilizando padrões públicos de protocolos de rede. Se você utilizar o segundo método, você precisará tomar cuidados razoavel- mente prudentes, quando iniciar a distribuição de cópias Opacas em quantidade, para assegurar que esta cópia Transparente vai permanecer acessível desta forma na localização especificada por pelo menos um ano depois da última vez em que você distribuir uma cópia Opaca (direta- mente ou através de seus agentes ou distribuidores) daquela edição para o público. É pedido, mas não é obrigatório, que você contate os autores do Documento bem antes de redistribuir qualquer grande número de cópias, para lhes dar uma oportunidade de prover você com uma versão atualizada do Documento. 13
  • 15. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF MODIFICAÇÕES Você pode copiar e distribuir uma Versão Modificada do Documento sob as condições das se- ções 2 e 3 acima, desde que você publique a Versão Modificada estritamente sob esta Licença, com a Versão Modificada tomando o papel do Documento, de forma a licenciar a distribuição e modificação da Versão Modificada para quem quer que possua uma cópia da mesma. Além disso, você precisa fazer o seguinte na versão modificada: A. Usar na Página de Título (e nas capas, se houver alguma) um título distinto daquele do Do- cumento, e daqueles de versões anteriores (que deveriam, se houvesse algum, estarem listados na seção "Histórico do Documento"). Você pode usar o mesmo título de uma versão anterior se o editor original daquela versão lhe der permissão; B. Listar na Página de Título, como autores, uma ou mais das pessoas ou entidades responsá- veis pela autoria das modificações na Versão Modificada, conjuntamente com pelo menos cinco dos autores principais do Documento (todos os seus autores principais, se ele tiver menos que cinco); C. Colocar na Página de Título o nome do editor da Versão Modificada, como o editor; D. Preservar todas as notas de copyright do Documento; E. Adicionar uma nota de copyright apropriada para suas próprias modificações adjacente às outras notas de copyright; F. Incluir, imediatamente depois das notas de copyright, uma nota de licença dando ao público o direito de usar a Versão Modificada sob os termos desta Licença, na forma mostrada no tópico abaixo; G. Preservar nessa nota de licença as listas completas das Seções Invariantes e os Textos de Capa requeridos dados na nota de licença do Documento; H. Incluir uma cópia inalterada desta Licença; I. Preservar a seção entitulada "Histórico", e seu título, e adicionar à mesma um item dizendo pelo menos o título, ano, novos autores e editor da Versão Modificada como dados na Página de Título. Se não houver uma sessão denominada "Histórico"no Documento, criar uma dizendo o título, ano, autores, e editor do Documento como dados em sua Página de Título, então adicionar um item descrevendo a Versão Modificada, tal como descrito na sentença anterior; J. Preservar o endereço de rede, se algum, dado no Documento para acesso público a uma cópia Transparente do Documento, e da mesma forma, as localizações de rede dadas no Docu- mento para as versões anteriores em que ele foi baseado. Elas podem ser colocadas na seção "Histórico". Você pode omitir uma localização na rede para um trabalho que tenha sido publicado pelo menos quatro anos antes do Documento, ou se o editor original da versão a que ela se refira der sua permissão; K. Em qualquer seção entitulada "Agradecimentos"ou "Dedicatórias", preservar o título da 14
  • 16. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF seção e preservar a seção em toda substância e fim de cada um dos agradecimentos de contri- buidores e/ou dedicatórias dados; L. Preservar todas as Seções Invariantes do Documento, inalteradas em seus textos ou em seus títulos. Números de seção ou equivalentes não são considerados parte dos títulos da seção; M. Apagar qualquer seção entitulada "Endossos". Tal sessão não pode ser incluída na Versão Modificada; N. Não reentitular qualquer seção existente com o título "Endossos"ou com qualquer outro título dado a uma Seção Invariante. Se a Versão Modificada incluir novas seções iniciais ou apêndices que se qualifiquem como Seções Secundárias e não contenham nenhum material copiado do Documento, você pode optar por designar alguma ou todas aquelas seções como invariantes. Para fazer isso, adicione seus títulos à lista de Seções Invariantes na nota de licença da Versão Modificada. Esses títulos preci- sam ser diferentes de qualquer outro título de seção. Você pode adicionar uma seção entitulada "Endossos", desde que ela não contenha qual- quer coisa além de endossos da sua Versão Modificada por várias pessoas ou entidades - por exemplo, declarações de revisores ou de que o texto foi aprovado por uma organização como a definição oficial de um padrão. 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 final da lista de Textos de Capa na Versão Modificada. 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ê não pode adicionar um outro; mas você pode trocar o antigo, com permissão explícita do editor anterior que adicionou a passagem antiga. O(s) autor(es) e editor(es) do Documento não dão permissão por esta Licença para que seus nomes sejam usados para publicidade ou para assegurar ou implicar endossamento de qualquer Versão Modificada. COMBINANDO DOCUMENTOS Você pode combinar o Documento com outros documentos publicados sob esta Licença, sob os termos definidos na seção 4 acima para versões modificadas, desde que você inclua na com- binação todas as Seções Invariantes de todos os documentos originais, sem modificações, e liste todas elas como Seções Invariantes de seu trabalho combinado em sua nota de licença. O trabalho combinado precisa conter apenas uma cópia desta Licença, e Seções Invariantes Idênticas com multiplas ocorrências podem ser substituídas por apenas uma cópia. Se houver múltiplas Seções Invariantes com o mesmo nome mas com conteúdos distintos, faça o título de 15
  • 17. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF cada seção único adicionando ao final do mesmo, em parênteses, o nome do autor ou editor origianl daquela seção, se for conhecido, ou um número que seja único. Faça o mesmo ajuste nos títulos de seção na lista de Seções Invariantes nota de licença do trabalho combinado. Na combinação, você precisa combinar quaisquer seções entituladas "Histórico"dos diver- sos documentos originais, formando uma seção entitulada "Histórico"; da mesma forma combine quaisquer seções entituladas "Agradecimentos", ou "Dedicatórias". Você precisa apagar todas as seções entituladas como "Endosso". COLETÂNEAS DE DOCUMENTOS Você pode fazer uma coletânea consitindo do Documento e outros documentos publicados sob esta Licença, e substituir as cópias individuais desta Licença nos vários documentos com uma única cópia incluida na coletânea, desde que você siga as regras desta Licença para cópia exata de cada um dos Documentos em todos os outros aspectos. Você pode extrair um único documento de tal coletânea, e distribuí-lo individualmente sob esta Licença, desde que você insira uma cópia desta Licença no documento extraído, e siga esta Licença em todos os outros aspectos relacionados à cópia exata daquele documento. AGREGAÇÃO COM TRABALHOS INDEPENDENTES Uma compilação do Documento ou derivados dele com outros trabalhos ou documentos se- parados e independentes, em um volume ou mídia de distribuição, não conta como uma Ver- são Modificada do Documento, desde que nenhum copyright de compilação seja reclamado pela compilação. Tal compilação é chamada um "agregado", e esta Licença não se aplica aos outros trabalhos auto-contidos compilados junto com o Documento, só por conta de terem sido assim compilados, e eles não são trabalhos derivados do Documento. Se o requerido para o Texto de Capa na seção 3 for aplicável a essas cópias do Documento, então, 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. Senão eles precisarão aparecer nas capas de todo o agregado. TRADUÇÃO Tradução é considerada como um tipo de modificação, então você pode distribuir traduções do Documento sob os termos da seção 4. A substituição de Seções Invariantes por traduções requer uma permissão especial dos detentores do copyright das mesmas, mas você pode incluir traduções de algumas ou de todas as Seções Invariantes em adição às versões orignais dessas Seções Invariantes. Você pode incluir uma tradução desta Licença desde que você também in- clua a versão original em Inglês desta Licença. No caso de discordância entre a tradução e a 16
  • 18. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF versão original em Inglês desta Licença, a versão original em Inglês prevalecerá. TÉRMINO Você não pode copiar, modificar, sublicenciar, ou distribuir o Documento exceto como expres- samente especificado sob esta Licença. Qualquer outra tentativa de copiar, modificar, sublicen- ciar, ou distribuir o Documento é nula, e resultará automaticamente no término de seus direitos sob esta Licença. Entretanto, terceiros que tenham recebido cópias, ou direitos de você sob esta Licença não terão suas licenças terminadas, tanto quanto esses terceiros permaneçam em total acordo com esta Licença. REVISÕES FUTURAS DESTA LICENÇA A Free Software Foundation pode publicar novas versões revisadas da Licença de Documen- tação Livre GNU de tempos em tempos. Tais novas versões serão similares em espirito à versão presente, mas podem diferir em detalhes ao abordarem novos porblemas e preocupações. Veja http://www.gnu.org/copyleft/. A cada versão da Licença é dado um número de versão distinto. Se o Documento especificar que uma versão particular desta Licença "ou qualquer versão posterior"se aplica ao mesmo, você tem a opção de seguir os termos e condições daquela versão específica, ou de qualquer versão posterior que tenha sido publicada (não como rascunho) pela Free Software Foundation. Se o Documento não especificar um número de Versão desta Licença, você pode escolher qualquer versão já publicada (não como rascunho) pela Free Software Foundation. ADENDO: Como usar esta Licença para seus documentos Para usar esta Licença num documento que você escreveu, inclua uma cópia desta Licença no documento e ponha as seguintes notas de copyright e licenças logo após a página de título: Copyright (c) ANO SEU NOME. É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos da Licença de Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior publicada pela Free Soft- ware Foundation; com as Seções Invariantes sendo LISTE SEUS TÍTULOS, com os Textos da Capa da Frente sendo LISTE, e com os Textos da Quarta-Capa sendo LISTE. Uma cópia da li- cença está inclusa na seção entitulada "Licença de Documentação Livre GNU". Se você não tiver nenhuma Seção Invariante, escreva "sem Seções Invariantes"ao invés de dizer quais são invariantes. Se você não tiver Textos de Capa da Frente, escreva "sem Textos de Capa da Frente"ao invés de "com os Textos de Capa da Frente sendo LISTE"; o mesmo para os Textos da Quarta Capa. Se o seu documento contiver exemplos não triviais de código de programas, nós recomenda- mos a publicação desses exemplos em paralelo sob a sua escolha de licença de software livre, 17
  • 19. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF tal como a GNU General Public License, para permitir o seu uso em software livre. 18
  • 21. Capítulo 1 O que é Java Java é uma linguagem de programação orientada a objetos, segura, robusta, distribuída, mul- tiplataforma e de alto desempenho. Esta linguagem possui estrutura muito semelhante à das linguagens C e C++, muito embora tenham filosofias diferentes. São esses e outros motivos que a tornam uma linguagem tão atraente tanto para usuários e programadores experientes quanto para os iniciantes. Este curso, será baseado na distribuição Debian e possibilitará ao usuário aprender os con- ceitos, estruturas, declarações, métodos e funções básicas dessa linguagem. Além da criação de aplicativos e programas que irão inserir o usuário dentro do universo JAVA. 20
  • 22. Capítulo 2 Plano de ensino 2.1 Objetivo Qualificar técnicos e programadores na linguagem de programação Java. 2.2 Público Alvo Técnicos e Programadores que desejam trabalhar com Java. 2.3 Pré-requisitos Os usuários deverão ser, necessariamente, indicados por empresas públicas e ter conheci- mento básico acerca da lógica de programação. 2.4 Descrição O curso será realizado na modalidade Educação a Distância e utilizará a Plataforma Moodle como ferramenta de aprendizagem. Ele será dividido em tópicos e cada um deles é composto por um conjunto de atividades (lições, fóruns, glossários, questionários e outros) que deverão ser executadas de acordo com as instruções fornecidas. O material didático está disponível on-line de acordo com as datas pré-estabelecidas em cada tópico. A versão adotada do Java é a 1.5.0, caso possua outra versão instalada poderão ocorrer poucas diferenças. Todo o material está no formato de lições e estará disponível ao longo do curso. As lições poderão ser acessadas quantas vezes forem necessárias. Aconselhamos a leitura de "Ambien- tação do Moodle", para que você conheça o produto de Ensino a Distância, evitando dificuldades advindas do "desconhecimento"sobre o mesmo. Ao final de cada lição haverá uma questão referente módulo estudado anteriormente que também poderá conter perguntas sobre os textos indicados caso existam. No final do curso haverá uma prova de Avaliação de Aprendizagem no formato da construção de um programa. Utilize o material de cada semana e os exemplos disponibilizados para se preparar para prova. As lições contém o contéudo principal. Elas poderão ser acessadas quantas vezes forem ne- cessárias, desde que esteja dentro da semana programada. Ao final de uma lição, você receberá uma nota de acordo com o seu desempenho. Responda com atenção às perguntas de cada lição, 21
  • 23. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF pois elas serão consideradas na sua nota final. Caso sua nota numa determinada lição for menor do que 6.0, sugerimos que você faça novamente esta lição. Os instrutores estarão a sua disposição ao longo de todo curso. Qualquer dúvida deve ser disponibilizada no fórum ou enviada por e-mail. Diariamente os monitores darão respostas e esclarecimentos. 2.5 Metodologia O curso está dividido da seguinte maneira: 2.6 Cronograma Semana 1 - Introdução • Histórico; • Instalação; • Introdução à linguagem; • Tipos de Dados. Semana 2 - Conceitos Básicos • Classe, Objetos, Atributos e Métodos; • Estruturas de Controle; • E/S Teclado e Arquivos; • Vetores e Cadeia de Caracteres. Semana 3 - Conceitos Avançados • Tratamento de Erros; • Encapsulamento, Herança e Polimorfismo; • Interfaces Gráficas; • Threads; • Avaliação de Aprendizagem. 22
  • 24. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF 2.7 Programa O curso de Java oferecerá o seguinte conteúdo: • Introdução • Conceitos Básicos e Avançados de Orientação à Objeto 2.8 Avaliação Toda a avaliação será feita on-line. Aspectos a serem considerados na avaliação: • Iniciativa e autonomia no processo de aprendizagem e de produção de conhecimento; • Capacidade de pesquisa e abordagem criativa na solução dos problemas apresentados. Instrumentos de avaliação: • Participação ativa nas atividades programadas; • Avaliação de Aprendizagem ao final do curso; • O participante fará várias avaliações referente ao conteúdo do curso. Para a aprovação e obtenção do certificado o participante deverá obter nota final maior ou igual a 6.0 de acordo com a fórmula abaixo: • Nota Final = ((ML x 7) + (AF x 3)) / 10 • AF = Nota da Avaliação de Aprendizagem • ML = Média aritmética das Avaliações de Lições 2.9 Bibliografia • Site official: http://www.sun.com • Guias em Português: http://br.sun.com, http://www.javafree.org, http://www.portaljava.com.br • Guias extras: Pinheiro, Francisco A. C.Fundamentos de Computação e Orientação a Obje- tos Usando Java, LTC - Livros Técnicos e Científicos 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
  • 25. Capítulo 3 Introdução Apresentação geral e histórico da linguagem Java 3.1 Histórico O que é Java? Java é uma linguagem de programação orientada à objetos resultado de um consistente de- senvolvimento e trabalho de pesquisa realizado por projetistas da Sun Microsystems, que intro- duziu a linguagem no mercado em 1995. Mais do que uma simples linguagem de programação Java é um ambiente de desenvolvimento e execução de programas, uma plataforma segura e capaz proporcionar as facilidades da orientação à objetos aliadas à uma portabilidade instrínseca que facilita a sua integração aos diversos ambientes existentes. 3.1.1 História Um grupo de engenheiros da Sun Microsystems denominado Green, em 1991, foram encar- regados de criar uma nova geração de computadores inteligentes, simples e portáteis capazes de se comunicar entre si, ou seja, com uma capacidade de uso potencialmente alta. Para tal, era necessário que fosse utilizada uma plataforma de desenvolvimento em que os softwares pudes- sem ser portáveis 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 orientação à objeto introduzidas pelo C++ não foram suficientes para alcançar tudo aquilo que o grupo almejava. Foi então que James Gosling, coordenador do projeto Green, optou pela criação de uma nova linguagem de programação que fosse realmente portátil, simples e interpretada. Assim surgiu o Oak(carvalho em inglês), que em 1995 após várias melhorias muda de nome, por problemas de direitos autorais, e passa a ser chamado de Java. Hoje, Java não é utilizada em eletrodomésticos(pelo menos comercialmente). Ao invés disso, juntamente com o crescimento da Internet e o desenvolvimento dos applets(mini-aplicativos)ela se tornou um das linguagens de programação mais utilizadas no mundo. As especificações da linguagem Java são mantidas uniformes através de um processo comu- nitário gerido pela Sun Microsystems, que é também detentora da marca registrada com o nome da linguagem. 24
  • 26. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Características principais da linguagem Java são: • Orientada a objeto por basear-se nos quatro princípios do paradigma da programação que são: • Abstração, encapsulamento, herança e polimorfismo; • Neutra porque a Máquina Virtual Java (JVM) pode ser implementada em qualquer plata- forma; • Distribuída por suportar vários tipos de conectividade em aplicações distribuídas na rede; • Sem ponteiros pois a JVM possui o garbage collector capaz de gerenciar automática e dinâmicamente a memória; • Segura protege as "máquinas-alvo"contra quaisquer operações em seus sistema de arqui- vos por aplicações obtidas pela rede, já que os applets são desenhados para existirem na máquina cliente somente em tempo de execução. A maioria dessas características da linguagem serão desenvolvidas durante o curso. 3.2 Instalação Temos à nossa disposição uma variedade de métodos de instalação do Java, podendo variar dependendo da distribuição GNU/Linux sendo utilizada. É importante notar que diferentes métodos de instalação poderão prover versões diferentes do software. Neste curso, por exemplo, utilizaremos a versão 1.5.0, o pacote disponível no repositório testing/non-free do Debian. Vale observar que o pacote do Java se encontra na seção non-free, o que indica que ele é considerado não-livre. Isto ocorre porque ele possui uma licença que não é considerada livre pelos padrões do Debian. Podemos diferenciar os métodos de instalação basicamente entre aqueles que utilizam pa- cotes pré-compilados da própria distribuição, ou aqueles que utilizam um binário genérico para Linux, provido pela própria Sun Microsystems. Distribuições derivadas do Debian utilizam pacotes nativos às distribuições (.deb), e para instalá-los simplesmente os descompactam e movem os arquivos para os lugares apropriados. Já o pacote binário da Sun deverá ser baixado do site do fabricante, e prosseguiremos com a instalação do mesmo. 3.2.1 Instalação através de pacote binário O primeiro método que iremos abordar quanto à instalação do Java será o da instalação do pacote binário provido pela Sun. Para atingir sucesso por esse método de instalação devemos saber como obter esse pacote e instalá-lo, além de adicionar entradas apropriadas nos arquivos de configuração do sistema. O pacote binário do Java pode ser obtido a partir do site da Sun, na página de downloads do Java SE( http://java.sun.com/javase/downloads/index_jdk5.jsp). Nesta página, podemos observar que existem várias versões a serem baixadas, porém a que (provavelmente) se adequa à sua necessidade é a JDK 5.0 Update 11, que inclui o Runtime Environment para o Java (JRE) e também o development kit (JDK) básico para o Java. 25
  • 27. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Clicando no referido link, você deverá aceitar a licença e baixar o pacote apropriado para o seu sistema operacional, que, no caso do autor, é Linux self-extracting file para arquiteturas de 32 bits (para 64 bits, o pacote se chama Linux x64 self-extracting file). Caso esteja utilizando distribuições 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 questão, já que ele tem a extensão (.bin) . Caso ele não esteja executável, pode ser neces- sário dar permissões de execução 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 diretório /opt, que segundo a FHS (File Hierarchy System) é o diretório padrão para instalações de programas independentemente instalados. Outro benefício é que todos os usuários da máquina poderão utilizar-se do software, pois o /opt é legível para todos do sistema. Para fazê-lo, porém, você deverá ser o usuário root, já que apenas este possui privilégios de escrita nesse diretório. Seguidos estes passos, um diretório será gerado (caso tenha seguido o conselho, dentro do /opt), contendo binários, documentação e arquivos adicionais da JDK e JRE do Java. Agora, basta adicionar o caminho desses binários ao caminho de busca de binários do sistema, desig- nado pela variável de ambiente $ PATH , setada pelo arquivo de configuração /etc/profile. Para adicionar esses binários do Java a esse caminho, você pode atualizar a variável $ PATH (o que será apagado após o próximo reboot do computador) ou setar a variável PATH no /etc/profile, que é lido pelo sistema. Pronto, instalamos o Java através de seu pacote binário! Não foi nada difícil, não é mesmo? 3.2.2 Distribuições derivadas do Debian Para instalar o Java em distribuições derivadas do Debian podemos simplesmente utilizar o gerenciador de pacotes nativo, o apt-get. Vale lembrar que, como o Java não é considerado livre pelos padrões do Debian, você deve adicionar a seção non-free à sua lista de repositórios. 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
  • 28. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Como podemos ver, o nome do pacote correspondente ao Java JDK é sun-java5-jdk, acom- panhado de uma série de bibliotecas e plugins. Sabendo disso, basta-nos agora instalar, como usuário 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 através do gerenciador de pacotes apt-get. Foi bem fácil também, não é? Vale lembrar que os exemplos acima foram testados na distribuição Debian GNU/Linux, po- rém poderiam ser executados da mesma maneira em qualquer outra distribuição compatível com o Debian, como o Ubuntu Linux, Kurumin ou Knoppix, dentre outras. 3.3 Introdução à Linguagem Aspectos de programação Um programa é a implementação de um algoritmo em uma linguagem de programação. O algoritmo precisa ser bem definido do início ao fim, tendo comandos ordenados e finitos capazes de produzirem um resultado visível. Para programar bem deve-se fazer um algoritmo apropriado e ter um conhecimento léxico, sintático e semântico da linguagem de programação a ser utlizada. No campo léxico as linguagens de programação permitem que o programador crie novas pa- lavras, desde que se respeite as regras nativas da linguagem. Já a sintaxe habilita o programador a exercer sua função de implementar o algoritmo através do uso de símbolos, termos e pala- vras que formarão expressões válidas. Finalmente, a semântica é a representação do resultado observável do algoritmo implementado na máquina pelo programador. 27
  • 29. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Estrutura, Compilação e Execução Um programa é um texto (chamado de programa fonte) que possui comandos e declarações necessárias para a implementação de um algoritmo que é traduzido para um produto equivalente escrito em comandos binários (código binário) os quais são executados pelo computador. O processo de tradução é chamado de compilação e posteriormente a ele se produz a ligação do código binário a outros códigos para se obter finalmente o programa executável. O programa executável é carregado na memória e colocado sob o controle de um ambiente de execução, que faz com que cada comando seja executado pelo processador. Todo programa deve ter uma estrutura que permita definir seu inicio e fim, de tal forma que o ambiente de execução possa identificar precisamente o ponto de entrada do programa, isto é, o primeiro comando que será executado e o término da execução. A estrutura de um programa em Java Os programas orientados a objetos são baseados no conceito classe. Cada classe contém as declarações e os comandos que, em conjunto, implementam o algoritmo do programa. Estes comandos são organizados na forma de métodos e devem possuir um método principal que é o ponto de início da execução, a partir dele os demais métodos são acionados. Em Java, especificamente, a sua estrutura consiste de um conjunto de unidades de com- pilação. Cada uma delas contêm as especificações de classes e interfaces, juntamente com as declarações necessárias para a compilação. Quando compiladas essas unidades geram arquivos com os códigos binários referentes às classes e interfaces nelas descritas. A estrutura básica de uma classe consiste de uma palavra chave class, de um identifica- dor (o nome da classe), e de um corpo que é delimitado por chaves e contém opcionalmente declarações e comandos próprios da classe. Programando em Java Em Java todos os arquivos com os respectivos códigos podem ser escritos em um editor de texto utilizando UNICODE e terminadas com a extensão (.java). Cada arquivo representa uma unidade de compilação, podendo conter uma ou mais especificações de classes e interfaces. Em java temos alguns comandos que nos ajudam na compilação e execução 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 código contendo o código binário que é utilizado para a execução do programa. Para compilar seu código digite javac NomeDoArquivo.java. java: O executável Java é a máquina virtual Java (JVM), ou seja, é o programa respon- sável pela execução do código compilado pelo javac. Para fazer uso do comando digite java NomeDoArquivo, para executar um arquivo não deve-se colocar a sua extensão. Comentários Os comentários são textos normalmente explicativos que servem para informar tanto o pro- gramador que o escreveu quanto outros que venham a utilizar ou somente ler aquele código. Em Java os comentários podem ser de três tipos: 28
  • 30. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Uma linha - Utiliza duas barras // marcando seu início. Exemplo: // tudo após as barras é considerado como comentário Múltiplas linhas - Utiliza barra asterisco no início /* e asterisco barra no fim */. Exemplo: /* comentário inicial e final de multiplas linhas */ Documentação - Semelhante ao de múltiplas linhas mas com propósito de documentar o código. Exemplo: /* comentário de documentação * pode conter diversas * linhas */ 3.4 Tipos de dados Variáveis Na linguagem Java todas as variáveis têm seus tipos de dados definidos. Os tipos de dados definem quais são os valores que uma variável pode armazenar e quais operações pode executar. Esses tipos básicos são os mesmos para qualquer ambiente de programação Java, por se tratar de uma linguagem portável. As variáveis locais são declaradas no corpo de um método*, existindo somente durante a atividade dele. Já as variáveis de instância e variáveis de classe são declaradas ambas no corpo de uma classe*, mas as de instância especificam atributos próprios de cada objeto da classe, enquanto que as de classe especificam atributos comuns a todos objetos da classe. Existem também as variáveis paramétricas que são declaradas como tratadoras de exceção, construtoras e parâmetros formais de métodos. São variáveis declaradas na especificação de um método, estas variáveis possuem algum valor que será usado no método invocado. Seu uso é semelhante ao das variáveis locais podendo ser modificado o seu valor. As variáveis paramétricas são criadas quando chamadas ao método que pertencem e existem só durante a execução do método. Existem duas maneiras de atribuir os valores às variáveis paramétricas, passagem de argumento por valor ou por referência. Passagem de argumentos por valor Na passagem por valor é feita a chamada a um método e os parâmetros reais utilizados na chamada são avaliados, produzindo valores que são atribuídos aos parâmetros formais corres- pondentes. Falando de forma mais simplificada, o método cria uma "cópia"dos valores dos argumentos para que sejam utilizados somente dentro do método. Portanto, por mais que se alterem esses valores, eles não afetarão as variáveis externas ao método. 29
  • 31. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Passagem de argumentos por referência Ao se invocar uma função ou procedimento, as variáveis paramétricas armazenam uma re- ferência aos parâmetros reais em vez de uma cópia do valor, como é feito na passagem por valor. Mas, este tipo de passagem em Java não é implementada, isto acontece porque em Java não existem ponteiros, existem objetos. Assim, toda variável do tipo "objeto"é na realidade uma referência para aquela instância do objeto. Mais simplificadamente, os argumentos passados por referência terão seu valor alterado den- tro e fora do método, pois não é feita uma cópia daquela variável. Obs:. Variáveis do tipo de dados primitivo são passadas por valor. Objetos (o conteúdo) não são passados diretamente para métodos. Em vez disso, são passados aos métodos referências a objetos. As próprias referências também são passadas por valor. Quando um método recebe uma referência a um objeto, o método pode manipular o objeto diretamente. *Os conceitos de Método e Classe serão abordados em próximas lições. Escopo de variáveis O escopo de uma variável é a parte do programa no qual pode-se diretamente referenciá-la. Uma variável local tem seu escopo com alcance somente dentro do bloco onde ela foi declarada. Bloco este que em Java é delimitado por chaves { }. As variáveis de instância e de classe têm escopo com alcance em todo o corpo da classe em que foram declaradas. Tipos básicos Existem oito tipos primitivos em Java, todo o resto é objeto. Estes tipos ficaram na linguagem pela sua velocidade de interação e, por isso, não foram transformados em Objetos. Como não são objetos a sua declaração já cria a variável em memória não necessitando de construtores. Inteiros Tipo Tamanho Valor byte 8 bits -128 a 127 short 16 bits -32.768 a 32.767 int 32 bits -2.147.483.648 a 2.147.483.647 long 64 bits -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 Reais ou Ponto Flutuante Tipo Tamanho Valor float 32 bits - 1.40239846E-45 a + 3.40282347E + 38 double 64 bits - 4.94065645841246544E-324 a + 1.79769313486231570E + 308 Outros Tipos Tipo Tamanho Valor Descrição char 16 bits 0 a 65535 Um caractere boolean 8 bits true ou false valor booleano(V ou F) 30
  • 32. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF OPERADORES Executam alguma função sobre os operandos. Existem operadores unários que requerem só um operando e operadores binários e ternários que requerem dois e três operandos respectiva- mente. Depois de ser executada uma determinada função um operador retorna um valor, sendo que esse valor e o tipo de retorno dependem do operador e de seus operandos. Operadores Binários Operador Uso Descrição + (Adição) X + Y Soma X e Y - (Subtração) X - Y Subtrai Y de X * (Multiplicação) X * Y Multiplica X de Y / (Divisão) X / Y Divide X por Y % (Resto) X % Y Resto da divisao de X por Y Operadores Unários Operador Uso Descrição ++ X++ Utiliza valor de X antes de fazer o incremento ++ ++X Incrementa antes de usar o valor de X – X– Utiliza valor de X antes de fazer o decremento – X– Decrementa antes de usar o valor de X • Incrementar significa somar 1 • Decrementar significa subtraír 1 Operadores Condicionais e Relacionais Operador Uso Retorna verdadeiro se > X > Y X é maior que Y >= X >= Y X é maior ou igual a Y < X < Y X é menor que Y <= X <= Y X é menor ou igual a Y == X == Y X e Y são iguais != X != Y X e Y são diferentes Operadores Binários Condicionais Operador Uso Retorna verdadeiro se && X && Y X e Y Verdadeiros, se X é falso, não avalia Y || X || Y X ou Y Verdadeiro, se X é verdadeiro, não avalia Y ! !X X é Falso & X & Y A operação "e"bit-a-bit entre X e Y, sempre avalia X e Y | X | Y A operação "ou"bit-a-bit entre X ou Y, sempre avalia X e Y ˆ X ˆ Y A operação "ou exclusivo"xOR entre X e Y, sempre avalia X e Y 31
  • 33. Capítulo 4 Conceitos Básicos Conceitos Básicos da Orientação a Objeto 4.1 Classes, Objetos, Atributos e Métodos Conceitos de Classe e Objeto são centrais para a programação orientada a objeto, por isso é extremamente necessária a sua compreensão. 4.1.1 Classes Uma classe é o elemento básico da programação orientada a objetos que define as formas e comportamentos dos objetos pertencentes à ela. Também pode ser entendida como uma es- trutura que associa atributos(dados) e métodos(funções), controlando o acesso a estes. Ou seja, definir uma classe implica em especificar seus objetos. Para a criação de uma classe coloca-se um comando que inicia a declaração da classe. Após a palavra-chave class segue-se o nome da classe, que deve ser um identificador válido para a linguagem. Os modificadores indicam como classe pode ser utilizada por outras classes e aplicações. Nota: Usualmente recomenda-se que as classes sejam declaradas utilizando nomes iniciados com letras maiúsculas enquanto que nomes variáveis ou instâncias de objetos sejam iniciados com letras minúsculas. No caso de duas ou mais palavras, as palavras a partir da segunda devem iniciar com letra maiúscula para substituir o espaço. Veja o exemplo: Por exemplo se o nome fosse "Nome da coisa", caso esse fosse o nome de uma classe deveria ficar assim: "NomeDaCoisa", .Se fosse o nome de uma variável, então deveria ficar assim: "nomeDaCoisa". Porém, lembre-se que isso é apenas uma recomendação. Mas é bom segui-la para que o código possa ser lido com facilidade por outro programador, e até mesmo por você. Sintaxe: [modificador] class <NomeClasse>{ <corpo classe> } Exemplo: public class ExemploDeClasse{ //atributos //métodos } 32
  • 34. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Modificadores A primeira palavra nos dá a possibilidade de atribuir permissões de acesso à nossa classe, neste caso nossa permissão é de tipo pública (public). Uma classe public é acessível irrestrita- mente por qualquer outra classe que pertença ao mesmo pacote, ou seja, que estejam localizadas no mesmo diretório bem seja diretamente ou por herança. Um pacote(pakage) em Java é um diretório que contenha um conjunto de classes. Os paco- tes, em certa medida, equivalem às bibliotecas(libraries) de outras linguagens de programação. Existem também os modificadores privado(private) e protegido(protected) que serão melhor abordados no capítulo de Conceitos Avançados. Exemplos de uso de pacotes: /* O ponto seguido do asterisco indica que todas classes dentro do pacote serão importadas */ import java.io.*; import java.lang.Math; import java.awt.*; O corpo da classe normalmente segue a seguinte seqüencia: • Variáveis de classe • Atributos • Construtores • Métodos Pode também conter um método main, que é utilizado pelo interpretador Java para dar início à execução de uma aplicação. Exemplo 1: class Estudante { /* declaração dos atributos da classe estudante */ String aluno; String matricula; /* métodos da classe estudante */ void setAluno (String novoAluno){ aluno = novoAluno; } void setMatricula (String novaMatricula){ matrícula = novaMatricula; } void impEstudante (){ System.out.println( "aluno: "+aluno); System.out.println( "matricula: "+matricula); } } 33
  • 35. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Em nossa classe Estudante temos 3 métodos setAluno, setMatricula e impEstudante, os dois primeiros usam parâmetros e servem para modificar os atributos aluno e matricula do objeto que os executa. O último método contém a solicitação de um objeto referenciado por System.out para que este execute seu método println, o qual fará com que seja impresso na tela o aluno e sua matrícula. A palavra void indica que os métodos não retornam valores. 4.1.2 Objetos É através deles que praticamente todo o processamento ocorre em aplicações desenvolvidas com linguagens de programação orientadas a objetos. Toda linguagem de programação orientada a objetos oferece mecanismos para definir os tipos de objetos para cada aplicação através do conceito de classes. Objetos são a instância de uma classe. Em outras palavras, são um pedaço de memória reservada para armazenar os dados e os métodos declarados na classe. Um objeto não é mais que uma abstração que contém um identificador, um estado e um conjunto de operações que ele consegue realizar. Eles indicam ao computador como proceder em determinadas situações. Os identificadores são definidos pelo ambiente ao serem criados, seu estado é determinado pelos valores referentes a seus atributos e as operações executadas são implementadas por meio de código (chamado método). No objeto pode-se executar os métodos que foram definidos, além de poder acessar e alterar dados. Criando Objetos Para, praticamente, toda classe existe definido algum método (metodo()), que é usado para criar os objetos da classe. Estes métodos usados para a criação de objetos são chamados de construtores e se caracterizam por não possuir valor de retorno. A criação de um objeto da classe "Exemplo"é feita através do comando: new Exemplo(); Sendo iniciada a execução do construtor da classe. Exemplo2: Suponhamos que num programa temos duas classes a Classe1 e a Classe2. class Classe1 { int soma; void somar(){ //algum código 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
  • 36. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF A referência de um objeto se faz com a indicação do objeto sendo concatenado ao nome do atributo através de um ponto (objeto.soma). 4.1.3 Atributos Atributos são um modo de modificar uma ou mais declarações(as quais são feitas no corpo da classe, fora dos métodos). Um atributo de uma classe é a própria variável da classe que se destina a armazenar informações singulares daquela classe. Exemplo: /* Camiseta.java */ public class Camiseta { /* Atributos */ String cor; } Naturalmente foi definida a classe Camiseta com seu atributo singular cor que poderá arma- zenar dados sobre aquela camiseta. Outros atributos podem ser adicionados como, tamanho por exemplo. Ou seja, diversos atributos podem descrever vários aspectos de um objeto. Exemplo: public class Camiseta { String cor; char tamanho; float preco; } Referência de Atributos Pode-se referir aos atributos de um objeto das seguintes formas: Pelo nome do atributo, se a referência e o atributo referenciado pertencem à mesma classe. Exemplo: cor = verde; A referência acima só poderá ser feita em métodos da própria classe onde o atributo cor foi declarado, no caso na classe Camiseta. Pela identificação do objeto seguida de um ponto seguido do nome do atributo. Isso é ocorre quando a referência é feita a um atributo de um determinado objeto. Exemplo: Camiseta objeto = new Camiseta(); /* criando o objeto camiseta */ objeto.cor = "verde"; Pela identificação de uma classe seguida de um ponto seguido do nome do atributo, quando se trata de atributos estáticos. 35
  • 37. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF 4.1.4 Atributos estáticos Os atributos estáticos são declarados com o modificador static, estes atributos se aplicam a funções e dados. Sua declaração não é aplicada a uma instância particular do objeto, mas ao tipo do objeto. A variável totalDeAlunos, ao ser declarada como um atributo estático (static int totalDe- Alunos), permite que seu valor seja compartilhado por todos os objetos da classe Aluno. Ou seja, todas as instâncias estarão compartilhando a mesma porção de dado. Exemplo de uma referência de atributo a objetos específicos: 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
  • 38. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Repare que "totalDeAlunos"foi incrementado em cada objeto, porém seu valor é compartilhado pelos dois objetos. Note que o melhor jeito de referenciar uma variável estática é utilizando o nome da classe e não o nome do objeto. Por exemplo: As linhas: obj1.totalDeAlunos++; obj2.totalDeAlunos++; Ficariam melhor se substituídas por: Aluno.totalDeAlunos++; Aluno.totalDeAlunos++; OBS:. O uso abusivo de elementos estáticos é desencorajado, pois elementos estáticos são armazenados uma vez na memória e todos os objetos com acesso permitido acessarão o mesmo local. Isso pode ser fonte de inconsistência já que diversos objetos estarão lendo e escrevendo no mesmo local concorrentemente. Adicionalmente, na orientação à objeto deve-se evitar que informações desnecessárias sejam visíveis por objetos externos. Em nosso programa, foi mais efetivo definir a variável totalDeAlunos como estática, já que o totalDeAlunos é um valor compartilhado por todos os alunos, e não específico de cada aluno, como a matrícula. 4.1.5 Métodos Na seqüência serão relembrados os conceitos de classe e objeto, porque é necessário que os manipulemos perfeitamente para poder entender tudo o que será apresentado nesta lição. Objetos são instâncias de classes. Ao serem criados, possuem uma identificação única que é atribuída pelo ambiente e um conjunto de atributos que o caracteriza. Estes atributos assumem valores que compõem o estado do objeto, e cada objeto executa operações definidas através de códigos chamados métodos. Nas classes encontramos os objetos e suas devidas descrições, isto é , as classes descrevem os atributos de seus objetos, bem como os métodos que eles podem executar. Métodos Nas linguagens orientadas a objetos os métodos são usados para implementar operações que serão usadas pelos objetos criados no programa. Os métodos definem as ações a serem tomadas em diversos momentos da execução de um programa, dando dinamismo capaz de permitir que os objetos, em muitos casos, imitem o comportamento de objetos reais. São os métodos que realizam todas as tarefas para as quais o programa foi escrito, por exemplo, fazer cálculos, resumir informações de um arquivo, criar gráficos, etc. Chamando Métodos Podemos chamar um método explicitamente ou implicitamente. A chamada explícita se dá através da execução de um comando ou por meio de uma expressão que contém o nome do método. Por exemplo ao chamar o método System.out.println (sua função é imprimir na tela) fazemos uma chamada explícita. Chamada implícita ocorre quando o interpretador Java chama 37
  • 39. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF um método por sua própria deliberação. Por exemplo quando o interpretador Java chama o método main para iniciar a execução do programa. Declarando Métodos Os métodos são declarados como parte da especificação de uma classe. Sintaxe: <tipo de retorno> <nome do método> { <corpo do método> } Caso seja necessário, podemos ter nos métodos um valor de retorno. Na sintaxe acima se utilizarmos void no lugar de <tipo de retorno>, significa que o método não retorna nenhum valor. O <nome do método> é um identificador que define o nome pelo qual o método é conhecido, o <corpo do método> contém todas as declarações e especificações necessárias para que quando seja chamado os comandos sejam executados. Nos métodos também podemos fazer uso de moderador de acesso como public, protected e private que são empregados para restringir o acesso a um método. Os modificadores permitem dar algumas propriedades ao método. 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 é necessário colocar a palavra chave int antes do nome do método. O método 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 método somaPositivos temos um if que testa se as variáveis num e num2 são maiores que zero. Se não forem, ele dá um return e sai do método, caso contrário, imprime a soma de num e num2 e posteriormente dá um return e sai do método. O comando if será visto mais detalhadamente na seguinte lição. 38
  • 40. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Referindo-se a métodos Se a referência e o método são da mesma classe, então nos referimos a ele pelo seu nome. Quando se quer invocar a execução do método por um objeto específico, faz-se a referência pela identificação de um objeto seguido do nome do método. Para métodos estáticos, faz-se a identificação de uma classe seguida do nome do método 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 método */ } void imprime(){ System.out.println("Soma dessa instância: " + soma); System.out.println("fim de programa"); } static void conta() { System.out.println("Quantidade de somas feitas: " + quantidadeSomas); } } Neste exemplo, a referência ao método imprime é feita só pelo nome porque ele pertence à mesma classe do método (somaX()) que a chamou. class Exemplo3TestDrive { public static void main(String[] arg){ Exemplo3 obj = new Exemplo3(); obj.x = 21; obj.somaX(); /* executar método por um objeto */ Exemplo3.conta(); /* executar o método estático da classe Exemplo3 */ Exemplo3 obj2 = new Exemplo3(); obj2.x = 23; obj2.somaX(); Exemplo3.conta(); } } No caso do Exemplo3TestDrive o método somaX() teve que ser chamado utilizando o objeto instânciado, já o método conta() foi chamado utilizando o nome da classe (pois é um método estático). 39
  • 41. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Método println Este método é executado pelo objeto referenciado System.out e imprime o argumento que recebe. Para imprimir uma seqüencia de caracteres, é necessário que a seqüencia seja colocada entre aspas duplas, exemplo: System.out.println("Imprimindo seqüencia de caracteres"); Aparecerá na tela do computador: Imprimindo seqüencia de caracteres Os caracteres são impressos exatamente como são escritos. O println após imprimir da um salto de linha, enquanto o print imprime os argumentos mas não 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 impressão está sendo usado o método print, por isso não se produz salto de linha e a segunda impressão aparece na mesma linha da primeira. Para imprimir uma variável, ela é passada como argumento sem fazer uso das aspas duplas. Por exemplo: se a váriavel var tem como valor 1000, usamos a seguinte seqüencia 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 método para cada println são passados dois argumentos, uma seqüencia de caracteres e uma variável, o símbolo de adição "+"serve para indicar que outro argumento será impresso. 40
  • 42. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF 4.2 Estruturas de Controle Na execução de programas as ações primitivas nem sempre são executadas na ordem em que são escritas, devido à lógica de programação que foi aplicada na construção 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 condição. 4.2.1 Estruturas de Repetição Os ciclos de repetição em sua estrutura possuem um conjunto de comandos e uma condição. Comando While Na execução do comando while primeiro testa-se a <condição>. Se a condição resultar em falso o comando termina passando o controle para posição após a chave de fechamento do comando. Se resultar em verdadeiro uma nova iteração tem início e o controle passa para o primeiro comando da cláusula de repetição. Sintaxe: while (<condição>){ <comandos>; } Exemplo: while (cont != 0) { cont = cont -1; } Na primeira linha é testado se cont é diferente de zero, se for, então são executados os comandos que estão dentro do bloco while, mas se a condição não é satisfeita o ciclo de repetição termina e o controle passa para a primeira linha depois do bloco. Comando do-while Este comando é parecido ao while sua diferença é que a condição é testada após a execução do bloco de instruções. Portanto, este bloco é executado no mínimo uma vez. Sintaxe: do { <comandos>; } while (<condição>); Exemplo: do { cont = cont - 1; } while (cont != 0); Neste exemplo, o controle esta no bloco do comando do, onde primeiro são executadas todas as instruções, neste caso subtrai-se um da variável cont, posteriormente é testada a condição que, caso seja satisfeita (verdadeira), o controle volta para o comando do e se repete o proce- dimento. Mas se não for satisfeita (falso), termina o ciclo de repetição e o controle passa para a primeira linha que está depois do comando while. 41
  • 43. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Comando For Como os comandos anteriores, o comando for serve para repetir um conjunto de instruções, diferindo dos demais pela existência de procedimentos executados no inicío de sua estrutura. Na execução do comando for o <comando inicial> é executado (Caso ele não exista ne- nhuma ação é realizada nesse passo). Em seguida a <condição de parada> é avaliada e se o resultado for falso o comando termina. Se o resultado for verdadeiro uma nova interação tem início e o controle passa para o primeiro comando da cláusula de repetição. Sintaxe: for (<comando inicial> ; <condição de parada> ; <cláusula_fim_iteração>){ } Possui um cabeçalho com três elementos separados por ponto e vírgula, no primeiro elemento declaramos o tipo de variável que vamos utilizar e atribuimos um valor inicial para ela. No segundo elemento é declarada a condição de parada e no terceiro temos a cláusula de fim de iteração. Exemplo: for ( int var = 0; var <= 10; var++){ System.out.println(var); } Neste exemplo, primeiro foi declarada uma variável var de tipo inteiro com um valor inicial de zero, depois é testada a condição que se for satisfeita será impresso o valor de var, senão terminará o ciclo de repetição e o controle passará para o primeiro comando que estiver depois do bloco for . OBS :. O exemplo usando for acima equivale ao código 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 fluxo de execução de um programa seja desviado, pois às vezes precisamos executar um bloco de ações ou uma seqüência de ações primitivas apenas se uma determinada condição for satisfeita. Comando if Sua sintaxe é if (<condição>) <comandos> , ela nos diz que se a condição for verdadeira as ações que seguem serão executadas. Veja o exemplo: if (x > 0) { ++x; } Lê-se: se x for maior que zero então incremente um em x. 42
  • 44. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Comando else No caso em que a condição for falsa, por exemplo se x não é maior que zero então outras ações serão executadas, neste caso utilizamos o comando else. Tenha em mente que sempre antes de um else deve existir um if. Sintaxe: if (<condição>) { <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 condição, como ela é falsa o controle passa para o else e executa o que esta no bloco dele, neste caso será decrementado o valor da variável x. Veja que não foi necessário 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, então 100 é dividido por num. Posteriormente se faz um novo teste na condição do segundo if , se o valor obtido em x for maior que 10, então imprime x > 10, senão o controle vai para o else e é impresso x < 10, terminando assim o bloco do primeiro if . Por último é impresso a palavra fim de programa. No caso em que num é igual a zero, a condição testada no primeiro if será falsa e, portanto, controle não entra no bloco do if, sendo passado o controle à primeira linha de comando depois do if , consequentemente será impresso fim de programa. Comando switch O comando switch também desvia, por meio de um teste na condição, o controle do programa para outro trecho, trabalhando de forma semelhante ao if, sua diferença é que pode tratar mais de dois blocos de execução. Sintaxe: 43
  • 45. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF switch (<expressão>){ case <valor1>:<comandos 1> break; case <valor2>:<comandos 2> break; . . . default: <comandos default> } No comando switch a <expressão> que é passada será testada nas diferentes cláusulas case. A <expressão> é comparada com o rótulo (no caso <valor1> e <valor2>) em cada cláu- sula case. A comparação é feita do primeiro comando case até o último, ordenadamente, se ela for igual ao valor de alguma das cláusulas o controle passa para ela e serão executados todos seus comandos. Em seguida o controle passa para o primeiro comando após este rótulo. Se nenhum rótulo for igual a <expressão>, então verifica-se a existência de um rótulo default. Caso exista, os comandos de default serão executados. Se não existir um rótulo default o fluxo 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 vale 1"); break; } case 21: { System.out.println("x vale 21"); break; } default: { System.out.println("x não é valido, nesse caso"); break; } case 30: { System.out.println("x vale 30"); break; } } } } 44
  • 46. CDTC Centro de Difusão 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 não for 1 ou 21 ou 30, então aparecerá na tela: x não é valido, nesse caso Se o valor de x for 30 aparecerá na tela: x vale 30 Como o valor de x não existe em nenhuma cláusula o controle é desviado para o comando default, prosseguindo-se a partir deste ponto com a execução 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("rótulo 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 então é impresso na tela rótulo 1 e sai do switch terminando o programa. Se o valor de x é 2 o controle vai para classe 2, e é incrementado 2 à variável x que fica 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 saímos do primeiro switch e termina o programa. 45
  • 47. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF 4.3 E/S Teclado e Arquivo Obtendo Valores do Teclado Para poder obter os valores do usuário a partir do teclado é necessário 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 diretório 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 métodos public int lerInteiro(),public doublelerReal() e pu- blic String lerLinha(), que nos permitem ler inteiros, reais e strings. NOTA: Não se preocupe por não conseguir entender a classe Teclado completamente, pois ela possui assuntos mais avançadas que serão vistos mais para frente. Por enquanto você só precisa saber como usá-la para obter dados do teclado. 46
  • 48. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF 4.3.1 E/S Teclado Vias Lógicas de comunicação O canal comunicante entre um repositório de dados e um programa é a representação da chamada via lógica de comunicação. Essas vias diferenciam operações físicas (dependem de repositórios e fontes) das operações lógicas (gravação e leitura). As vias podem ser de entrada, de saída ou de ambas(entrada e saída). • Vias de entrada - Estabelecem um canal comunicação entre uma fonte onde os dados são lidos e o programa leitor. • Vias de saída - Estabelecem um canal comunicação entre uma repositório onde os dados são lidos e o programa gravador. • Vias de entrada e saída - Estabelecem um canal comunicação entre uma fonte ou reposi- tório com um programa permitindo leitura e/ou gravação. A implementação das vias se dá em classes que contenham métodos apropriados de leitura, gravação e conexão entre fontes e repositórios de dados. O comando new é o responsável por criar um objeto capaz de implementar uma via de comunicação. O objeto recém-criado então deve ser associado à fonte ou repositório de dados, passando-se sua identificação como argumento que use seus métodos de gravação e leitura. Exemplo: new FileReader("dados.txt"); O arquivo identificado por dados.txt está associado ao objeto da classe FileReader que im- plementa a via de entrada criada pelo comando new no exemplo anterior. Vias padrões para gravação e leitura A classe System e seus atributos in e out estão diponíveis automaticamente pelo ambiente Java associados ao teclado e ao vídeo. O método read (leitura) pode ser usado através do objeto in. Enquanto que o objeto out permite o uso dos métodos print (imprime algo mantendo o cursor na mesma linha) e println(imprime algo transferindo o cursor para próxima linha). System.in.read(); System.out.print(); System.out.println(); Leitura de dado Na execução do método read se a tecla x for digitada teremos a impressão do valor 120, que é o código inteiro correspondente à letra x. Ou seja, o método read pertencente à classe InputStream retorna valores inteiros(tipo int) ao ler um byte da fonte de dados.Exemplo: 47
  • 49. CDTC Centro de Difusão 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 declarações import java.io.* e throws IOException serão melhor abordadas na lição de tratamento de erros. Por hora basta saber que a primeira declaração serve para importar as classes de entrada e saída e a segunda serve para posteriormente tratar possíveis erros também de entrada e saída. Leitura da linha O método readLine da classe BufferedReader permite leitura de todo o conteúdo de uma li- nha. Esse método 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 declaração import java.util.* é necessária para localizar a classe Scanner e usar o método nextLine() tento o teclado como fonte de dados. 48
  • 50. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Leitura de valores múltiplos Com objetos da classe StringTokenizer pode-se ler valores múltiplos do teclado que foram digitados numa mesma linha, sendo que esses dados serão tratados como sequência de carac- teres chamados tokens. O espaço é o delimitador padrão dos tokens, mas o delimitador pode ser alterado. Exemplo: A sequência de caracteres "leitura de 4 tokens "contém 4 tokens. O método nextToken retorna o próximo token como uma sequência de caracteres. Já os mé- todos hasMoreTokens e hasMoreElements determinam a existência de mais tokens na sequên- cia 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 São um conjunto de dados armazenados em um formato específico. Eles podem ser tex- tos(dados gravados em formas de caracteres) ou binários(dados gravados usando-se tipos pri- mitivos da linguagem) que têm diferenças apenas lógicas. O acesso aos arquivos pode ser feito sequencialmente ou randomicamente. No primeiro o cursor sempre move-se pra frente com gravação e leituras sequenciais. Já no segundo o cursor movimenta-se para frente e para trás, o que permite regravações e releitura de dados de maneira não sequencial. Leitura e Gravação de arquivos sequenciais Primeiro identifica-se um arquivo passando o caminho para determinar a localização dele. Em seguida o ambiente de execução deve localizá-lo e prepará-lo para leitura ou gravação. Fi- nalmente, fecha-se o arquivo. O método read da classe FileReader após ler o caractere retorna o inteiro que corresponde ao código do caractere lido e identifica o fim 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
  • 51. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF while ((i = arq.read()) != -1) System.out.print(i+"."); arq.close(); } } O método readLine da classe BufferedReader lê um arquivo linha a linha e identifica o fim 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 método write da classe FileWriter grava um caractere ou uma sequência de caracteres. Se o argumento for do tipo int o método grava o código correspondente ao valor. Se for char ou String serão gravados como caractere e sequência 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 diretório /home/usr cujo conteúdo será: Um mais um é igual a 2 e dois mais dois é igual a 4 Obs: É necessária ter permissão de gravação no diretório /home/usr. Os objetos da classe DataInputStream e DataOutputStream permitem respectivamente lei- tura(pelo método read<tipo>) e gravação(pelo método de write<tipo>) direta de tipos primitivos. Por exemplo dados gravados com método writeInt devem ser lidos pelo métodos readInt. Um arquivo acessado através de um objeto da classe DataInputStream tem seu final indicado pela ocorrência da exceção EOFException. Isso para prevenir que o método read<tipo> de tente continuar lendo depois o fim do arquivo. 50
  • 52. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Leitura e gravação de arquivos randômicos A classe RandomAcessFile poussui métodos write<tipo> e read<tipo> para cada tipo pri- mitivo Java. Tais métodos devem ser usados em conjunto, ou sejam, dados gravados por um write<tipo> devem ser lidos por read<tipo>. Essa classe deve conter, além da identificação do arquivo, o modo de utilização separados por vírgula. Sintaxe: new RandomAcessFile("/home/usr/arquivo","rw" ); • r - abre o arquivo apenas para leitura. • rw - abre o arquivo para leitura e gravação. • rws e rwd - abrem o arquivo para leitura e gravação, garantindo o sincronismo entre as operações lógicas e físicas de entrada e saída. Outros métodos úteis são: • seek(x) - posiciona o cursor no início do byte de ordem x. • length - retorna o tamanho do arquivo em bytes. • getFilePointer - retorna a posição corrente do cursor. • setLength(x) - define um novo tamanho para o arquivo. 4.4 Vetores e Cadeia de Caracteres 4.4.1 Vetores Também conhecidos como arrays, são seqüências de elementos de um determinado tipo, em um número pré-determinado de dimensões (vetores de uma, duas ou mais dimensões, por exemplo). Arrays são ditos unidimensionais quando possuem apenas uma dimensão, podendo assim referenciar seus elementos através de um único índice numérico, geralmente entre colchetes (vetor[1]). Arrays multidimensionais são aqueles em que devemos referenciar cada elemento através de dois ou mais índices numéricos(vetor[1][2]). Podemos implementar matrizes facil- mente através dessa possibilidade de manipulação de arrays. Arrays são referenciados como variáveis, cabendo ao programador determinar qual o tipo deste vetor. Além de definirmos o nome do array, devemos também definir portanto o tipo deste array e quantas dimensões possuirá. Como dito anteriormente, as dimensões são especificadas por pares de colchetes, quando declaramos o array. O comando new seguido do nome da classe e da quantidade de elementos da sua dimensão pode criar explicitamente objetos que representam vetores. Exemplo de um vetor de inteiros de 100 elementos: new int[100]; Vejamos agora exemplos de declarações de arrays unidimensionais e multidimensionais: 51
  • 53. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Uma dimensão A B C D Multidimensionais (matriz) A B C D E F G H I J K 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 nú- mero de linhas da matriz e no segundo o número de colunas. Exemplo: int numeros[10]; char Lista[5][4]; Os elementos dos vetores são referenciados por seu índice que é sua própria posição no vetor. O atributo length serve para indicar quantidade de elementos de um vetor. Array Unidimensional Podemos utilizar arrays para evitar o uso de múltiplas variáveis redundantes em um programa, facilitando a manipulação de grande quantidade de dados. Normalmente, manipula-se uma es- trutura 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