Projeto JEDI - Introdução à Programação - Java - Módulos 01 e 02 - 431 páginas

of 431/431
Módulo 1 Introdução à Programação I Lição 1 Introdução à Programação de Computadores Versão 1.01 - Jan/2008
  • date post

    15-Jun-2015
  • Category

    Documents

  • view

    1.515
  • download

    10

Embed Size (px)

Transcript of Projeto JEDI - Introdução à Programação - Java - Módulos 01 e 02 - 431 páginas

Mdulo 1Introduo Programao I

Lio 1Introduo Programao de Computadores

Verso 1.01 - Jan/2008

JEDITM

Autor Florence Tiu Balagtas Equipe Joyce Avestro Florence Balagtas Rommel Feria Reginald Hutcherson Rebecca Ong John Paul Petines Sang Shin Raghavan Srinivas Matthew Thompson

Necessidades para os ExercciosSistemas Operacionais Suportados NetBeans IDE 5.5 para os seguintes sistemas operacionais: Microsoft Windows XP Profissional SP2 ou superior Mac OS X 10.4.5 ou superior Red Hat Fedora Core 3 Solaris 10 Operating System (SPARC e x86/x64 Platform Edition) NetBeans Enterprise Pack, poder ser executado nas seguintes plataformas: Microsoft Windows 2000 Profissional SP4 Solaris 8 OS (SPARC e x86/x64 Platform Edition) e Solaris 9 OS (SPARC e x86/x64 Platform Edition) Vrias outras distribuies Linux Configurao Mnima de Hardware Nota: IDE NetBeans com resoluo de tela em 1024x768 pixel Sistema Operacional Microsoft Windows Linux Solaris OS (SPARC) Solaris OS (x86/x64 Platform Edition) Mac OS X Processador 500 MHz Intel Pentium III workstation ou equivalente 500 MHz Intel Pentium III workstation ou equivalente UltraSPARC II 450 MHz AMD Opteron 100 Srie 1.8 GHz PowerPC G4 Memria 512 MB 512 MB 512 MB 512 MB 512 MB HD Livre 850 MB 450 MB 450 MB 450 MB 450 MB

Configurao Recomendada de Hardware Sistema Operacional Microsoft Windows Linux Solaris OS (SPARC) Solaris OS (x86/x64 Platform Edition) Mac OS X Processador 1.4 GHz Intel Pentium III workstation ou equivalente 1.4 GHz Intel Pentium III workstation ou equivalente UltraSPARC IIIi 1 GHz AMD Opteron 100 Series 1.8 GHz PowerPC G5 Memria 1 GB 1 GB 1 GB 1 GB 1 GB HD Livre 1 GB 850 MB 850 MB 850 MB 850 MB

Requerimentos de Software NetBeans Enterprise Pack 5.5 executando sobre Java 2 Platform Standard Edition Development Kit 5.0 ou superior (JDK 5.0, verso 1.5.0_01 ou superior), contemplando a Java Runtime Environment, ferramentas de desenvolvimento para compilar, depurar, e executar aplicaes escritas em linguagem Java. Sun Java System Application Server Platform Edition 9. Para Solaris, Windows, e Linux, os arquivos da JDK podem ser obtidos para sua plataforma em http://java.sun.com/j2se/1.5.0/download.html Para Mac OS X, Java 2 Plataform Standard Edition (J2SE) 5.0 Release 4, pode ser obtida diretamente da Apple's Developer Connection, no endereo: http://developer.apple.com/java ( necessrio registrar o download da JDK). Para mais informaes: http://www.netbeans.org/community/releases/55/relnotes.html

Introduo Programao I

2

JEDITM

Colaboradores que auxiliaram no processo de traduo e revisoAlexandre Mori Alexis da Rocha Silva Aline Sabbatini da Silva Alves Allan Wojcik da Silva Andr Luiz Moreira Andro Mrcio Correa Louredo Antoniele de Assis Lima Antonio Jose R. Alves Ramos Aurlio Soares Neto Bruno da Silva Bonfim Bruno dos Santos Miranda Bruno Ferreira Rodrigues Carlos Alberto Vitorino de Almeida Carlos Alexandre de Sene Carlos Andr Noronha de Sousa Carlos Eduardo Veras Neves Cleber Ferreira de Sousa Cleyton Artur Soares Urani Cristiano Borges Ferreira Cristiano de Siqueira Pires Derlon Vandri Aliendres Fabiano Eduardo de Oliveira Fbio Bombonato Fernando Antonio Mota Trinta Flvio Alves Gomes Francisco das Chagas Francisco Marcio da Silva Gilson Moreno Costa Givailson de Souza Neves Gustavo Henrique Castellano Hebert Julio Gonalves de Paula Heraldo Conceio Domingues Hugo Leonardo Malheiros Ferreira Ivan Nascimento Fonseca Jacqueline Susann Barbosa Jader de Carvalho Belarmino Joo Aurlio Telles da Rocha Joo Paulo Cirino Silva de Novais Joo Vianney Barrozo Costa Jos Augusto Martins Nieviadonski Jos Leonardo Borges de Melo Jos Ricardo Carneiro Kleberth Bezerra G. dos Santos Lafaiete de S Guimares Leandro Silva de Morais Leonardo Leopoldo do Nascimento Leonardo Pereira dos Santos Leonardo Rangel de Melo Filardi Lucas Mauricio Castro e Martins Luciana Rocha de Oliveira Lus Carlos Andr Lus Octvio Jorge V. Lima Luiz Fernandes de Oliveira Junior Luiz Victor de Andrade Lima Manoel Cotts de Queiroz Marcello Sandi Pinheiro Marcelo Ortolan Pazzetto Marco Aurlio Martins Bessa Marcos Vinicius de Toledo Maria Carolina Ferreira da Silva Massimiliano Giroldi Mauricio Azevedo Gamarra Mauricio da Silva Marinho Mauro Cardoso Mortoni Mauro Regis de Sousa Lima Namor de S e Silva Nres Chaves Rebouas Nolyanne Peixoto Brasil Vieira Paulo Afonso Corra Paulo Jos Lemos Costa Paulo Oliveira Sampaio Reis Pedro Antonio Pereira Miranda Pedro Henrique Pereira de Andrade Renato Alves Flix Renato Barbosa da Silva Reyderson Magela dos Reis Ricardo Ferreira Rodrigues Ricardo Ulrich Bomfim Robson de Oliveira Cunha Rodrigo Pereira Machado Rodrigo Rosa Miranda Corra Rodrigo Vaez Ronie Dotzlaw Rosely Moreira de Jesus Seire Pareja Sergio Pomerancblum Silvio Sznifer Suzana da Costa Oliveira Tsio Vasconcelos da Silveira Thiago Magela Rodrigues Dias Tiago Gimenez Ribeiro Vanderlei Carvalho Rodrigues Pinto Vanessa dos Santos Almeida Vast Mendes da Silva Rocha Wagner Eliezer Roncoletta

Auxiliadores especiaisReviso Geral do texto para os seguintes Pases: Brasil Tiago Flach Guin Bissau Alfredo C, Bunene Sisse e Buon Olossato Quebi ONG Asas de Socorro

Coordenao do DFJUG Daniel deOliveira JUGLeader responsvel pelos acordos de parcerias Luci Campos - Idealizadora do DFJUG responsvel pelo apoio social Fernando Anselmo - Coordenador responsvel pelo processo de traduo e reviso, disponibilizao dos materiais e insero de novos mdulos Regina Mariani - Coordenadora responsvel pela parte jurdica Rodrigo Nunes - Coordenador responsvel pela parte multimdia Srgio Gomes Veloso - Coordenador responsvel pelo ambiente JEDITM (Moodle)

Agradecimento EspecialJohn Paul Petines Criador da Iniciativa JEDITM Rommel Feria Criador da Iniciativa JEDITM

Introduo Programao I

3

JEDITM

1. ObjetivosNesta seo, vamos discutir os componentes bsicos de um computador, tanto em relao a hardware como a software. Tambm veremos uma pequena introduo sobre linguagens de programao e sobre o ciclo de vida do desenvolvimento. Por fim, mostraremos os diferentes sistemas numricos e as converses entre eles. Ao final desta lio, o estudante ser capaz de: Identificar os diferentes componentes de um computador. Conhecer as linguagens de programao e suas categorias. Entender o ciclo de vida de desenvolvimento de programas e aplic-lo na soluo de Conhecer os diferentes sistemas numricos e as converses entre eles.

problemas.

Introduo Programao I

4

JEDITM

2. IntroduoO computador uma mquina que realiza uma variedade de tarefas de acordo com instrues especficas. uma mquina de processamento de dados, que recebe dados atravs de um dispositivo de entrada e o processador os manipula de acordo com um programa. O computador tem dois componentes principais. O primeiro o Hardware que a parte palpvel (que se pode tocar) do computador. Ele composto de partes eletrnicas e mecnicas. O segundo componente principal o Software que a parte impalpvel (no se pode tocar) do computador. Ele composto de dados e dos programas de computador.

Introduo Programao I

5

JEDITM

3. Componentes Bsicos de um Computador3.1. Hardware3.1.1. Unidade Central de Processamento (CPU - Central Processing Unit)

O processador o crebro do computador. Ele possui milhes de partes eltricas muito pequenas. Ele faz as operaes fundamentais dentro do sistema. Alguns exemplos de processadores so o Pentium, Athlon e SPARC.

Figura 1: Processador de um PC

3.1.2.

Memria

A memria, onde se encontram os dados e as instrues que a CPU precisa para realizar suas tarefas, dividida em diversos locais de armazenamento que possuem seus respectivos endereos lgicos. A CPU acessa a memria pelo uso destes endereos. 1. Memria Principal A memria principal, s vezes, chamada de RAM (Random Access Memory ou Memria de Acesso Randmico) est fortemente ligada ao processador. Ela utilizada para armazenar programas e dados, com os quais o processador est trabalhando no momento e no utilizada para armazenamento de longo prazo, por este motivo seu armazenamento considerado voltil. Isto significa que assim que o computador desligado, toda a informao armazenada na memria principal ser perdida.

Figura 2: Pente de memria

2. A Memria Secundria A memria secundria est ligada memria principal. Ela usada para armazenar programas e dados para uso de longo prazo. Exemplos de memria secundria so discos rgidos e cd-rom.

Introduo Programao I

6

JEDITM

Figura 3: Interior de um Disco rgido do computador

A memria secundria considerada um tipo de armazenamento no-voltil. Isto significa que as informaes nela armazenadas no sero perdidas aps o computador ser desligado. Memria Principal Rpida Cara Baixa Sim Memria Secundria Lenta Barata Alta No Propriedade Velocidade Preo Capacidade Voltil

Tabela 1: Comparao entre a memria principal e a memria secundria

3.1.3.

Dispositivos de Entrada e Sada

Os dispositivos de entrada e sada permitem que o computador interaja com o mundo exterior pela movimentao de dados para dentro e para fora do sistema. Exemplos de dispositivos de entradas so teclados, mouses, microfones, etc. Exemplos de dispositivos de sada so monitores, impressoras, alto-falantes, etc.

3.2. SoftwareO software um programa que o computador usa para funcionar. Ele armazenado em algum dispositivo de hardware como um disco rgido, mas em si mesmo intangvel. Os dados que o computador usa podem ser qualquer coisa que o programa precise. Os programas agem como instrues para o processador. Alguns tipos de programas de computador: 1. Programas de Sistemas Programas necessrios para que o hardware e o software funcionem juntos corretamente. Exemplos: Sistemas Operacionais como Linux, Windows, Unix, Solaris, MacOS 2. Aplicativos Programas que as pessoas usam para realizar determinado trabalho. Exemplos: Processadores de Textos Jogos Planilhas Eletrnicas

3. Compiladores O computador entende apenas uma linguagem: linguagem de mquina. Linguagem de mquinaIntroduo Programao I 7

JEDITM

est na forma de zeros e uns. J que totalmente impraticvel para as pessoas criarem programas usando zeros e uns, preciso haver uma maneira de traduzir ou converter a linguagem que entendemos em linguagem de mquina, para isto, existem os compiladores.

Introduo Programao I

8

JEDITM

4. Viso Geral sobre Linguagens de Programao4.1. O que uma linguagem de programao?Uma linguagem de programao uma tcnica de comunicao padronizada para se expressar instrues para um computador. Assim como os idiomas utilizados pelos seres humanos, cada linguagem tem sua prpria sintaxe e gramtica. Linguagens de programao possibilitam ao programador especificar precisamente com quais dados o computador ir interagir, como estes dados sero gravados/transmitidos, e precisamente quais aes sero tomadas de acordo com as circunstncias. Existem diferentes tipos de linguagens de programao que podem ser usadas para a criao de programas, mas, independente da linguagem utilizada, essas instrues so traduzidas em linguagem de mquina, e podem ser entendidas por computadores.

4.2. Categorias das Linguagens de Programao1. Linguagens de Programao de Alto Nvel Uma linguagem de programao de alto nvel uma linguagem de programao que mais amigvel para o usurio, em alguns casos independente de plataforma, e que abstrai operaes de baixo nvel como acesso a memria. Uma instruo de programao pode ser traduzida em uma ou vrias instrues de mquina por um compilador. Exemplos so Java, C, C++, Basic, Fortran 2. Linguagens de Montagem de Baixo Nvel Linguagens de montagem so similares s linguagens de mquina, so mais simples de programar pois possuem poucos comandos e permitem ao programador substituir nomes por nmeros. Linguagens de montagem esto disponveis em cada famlia de CPU, e cada instruo de montagem traduzida em uma instruo de mquina por um programa montador. Nota: Os termos "alto nvel" e "baixo nvel" so relativos. Originalmente, linguagens de montagem eram consideradas de baixo nvel e COBOL, C, etc. eram consideradas de alto nvel. Muitos programadores, hoje em dia, podem se referir a estas ltimas como linguagens de baixo nvel.

Introduo Programao I

9

JEDITM

5. O Ciclo de Vida de Desenvolvimento de ProgramasProgramadores no sentam e simplesmente comeam a escrever cdigo de uma vez, quando esto tentando fazer um programa de computador. Ao invs disto, eles seguem um planejamento organizado ou metodologia, que quebra o processo em uma srie de tarefas. Este o ciclo de vida quando se tenta resolver um problema no computador:

Figura 4: Ciclo de vida para a resoluo de problemas

Para entendermos o funcionamento deste ciclo na soluo de problemas no computador, vamos definir um problema exemplo que iremos resolver passo a passo enquanto discutimos as metodologias para resoluo de problemas em detalhe.

5.1. Definir o problemaGeralmente, um programador recebe uma tarefa na forma de um problema. Antes do programa poder ser projetado para resolver um problema em particular, o problema deve, em primeiro lugar, ser bem e claramente definido em termos dos seus requisitos de entrada e sada. Um problema claramente definido j metade da soluo. Programao de computadores requer que o problema seja primeiro definido antes de se pensar em criar a soluo. Vamos definir o problema exemplo: Crie um programa que ir determinar o nmero de vezes que um nome aparece em uma lista.

5.2. Analisar o problemaDepois do problema ter sido definido adequadamente, o mais simples e tambm o mais eficiente e efetivo meio de se resolver ser visualiz-lo atravs de uma representao clara e objetiva. Geralmente, este passo se d com a quebra do problema em sub-problemas menores e mais simples. Problema Exemplo: Determinar o nmero de vezes que um nome aparece em uma lista Entrada para o programa: Lista de nomes, nome que se deseja procurar Sada do programa: O nmero de vezes que o nome aparece em uma lista

5.3. Projetar e representar o algoritmoLogo que o problema estiver sido claramente definido, podemos nos concentrar em desenvolver a soluo. Na programao de computadores, geralmente requirido que expressemos a soluo passo a passo.

Introduo Programao I

10

JEDITM

Um Algoritmo uma especificao clara e no ambgua dos passos necessrios para se resolver o problema. Ele pode ser expresso tanto em linguagem humana (Ingls, Tagalog e Portugus), como atravs de representao grfica como fluxograma ou atravs de pseudocdigo, que um meio termo entre a linguagem humana e a linguagem de programao. Dado o problema definido na seo anterior, como podemos expressar a soluo de uma maneira simples e que possa ser entendida? Expressando a soluo atravs da linguagem humana: 1. 2. 3. 4. 5. 6. 7. 8. Obter a lista de nomes, vamos cham-la de NomeLista Obter o nome a ser procurado, vamos cham-lo de NomeChave Criar um contador, vamos cham-lo de Conta Pegar cada nome em NomeLista Se NomeChave for igual ao nome selecionado em NomeLista Adicionar 1 a Conta Repetir 4 at que todos os nomes j tiverem sido comparados Exibir o valor de Conta

Expressando a soluo atravs de um fluxograma:

Figura 5: Exemplo de um fluxograma

Expressando a soluo atravs de pseudocdigo:

Introduo Programao I

11

JEDITM

Fazer NomeLista = Lista de Nomes Fazer NomeChave = o nome a ser procurado Fazer conta = 0 Para cada nome em NomeLista fazer Se nome igual a NomeChave Fazer Conta = Conta + 1 Mostrar ContaFigure 6: Exemplo de pseudocdigo

5.3.1.

Smbolos do Fluxograma e o seu significado

Um fluxograma uma ferramenta de projeto usada para representar graficamente a lgica de uma soluo. Os fluxogramas, tipicamente, no mostram comandos de linguagem de programao. Ao invs disto, eles mostram o conceito em Portugus ou em notao matemtica. Aqui esto algumas dicas dos smbolos mais usados para a criao de fluxogramas. Pode-se utilizar quaisquer smbolos quando criar os seus fluxogramas, desde que use-os de maneira consistente. Smbolo Nome SignificadoRepresenta o processo de se executar uma operao definida ou grupo de operaes que resultam em mudana de valor, forma ou localizao da informao. Tambm funciona como smbolo padro quando nenhum outro smbolo estiver disponvel. Representa a funo de E/S que faz com que os dados fiquem disponveis para processamento (entrada) ou para a exibio (sada) das informaes processadas. Representa a seqncia de informaes disponveis e operaes executveis. As linhas conectam outros smbolos, e as setas so obrigatrias somente em fluxos com orientao da direita para esquerda e de baixo para cima. Representa a adio de informao descritiva, comentrios, ou notas explicativas para esclarecimentos. A linha vertical e a linha pontilhada podem ser colocadas esquerda, como mostrado, ou direita. Representa a deciso que determina qual das alternativas ser seguida.

Smbolo de Processo

Smbolo de Entrada/Sada (E/S)

Smbolo de Linha

Smbolo de Anotao

Smbolo de Deciso

Smbolo Terminal

Representa o comeo, o final, um ponto de interrupo ou um atraso em um programa.

Smbolo Conector

Representa qualquer entrada, ou sada, a outra parte do fluxograma. Tambm serve como um conector fora de pgina.

Introduo Programao I

12

JEDITM

Smbolo

Nome Smbolo de Processo Pr-definido

SignificadoRepresenta um processo nomeado consistindo de uma ou mais operaes ou passos de programa especificados em algum outro lugar.

Tabela 2: Smbolos do Fluxograma

5.4. Codificar e DepurarDepois de construir o algoritmo, ser possvel criar o cdigo fonte. Usando o algoritmo como base, o cdigo fonte pode ser escrito usando a linguagem de programao escolhida. Na maioria das vezes, depois do programador ter escrito o programa, este poder no estar funcionando 100% no incio. O programador deve corrigir o programa no caso de erros (tambm conhecidos como Erros de Compilao) que ocorrem no programa. Este processo chamado de depurao de erros (debug). Existem dois tipos de erros que os programadores podero encontrar. O primeiro o erro em tempo de compilao e o outro o erro em tempo de execuo. Erro em tempo de compilao ocorre se h um erro de sintaxe no cdigo. O compilador ir detectar o erro e o programa nem mesmo compilar. Neste ponto, o programador estar inapto a criar um executvel que possa ser executado pelo usurio at que o erro seja corrigido. Esquecer um ponto-e-vrgula no final de uma instruo ou escrever um comando erroneamente, por exemplo, so erros em tempo de compilao. algo que o compilador pode detectar como sendo um erro. Compiladores no so perfeitos e ento no podem detectar todos os erros em tempo de compilao. Isso especialmente verdadeiro para erros de lgica como as repeties (loops) infinitos. Este tipo de erro chamado de erro em tempo de execuo. Por exemplo, a sintaxe do cdigo pode estar correta. Entretanto, ao seguir a lgica do cdigo, o mesmo pedao de instruo executado vrias e vrias vezes, infinitamente. Neste caso, os compiladores no so espertos o suficiente para pegar todos estes tipos de erro em tempo de compilao, conseqentemente, o programa compila corretamente em um arquivo executvel. Entretanto, quando o usurio final roda o programa, o programa (ou mesmo o computador inteiro) congela devido a uma repetio infinita. Outros tipos de erro em tempo de execuo so: um valor errado a ser computado, uma instruo errada a ser executada, etc.

Introduo Programao I

13

JEDITM

6. Sistemas Numricos e ConversesNmeros podem ser representados de vrias maneiras. A representao depende do que chamado de BASE. As que seguem so quatro das representaes mais comuns.

6.1. DecimalNormalmente representamos os nmeros na forma decimal. Nmeros na forma decimal esto na base 10. Isto significa que os nicos dgitos que aparecem so 0-9. Aqui esto alguns exemplos de nmeros escritos na forma decimal: 12610 (normalmente escrito somente como 126) 1110 (normalmente escrito somente como 11)

6.2. BinrioNmeros na forma binria esto na base 2. Isto significa que os nicos dgitos aceitos so 0 e 1. Precisamos escrever a subscrio 2 para indicar que o nmero um nmero binrio. Aqui esto alguns exemplos de nmeros escritos na forma binria: 11111102 10112

6.3. OctalNmeros na forma octal esto na base 8. Isto significa que os nicos dgitos aceitos so 0-7. Precisamos escrever a subscrio 8 para indicar que o nmero um nmero octal. Aqui esto alguns exemplos de nmeros escritos na forma octal: 1768 138

6.4. HexadecimalNmeros na forma hexadecimal esto na base 16. Isto significa que os nicos dgitos aceitos so 0-9 e as letras A-F (ou a-f, minsculas ou maisculas no importam). Precisamos escrever a subscrio 16 para indicar que o nmero um nmero hexadecimal. Aqui esto alguns exemplos de nmeros escritos na forma hexadecimal: 7E16 B16 Hexadecimal Decimal Equivalente 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 A B C D E F

9 10 11 12 13 14 15

Tabela 3: Nmeros Hexadecimais e sua equivalncia para nmeros decimais

Decimal 12610 1110

Binrio 11111102 10112

Octal 1768 138

Hexadecimal 7E16 B16

Tabela 4: Sumrio dos exemplos

6.5. Converses6.5.1. Decimal para Binrio / Binrio para Decimal

Para converter um nmero decimal em binrio, deve-se dividir continuamente este nmero por 2 e separar o resto (que ser ou 0 ou 1), considerando-o como um dgito da forma binria do nmero. Obter o quociente e dividir novamente por 2, repetir o processo at que o quociente atinja 0 ou 1. Ao trmino, agrupar todos os restos comeando pelo ltimo resto. O resultado a forma binria do nmero.Introduo Programao I 14

JEDITM

NOTA: O ltimo dgito menor que o divisor (2) ser o primeiro nmero do resultado. Por Exemplo: 12610 = ? 2 126 63 31 15 7 3 1 / / / / / / / 2 2 2 2 2 2 2 = = = = = = = Quociente 63 31 15 7 3 1 Resto 0 1 1 1 1 1 1

Escreva nesta direo

Ento, escrevendo os restos de baixo para cima, obtemos o nmero binrio 11111102. Para converter um nmero binrio para decimal, multiplicar o dgito binrio por 2 elevado a posio deste nmero binrio. Adicionar todos os produtos para obter o nmero decimal resultante. Por Exemplo: 11111102 = ?Posio10

Dgitos Binrios

6

5

4

3

2

1

0

1

1

1

1

1

1

0 0 x 20 = 0 1 x 21 = 2 1 x 22 = 4 1 x 2 3= 8 1 x 24= 16 1 x 25 = 32 1 x 26 = 64 TOTAL: 126

6.5.2.

Decimal Para Octal (ou Hexadecimal)/Octal (ou Hexadecimal) para Decimal

Converter nmeros decimais para octal ou hexadecimal basicamente o mesmo que converter decimal para binrio. Entretanto, ao invs de utilizar o 2 como divisor, substitu-lo por 8 (para octal) ou 16 (para hexadecimal). Por Exemplo (Octal): 12610 = ?8

Quociente 126 / 8 = 15 / 8 = 1/8= 15 1

Resto 6 7 1Escreva nesta direo

Ento, escrevendo os restos de baixo para cima, obtemos o nmero octal 1768. Por Exemplo (Hexadecimal): 12610 = ?16

Introduo Programao I

15

JEDITM

Quociente 126 / 16 = 7 / 16 = 7

Resto 14 (igual ao dgito hexadecimal E) 7

Escreva nesta direo

Ento, escrevendo os restos de baixo para cima, obtemos o nmero hexadecimal 7E16 Converter nmeros octais ou hexadecimais um processo semelhante a converter nmeros de binrios para decimal. Para fazer isto, substitumos o nmero 2 pelo 8 para octal ou pelo 16 para hexadecimal. Por Exemplo (Octal): 1768 = ?10

Posio

2

1

0

Dgitos Octais 1

7

6 6 x 80 = 6 7 x 81 = 56 1 x 82 = 64 TOTAL: 126

Por Exemplo (Hexadecimal): 7E16 = ? 10Posio

Dgitos 7 Hexadecimais

1

0

E 14 x 160 = 14 7 x 161 = 112 TOTAL: 126

6.5.3.

Binrio para Octal / Octal para Binrio

Para conveter nmeros binrios para octal, partimos o nmero binrio em grupos de 3 dgitos (da direita para esquerda), e o preenchemos com zeros se o nmero de dgitos no for divisvel por 3. Ento, convertemos cada partio em seu correspondete dgito octal. A tabela abaixo mostra a representao binria de cada dgito octal. Dgito Octal 0 1 2 3 4 5 6 7 Por Exemplo: Representao Binria 000 001 010 011 100 101 110 111

Tabela 5: Dgitos Octais e sua representao binria correspondente

Introduo Programao I

16

JEDITM

11111102 = ?

8

0

0 1

1

1

1 7

1

1

1 6

0

Nmero octal equivalente Converter nmeros octais para binrio o oposto do que foi explicado acima. Simplesmente converta cada dgito octal na sua representao binria (conforme a tabela) e concatene-os. O resultado a representao binria.

6.5.4.

Binrio para Hexadecimal / Hexadecimal para Binrio

Para converter nmeros binrios para hexadecimal, partimos o nmero binrio em grupos de 4 dgitos (da direita para a esquerda), e o preenchemos com zero se o nmero de dgitos no for divisvel por 4. Ento convertemos cada partio em seu dgito hexadecimal correspondente. A tabela abaixo mostra a representao binria de cada dgito hexadecimal. Dgito Hexadecimal 0 1 2 3 4 5 6 7 8 9 A B C D E F Por Exemplo: 11111102 = ?16

Representao Binria 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

Tabela 6: Dgitos Hexadecimais e sua representao binria correspondente

0

1 7

1

1

1

1 E

1

0

Nmero hexadecimal equivalenteIntroduo Programao I 17

JEDITM

Converter nmeros hexadecimais para binrio o oposto do que foi explicado acima. Simplesmente converta cada dgito hexadecimal na sua representao binria (conforme a tabela) e concatene-os. O resultado a representao binria.

Introduo Programao I

18

JEDITM

7. Exerccios7.1. Escrevendo AlgoritmosDado o seguinte conjunto de tarefas, crie um algoritmo para realizar cada uma das tarefas abaixo. Escreva os algoritmos usando pseudocdigo ou fluxogramas. 1. 2. 3. Assar po Acessar o computador Obter a mdia de trs nmeros

7.2. Converso de NmerosConverta os nmeros abaixo: 1. 2. 3. 4. 198010 para binrio, hexadecimal e octal 10010011012 para decimal, hexadecimal e octal 768 para binrio, hexadecimal e decimal 43F16 para binrio, decimal e octal

Introduo Programao I

19

Mdulo 1Introduo Programao I

Lio 2Histrico de Java

Verso 1.0 - Jan/2007

JEDITM

1. ObjetivosNesta lio iremos discutir um pouco da histria de Java e o que a tecnologia Java. Tambm iremos discutir as fases de um programa Java. Ao final desta lio, o estudante ser capaz de: Descrever as caractersticas da tecnologia Java como a JVM - Mquina Virtual Java, Garbage Collection e segurana do cdigo; Descrever as diferentes fases de um programa Java.

Introduo Programao I

4

JEDITM

2. Explorando o Java2.1. Um pouco da histriaJava foi criado em 1991 por James Gosling da Sun Microsystems. Inicialmente chamada OAK (Carvalho), em homenagem uma rvore de janela do Gosling, seu nome foi mudado para Java devido a existncia de uma linguagem com o nome OAK.

Figura 1: James Gosling criador do Java

A motivao original do Java era a necessidade de uma linguagem independente de plataforma que podia ser utilizada em vrios produtos eletrnicos, tais como torradeiras e refrigeradores. Um dos primeiros projetos desenvolvidos utilizando Java era um controle remoto pessoal chamado *7 (Star Seven).

Figura 2: Star Seven

Ao mesmo tempo, a World Wide Web e a Internet foram ganhando popularidade. Gosling achava que a linguagem Java poderia ser usada para programao da Internet.

2.2. O que a tecnologia Java?2.2.1. Uma linguagem de programao

Como linguagem de programao, Java pode ser utilizado para criar todos os tipos de aplicaes existentes, de programas de Inteligncia Artificial para Robs at programas para aparelhos celulares.

Introduo Programao I

5

JEDITM

2.2.2.

Um ambiente de desenvolvimento

Como ambiente de desenvolvimento, a tecnologia Java fornece um grande conjunto de ferramentas: um compilador, um interpretador, um gerador de documentao, ferramenta de empacotamento de classes de arquivos e outros.

2.2.3.

Um ambiente de aplicao

Aplicaes de tecnologia Java so tipicamente programas de propsito geral que executam sobre uma mquina onde o Java Runtime Environment instalado.

2.2.4.

Um ambiente de distribuio

H dois ambientes de distribuio principais: Primeiro, o JRE, fornecido atravs do Java 2 Software Development Kit (SDK), contm um conjunto completo de arquivos de classes para todos pacotes de tecnologia Java. Outro ambiente de distribuio o navegador web, ou seja, o browser. Os navegadores web atuais fornecem interpretao tecnologia e ambiente Java em tempo de execuo.

Figura 3: JDK e JRE

2.3. Algumas caractersticas do Java2.3.1. Mquina Virtual Java

A Mquina Virtual Java uma mquina imaginria que implementada atravs de um software emulador em uma mquina real. A JVM prov especificaes de plataforma de hardware na qual compila-se todo cdigo de tecnologia Java. Essas especificaes permitem que o software Java seja uma plataforma independente pois a compilao feita por uma mquina genrica conhecida como JVM. O bytecode uma linguagem de mquina especial que pode ser entendida pela Mquina Virtual Java (JVM). O bytecode independente de qualquer hardware de computador particular. Assim, qualquer computador com o interpretador Java pode executar um programa Java compilado, no importando em que tipo de computador o programa foi compilado.Introduo Programao I 6

JEDITM

2.3.2.

Garbage Collection

Muitas linguagens de programao permitem ao programador alocar memria durante o tempo de execuo. Entretanto, aps utilizar a memria alocada, deve existir uma maneira para desalocar o bloco de memria de forma que os demais programas a utilizem novamente. Em C, C++ e outras linguagens o programador o responsvel por isso. Isso, s vezes, pode ser difcil j que instncias podem ser esquecidas de serem desalocadas da memria pelos programadores e resultar no que chamamos de escapes da memria. Em Java, o programador no possui a obrigao da retirar uma varivel criada das reas de memria, isto feito por uma parte da JVM especfica que chamamos de Garbage Collection. O Garbage Collection o grande responsvel pela liberao automtica do espao em memria. Isso acontece automaticamente durante o tempo de vida do programa Java.

2.3.3.

Segurana do Cdigo

Segurana do Cdigo alcanada em Java atravs da implementao da Java Runtime Environment (JRE). A JRE roda cdigos compilados para a JVM e executa o carregamento de classes (atravs do Class Loader), verificao de cdigo (atravs do verificador de bytecode) e finalmente o cdigo executvel. O Class Loader responsvel por carregar todas as classes necessrias ao programa Java. Isso adiciona segurana atravs da separao do namespace entre as classes do sistema de arquivos local e aquelas que so importadas pela rede. Isso limita qualquer ao de programas que podem causar danos, pois as classes locais so carregadas primeiro. Depois de carregar todas as classes, a quantidade de memria que o executvel ir ocupar determinada. Isto acrescenta, novamente, uma proteo ao acesso no autorizado de reas restritas ao cdigo pois a quantidade de memria ocupada determinada em tempo de execuo. Aps carregar as classes e definir a quantidade de memria, o verificador de bytecode verifica o formato dos fragmentos de cdigo e pesquisa nestes fragmentos por cdigos ilegais que possam violar o direito de acesso aos objetos. Depois que tudo isso tiver sido feito, o cdigo finalmente executado.

2.4. Fases do Programa JavaA figura seguinte descreve o processo de compilao e execuo de um programa Java.

Figura 1: Fases de um Programa Java.

O primeiro passo para a criao de um programa Java escrever os programas em um editor de texto. Exemplos de editores de texto que podem ser utilizados: bloco de notas, vi, emacs, etc. Esses arquivos so armazenados no disco rgido com a extenso .java.

Introduo Programao I

7

JEDITM

Aps o programa Java ter sido criado e salvo, compile o programa utilizando o Compilador Java. A sada desse processo um arquivo de bytecode com extenso .class. O arquivo .class ento lido pelo Interpretador Java que converte os bytecodes em linguagem de mquina do computador que se est usando.

Tarefa Escrever o programa Compilar o programa Executar o programa

Ferramenta utilizada Qualquer editor de texto Compilador Java Interpretador Java

Sada Arquivo com extenso .java Arquivo com extenso .class (Java bytecode) Sada do programa

Tabela 1: Resumo das fases de um programa Java.

Introduo Programao I

8

Mdulo 1Introduo Programao I

Lio 3Primeiros passos no ambiente de programao

Verso 1.0 - Jan/2007

JEDITM

1. ObjetivosNesta lio discutiremos como escrever, compilar e rodar os programas em Java. Existem duas maneiras para se fazer isso: a primeira por intermdio de uma console e um editor de texto e a segunda utilizando a IDE NetBeans como ambiente integrado de desenvolvimento. Ao final desta lio, o estudante ser capaz de: Criar programas usando o editor de texto com uma console de desenvolvimento do Linux (sugerimos o Ubuntu Dapper) ou Windows Diferenciar entre erros de sintaxe e de tempo de execuo (Run Time) Criar programas utilizando a IDE NetBeans

Introduo Programao I

4

JEDITM

2. IntroduoUma IDE um ambiente de desenvolvimento integrado. um software aplicativo que prov um construtor de interfaces GUI, um editor de cdigos, um compilador e/ou interpretador e um depurador. Nesta lio utilizaremos o Ubuntu Dapper como sistema operacional ou o Windows. Antes de realizar esta tenha certeza de que j tenha instalado no sistema operacional a Java JDK e o NetBeans. Instrues como instalar o Java JDK e o NetBeans podem ser vistas no Apndice A e para os ambientes na verso Windows XP no Apndice B. Antes de entrar em detalhes, veremos o primeiro programa Java que poderemos escrever.

Introduo Programao I

5

JEDITM

3. Primeiro Programa JavaAntes de explicar o que o programa significa, vamos escrev-lo e execut-lo.

3.1

Utilizando a console e um editor de texto

Neste exemplo utilizaremos um simples editor de texto, que pode ser o gedit do Linux ou o notepad do Windows, para editar o cdigo fonte. Em seguida ser necessrio abrir uma janela terminal para compilar e executar os programas. Passo 1: executar um editor de texto Para iniciar um editor de texto no Linux selecione Applications

Accessories Text Editor. Programs

Para iniciar um editor de texto no Windows selecione Start Notepad. Passo 2: Abrir a janela de console Para abrir o terminal no Linux, selecione Applications Para abrir o terminal no Windows, selecione Start cmd e pressione o boto OK.

Accessories

Accessories Terminal.

Run... e na janela que se apresenta, digite

Passo 3: Escrever as instrues utilizando o Editor de Texto Digite as seguintes instrues no editor de textos: public class Hello { /** * Meu primeiro programa Java */ public static void main(String[] args) { // Mostra na tela o texto "Hello world" System.out.println("Hello world!"); } } Passo 4: Salvar o programa Java Chamaremos o programa de "Hello.java" e o colocaremos em uma pasta denominada "myJavaPrograms". Caso esta pasta no tenha sido criada, retorne janela de terminal aberta e insira as seguintes instrues: Para o Linux: $ md myJavaPrograms Para o Windows: C:\> md myJavaPrograms Retorne ao Editor de textos e salve o programa. Para abrir a caixa de dilogo salvar selecione aIntroduo Programao I 6

JEDITM

opo "File" localizada na barra de menus e depois clique na opo "Save". Selecione a nova pasta criada como myJavaPrograms para entrar nela. A pasta deve estar vazia porque ainda no salvamos nada dentro dela. Na caixa de texto "Name", digite o nome do programa (Hello.java), e depois clique no boto salvar. ATENO: Para o Notepad no Windows, mude o Tipo para "All Files" (em Save as Type). Aps salvar o arquivo observe que o ttulo da janela mudou de "Untitled" para "Hello.java", caso deseje alterar novamente o arquivo basta edit-lo e depois salv-lo novamente clicando em File

Save.

Passo 5: Entrar na pasta que contm o programa O prximo passo deve ser o de compilar o programa. Inicialmente, precisamos entrar na pasta que o contm. Retorne janela do terminal. Em Linux: Normalmente, quando abrimos uma janela terminal, ela vai diretamente para sua pasta home (identificada por $). Para ver o que tem dentro do diretrio digite ls (LS em minscula, significando "List Sources") e pressione ENTER. Isso far com que sejam listados os arquivos e pastas da pasta home. Verifique a existncia de uma pasta chamada "myJavaPrograms", criada a pouco, sendo esta o local em que foi salvo o programa "Hello.java". Mudaremos o contexto para esta pasta. Para entrar nesta pasta devemos utilizar o comando: cd [nome da pasta]. O comando "cd" significa "Change Directory". Digitaremos: $ cd myJavaPrograms Agora que estamos dentro da pasta onde o arquivo do programa est, poderemos ento compillo. Certifique-se de que o arquivo est realmente dentro desta, executando o comando ls (LS em minscula) novamente. Em Windows: Normalmente, quando abrimos uma janela terminal ela vai diretamente para sua pasta raiz (identificada por C:\). Para conhecer o contedo do diretrio digite dir (significando "directory") e pressione ENTER. Isso far com que sejam listados os arquivos e pastas da pasta principal. Verifique a existncia de uma pasta chamada "myJavaPrograms", criada a pouco, sendo esta o local em que foi salvo o programa "Hello.java". Mudaremos o contexto para esta pasta. Para entrar nesta pasta devemos utilizar o comando: cd [nome da pasta]. O comando "cd" significa "Change Directory". Digitaremos: C:\>cd myJavaPrograms Agora que estamos dentro da pasta onde o arquivo do programa est, poderemos ento compillo. Certifique-se de que o arquivo est realmente dentro desta, executando o comando dir novamente. Passo 6: Compilar o programa

Introduo Programao I

7

JEDITM

Para compilar o programa, utilizamos o comando: javac [Nome do Arquivo]. Ou seja: javac Hello.java Durante a compilao, criado o arquivo: [Nome do Arquivo].class, neste caso, Hello.class, que contm o cdigo em linguagem de mquina (chamado de bytecode). Passo 7: Executar o programa Assumindo que no ocorreu problemas na compilao (caso tenha ocorrido qualquer problema refaa os passos realizados), estamos prontos para executar o programa. Para executar o programa, utilizamos o comando: java [nome do arquivo sem a extenso]. No caso do exemplo, digite: java Hello Veremos na mesma tela, em que foi executado o comando, a seguinte mensagem: Hello world!

3.2

Erros

Vimos um pequeno programa Java, geralmente no encontraremos qualquer problema para compilar e executar esses programas, entretanto nem sempre este o caso, como mencionamos na primeira parte deste curso, ocasionalmente encontramos erros durante esse processo. Como mencionamos antes, h dois tipos de erros: o primeiro pode ocorrer durante a compilao, chamado de erro de sintaxe, o segundo pode ocorrer durante a execuo, chamado runtime error.

3.2.1

Erros de Sintaxe

Os erros de sintaxe normalmente so erros de digitao, ocasionados pelo programador que pode ter se equivocado e digitar uma instruo errada, ou por esquecimento de alguma parte da instruo, por exemplo, um ponto e vrgula. O Compilador tenta isolar o erro exibindo a linha de instruo e mostrando o primeiro caractere incorreto naquela linha, entretanto, um erro pode no estar exatamente neste ponto. Outros erros comuns so a troca de letras, troca de letras maiscula por minscula (a linguagem Java completamente case-sensitive, ou seja, o caractere "a" completamente diferente do caractere "A", e o uso incorreto da pontuao. Vamos retornar ao exemplo, o programa Hello.java. Intencionalmente, escreveremos a palavrachave "static" de forma errada e omitiremos o ponto-e-vrgula em uma instruo e a deixaremos errada. public class Hello { /** * Meu primeiro programa Java */ public statict void main(String[] args) { // A linha abaixo foi retirado o ; System.out.println("Hello world!") }

Introduo Programao I

8

JEDITM

} Salve o programa e execute os passos necessrios para compil-lo. Observe a mensagem de erro gerada ao se tentar compilar novamente o programa: Hello.java:6: expected public statict void main(String[] args) { ^ Hello.java:10: ';' expected } ^ 1 error A primeira mensagem de erro sugere que existe um erro na linha 6 do programa apontado para a palavra void, entretanto esta palavra est correta. O erro na palavra anterior statict que deve ser digitada como static. A segunda mensagem de erro sugere que faltou um ponto-e-vrgula na linha 10, entretanto, esta contm simplesmente o comando de fechar o bloco do mtodo main. O erro est exatamente na linha anterior. Como regra, ao encontrar muitas mensagens de erros devemos corrigir o primeiro erro da lista e tente novamente compilar o programa. Deste modo reduziremos o nmero total de mensagens de erro dramaticamente, pois podem existir o que chamamos de erros derivados, ou seja, um erro que tem por causa a instruo anterior.

3.2.2

Erros em tempo de execuo (Erros de run-time)

Os erros em tempo de execuo so erros que no aparecero at que tentemos executar o programa. Os programas so compilados com sucesso, mas apresentaro respostas erradas, que podem ter como causa se o programador no obedeceu uma lgica coerente ou no caso em erro de estruturas do programa.

Introduo Programao I

9

JEDITM

4. Usando NetBeansConstrumos o programa sem utilizar nenhum recurso sofisticado, iremos aprender como fazer todo o processo da seo anterior utilizando uma IDE. Nesta parte da lio utilizaremos o NetBeans que um Ambiente de Desenvolvimento Integrado (IDE - Integrated Development Environment). Um ambiente de desenvolvimento integrado um software aplicativo que possui uma interface construtora, um editor de texto, um editor de cdigo, um compilador e/ou interpretador e um depurador. Passo 1 : executar o NetBeans Existem duas formas de executar o NetBeans: a primeira utilizando a linha de comandos de uma janela terminal e segunda selecionar o cone de atalho encontrado na janela da rea de trabalho. Para executar o NetBeans por intermdio da linha de comando, abra uma janela terminal (Os passos para abrir a janela terminal foram discutidos anteriormente) e digite:

Figura 1: Executando o NetBeans pela linha de comandos

Para o Windows, este comando deve ser executado na pasta em que o NetBeans foi instalado, por exemplo: C:\Program Files\netbeans-5.5\bin>netbeans A segunda maneira de executar o NetBeans clicando no cone de atalho encontrado na rea de trabalho do computador.

Figura 2: cone do NetBeans 5.5 no Desktop

Depois de abrir a IDE NetBeans ser mostrada a interface grfica GUI, conforme Figura 3:

Introduo Programao I

10

JEDITM

Figura 3: Janela de Welcome do NetBeans

Passo 2: construir o projeto Clique em File New Project, depois de fazer isso, uma janela de dilogo aparecer. Neste momento deve-se clicar em "Java Application" e em seguida clicar no boto "Next >".

Figura 4: Escolhendo o tipo do projeto

Introduo Programao I

11

JEDITM

Ser mostrada uma nova janela de dilogo, conforme a figura 5.

Figura 5: Inserindo as informaes do projeto

Troque o local da aplicao clicando no boto "Browse...". Aparecer uma janela de dilogo para localizao do diretrio. D um clique duplo no seu diretrio home.

Figura 6: Acertando a Localizao do Projeto

Introduo Programao I

12

JEDITM

O contedo da raiz do diretrio ser apresentado. D um clique duplo no diretrio MYJAVAPROGRAMS e depois d um clique no boto "Open".

Veja que a localizao do projeto mudou para /home/florence/MYJAVAPROGRAMS. Finalmente, no campo "Create Main Class", digite "Hello", que ser o nome da classe principal, e em seguida clique no boto "Finish".

Figura 7: Definindo o Nome da Classe Principal

Introduo Programao I

13

JEDITM

Passo 3: escrever os detalhes do programa Antes de escrever o programa descreveremos a janela principal. Como mostrado na figura 8, automaticamente, o NetBeans cria um cdigo bsico para o programa Java. Poderemos adicionar as declaraes neste cdigo gerado. No lado esquerdo da janela visualizamos uma lista de pastas e arquivos que o NetBeans gerou antes de criar o projeto. Tudo se encontra dentro da sua pasta MYJAVAPROGRAMS, onde foi configurado o local do projeto. No lado direito, visualizamos o cdigo gerado.

Figura 8: Viso do projeto criado

Modifique o cdigo gerado pelo NetBeans, por hora ignoraremos as outras partes das instrues discutindo os detalhes destas posteriormente. Insira a seguinte instruo: System.out.println("Hello world!"); Isto significa que voc deseja que seja mostrada a mensagem "Hello world!" na sada padro do computador, em seguida seja feito um salto de linha. Poderamos substituir esta instruo por duas equivalentes: System.out.print("Hello"); System.out.println(" world!"); O mtodo print() faz com que no seja provocado o salto de linha, utilizaremos para este exemplo a primeira instruo. Insira esta instruo aps a linha de comentrio (que ser desprezada pelo compilador): //TODO code application logic here.

Introduo Programao I

14

JEDITM

Figura 9: Inserindo sua instruo

Passo 4 : compilar o projeto

Para compilar o programa, a partir do Menu Principal selecione Build Build Main Project, ou utilize a tecla de atalho F11, ou utilize o boto de atalho para compilar o cdigo.

Figura 10: Boto de Atalho para executar o Projeto

Introduo Programao I

15

JEDITM

Se no existir erros no programa, veremos a mensagem de sucesso na janela de sada.

Figura 11: Verificando o Sucesso da Compilao

Passo 5: Executar o projeto

Para executar o programa, clique em Run Run Main Project, ou utilize a tecla de atalho F6, ou utilize o boto de atalho para executar o programa.

Figura 12: Executando o projeto

Introduo Programao I

16

JEDITM

O resultado final do programa, ser mostrado na janela de sada.

Figura 13: Resultado final da execuo do projeto

Introduo Programao I

17

JEDITM

5. Exerccios5.1 Melhorando o Hello World!Utilizando o NetBeans crie uma classe chamada [SeuNome], o programa dever mostrar como resultado a mensagem: Welcome to Java Programming [SeuNome]!!!

5.2

A rvore

Utilizando o NetBeans, crie uma classe chamada TheTree. O programa dever mostrar as seguintes linhas na sada: I think that I shall never see, [Eu acho que nunca verei,] a poem as lovely as a tree. [um poema to adorvel quanto uma rvore.] A tree whose hungry mouth is pressed [Uma rvore cuja boca faminta pressionada] Against the Earths sweet flowing breast. [Contra a Terra fluindo em seu seio docemente.]

Introduo Programao I

18

Mdulo 1Introduo Programao I

Lio 4Fundamentos da programao

Verso 1.01 - Jan/2008

JEDITM

1. ObjetivosNesta lio discutiremos as partes bsicas de um programa em Java. Comearemos explicando as partes do programa Hello.java mostrado na ltima lio. Discutiremos ao longo desta lio tambm dicas e convenes para se escrever programas de fcil entendimento. Ao final desta lio, o estudante ser capaz de:

Identificar e entender as partes bsicas de um programa escrito em Java. Diferenciar, em um programa, o que so: os tipos primitivos de dados, variveis, identificadores e operadores. Desenvolver, em Java, um programa usando os conceitos compreendidos nesta lio.

Introduo Programao I

4

JEDITM

2. Entendendo meu primeiro programa em JavaTentaremos compreender este primeiro programa. public class Hello { /** * Meu primeiro programa em Java */ public static void main(String[] args) { // Exibir a mensagem "Hello world" na tela System.out.println("Hello world!"); } } Esta primeira linha do cdigo: public class Hello Indica o nome da classe, que neste caso Hello. Em Java, todo e qualquer cdigo dever ser escrito dentro da declarao de uma classe. Fazemos isso usando a palavra-chave class. Alm disso, a classe usa um identificador de acesso public, indicando que a classe acessvel para outras classes de diferentes pacotes (pacotes so colees de classes). Trataremos de pacotes e identificadores de acesso mais tarde, ainda neste mdulo. A prxima linha contm uma chave {. Indica o incio de um bloco de instrues. Neste programa posicionamos a chave na linha aps a declarao da classe, entretanto, poderamos tambm coloc-la na mesma linha em que a declarao foi feita. Ento, o cdigo seria escrito da seguinte forma: public class Hello { ou public class Hello {

As prximas 3 linhas indicam um comentrio em Java. Um comentrio uma explicao do programador usada na documentao de uma parte do cdigo. Este comentrio no propriamente uma parte do cdigo, usado apenas para fins de documentao do programa. uma boa prtica de programao adicionar comentrios relevantes ao cdigo. /** * Meu primeiro programa em Java */ Um comentrio pode ser indicado pelos delimitadores /* e */. Qualquer coisa entre estes delimitadores ignorado pelo compilador Java e tratado como comentrio. A prxima linha, public static void main(String[] args) { que tambm pode ser escrita da seguinte forma: public static void main(String[] args) { indica o nome de um mtodo no programa que o mtodo principal main. O mtodo main o ponto de partida para qualquer programa feito em Java. Todo e qualquer programa escrito

Introduo Programao I

5

JEDITM

em Java, com exceo de Applets, inicia com o mtodo main. Certifique-se de que a assinatura do mtodo (conforme descrita acima) est correta. A linha seguinte tambm um comentrio em Java, // exibe a mensagem "Hello world" na tela At agora, j aprendemos duas maneiras de fazer comentrios em Java. Uma posicionar o comentrio entre /* e */, e a outra colocar // antes do comentrio. A linha de instruo abaixo, System.out.println("Hello world!"); escreve o texto "Hello World!" na tela. O comando System.out.println( ), escreve na sada padro do computador o texto situado entre aspas duplas. As ltimas duas linhas, que contm somente uma chave respectivamente, o fechamento do mtodo main e da classe. Dicas de programao : 1. Os programas em Java devem sempre conter a terminao .java no nome do arquivo. 2. O nome do arquivo deve sempre ser idntico ao nome da classe pblica. Ento, por exemplo, se o nome da classe pblica Hello o arquivo dever ser salvo com o nome: Hello.java. 3. Inserir comentrios sobre o que a classe ou mtodo realiza, isso facilitar o entendimento de quem posteriormente ler o programa, incluindo o prprio autor. em cada, simbolizam,

Introduo Programao I

6

JEDITM

3. Comentrios em JavaComentrios so notas escritas pelo programador para fins de documentao. Estas notas no fazem parte do programa e no afetam o fluxo de controle. Java suporta trs tipos de comentrios: comentrio de linha estilo C++, comentrio de bloco estilo C e um comentrio estilo Javadoc (utilizado compor a documentao do programa).

3.1. Comentrio de linhaComentrios com estilo em C++ se iniciam por "//". Todo e qualquer texto colocado aps as // ignorado pelo compilador e tratado como comentrio. Por exemplo: // Este um comentrio estilo C++ ou comentrio de linha

3.2. Comentrio de blocoComentrios com estilo em C, tambm chamados de comentrios multi-linhas, se iniciam com /* e terminam com */. Todo o texto posto entre os dois delimitadores tratado como comentrio. Diferente do comentrio estilo C++, este pode se expandir para vrias linhas. Por exemplo: /* * Este um exemplo de comentrio * estilo C ou um comentrio de bloco * */

3.3. Comentrio estilo JavadocEste comentrio utilizado na gerao da documentao em HTML dos programas escritos em Java. Para se criar um comentrio em estilo Javadoc deve se iniciar o comentrio com /** e termin-lo com */. Assim como os comentrios estilo C, este tambm pode conter vrias linhas. Este comentrio tambm pode conter certas tags que do mais informaes documentao. Por exemplo: /** Este um exemplo de um comentrio especial usado para \n gerar uma documentao em HTML. Este utiliza tags como: @author Florence Balagtas @version 1.2 */ Este tipo de comentrio deve ser utilizado antes da assinatura da classe: public class Hello { Para documentar o objetivo do programa ou antes da assinatura de mtodos: public static void main(String[] args) { Para documentar a utilidade de um determinado mtodo.

Introduo Programao I

7

JEDITM

4. Instrues e Blocos em JavaUma instruo composta de uma ou mais linhas terminadas por ponto-e-vrgula. Um exemplo de uma simples instruo pode ser: System.out.println("Hello world"); Um bloco formado por uma ou mais instrues agrupadas entre chaves indicando que formam uma s unidade. Blocos podem ser organizados em estruturas aninhadas indefinidamente. Qualquer quantidade de espaos em branco permitida. Um exemplo de bloco pode ser: public static void main(String[] args) { System.out.print("Hello "); System.out.println("world"); } Dicas de programao: 1. Na criao de blocos, a chave que indica o incio pode ser colocada ao final da linha anterior ao bloco, como no exemplo: public static void main(String [] args) { ou na prxima linha, como em: public static void main(String [] args) { 2. uma boa prtica de programao organizar as instrues que sero colocadas aps o incio de um bloco, como por exemplo: public static void main(String [] args) { System.out.print("Hello "); System.out.println("world"); }

Introduo Programao I

8

JEDITM

5. Identificadores em JavaIdentificadores so representaes de nomes de variveis, mtodos, classes, etc. Exemplos de identificadores podem ser: Hello, main, System, out. O compilador Java difere as letras maisculas de minsculas (case-sensitive). Isto significa que o identificador Hello no o mesmo que hello. Os identificadores em Java devem comear com uma letra, um underscore _, ou um sinal de cifro $. As letras podem estar tanto em maisculo quanto em minsculo. Os caracteres subseqentes podem usar nmeros de 0 a 9. Os identificadores no podem ter nomes iguais s palavras-chave ou palavras reservadas do Java, como: class, public, void, int, etc. Discutiremos mais sobre estas palavras mais tarde. Dicas de programao: 1. Para nomes de classes, a primeira letra deve ser maiscula. Nomes de mtodos ou variveis devem comear com letra minscula. Por exemplo: ExemploDeNomeDeUmaClasse exemploDeNomeDeUmMetodo 2. No caso de identificadores com mais de uma palavra, a primeira letra de cada palavra, com exceo da primeira, deve vir em maisculo. Por exemplo: charArray fileNumber - className 3. Evite o uso de undescores no incio de um identificador. Por exemplo: _NomeDeClasse.

Introduo Programao I

9

JEDITM

6. Palavras-chave em JavaPalavras-chave so identificadores que, em Java, foram pr-definidas para propsitos especficos. No se pode usar esses identificadores como nomes de variveis, mtodos, classes, etc. A seguir, temos a lista com as palavras-chave em Java.

Figura 1: Palavras-Chave em Java

Ao longo dos tpicos seguintes, iremos abordar os significados destas palavras-chave e como so usadas nos programas em Java. Nota: true, false e null no so palavras-chave, porm, so palavras-reservadas, e, da mesma maneira, no permitido seu uso na atribuio a nomes de variveis, mtodos ou classes.

Introduo Programao I

10

JEDITM

7. Tipos de Dados em JavaJava possui 4 tipos de dados. Estes tipos de dados so divididos em: boolean, character, integer e float-point.

7.1. BooleanUm dado boolean poder assumir somente dois valores: true ou false.

7.2. CharacterOs characters so representaes da tabela Unicode. Um smbolo da tabela Unicode um valor de 16 bits que pode substituir os smbolos da tabela ASCII (que possuem 8 bits). A tabela Unicode permite a insero de smbolos especiais ou de outros idiomas. Para representar um caractere usam-se aspas simples. Por exemplo, a letra "a" ser representada como 'a'. Para representar caracteres especiais, usa-se a "\" seguido pelo cdigo do caractere especial. Por exemplo, '\n' para o caractere de nova linha, '\'' representar o character ' (aspas simples) e '\u0061' representao Unicode do smbolo 'a'.

7.3. IntegerOs dados do tipo integer vm em diferentes formatos: decimal (base 10), hexadecimal (base 16), e octal (base 8). Ao usar estes diferentes tipos de dados Integer nos programas necessrio seguir algumas notaes preestabelecidas. Para dados decimais no existe notao, basta escrever o nmero. Os nmeros hexadecimais devero ser precedidos por "0x" ou "0X". E os octais devero ser precedidos por "0". Por exemplo, considere o nmero 12. Sua representao em decimal apenas o nmero 12, sem nenhuma notao adicional, enquanto que sua representao em hexadecimal 0xC (pois o nmero 12 em hexadecimal representado pela letra C), e em octal ele representado por 014. O valor padro para tipos de dados Integer o tipo int. Um int um valor, com sinal, de 32 bits. Em alguns casos pode ser necessrio forar o dado Integer a ser do tipo long, para fazer isso basta colocar a letra "l" (L minscula) ou "L" aps o nmero. Um dado do tipo long um valor com sinal de 64 bits. Falaremos mais sobre os tipos de dados mais tarde.

7.4. Float-PointOs tipos de float-point representam dados Integer com parte fracionria. Um exemplo o nmero 3.1415 (lembrando que o padro ingls utiliza o "." como divisor da parte fracionria). Esses tipos podem ser expressos em notao cientfica ou padro. Um exemplo de notao padro o nmero 583.45 enquanto que em notao cientfica ele seria representado por 5.8345e2. O valor padro para um dado ponto-flutuante o double, que um valor de 64 bits. Se for necessrio usar um nmero com uma preciso menor (32 bits) usa-se o float, que finalizado pela letra "f" ou "F" acrescida ao nmero em questo, por exemplo, 583.45f.

Introduo Programao I

11

JEDITM

8. Tipos de Dados PrimitivosA linguagem Java possui 8 tipos de dados primitivos. Eles so divididos nas seguintes representaes: Representao lgico inteiro inteiro longo nmero fracionrio Tipo de Dado Boolean Integer e Character Integer Float-point Dado Primitivo boolean char, byte, short e int long float e double

Tabela 1: Representaes dos dados primitivos

8.1. LgicoO tipo boolean pode representar dois estados: true (verdadeiro) ou false (falso). Um exemplo : boolean resultado = true; No exemplo demonstrado acima, declarado um atributo chamado resultado do tipo boolean e atribudo a este o valor verdadeiro.

8.2. InteiroOs inteiros em Java podem ser representados em 5 formas, como j foi visto, e estas so: decimal, octal, hexadecimal, ASCII e Unicode. Como por exemplo: 2 077 0xBACC 'a' '\u0061' // // // // // valor 2 em decimal 0 indica que ele est representado em octal. 0x indica que ele est representado em hexadecimal. representao ASCII representao Unicode

O dado do tipo char um inteiro especial, sendo exclusivamente positivo e representa um nico Unicode. Ele deve ser, obrigatoriamente, colocado entre aspas simples (''). Sua representao como inteiro pode ser confusa para o iniciante, entretanto, o tempo e a prtica faro com que se acostume com este tipo. Por exemplo: char c = 97; byte b = 'a'; // representa o smbolo 'a' // em inteiro representa o nmero 97

possvel definir para qualquer inteiro nas formas mostradas. O que difere o tipo char dos demais inteiros que a sua sada sempre ser mostrada como um valor ASCII. Enquanto que os inteiros sero sempre mostrados por nmeros decimais. Por exemplo: char c = 97; byte b = 'a'; System.out.println("char = " + c + " - byte = " + b); Resultar: char = a - byte = 97

Introduo Programao I

12

JEDITM

Um cuidado deve ser tomado quanto aos inteiros: qualquer operao efetuada entre eles ter sempre como resultado um tipo int. Por exemplo: byte b1 = 1; byte b2 = 2; byte resultado = b1 + b2; Esta instruo final causar um erro de compilao, devendo ser modificada para: int resultado = b1 + b2;

8.3. Inteiro LongoOs inteiros tm por padro o valor representado pelo tipo primitivo int. Pode-se represent-los como long adicionando, ao final do nmero, um "l" ou "L". Os tipos de dados inteiros assumem valores nas seguintes faixas: Tamanho em memria 8 bits 16 bits 16 bits 32 bits 64 bits Dado primitivo byte char short int long Faixa 7 7 -2 at 2 -1 0 at 2 -2 -2 -2 15 31 63 16 -1

15 at 2 -1 31 at 2 -1 63 at 2 -1

Tabela 2: Tipos e faixa de valores dos Inteiros e Inteiro Longo

Dicas de programao: 1. Para declarar um nmero como sendo um long prefervel usar L maisculo, pois, se este estiver em minsculo, pode ser difcil distingu-lo do dgito 1.

8.4. Nmero FracionrioOs dados do tipo ponto-flutuante possuem o valor double como padro. Os nmeros flutuantes possuem um ponto decimal ou um dos seguintes caracteres: E ou e // expoente F ou f // float D ou d // double So exemplos, 3.14 6.02E23 2.718F 123.4E+306D // // // // tipo double double com expoente float double

No exemplo acima, o nmero 23 aps o E implicitamente positivo. equivalente a 6.02E

Introduo Programao I

13

JEDITM

+23. Os dados de tipo ponto-flutuante podem assumir valores dentro das seguintes faixas: Tamanho em memria 32 bits 64 bits Dado primitivo float double Faixa 38 38 -10 at 10 -1 308 308 -10 at 10 -1

Tabela 3: Tipos e faixa de valores dos Nmero Fracionrios

Introduo Programao I

14

JEDITM

9. VariveisUma varivel um espao na memria usado para armazenar o estado de um objeto. Uma varivel deve ter um nome e um tipo. O tipo da varivel indica o tipo de dado que ela pode conter. O nome das variveis deve seguir as mesmas regras de nomenclatura que os identificadores.

9.1. Declarando e inicializando VariveisA seguir, vemos como feita a declarao de uma varivel: [= valor inicial];

nota: os valores colocados entre < > so obrigatrios, enquanto que os valores contidos entre [ ] so opcionais. Aqui vemos um exemplo de programa que declara e inicializa algumas variveis: public class VariableSamples { public static void main( String[] args ){ // declara uma varivel com nome result e tipo boolean boolean result; // declara uma varivel com nome option e tipo char char option; // atribui o smbolo C para a varivel option = 'C'; // declara uma varivel com nome grade e tipo double // e a inicializa com o valor 0.0 double grade = 0.0;

} }

Dicas de programao: 1. sempre prefervel que se inicialize uma varivel assim que ela for declarada. 2. Use nomes com significado para suas variveis. Se usar uma varivel para armazenar a nota de um aluno, declare-a com o nome 'nota' e no simplesmente com uma letra aleatria 'x'. 3. prefervel declarar uma varivel por linha, do que vrias na mesma linha. Por exemplo: int variavel1; int variavel2; int variavel1, variavel2;

E no:

9.2. Exibindo o valor de uma Varivel

Introduo Programao I

15

JEDITM

Para exibirmos em qualquer dispositivo de sada o valor de uma varivel, fazemos uso dos seguintes comandos: System.out.println() System.out.print() Aqui est um simples programa como exemplo: public class OutputVariable { public static void main( String[] args ){ int value = 10; char x; x = 'A'; System.out.println(value); System.out.println("The value of x = " + x );

} }

A sada deste programa ser a seguinte: 10 The value of x = A

9.3. System.out.println( ) e System.out.print( )Qual a diferena entre os comandos System.out.println( ) e o System.out.print( )? O primeiro faz iniciar uma nova linha aps ser exibido seu contedo, enquanto que o segundo no. Considere as seguintes instrues: System.out.print("Hello "); System.out.print("world!"); Essas instrues apresentaro a seguinte sada: Hello world! Considere as seguintes: System.out.println("Hello "); System.out.println("world!"); Estas apresentaro a seguinte sada: Hello world!

9.4. Referncia de Variveis e Valor das VariveisIremos diferenciar os dois tipos de variveis suportados pelo Java. Estes podem ser de referncia ou de valor. As variveis de valor, ou primitivas, so aquelas que armazenam dados no exato espao de memria onde a varivel est.

Introduo Programao I

16

JEDITM

As variveis de referncia so aquelas que armazenam o endereo de memria onde o dado est armazenado. Ao declarar uma varivel de certa classe (varivel de classe), se declara uma varivel de referncia a um objeto daquela classe. Por exemplo, vamos supor que se tenha estas duas variveis do tipo int e da classe String. int num = 10; String nome = Hello; Suponha que o quadro abaixo represente a memria do computador, com seus endereos de memria, o nome das variveis e os tipos de dados que ele pode suportar. Endereo de memria 1001 : 1563 : : 2000 Nome da varivel num nome Dado 10 : Endereo (2000) : : "Hello"

A varivel (do tipo int) num o dado o atual valor contido por ela e, a referncia da varivel (do tipo string) nome somente armazenado o endereo de memria que contm o valor da varivel.

Introduo Programao I

17

JEDITM

10. OperadoresEm Java temos diferentes tipos de operadores. Existem operadores aritmticos, operadores relacionais, operadores lgicos e operadores condicionais. Estes operadores obedecem a uma ordem de precedncia para que o compilador saiba qual operao executar primeiro, no caso de uma sentena possuir grande variedade destes.

10.1. Operadores AritmticosAqui temos a lista dos operadores aritmticos que podem ser utilizados na criao de expresses matemticas: Operador * / % + Uso op1 * op2 op1 / op2 Descrio Multiplica op1 por op2 Divide op1 por op2

op1 % op2 Resto da diviso de op1 por op2 op1 - op2 op1 + op2 Subtrai op2 de op1 Soma op1 e op2

Tabela 4: Operadores aritmticos e suas funes

Aqui temos um programa que exemplifica o uso destes operadores: public class ArithmeticDemo { public static void main(String[] args) { // alguns nmeros int i = 37; int j = 42; double x = 27.475; double y = 7.22; System.out.println("Variables values..."); System.out.println(" i = " + i); System.out.println(" j = " + j); System.out.println(" x = " + x); System.out.println(" y = " + y); // adio dos nmeros System.out.println("Adding..."); System.out.println(" i + j = " + (i + j)); System.out.println(" x + y = " + (x + y)); // subtrao dos nmeros System.out.println("Subtracting..."); System.out.println(" i - j = " + (i - j)); System.out.println(" x - y = " + (x - y)); // multiplicao dos nmeros System.out.println("Multiplying..."); System.out.println(" i * j = " + (i * j)); System.out.println(" x * y = " + (x * y));

Introduo Programao I

18

JEDITM

// diviso dos nmeros System.out.println("Dividing..."); System.out.println(" i / j = " + (i / j)); System.out.println(" x / y = " + (x / y)); // resto da diviso System.out.println("Comuting the remainder..."); System.out.println(" i % j = " + (i % j)); System.out.println(" x % y = " + (x % y)); // misturando operaes System.out.println("Mixing types..."); System.out.println(" j + y = " + (j + y)); System.out.println(" i * x = " + (i * x));

} } e como sada, temos:

Variables values... i = 37 j = 42 x = 27.475 y = 7.22 Adding... i + j = 79 x + y = 34.695 Subtracting... i - j = -5 x - y = 20.255 Multiplying... i * j = 1554 x * y = 198.37 Dividing... i / j = 0 x / y = 3.8054 Comuting the remainder... i % j = 37 x % y = 5.815 Mixing types... j + y = 49.22 i * x = 1016.58 Nota: Quando um nmero de tipo inteiro e um outro de nmero fracionrio so usados numa nica operao, o resultado ser dado pela varivel de maior tipo, no caso, valor de nmero fracionrio. O nmero inteiro implicitamente convertido para o nmero fracionrio antes da operao ter incio.

Introduo Programao I

19

JEDITM

11. Operadores de Incremento e DecrementoAlm dos operadores aritmticos bsicos, Java d suporte ao operador unrio de incremento (++) e ao operador unrio de decremento (--). Operadores de incremento ou decremento aumentam ou diminuem em 1 o valor da varivel. Por exemplo, a expresso, count = count + 1; // incrementa o valor de count em 1 equivalente a, count++; Operador ++ ++ --Uso op++ ++op op---op Descrio Incrementa op em 1; Avalia a expresso antes do valor ser acrescido Incrementa op em 1; Incrementa o valor antes da expresso ser avaliada Decrementa op em 1; Avalia a expresso antes do valor ser decrescido Decrementa op em 1; Decrementa op em 1 antes da expresso ser avaliada

Tabela 5: Operadores de incremento e decremento

Como visto na tabela acima, os operadores de incremento e decremento podem ser usados tanto antes como aps o operando. E sua utilizao depender disso. Quando usado antes do operando, provoca acrscimo ou decrscimo de seu valor antes da avaliao da expresso em que ele aparece. Por exemplo: int int int k = i = j = k = ++j 10, 3; 0; + i; //resultar em k = 4+10 = 14

Quando utilizado depois do operando, provoca, na varivel, acrscimo ou decrscimo do seu valor aps a avaliao da expresso na qual ele aparece. Por exemplo: int int int k = i = j = k = j++ 10, 3; 0; + i; //resultar em k = 3+10 = 13

Dicas de programao: 1. Mantenha sempre as operaes incluindo operadores de incremento ou decremento de forma simples e de fcil compreenso.

Introduo Programao I

20

JEDITM

12. Operadores RelacionaisOs operadores relacionais so usados para comparar dois valores e determinar o relacionamento entre eles. A sada desta avaliao ser fornecida com um valor lgico: true ou false. Operador > >= < op2 op1 >= op2 op1 < op2 op1 System.out.println(" j > System.out.println(" k > than..."); j = " + (i > j)); //false i = " + (j > i)); //true j = " + (k > j)); //false or equal to..."); " + (i >= j)); //false " + (j >= i)); //true " + (k >= j)); //true

// maior ou igual a System.out.println("Greater than System.out.println(" i >= j = System.out.println(" j >= i = System.out.println(" k >= j =

// menor que System.out.println("Less than..."); System.out.println(" i < j = " + (i < j)); //true System.out.println(" j < i = " + (j < i)); //false System.out.println(" k < j = " + (k < j)); //false // menor ou igual a System.out.println("Less than or equal to..."); System.out.println(" i data2)? data1 : data2; } }

3.4. Declarando um construtor ::= (*) { * } Se um construtor no explicitamente fornecido, um construtor padro automaticamente criado. O construtor padro no possui argumentos e o seu corpo no possui instrues. Dicas de programao: 1. O nome do construtor deve ser o mesmo nome da classe. 2. O nico vlido para construtores so public, protected, e private. 3. Construtores no possuem valor de retorno. Considere a seguinte classe: class ConstructorDemo { private int data; public ConstructorDemo() { data = 100; } ConstructorDemo(int data) { this.data = data; } }

3.5. Construir um objetoPara construir um objeto a partir de uma classe, utilizamos a palavra-chave new seguida por uma chamada ao construtor. class ConstructObj { int data;Introduo Programao II 8

JEDITM

ConstructObj() { /* Inicializao dos dados */ } public static void main(String args[]) { ConstructObj obj = new ConstructObj(); } }

3.6. Acessando elementos dos objetosPara acessar os elementos de um objeto, utilizamos a notao do "ponto". usada da seguinte forma: . O exemplo seguinte, feito com base no anterior com instrues adicionais para acessar os elementos. class ConstructObj { int data; ConstructObj() { /* Dados de inicializao */ } void setData(int data) { this.data = data; } public static void main(String args[]) { ConstructObj obj = new ConstructObj(); //instanciamento obj.setData(10); //acesso a setData() System.out.println(obj.data); //acesso a data } } A execuo desta classe mostrar o seguinte resultado: 10

3.7. PacotesPara indicar que uma determinada classe pertence a um pacote em particular, utilizamos a seguinte sintaxe: ::= package ; Para importar outros pacotes, use a seguinte sintaxe: ::= import ; Com isso, seu cdigo fonte deve ter o seguinte formato: [] * + Guia de cdigo:

+

que pode ter 1 ou mais ocorrncias da linha onde isso foi aplicado.

Vejamos o seguinte exemplo: // Classe pertence ao pacote registration.reportsIntroduo Programao II 9

JEDITM

package registration.reports; // Importa todas as classes do pacote registration.processing import registration.processing.*; // Importa a classe List do pacote java.util import java.util.List; // Cria a classe myClass class MyClass { /* detalhes da classe MyClass */ }

3.8. Os modificadores de acessoA tabela seguinte resume os modificadores de acesso em Java. private Mesma classe Mesmo pacote Pacotes diferentes (sendo subclasse) Pacotes diferentes (no sendo subclasse) sim no no no default sim sim no no protected sim sim sim no public sim sim sim sim

Tabela 1: Modificadores de acesso

3.9. EncapsulamentoProtege os elementos da implementao de uma classe por ser realizado utilizando o modificador de acesso particular na declarao dos atributos. O exemplo seguinte protege o atributo secret. Note que este atributo indiretamente acessado por outras classes utilizando os mtodos get e set. class Encapsulation { private int secret; //Campo oculto public boolean setSecret(int secret) { if (secret < 1 || secret > 100) { return false; } this.secret = secret; return true; } public int getSecret() { return secret; } } Caso no se deseje que outras classes modifiquem o atributo secret, possvel configurar o modificador de acesso do mtodo setSecret() como particular (private).

3.10. HeranaPara se criar uma classe filha ou uma subclasse com base em uma classe existente, utilizamos a palavra-chave extends na declarao da classe. Uma classe pode estender qualquer classe desde que ela no possua o modificador final. Por exemplo. A classe Point a super-classe da classe ColoredPoint: import java.awt.*; class Point { int x;Introduo Programao II 10

JEDITM

}

int y;

class ColoredPoint extends Point { Color color; }

3.11. Realizando override em mtodosUm mtodo de uma subclasse pode modificar um mtodo de uma super-classe quando a subclasse define um mtodo cuja assinatura idntica ao mtodo da super-classe. A assinatura de um mtodo e a informao encontrada no cabealho de definio deste. A assinatura inclui o tipo de retorno, o nome e a lista de argumentos do mtodo. Os modificadores de acesso e outras palavras-chaves, tais como final e static, no esto includos. class Superclass { void display(int n) { System.out.println("super: " + n); } } class Subclass extends Superclass { void display(int k) { // mtodo overriding System.out.println("sub: " + k); } } class OverrideDemo { public static void main(String args[]) { Subclass SubObj = new Subclass(); Superclass SuperObj = SubObj; SubObj.display(3); ((Superclass)SubObj).display(4); } } A execuo desta classe mostrar o seguinte resultado: sub: 3 sub: 4 O mtodo chamado determinado pelo tipo de dado do objeto que invoca o mtodo. Os modificadores de acesso dos mtodos no precisam ser os mesmos. Contudo, os mtodos polimrficos devem ter modificadores de acesso igual ou menos restritivos que os mtodos originais. Considere o seguinte exemplo. Vejamos qual dos seguintes mtodos com polimorfismo por override pode causar um erro no momento de compilao. class Superclass { void overriddenMethod() { } } class Subclass1 extends Superclass { public void overriddenMethod() { } } class Subclass2 extends Superclass { void overriddenMethod() { } }

Introduo Programao II

11

JEDITM

class Subclass3 extends Superclass { protected void overriddenMethod() { } } class Subclass4 extends Superclass { private void overriddenMethod() { } } O mtodo overriddenMethod() da Superclass possui o modificador de acesso default. O nico modificador mais restrito que esse o private. Sendo assim, Subclass4 provoca um erro de compilao porque ele tenta modificar o mtodo overriddenMethod() na Superclass com um modificar private que mais restritivo.

3.12. Classes e mtodos abstratosA forma genrica para um mtodo abstrato a seguinte: abstract (*); Uma classe contendo um mtodo abstrato deve ser declarada como uma classe abstrata. abstract class { /* construtores, campos e mtodos */ } A palavra-chave abstract no pode ser aplicada para construtores ou mtodos estticos. importante lembrar tambm que classes abstratas no podem servir para a construo de objetos (desde que seus mtodos sejam implementados). Classes que estendem uma classe abstrata so obrigadas a implementar todos os mtodos abstratos. Caso contrrio a subclasse dever ser declarada tambm como abstract. Dicas de programao: 1. Note que declarar um mtodo abstract muito similar declarao de uma classe normal exceto que um mtodo abstrato no possui corpo. Sua assinatura imediatamente finalizada por um ponto e vrgula (;). Por exemplo: abstract class SuperHero { abstract void displayPower(); } class Superman extends SuperHero { void displayPower() { System.out.println("Fly..."); } } class SpiderMan extends SuperHero { void displayPower() { System.out.println("Fast..."); } }

3.13. InterfaceDeclarar uma interface basicamente como declarar uma classe, entretanto, ao invs de utilizar a palavra-chave class, utilizamos a palavra-chave interface. Eis a sintaxe:Introduo Programao II 12

JEDITM

::= interface { * [ (*);]* } Os mtodos e atributos so obrigatoriamente public. Dicas de programao: 1. Atributos so implicitamente static e final e so obrigados a serem inicializados com um valor constante. 2. Como na declarao de uma classe de alto nvel, o nico modificador de acesso vlido so public e package (caso nenhum modificador de acesso preceder a palavra-chave class). Uma classe pode implementar uma interface existente utilizando a palavra-chave implements. Esta classe obrigada a implementar todos os mtodos da interface. Uma classe pode implementar mais de uma interface. O exemplo a seguir demonstra com declarar e utilizar uma interface: interface MyInterface { void iMethod(); } class MyClass1 implements MyInterface { public void iMethod() { System.out.println("Interface method."); } void myMethod() { System.out.println("Another method."); } } class MyClass2 implements MyInterface { public void iMethod() { System.out.println("Another implementation."); } } class InterfaceDemo { public static void main(String args[]) { MyClass1 mc1 = new MyClass1(); MyClass2 mc2 = new MyClass2(); mc1.iMethod(); mc1.myMethod(); mc2.iMethod(); } }

A execuo desta classe mostrar o seguinte resultado: Interface method. Another method. Another implementation.

Introduo Programao II

13

JEDITM

3.14. A palavra-chave thisA palavra-chave this pode ser utilizada pela seguintes razes: 1. Diferenciar atributos locais dos atributos de classe. 2. Referenciar objetos que invocam mtodos no estticos. 3. Referenciar outros construtores. Como exemplo, considere a seguinte classe onde data funciona como um atributo e um argumento ao mesmo tempo: class ThisDemo1 { int data; void method(int data) { this.data = data; /* this.data refere-se ao atributo enquanto data refere-se ao argumento */ } } O exemplo seguinte demonstra como este objeto implicitamente referenciado quando os seus elementos no estticos so invocados. class ThisDemo2 { int data; void method() { System.out.println(data); //this.data } void method2() { method(); //this.method(); } } Vamos rever o significado de polimorfismo por overloading. Um construtor, assim como um mtodo, pode ser modificado. Mtodos diferentes numa mesma classe podem compartilhar o mesmo nome desde que a lista de seus argumentos sejam diferentes. Mtodos overloading precisam diferir no nmero ou no tipo de seus argumentos. Este prximo exemplo possui dois construtores e a referncia this utilizada para se referenciar a outras verses do construtor. class ThisDemo3 { int data; ThisDemo3() { this(100); } ThisDemo3(int data) { this.data = data; } } Dicas de programao: 1. A chamada para this() deve ser a primeira instruo no construtor.

3.15. A palavra-chave superO uso da palavra-chave super est relacionado com herana. utilizada para chamar construtores da super-classe. Tambm pode ser utilizada como a palavra-chave this para referenciar elementos da super-classe.

Introduo Programao II

14

JEDITM

A classe a seguir demonstra como a referncia super utilizada para chamar o construtor da super-classe. class Person { String firstName; String lastName; Person(String fname, String lname) { firstName = fname; lastName = lname; } } class Student extends Person { String studNum; Student(String fname, String lname, String sNum) { super(fname, lname); studNum = sNum; } } Dicas de programao: 1. super() refere-se a super-classe imediata. Ela deve ser a primeira instruo do contrutor da subclasse. Est palavra-chave tambm pode ser utilizada para referenciar os elementos da como mostrado no exemplo seguinte. class Superclass{ int a; void display_a(){ System.out.println("a = " + a); } } class Subclass extends Superclass { int a; void display_a(){ System.out.println("a = " + a); } void set_super_a(int n){ super.a = n; } void display_super_a(){ super.display_a(); } } class SuperDemo { public static void main(String args[]){ Superclass SuperObj = new Superclass(); Subclass SubObj = new Subclass(); SuperObj.a = 1; SubObj.a = 2; SubObj.set_super_a(3); SuperObj.display_a(); SubObj.display_a(); SubObj.display_super_a(); System.out.println(SubObj.a); }Introduo Programao II 15

super-classe

JEDITM

} A execuo desta classe mostrar o seguinte resultado: a = 1 a = 2 a = 3 2

3.16. A palavra-chave staticA palavra-chave static pode ser aplicada a elementos de uma classe. Permite que atributos ou mtodos das classes sejam acessados antes que qualquer instncia da classe seja criada. Um atributo de classe possui o acesso global para a classe. Isto significa que o atributo pode ser acessado por todas as instncias da classe. Mtodos estticos podem ser invocados sem necessitar criar uma instncia da classe. Todavia, eles s acessam os elementos estticos da classe. Alm disso, eles no podem fazer referencia aos objetos this ou super. A palavra-chave static pode tambm ser aplicada aos free-blocks. Estes so chamados de blocos estticos. Estes blocos so executados somente uma vez quando a classe carregada. Eles so usualmente utilizados para inicializar atributos estticos da classe. class Demo { static int a = 0; static void staticMethod(int i) { System.out.println(i); } static { //static block System.out.println("This is a static block."); a += 1; } } class StaticDemo { public static void main(String args[]) { System.out.println(Demo.a); Demo.staticMethod(5); Demo d = new Demo(); System.out.println(d.a); d.staticMethod(0); Demo e = new Demo(); System.out.println(e.a); d.a += 3; System.out.println(Demo.a+", " +d.a +", " +e.a); } } A execuo desta classe mostrar o seguinte resultado: This is a static block. 1 5 1 0 1 4, 4, 4

3.17. A palavra-chave finalA palavra-chave final pode ser utilizada para atributos, mtodos e classes. Para lembrar daIntroduo Programao II 16

JEDITM

funo da palavra-chave final, simplesmente lembre-se que ela restringe a modificao de atributos, mtodos e classes. O valor de um atributo final no pode ser modificado uma vez que esse valor foi determinado. Por exemplo: final int data = 10; A instruo seguinte ir causar um erro de compilao: data++; Um mtodo final no pode ser modificado na classe filha: final void myMethod() { //em uma classe pai } myMethod no poder mais ser realizado o polimorfismo por override na classe filha. Uma classe final no poder mais ser herdada ao contrrio das classes comuns. final public class MyClass { } Dicas de programao: 1. A ordem de digitao das palavras-chaves final e public podem ser trocadas. 2. Essa instruo ir provocar um erro de compilao, pois MyClass no pode ser extendida. public WrongClass extends MyClass { }

3.18. Classes internasUma classe interna uma classe declarada dentro de outra classe. class OuterClass { int data = 5; class InnerClass { int data2 = 10; void method() { System.out.println(data); System.out.println(data2); } } public static void main(String args[]) { OuterClass oc = new OuterClass(); InnerClass ic = oc.new InnerClass(); System.out.println(oc.data); System.out.println(ic.data2); ic.method(); } } A execuo desta classe mostrar o seguinte resultado: 5 10

Introduo Programao II

17

JEDITM

Para acessarmos os elementos da classe interna, precisamos de uma instncia da classe interna. Mtodos de uma classe interna podem acessar diretamente os elementos da classe externa.

Introduo Programao II

18

Mdulo 2Introduo Programao II

Lio 2Excees e Assertivas

Verso 1.0 - Mar/2007

JEDITM

1. ObjetivosO conceito bsico sobre tratamento de excees foi mostrado no Mdulo 1 Introduo a Programao I. Esta lio fornecer um entendimento aprofundado sobre excees e tambm sobre assertivas. Ao final desta lio, o estudante ser capaz de: Tratar excees pelo uso de try, catch e finally Diferenciar entre o uso de throw e throws Utilizar as classes de excees existentes Diferenciar entre excees verificadas e no verificadas Definir suas prprias classes de exceo Explicar os benefcios do uso de assertivas Utilizar declaraes assertivas

Introduo Programao II

4

JEDITM

2. O que so excees?2.1. IntroduoBugs ou erros ocorrem freqentemente na execuo dos projetos, mesmo quando estes so escritos por programadores hbeis e experientes. Para evitar perder mais tempo na verificao do erro do que na resoluo do problema em si, Java nos fornece um mecanismo para o tratamento de excees. As excees so, resumidamente, eventos excepcionais. So erros que ocorrem durante a execuo de um determinado trecho de instruo, alterando o seu fluxo normal. Os erros podem ocorrer por diferentes motivos, por exemplo: erros de diviso por zero, acessar elementos em um array alm de seu prprio tamanho, entrada invlida, erro de acesso ao disco rgido, abertura de arquivo inexistente e estouro de memria.

2.2. As classes Error e ExceptionTodas as excees so sub-classes, direta ou indiretamente, da classe Throwable. Imediatamente abaixo desta classe encontram-se as duas categorias gerais de excees: as classes Error e Exception. A classe Exception lida com as condies que os usurios podem tratar. Em geral, estas condies so o resultado de algumas falhas no cdigo. Exemplo de excees so: erro de diviso por zero e erro de ndice em um array. Por outro lado, a classe Error utilizada pela JVM para manipular os erros ocorridos no ambiente de execuo. Geralmente, estes erros esto alm do controle do programador, desde que sejam causados dentro do ambiente de execuo. Por exemplo: erro de falta de memria e erro de acesso ao disco rgido.

2.3. Exemplo de ExceoConsidere a seguinte classe: class DivByZero { public static void main(String args[]) { System.out.println(3/0); System.out.println(Pls. print me.); } } Executando o cdigo, a seguinte mensagem de erro ser apresentada: Exception in thread "main" java.lang.ArithmeticException: / by zero at DivByZero.main(DivByZero.java:3) A mensagem fornece a informao do tipo de exceo que ocorreu e a linha do cdigo que a originou. Esta a forma como o manipulador padro trata as excees no capturadas. Quando no h cdigo do usurio tratando as excees, o manipulador padro de excees entra em ao. Primeiramente, a descrio da exceo que ocorreu apresentada. Alm disso, tambm apresentado o caminho que indica a hierarquia dos mtodos at onde a exceo aconteceu. Por fim, o manipulador padro de excees faz com que o cdigo termine sua execuo. Ao necessitar tratar as excees de uma maneira diferente? Felizmente, a linguagem Java possui trs importantes palavras-chaves para o tratamento de excees try, catch e finally.

Introduo Programao II

5

JEDITM

3. Capturando Excees3.1. As instrues try-catchComo mencionado na seo anterior, as palavras-chaves try, catch e finally so usadas para tratar diferentes tipos de excees. Estas trs palavras-chaves so usadas juntas mas o bloco finally opcional. Primeiramente, focaremos no bloco try-catch e mais tarde voltaremos ao bloco finally. Encontra-se abaixo a sintaxe geral de uma instruo try-catch. try { } catch ( ) { } ... } catch ( ) { } Dicas de programao: 1. O bloco catch comea depois do fechamento do bloco precedente, seja este try ou catch. 2. Instrues dentro do bloco devem ser recuadas de modo a conseguir uma melhor visualizao. Aplicando isto a classe DivByZero teremos: class DivByZero { public static void main(String args[]) { try { System.out.println(3/0); System.out.println(Please print me.); } catch (ArithmeticException exc) { //reao ao evento System.out.println(exc); } System.out.println(After exception.); } } O erro de diviso por zero um exemplo de um tipo de exceo enco