Você está na página 1de 256

Tcnicas de Programao

Antonio Luiz Santana

Curso Tcnico em Informtica

Tcnicas de Programao
Antonio Luiz Santana

Colatina-ES 2011

Presidncia da Repblica Federativa do Brasil Ministrio da Educao Secretaria de Educao a Distncia

Instituto Federal do Esprito Santo Este Caderno foi elaborado em parceria entre o Instituto Federal do Esprito Santo e a Universidade Federal de Santa Catarina para o Sistema Escola Tcnica Aberta do Brasil e-Tec Brasil.
Equipe de Elaborao Instituto Federal do Esprito Santo IFES Coordenao Institucional Guilherme Augusto de Morais Pinto/IFES Joo Henrique Caminhas Ferreira/IFES Coordenao Curso Allan Francisco Forzza Amaral/IFES Professor-autor Antonio Luiz Santana/IFES Comisso de Acompanhamento e Validao Universidade Federal de Santa Catarina UFSC Coordenao Institucional Araci Hack Catapan/UFSC Coordenao do Projeto Silvia Modesto Nassar/UFSC Coordenao de Design Instrucional Beatriz Helena Dal Molin/UNIOESTE e UFSC Coordenao de Design Grfico Andr Rodrigues/UFSC Design Instrucional Gustavo Pereira Mateus/UFSC Web Master Rafaela Lunardi Comarella/UFSC Web Design Beatriz Wilges/UFSC Mnica Nassar Machuca/UFSC Diagramao Andr Rodrigues da Silva/UFSC Brbara Zardo/UFSC Caroline Ferreira da Silva/UFSC Juliana Tonietto/UFSC Nathalia Takeuchi/UFSC Reviso Jlio Csar Ramos/UFSC Projeto Grfico e-Tec/MEC

S232t Santana, Antonio Luiz Tcnicas de programao : Curso Tcnico em Informtica / Antonio Luiz Santana. Colatina: Ifes, 2011. 114 p. : il. Inclui Bibliografia ISBN: 978-85-62934-01-8 1. Java (Linguagem de programao de computador. 2. Informtica. I. Instituto Federal do Esprito Santo. II. Ttulo. CDD: 005.133

NSTITUTO FEDERAL

IO GRANDE DO SUL

Apresentao e-Tec Brasil


Prezado estudante, Bem-vindo ao e-Tec Brasil! Voc faz parte de uma rede nacional pblica de ensino, a Escola Tcnica Aberta do Brasil, instituda pelo Decreto n 6.301, de 12 de dezembro 2007, com o objetivo de democratizar o acesso ao ensino tcnico pblico, na modalidade a distncia. O programa resultado de uma parceria entre o Ministrio da Educao, por meio das Secretarias de Educao a Distancia (SEED) e de Educao Profissional e Tecnolgica (SETEC), as universidades e escolas tcnicas estaduais e federais. A educao a distncia no nosso pas, de dimenses continentais e grande diversidade regional e cultural, longe de distanciar, aproxima as pessoas ao garantir acesso educao de qualidade, e promover o fortalecimento da formao de jovens moradores de regies distantes, geograficamente ou economicamente, dos grandes centros. O e-Tec Brasil leva os cursos tcnicos a locais distantes das instituies de ensino e para a periferia das grandes cidades, incentivando os jovens a concluir o ensino mdio. Os cursos so ofertados pelas instituies pblicas de ensino e o atendimento ao estudante realizado em escolas-polo integrantes das redes pblicas municipais e estaduais. O Ministrio da Educao, as instituies pblicas de ensino tcnico, seus servidores tcnicos e professores acreditam que uma educao profissional qualificada integradora do ensino mdio e educao tcnica, capaz de promover o cidado com capacidades para produzir, mas tambm com autonomia diante das diferentes dimenses da realidade: cultural, social, familiar, esportiva, poltica e tica. Ns acreditamos em voc! Desejamos sucesso na sua formao profissional! Ministrio da Educao Janeiro de 2010
Nosso contato etecbrasil@mec.gov.br

e-Tec Brasil

Indicao de cones
Os cones so elementos grficos utilizados para ampliar as formas de linguagem e facilitar a organizao e a leitura hipertextual. Ateno: indica pontos de maior relevncia no texto.

Saiba mais: oferece novas informaes que enriquecem o assunto ou curiosidades e notcias recentes relacionadas ao tema estudado. Glossrio: indica a definio de um termo, palavra ou expresso utilizada no texto. Mdias integradas: sempre que se desejar que os estudantes desenvolvam atividades empregando diferentes mdias: vdeos, filmes, jornais, ambiente AVEA e outras. Atividades de aprendizagem: apresenta atividades em diferentes nveis de aprendizagem para que o estudante possa realiz-las e conferir o seu domnio do tema estudado.

e-Tec Brasil

Sumrio

Palavra do professor-autor Apresentao da disciplina Projeto instrucional Aula 1 Plataforma Java 1.1 Introduo 1.2 A linguagem Java 1.3 As caractersticas da linguagem Java 1.4 Criao de programas em Java 1.5 A plataforma Java 1.6 Ambiente de desenvolvimento 1.7 Primeiro contato com o Java Aula 2 Aspectos fundamentais sobre Java 2.1 Tipos de dados 2.2 Definio de variveis e constantes 2.3 Declarao de constantes 2.5 Operadores 2.6 Passagem de parmetros 2.7 Converso de tipos 2.8 Entrada de dados pelo teclado Aula 3 Estruturas condicionais e de controle 3.1 Comandos condicionais 3.3 Uso da estrutura try catch 3.5 While 3.6 For Aula 4 Funes matemticas e de string 4.1 Funes matemticas

9 11 13 15 15 15 17 18 19 21 27 31 31 32 34 35 37 38 40 45 45 47 50 50 53 53

e-Tec Brasil

Aula 5 Criando funes 5.1 Criao de mtodos em Java 5.2 Mtodos sem retorno 5.3 Mtodos com retorno de valores 5.4 Recursividade Aula 6 Utilizando vetores e matrizes 6.1 Definio de array 6.2 Arrays unidimensionais 6.3 Arrays bidimensionais 6.4 Passagem de arrays em mtodos 6.5 Array de objetos Aula 7 Manipulando arquivos 7.1 Definio 7.2 Leitura e gravao de um arquivo texto Aula 8 Estruturas de dados em Java: listas 8.1 Definio de listas 8.2 Implementao de listas por meio de arranjos 8.3 Implementao de listas por meio de estruturas autorreferenciadas Aula 9 Estruturas de dados em Java: pilha 9.1 Definio de pilha 9.2 Propriedades e aplicaes das pilhas 9.3 Conjunto de operaes 9.4 Implementao de pilhas por meio de arranjo 9.5 Implementao de pilhas por meio de estruturas autorreferenciadas Referncias Currculo do professor-autor

73 73 74 78 80 83 83 83 86 87 88 91 91 91 99 99 100 103 107 107 107 108 109 109 113 114

e-Tec Brasil

Tcnicas de Programao

Palavra do professor-autor
Ol caro estudante! Parabns, caro estudante! Voc est iniciando mais uma etapa do Curso Tcnico em Informtica a distncia. A equipe instrucional elaborou todo o material necessrio ao suporte para o seu aprendizado. Neste formato, a disciplina Tcnicas de Programao foi elaborada pensando numa leitura rpida e dinmica, abordando o centro de cada contedo, explanado em aulas bem objetivas. Como j do seu conhecimento, estudar a distncia uma tarefa que envolve sua aplicao na resoluo dos exerccios, contando com todo amparo da equipe que ir apoi-lo no processo de ensino-aprendizagem. Para que isso ocorra de forma efetiva, faz-se necessrio separar um tempo para estudar o material e fazer as leituras complementares indicadas no caderno. Esperamos que voc utilize todos os recursos do ambiente disponveis para dar andamento aos estudos e avanar pelos mdulos. Um grande abrao! Prof. Antonio Luiz Santana

e-Tec Brasil

Apresentao da disciplina
Nesta disciplina vamos estudar cinco tpicos que precisamos utilizar com muita frequncia: conceitos e aplicaes de tipos de dados; tcnicas de modularizao; passagem de parmetros e recursividade; ambientes e tcnicas de desenvolvimento de aplicaes; e estruturas de dados e seus algoritmos. Para este nosso estudo, vamos adotar Java como linguagem para desenvolver aplicaes. Para a digitao do cdigo fonte das classes Java, a nica ferramenta necessria o bloco de notas do Windows; entretanto, qualquer editor de textos disponvel na mquina do leitor pode ser utilizado. Nas trs primeiras aulas, abordaremos os conceitos iniciais de Java e um estudo de variveis e estruturas bsicas de programao. Nas trs aulas subseqentes, apresentaremos os tipos de estrutura de dados e suas aplicaes em Java. Em seguida, abordaremos assuntos especficos sobre modularizao e recursividade. Como em qualquer outra linguagem, h muitas opes no mercado e diversas maneiras de desenvolver aplicaes em Java. Existe uma infinidade de ferramentas que podem deixar o desenvolvedor com dvidas para selecionar o ambiente de trabalho. No momento, as ferramentas que mais se destacam so Eclipse e Netbeans. Dessa forma, ao final desta disciplina voc estar capacitado a utilizar esses ambientes de desenvolvimento em situaes comuns nas empresas, identificando o que melhor se adapta soluo de um determinado problema. Mesmo que voc j tenha estudado alguns desses programas, no deixe de ler o contedo semanal da matria e resolver as atividades propostas. Participe tambm das discusses com os tutores e demais colegas de curso; voc sempre aprender uma nova forma de resolver determinado problema. Organize seu tempo reservando um horrio todos os dias para os estudos, para que as atividades no acumulem. E lembre-se: a melhor forma de aprender praticando! Todo dia descobrimos um novo recurso ou uma nova utilizao para esses ambientes de desenvolvimento. Um grande abrao!

11

e-Tec Brasil

Projeto instrucional
Disciplina: Tcnicas de Programao (carga horria: 90 horas). Ementa: Conceitos e aplicaes de tipos de dados. Tcnicas de modularizao, passagem de parmetros e recursividade. Ambientes e tcnicas de desenvolvimento de aplicaes. Estruturas de dados e seus algoritmos. Parte 1: Conceitos e aplicaes de tipos de dados. Tcnicas de modularizao, passagem de parmetros e recursividade. Ambientes e tcnicas de desenvolvimento de aplicaes. Parte 2: Estruturas de dados e seus algoritmos.
OBJETIVOS DE APRENDIZAGEM
- Descrever as principais caractersticas da linguagem. - Descrever os procedimentos necessrios para o desenvolvimento de uma aplicao Java. - Fornecer ao aluno o primeiro contato com a linguagem Java. - Demonstrar a declarao de dados. 2. Aspectos fundamentais sobre Java - Verificar os conversores de tipo em Java. - Fornecer conhecimentos para utilizar corretamente as estruturas condicionais. 3. Estruturas condicionais e estruturas de controle - Verificar as diferentes estruturas de repetio. - Verificar aplicaes prticas. - Demonstrar as principais funes matemticas em Java. 4. Funes matemticas e de string - Demonstrar os principais mtodos para manipulao de strings em Java. - Mostrar as tcnicas de localizao de caracteres em strings. Caderno e Ambiente Virtual de Ensino- Aprendizagem. www.cead.ifes.edu.br Caderno e Ambiente Virtual de Ensino-Aprendizagem. 10 www.cead.ifes.edu.br Caderno e Ambiente Virtual de Ensino- Aprendizagem. 10 www.cead.ifes.edu.br

AULA

MATERIAIS

CARGA HORRIA (horas)

1. Viso geral (Introduo linguagem Java e plataforma)

10

Caderno e Ambiente Virtual de Ensino- Aprendizagem. 10 www.cead.ifes.edu.br

13

e-Tec Brasil

AULA

OBJETIVOS DE APRENDIZAGEM
- Identificar os principais tipos de mtodos em Java.

MATERIAIS

CARGA HORRIA (horas)

Caderno e Ambiente Virtual de Ensino - Aprendizagem. 10 www.cead.ifes.edu.br

5. Criando funes

- Introduzir o conceito de modularidade. - Mostrar as tcnicas de criao de mtodos em Java. Diferenciar vetores e Matrizes. Caderno e Ambiente Virtual de Ensino -Aprendizagem.

6. Utilizando vetores e matrizes

Demonstrar a praticidade de utilizao de vetores. Apresentar as vantagens de usar arrays. Demonstrar a importncia do armazenamento e recuperao de dados.

10 www.cead.ifes.edu.br

7. Manipulando arquivos

Enumerar os aspectos fundamentais para a leitura e gravao em arquivos. Apresentar os passos necessrios para armazenar arquivos no formato texto. Demonstrar a importncia do armazenamento e recuperao de estruturas de dados.

Caderno e Ambiente Virtual de Ensino-Aprendizagem. 10 www.cead.ifes.edu.br

8. Estrutura de dados em Java listas

Caderno e Ambiente Virtual de Aprendizagem. 10 www.cead.ifes.edu.br

Enumerar os aspectos fundamentais para a utilizao de listas lineares. Apresentar os passos necessrios para implementao de listas. Demonstrar a importncia do armazenamento e recuperao utilizando estruturas de dados.

9. Estrutura de dados em Java pilha

Caderno e Ambiente Virtual de Aprendizagem. 10 www.cead.ifes.edu.br

Enumerar os aspectos fundamentais para a utilizao de pilhas. Apresentar os passos necessrios para implementao de pilhas

e-Tec Brasil

14

Tcnicas de Programao

Aula 1 Plataforma Java


Objetivos
Descrever as principais caractersticas da linguagem Java. Descrever os procedimentos necessrios para o desenvolvimento de uma aplicao Java. Fornecer o primeiro contato com a linguagem Java.

1.1 Introduo
A linguagem Java surgiu por acaso quando quem a criou, uma equipe de engenheiros da empresa Sun, foi tomar um caf na esquina. Como numa reunio de amigos, esses engenheiros assim a denominaram, inspirados pelo nome da cidade de onde provinha o caf que tomavam. Na realidade, no existe um consenso entre os escritores a respeito da verdadeira histria dessa linguagem. Alguns autores afirmam que o nome Java se deve a um passeio que o pessoal da Sun fez numa ilha da Indonsia com esse mesmo nome. Originalmente, a linguagem foi criada para ser utilizada em pequenos equipamentos eletrnicos; entretanto, com pouco recurso financeiro desse setor na poca e principalmente com o aparecimento da internet, novas oportunidades apareceram e a empresa Sun passou a se dedicar a essa rea.
Em 1995, a Sun anunciou Java no apenas como mais uma linguagem de programao, mas como uma nova plataforma de desenvolvimento. Dessa forma, a linguagem Java comeou a ser utilizada para elaborar pginas da internet, proporcionando contedos interativos e dinmicos, iniciando com a utilizao de applets com imagens em movimento.

1.2 A linguagem Java


Essa linguagem tem tido muito sucesso no mercado e diversas ferramentas tm surgido para manipular ou gerar cdigo Java. A prpria Microsoft manteve o Visual J++ como uma de suas ferramentas de desenvolvimento, aparentemente sem muito sucesso, sofrendo vrios processos por parte da Sun, o que provocou seu desaparecimento na nova verso do Microsoft Studio. Praticamente todos os principais fabricantes de software sentiram a necessidade de lanar no mercado alguma ferramenta para manipular Java,

Visual J++ Foi a implementao especfica da Microsoft para o Java, em ingls pronuncia-se Jay plus plus. Otimizado para a Plataforma Windows, os programas de J++ poderiam funcionar somente no MSJVM (Mquina Virtual Java da Microsoft), que foi a tentativa da Microsoft para criar um interpretador mais rpido. A sintaxe, keywords, e convenes gramaticais eram os mesmos do Java.

Aula 1 Plataforma Java

15

e-Tec Brasil

o que mostra sua fora e longevidade para os prximos anos no ambiente das linguagens de programao mais usadas. Hoje, quando Java mencionado, deve-se entend-la de imediato como a linguagem da Sun, a empresa que a fez nascer e a mantm como uma marca registrada. A linguagem Java da Sun tem feito muito sucesso, e uma das coisas que a torna to atraente o fato de que programas escritos em Java podem ser executados virtualmente em qualquer plataforma, aceitos em qualquer tipo de computador (ou outros aparelhos), caractersticas marcantes da internet. Com Java o processamento pode deixar de ser realizado apenas no lado do servidor, como era a internet no princpio, passando a ser executado tambm no cliente (entenda-se browser). O aspecto da utilizao de Java em multiplataforma muito importante, porque os programadores no necessitam ficar preocupados em saber em qual mquina o programa ser executado, uma vez que um mesmo programa pode ser usado num PC, num Mac ou em um computador de grande porte. muito melhor para uma empresa desenvolver um software que possa ser executado em qualquer lugar, independentemente da mquina do cliente. Java pode atuar em conjunto com outras linguagens, como o caso de HTML, em que as aplicaes podem ser embutidas em documentos HTML, podendo ser transmitidas e utilizadas na internet. Os programas escritos em Java funcionam como um acessrio (chamado de applet) que colocado no computador do usurio no momento que ele acessa um site qualquer, isto , o computador do usurio passa a executar um programa armazenado no servidor web que transferido para sua mquina no momento do acesso. Num certo site o usurio pode executar um programa para a compra de um veculo e, logo em seguida, ao acessar outro site, executar outro programa para consultar o extrato bancrio; tudo escrito em Java e executado em sua mquina local. A linguagem Java tambm tem sido usada para a criao dos processos automticos na web. Os processos envolvidos na atualizao de notcias, por exemplo, aqueles que aparecem a cada minuto em um site qualquer, so aplicaes desenvolvidas a partir do Java.

Applet um software aplicativo que executado no contexto de outro programa (como, por exemplo, um web browser), um applet geralmente executa funes bem especficas. O termo foi introduzido pelo AppleScript em 1993 dados e gerador de relatrios. No contexto de Java, applets so aplicativos que se servem da Java Virtual Machine (JVM) existente na mquina do cliente ou embutida no prprio navegador do cliente para interpretar o seu bytecode

e-Tec Brasil

16

Tcnicas de Programao

Outro aspecto a ser observado sobre a linguagem Java sua semelhana com a linguagem C++, tanto no que diz respeito sintaxe dos comandos utilizados quanto na caracterstica de ser orientada a objetos. A programao orientada a objetos hoje universalmente adotada como padro de mercado, e muitas linguagens tradicionais foram aperfeioadas para implementar essa nova forma de trabalho; Java j nasceu assim. O grande diferencial de Java em relao s outras linguagens de programao se refere ao fato de que ela foi concebida, originalmente, para ser usada no ambiente da World Wide Web (WWW). Nos ltimos cinco anos, a grande maioria das linguagens tem buscado se adaptar a essa nova realidade e necessidade; entretanto, Java a que mais tem se destacado at o momento.

Linguagem C++ Pode-se dizer que C++ foi a nica linguagem, entre tantas outras, que obteve sucesso como uma sucessora linguagem C, inclusive servindo de inspirao para outras linguagens como Java e IDL de CORBA.

1.3 As caractersticas da linguagem Java


A linguagem Java possui diversas caractersticas, entre as quais podemos destacar: a) Orientao a objetos: uma prtica de programao j slida no mercado, e a maioria das linguagens de hoje permite trabalhar dessa forma. Como conceito inicial, imagine a orientao a objetos como uma prtica de programao que permite a utilizao de diversos trechos de cdigo. Esses objetos podem simular um objeto do mundo real, como um automvel, uma casa, uma pessoa etc. b) Portabilidade: Java uma linguagem multiplataforma, ou seja, uma mesma aplicao pode ser executada a diferentes tipos de plataforma sem a necessidade de adaptao de cdigo. Essa portabilidade permite que um programa escrito na linguagem Java seja executado em qualquer sistema operacional. c) Multithreading: threads (linhas de execuo) o meio pelo qual se consegue fazer com que mais de um evento acontea, simultaneamente, em um programa. Assim, possvel criar servidores de rede multiusurios, em que cada thread, por exemplo, cuida de uma conexo de um usurio ao servidor, isto , um mesmo programa.

Aula 1 Plataforma Java

17

e-Tec Brasil

d) Suporte comunicao: uma das vantagens de Java fornecer um grande conjunto de classes com funcionalidades especficas, ou seja, muitos detalhes de programao so encapsulados em classes j prontas. Nesse contexto, a linguagem oferece um conjunto de classes para programao em rede, o que agiliza a implementao. e) Acesso remoto a banco de dados: possibilita que dados sejam recuperados e/ou armazenados de qualquer ponto de internet. Essa uma caracterstica muito importante, se considerado o grau de automao proporcionado pelo Java. Um aspecto importante que deve ser levado em considerao, principalmente porque o prprio mercado afirma, refere-se aos mecanismos de segurana que a linguagem oferece para a realizao de processos pela internet. Se comparada a outras linguagens usadas na internet, como ASP, por exemplo, Java possui maior segurana, com diversas classes que tratam de chaves pblicas e privadas para a gerao de dados criptografados.

1.4 Criao de programas em Java


Para a criao de programas em Java, torna-se necessria a digitao por meio de uma ferramenta especfica ou ainda de um editor de textos qualquer, gerando o cdigo-fonte do programa. Depois de digitado, esse programa deve passar por um processo de anlise do cdigo, a fim de que seja verificada a existncia de erros de sintaxe. Esse processo chamado de compilao e realizado por meio de um compilador Java, normalmente o compilador do kit de desenvolvimento da Sun. Todo programa Java deve ser compilado, assim como ocorre com linguagens de programao como Pascal, C, entre outras. Com o compilador realizada a traduo do programa escrito em Java para uma linguagem intermediria chamada Java bytecodes, um cdigo independente de plataforma que decifrado por um interpretador Java; isto , para que um programa em Java seja executado, necessrio possuir outra ferramenta chamada interpretador. O interpretador o responsvel por executar o programa escrito em Java em que cada instruo do bytecode interpretada, sendo executada no computador.

e-Tec Brasil

18

Tcnicas de Programao

A Figura 1.1 ilustra a sequncia de desenvolvimento de um programa em Java, como este deve ser criado na forma de uma classe. Conforme pode ser observado, uma classe em Java (cdigo-fonte) pode ser digitada em um editor de textos qualquer e deve ser salva com a extenso Java.
Apenas uma vez Todas as vezes

Editor

Compilador Java

Interpretador Java

Hello.java
Fonte: http://java.sun.com/javase/downloads/index.jsp

Hello.class

Figura 1.1: Sequncia de desenvolvimento de um programa em Java

A seguir uma ferramenta realiza sua compilao (compilador). Caso ocorram erros no processo de compilao, o programa-fonte deve ser corrigido e compilado novamente enquanto persistirem os erros. Quando no existirem mais erros de complicao, ser gerado um arquivo com extenso .class (o arquivo com os bytecodes), a ser executado por um interpretador Java ou pelo browser, caso o programa seja utilizado na internet. Na maioria das principais ferramentas de desenvolvimento, o processo de compilao automtico, isto , ocorre durante a digitao do cdigo-fonte, ou seja, a compilao vai sendo executada automaticamente durante a digitao da mesma forma que o corretor ortogrfico dos editores de texto atuais.

Bytecodes So gerados pelo processo de compilao, especficos a qualquer mquina fsica, so instrues para uma mquina virtual.

1.5 A plataforma Java


Plataforma um ambiente de software ou hardware no qual um programa roda. A maioria das plataformas formada pelo conjunto hardware e um sistema operacional, isto , um conjunto de hardware e software que atuam juntos. Java difere da maioria das outras plataformas porque composta apenas de um software operando com outra plataforma qualquer. No mundo dos computadores existem muitas plataformas, como Microsoft Windows, Macintosh, OS/2, Unix e netware. Normalmente, para que um mesmo programa funcione em diferentes plataformas, necessrio que ele seja compilado separadamente; isto , ele deve ser compilado na plataforma em que ser executado. Uma aplicao que executada sobre uma plataforma pode no funcionar sobre outra, porque o arquivo foi criado para uma plataforma especfica.
Servlet um componente do lado servidor que gera dados HTML e XML para a camada de apresentao de um aplicativo Web. basicamente uma classe na linguagem de programao Java que dinamicamente processa requisies e respostas, proporcionando dessa maneira novos recursos aos servidores. A definio mais usada considera-o extenso de servidores.

Aula 1 Plataforma Java

19

e-Tec Brasil

Java uma nova plataforma de software que possibilita que um mesmo programa seja executado em diversas plataformas, talvez a caracterstica mais importante dessa linguagem. Um programa escrito na linguagem Java compilado e gera um arquivo de bytecodes (com extenso .class), que pode ser executado onde quer que a plataforma Java esteja presente, em qualquer sistema operacional subjacente. Em outras palavras, o mesmo programa pode ser executado em qualquer sistema operacional que execute a plataforma Java. Uma analogia relacionada plataforma Java pode ser visualizada na Figura 1.2.
1

Java 2 Platform
2

Servers

Desktop machines Optional Packages Optional Packages Java 2 Enterprise Edition (J2EE)

High-end consumer devices

Low-end consumer devices

Personal Prole Java 2 Standard Edition (J2SE) Foundation Prole CDC Java Virtual Machine MIDP CLDC KVM

Smartcards

Java Card APIS CardVM

Java 2 Micro Edition (j2ME)


Figura 1.2: Plataforma Java
Fonte: Furgeri (2008)

Enquanto cada plataforma possui sua prpria implementao da mquina virtual Java, existe somente uma especificao padronizada para a mquina virtual, proporcionando uma interface uniforme para aplicaes de qualquer hardware. Mquina Virtual Java (Java Virtual Machine) ideal para uso na internet, em que um programa deve ser executado em diferentes mquinas pela web.

e-Tec Brasil

20

Tcnicas de Programao

1.6 Ambiente de desenvolvimento


Nesta seo apresentamos um esboo das ferramentas necessrias para a elaborao, compilao e execuo de aplicaes em Java. Como qualquer outra imagem, h muitas opes no mercado e diversas maneiras de desenvolver em Java. Existe uma infinidade de ferramentas que pode deixar o desenvolvedor em dvida na hora de escolher o ambiente de trabalho. No momento, as ferramentas que mais se destacam so Netbeans e Eclipse; no entanto, existem muitas outras. A ferramenta JDK da Sun composta basicamente por um compilador (javac), um interpretador (Java), um visualizador de applets (appletviewer), bibliotecas de desenvolvimentos (packages), um depurador de programas (JDB) e diversas documentaes (javadoc). Essa ferramenta da Sun no fornece um ambiente visual de desenvolvimento, porm trata-se do principal padro a ser seguido, visto a enorme funcionalidade que possui aliada facilidade de utilizao. Para a digitao de cdigo-fonte das classes em Java, a nica ferramenta necessria o bloco de notas do Windows; entretanto, qualquer editor de textos disponvel na mquina do leitor pode ser utilizado.

1.6.1 Instalao de kit de desenvolvimento da Sun


Uma das maiores dificuldades dos iniciantes em Java conseguir instalar corretamente o kit de ferramentas da Sun, uma vez que nem todo o processo ocorre de forma automtica como na maioria dos instaladores de software. Por esse motivo, importante dedicar um tempo a esse processo, mesmo sabendo que existem muitas variaes, dependendo do sistema operacional em que a ferramenta ser instalada. Antes de desenvolver as aplicaes em Java, necessrio possuir instaladas em sua mquina todas as ferramentas de desenvolvimento. Por isso, apresentamos a instalao das ferramentas mnimas necessrias criao de aplicaes em Java. A Sun fornece download gratuito de sua ferramenta no endereo http:// java.sun.com/javase/downloads/index.jsp, em que so encontradas verses para vrias plataformas. O nome do kit de ferramentas que voc deve baixar JDK 6 update 21, ou ainda uma outra verso mais recente, caso se encontre disponvel (Figura 1.3).

Aula 1 Plataforma Java

21

e-Tec Brasil

Figura 1.3: Site para baixar instalao do pacote da Sun


Fonte: http//java.sun.com/javase/downloads/index.jsp

Os procedimentos para a correta instalao da ferramenta variam de acordo com a plataforma em que ser instalada e tambm em funo da verso do sistema operacional.

1.6.2 Instalao do JDK na plataforma Windows


Os procedimentos para instalao do JDK no Windows so os seguintes: 1. Faa o download da verso correspondente ao Windows. O processo de instalao transfere todas as ferramentas e pacotes da linguagem para sua mquina. Ao instalar o JDK, criada uma pasta com todos os arquivos do kit de ferramentas da Sun. O caminho default da instalao C:/ arquivos de programas\java\jdk1.6.0_21. Dependendo da verso instalada, uma pasta de nome diferente ser criada. Provavelmente, a Sun disponibilizar outras verses em breve como, por exemplo, jdk 1.6.0_04, jdk 1.6.0_05 e assim por diante. Os nmeros 04 ou 05 ao final do nome normalmente se referem ao update. Ao instalar o JDK, so criadas diversas pastas, como as mostradas na Figura 1.4.

e-Tec Brasil

22

Tcnicas de Programao

Figura 1.4: Localizao da pasta de instalao


Fonte: Printscreen Windows 2000 e XP

Observe que a pasta jdk 1.6.0_21 a principal em que esto todas as outras (a Sun chama-a de JAVA_HOME). Dependendo da verso do JDK instalada, essa pasta pode ter nomes e contedos diferentes. Voc dever se concentrar no nome da verso que baixou. 2. Realize as configuraes das variveis de ambiente, as quais dependem do sistema operacional em que voc est instalando o JDK. Os procedimentos apresentados em seguida se referem configurao para o ambiente Windows. No Windows 2000 e XP, devemos configurar as variveis pelo painel de controle. Defina as variveis seguindo os procedimentos: a) Acesse o painel de controle. b) Abra o item sistema.

Aula 1 Plataforma Java

23

e-Tec Brasil

Figura 1.5: Janela de configurao da varivel de ambiente


Fonte: Printscreen Windows 2000 e XP

3. Clique na guia avanado e em seguida, no boto variveis de ambiente.

Figura 1.6: Janela de configurao da varivel de ambiente


Fonte: Printscreen Windows 2000 e XP

4. Em variveis de usurio, clique no boto nova. As variveis de ambiente podem tambm ser definidas em variveis do sistema em vez de variveis de usurio, como sugerido. A diferena que, quando definidas em variveis de usurios, elas funcionam somente para o seu usurio, e em variveis de sistema funcionam para todos os usurios.

e-Tec Brasil

24

Tcnicas de Programao

5. Surge a janela nova varivel de usurio. No campo nome da varivel coloque o nome da varivel que ser includa, por exemplo, JAVA_ HOME, e no campo valor da varivel coloque o caminho referente varivel que voc nomeou, C:\arquivo de programas\java\jdk1.6.0_21 (sem as aspas), e clique no boto OK. 6. Faa o mesmo procedimento de incluso com as variveis path e classpath, definindo os seus nomes e incluindo os valores correspondentes (Figura 1.7): C:\arquivos de programas\java\jdk1.6.0_21\bin para a varivel path e C:\arquivos de programas\java\jdk1.6.0_21\lib;.; para a varivel classpath.

Figura 1.7: Janela de configurao da varivel de ambiente


Fonte: Printscreen Windows 2000 e XP

7. Verifique se a instalao foi realizada com sucesso. Entre em um diretrio qualquer no prompt de comando e digite javac seguido da tecla Enter. Se aparecer uma mensagem como javac no reconhecido como um comando interno, porque o Java no foi instalado corretamente Se isso ocorrer, refaa a configurao, verificando principalmente as configuraes das variveis de ambiente. Se ao digitar javac aparecer uma tela com instrues de help do Java, significa que a instalao e a configurao foram realizadas com sucesso. Faa a instalao da ltima atualizao do Java em seu computador e verifique se funciona.

Como sugesto de link para instalao do Java, utilize o endereo: http://www.youtube. com/watch?v=wvzUm0ys0vM& feature=related

Aula 1 Plataforma Java

25

e-Tec Brasil

Figura 1.8: Janela de verificao da instalao do Java


Fonte: Printscreen Windows 2000 e XP

Para o Windows Vista/7: a) Acesse o painel de controle. b) Abra o item sistema e manuteno. Para Windows 7 abra sistema e segurana. c) Abra o item sistema. d) Ao lado esquerdo, no menu tarefas, clique em configuraes avanadas do sistema, em seguida no boto variveis de ambiente. Continue executando o passo 4 anterior referente ao Windows XP/2000. Observaes: Em funo de constantes atualizaes do JDK, o leitor deve atentar para o nmero da verso da ferramenta carregada no processo de download, de maneira a fazer sua correta instalao. O mesmo nome da pasta principal (exatamente o mesmo nome) deve ser inserido nas variveis de ambiente. O trecho em negrito no cdigo anterior ser varivel, dependendo da verso instalada.

e-Tec Brasil

26

Tcnicas de Programao

Ateno especial deve ser dada quando a instalao for realizada no Windows Vista. Se o firewall nativo estiver ativado, talvez seja necessrio desbloquear o Java. Se o Java estiver bloqueado, pode ocorrer um erro referente violao de acesso por parte da mquina virtual quando ele for executado. Outro ponto ser observado com relao ao Vista refere-se configurao das variveis de ambiente, as quais tiveram de ser definidas com o caminho reduzido do modo MS-DOS> por exemplo, o contedo da varivel path (c:\arquivos de programas\java\jdk1.6.0_03\bin) foi definido como C:\arquiv~1\java\jdk1.6.0\bin: caso contrrio, o compilador no seria localizado. O mesmo procedimento foi realizado para as variveis JAVA_HOME e classpath.

1.7 Primeiro contato com o Java


Inicialmente, para fornecer o primeiro contato com a linguagem, ser apresentada uma classe em Java que escreve uma mensagem qualquer na tela. Apesar de o exemplo ser simples, ele contm os itens fundamentais para a criao de qualquer aplicao em Java: elaborao do cdigo, compilao e execuo. Esses itens sero seguidos durante o processo de elaborao das aplicaes. Como sugesto, utilize o bloco de notas, um editor simples e rpido que atende a todos os requisitos mninos para a construo de aplicaes em Java. Todo programa em Java inicia com a palavra reservada class seguida do nome da classe (no caso Exemplo01). Como conveno definida pela Sun, todo nome de classe inicia com letra maiscula. Digite o nome do programa (class Exemplo01) mostrado na Figura 1.9 e salve-o com esse mesmo nome em uma pasta.
Como sugesto de link, utilize o endereo: http://www.youtube. com/watch?v=xGM9uBOvMgQ &feature=related

Figura 1.9: Exemplo01


Fonte: Elaborada pelo autor

Aula 1 Plataforma Java

27

e-Tec Brasil

Crie um programa em Java para mostrar seu nome impresso na tela. Um par de chaves envolve todo o cdigo da classe sempre; um programa em Java possui uma classe que envolve o cdigo. Uma classe em Java composta por mtodos (considerados funes ou procedures em outras linguagens de programao) que podem conter outras estruturas de programa. Toda classe executvel, ou seja, toda classe que ser interpretada e executada, deve obrigatoriamente possuir o mtodo main (principal), que invocado quando a classe executada. Nesse caso, quando a classe for executada, ser invocado o mtodo main que possui duas instrues para envio de mensagens na tela (system.out. println). No exatamente uma instruo e sim uma classe da linguagem especializada em sada de dados. Observaes: A linha public static void main (string args) aparece em todas as classes executveis nesse mesmo formato. A linha do mtodo principal possui o seguinte formato: public static void main (string args[]); praticamente todas as aplicaes tm essa linha e a varivel args que pode receber outro nome de acordo com o desejo do programador.

e-Tec Brasil

28

Tcnicas de Programao

Resumo
Nesta aula falamos sobre os conceitos iniciais de Java, como configurao e instalao. Abordamos o conceito de programao em Java (como variveis de ambiente, classes, padres, etc.), assim como o funcionamento do seu ambiente de desenvolvimento.

Atividades de aprendizagem
1. Por que a utilizao de Java em multiplataforma muito importante para programadores? 2. Qual a principal caracterstica que distingue a plataforma Java das demais existentes?

Aula 1 Plataforma Java

29

e-Tec Brasil

3. Qual a preocupao do programador Java em relao sensibilidade maiscula/minscula das palavras usadas? 4. Desenvolva um programa para mostrar seu nome e idade utilizando o compilador Java.

Aula 2 Aspectos fundamentais sobre Java


Objetivos
Realizar o primeiro contato com Java. Demonstrar declarao de dados. Verificar os conversores de tipo em Java.

2.1 Tipos de dados


Assim como em outras linguagens, antes de utilizar variveis necessrio saber definir um tipo de dado. Os tipos de dados em Java so portteis entre todas as plataformas de computadores que suportam essa linguagem. Na maioria das linguagens, quando um dado inteiro utilizado, pode ser que para uma determinada plataforma esse nmero seja armazenado com 16 bits e em outra 32 bits. Em Java isso no ocorre, uma vez que um tipo de dado ter sempre a mesma dimenso. Os tipos primitivos da linguagem (Quadro 2.1) utilizados na criao de variveis so: a) Boolean: no um valor numrico, s admite os valores true ou false. b) Char: usa o cdigo UNICODE e ocupa cada caractere 16 bits. c) Inteiros: diferem nas precises e podem ser positivos ou negativos. Byte: 1 byte. Short: 2 bytes. Int: 4 bytes. Long: 8 bytes.

d) Reais em ponto flutuante: igual aos inteiros, tambm diferem nas precises e podem ser positivos ou negativos.

Aula 2 Aspectos fundamentais sobre Java

31

e-Tec Brasil

Float: 4 bytes. Double: 8 bytes.


Quadro 2.1: Os tipos primitivos em Java Tipo de dados Literal (caractere) Definio Letras, nmeros e smbolos Tipo char byte Inteiro Nmeros inteiros positivos ou negativos int short long Nmeros com casas decimais, positivos ou negativos float Tamanho (bits) 16 8 32 16 64 32 Exemplos a, ?, * 0, 1, 23 0, 1, 23 0, 1, 23 0, 1, 23 0.34 8.65 0.34 8.65 true false

Real (ponto flutuante)

double

64

Lgico (Booleano) Fonte: Furgeri (2008)

Verdadeiro (1) ou falso (0)

boolean

Identificador a localizao da memria capaz de armazenar o valor de um certo tipo, para o qual se d um nome que descreve seu significado ou propsito.

2.2 Definio de variveis e constantes


Uma varivel ou constante um tipo de identificador cujo nome, que selecionado pelo programador, associado a um valor que pertence a um tipo de dado. Todo identificador possui um nome, um tipo e contedo. Os identificadores no podem utilizar palavras reservadas do Java. A linguagem Java exige que os identificadores tenham um tipo de dado definido antes de serem utilizados no programa, ou seja, eles devem ser obrigatoriamente declarados, independentemente do ponto do programa, seja no meio, no incio ou no final, desde que antes de sua utilizao no programa. Essa caracterstica do identificador em Java difere da maioria das linguagens de programao. A linguagem Pascal, por exemplo, possui um local exclusivo para declarao de variveis. Uma varivel precisa ser declarada para poder ser utilizada. Opcionalmente, ela pode ser inicializada j no momento de sua declarao. O cdigo da Figura 2.1 mostra alguns exemplos de manipulao de variveis em Java.

e-Tec Brasil

32

Tcnicas de Programao

Figura 2.1: Exemplo02


Fonte: Elaborada pelo autor

Como voc pde perceber no ltimo exemplo, um comentrio em Java pode ser escrito com // (para comentar apenas at o final da linha) ou com /* */ (para comentar tudo o que estiver entre o /* e o */). Para identificar a documentao, utilizamos /** */ A sada do programa Exemplo02 dever ser: 12 4 x Caso uma varivel do tipo char, byte, short, int, long, float ou double no seja inicializada, ela criada com o valor 0. Se ela for do tipo boolean, seu valor padro ser false. Quando for necessrio definir uma nova varivel com um tipo de dado diferente, por conveno, utiliza-se uma nova linha. O mais comum entre os programadores Java definir um tipo de dados e declarar uma lista com um ou mais nomes de variveis desejadas desse tipo. Nessa lista os nomes so separados por vrgulas e a declarao terminada por ; (ponto e vrgula). As variveis tambm podem ter sensibilidade, isto , ao declarar uma varivel com um nome (por exemplo, dolar) ele deve ser utilizado sempre da mesma forma. Isto , no pode ser usado como Dlar, DOLAR, dlar ou qualquer outra variao, apenas com todas as letras minsculas, como realizado em sua declarao. Os nomes das variveis devem comear com letra, caractere de sublinhado ou cifro. No permitido iniciar o nome da varivel com nmero. Por conveno, a linguagem Java utiliza o seguinte padro:

possvel criar mais de uma varivel do mesmo tipo na mesma linha, separando-as por uma vrgula. Exemplo: int x, y, z;

Aula 2 Aspectos fundamentais sobre Java

33

e-Tec Brasil

quando o nome da varivel for composto apenas por um caractere ou palavra, os caracteres devem ser minsculos; quando o nome da varivel tiver mais de uma palavra, a primeira letra da segunda palavra em diante deve ser maiscula. Todos os outros caracteres devem ser minsculos. Exemplos: a, a1, real, nome, valorVenda, codigoFornecedor. Outro ponto a ser observado se refere utilizao do ponto e vrgula (;) no final da maioria das linhas de cdigo.

2.3 Declarao de constantes


Na realidade no existem constantes em Java; o que existe um tipo de varivel com comportamento semelhante a uma constante de outras linguagens. Trata-se de um tipo de varivel que no pode alterar seu contedo depois de ter sido inicializado, ou seja, o contedo permanece o mesmo durante toda execuo do programa. Em Java, essa varivel chamada final. Essas constantes so usadas para armazenar valores fixos, geralmente, definidos no incio de uma classe. Por conveno os nomes de constantes devem ser escritos em letras maisculas. Exemplos: na Matemtica temos a constante PI cujo valor 3,1416 (isto , p=3,1416); na Fsica temos o valor da acelerao da GRAVIDADE da Terra (g=9,81 m/s2). Para a declarao de constantes em Java utiliza-se a palavra reservada final antes da definio do tipo de varivel: final double PI=3.14; final double GRAVIDADE=9.81; Caso um segundo valor seja atribudo a uma varivel final no decorrer da classe, o compilador gera uma mensagem de erro. No obrigatrio inicializar o contedo de uma varivel final no momento de sua declarao

2.4 Comentrios
Os comentrios so linhas adicionadas ao programa que servem para facilitar seu entendimento por parte do programador, ou ainda por outra pessoa que o consulte. Essas linhas no afetam o programa em si, pois no so consideradas parte do cdigo. O Java aceita trs tipos de comentrio: de linha, de mltiplas linhas e de documentao.

e-Tec Brasil

34

Tcnicas de Programao

Para inserir comentrios de linha nica, utiliza-se // (duas barras) em qualquer local do programa e tudo o que tiver escrito depois desse sinal e na mesma linha ser considerado um comentrio. Para inserir comentrios que envolvam vrias linhas, utiliza-se /* (barra asterisco) para marcar o incio e */ (asterisco barra) para o final, ou seja, tudo o que estiver entre esses dois sinais ser considerado comentrio. O terceiro tipo semelhante ao comentrio de mltiplas linhas; entretanto, tem o propsito de possibilitar a documentao do programa por meio de um utilitrio (javadoc) fornecido pela Sun junto com o SDK. Verifique o Exemplo21 (Figura 2.2) e sua execuo (Figura 2.3). Os comentrios no aparecem na execuo do programa.

Figura 2.2: Exemplo21


Fonte: Elaborada pelo autor

Figura 2.3: Execuo do programa Exemplo21


Fonte: Elaborada pelo autor

2.5 Operadores
A linguagem Java oferece um amplo conjunto de operadores destinados realizao de operaes aritmticas, lgicas e relacionais, com a possibilidade de formar expresses de qualquer tipo. Alm dos operadores matemticos, existem tambm operadores lgicos e relacionais.

2.5.1 Operadores aritmticos


Entre os operadores presentes no Quadro 2.2, talvez os decremento (--) e o incremento (++) causem alguma dvida, principalmente para os programa-

Aula 2 Aspectos fundamentais sobre Java

35

e-Tec Brasil

dores iniciantes. Entretanto sua utilizao extremamente simples: o operador de incremento aumenta o valor de uma varivel qualquer em um. O mesmo vale para o operador de decremento, logicamente, reduzindo em um o valor da varivel.
Quadro 2.2: Operadores aritmticos Operao Adio Subtrao Multiplicao Diviso Resto da diviso inteira Sinal negativo Sinal postitivo Incremento unitrio Decremento unitrio Sinal + * / % + ++ -Exemplo 1+20 35-17 14*2 14/2 14%7 -4 +5 ++6 ou 6++ --6 ou 6--

O Exemplo0203 mostra um programa em Java com a utilizao de alguns operadores (Figuras 2.4 e 2.5).

Figura 2.4: Exemplo0203


Fonte: Elaborada pelo autor

Figura 2.5: Execuo do programa Exemplo0203


Fonte: Elaborada pelo autor

2.5.2 Operadores relacionais


Os operadores relacionais possibilitam comparar valores ou expresses, retornando um resultado lgico verdadeiro ou falso. O Quadro 2.3 mostra os operadores relacionais usados em Java e sua aplicao.

e-Tec Brasil

36

Tcnicas de Programao

Quadro 2.3: Operadores relacionais em Java Significado Igual Diferente (No igual) Menor que Maior que Menor ou igual Operador == != < > <= Exemplo x==20 y!=17 x<2 x>2 y<=7

2.5.3 Operadores lgicos


So operadores que permitem avaliar o resultado lgico de diferentes operaes aritmticas em uma expresso. Os operadores lgicos usados em Java so mostrados no Quadro 2.4 a seguir.
Quadro 2.4: Operadores lgicos em Java Significado Operao lgica E (AND) Operao lgica OU (OR) Negao Operador && || ! Exemplo (x<5)&&(x>0) (y==5||y>10) !true==false

2.6 Passagem de parmetros


Foi apresentado no incio do material que o mtodo main recebe String args[] como parmetro: public static void main (String args[]) { } Como o main o mtodo principal, seu parmetro tambm parmetro para o programa todo. String args[] um vetor de strings formado por todos os argumentos passados ao programa na linha de comando do sistema operacional quando o programa invocado. Para utiliz-los, basta acessar cada posio do vetor, como no Exemplo0204 mostrado na Figura 2.6.

Aula 2 Aspectos fundamentais sobre Java

37

e-Tec Brasil

Figura 2.6: Exemplo0204


Fonte: Elaborada pelo autor

Para passarmos os parmetros pela linha de comando, basta que adicionemos os valores aps a linha de comando que utilizamos para execut-lo: java nome-do-programa parametro1 parametro2 ... Como exemplo, vamos considerar a linha de comando a seguir: java Exemplo0204 Maria Fernanda O resultado de sua execuo est mostrado na Figura 2.7.

Figura 2.7: Execuo do programa Exemplo0204


Fonte: Elaborada pelo autor

2.7 Converso de tipos


comum que o programador precise converter um nmero inteiro, por exemplo, em um nmero real (ou vice-versa). Em Java existem basicamente dois tipos de converso de dados: a) converso implcita na qual os dados so convertidos automaticamente, sem a preocupao do programador. Ela ocorre, por exemplo, quando convertemos um nmero inteiro para um nmero real. Nesse caso, a converso implcita porque bvio para o compilador que um nmero inteiro pode ser representado tambm como um nmero real. Veja um exemplo a seguir: int x = 4; float y = x; double z = y;

e-Tec Brasil

38

Tcnicas de Programao

b) converso explcita quando o programador precisa explicitar no cdigo que um valor ser convertido de um tipo para outro. No caso de um nmero real para um inteiro, por exemplo, pode haver perda na preciso do nmero. Veja o exemplo a seguir: float a = 9; float b = a/8; // b = 1.125 int c = (int)b; /* Aqui estamos forando a converso para um nmero inteiro. Nesse caso, a varivel c armazenar apenas a parte inteira da varivel b, ou seja, 1 */ System.out.println(b); System.out.println(c); O resultado da execuo deste trecho de cdigo : 1.125 1 O tipo boolean no pode ser convertido para nenhum outro tipo. Seguindo o sentido das flechas da Figura 2.8 vemos os tipos que podem ser implicitamente convertidos em outros. Seguindo o sentido contrrio, vemos os tipos que precisam ser convertidos explicitamente:

short byte int long oat double


Figura 2.8: Converses possveis entre tipos primitivos em Java
Fonte: Elaborada pelo autor

char

Aula 2 Aspectos fundamentais sobre Java

39

e-Tec Brasil

Veja outro exemplo sobre utilizao da converso de tipos mostrado nas Figuras 2.9 e 2.10 a seguir.

Figura 2.9: Exemplo0205


Fonte: Elaborada pelo autor

Figura 2.10: Execuo do programa Exemplo0205


Fonte: Elaborada pelo autor

2.8 Entrada de dados pelo teclado


No Windows podemos fazer a entrada de dados pelo prompt de comando. No Linux, temos vrios consoles, que so as telas em modo texto. Para enviarmos informaes para o usurio pela sada padro, utilizamos o mtodo System.out.println. As aplicaes de console utilizam como padro a stream de dados out, disponvel estaticamente na classe java.lang.System. Uma stream pode ser entendida como um duto capaz de transportar dados de um lugar (um arquivo ou dispositivo) para outro. O conceito de stream extremamente importante, pois utilizado tanto para manipulao de dados existentes em arquivos quanto para comunicao em rede e outros dispositivos. A stream de sada padro aberta automaticamente pela Mquina Virtual Java, ao iniciarmos uma aplicao Java, e permanece pronta para enviar dados. A sada padro est tipicamente associada ao dispositivo de sada (display), ou seja, a janela de console utilizada pela aplicao conforme designado pelo sistema operacional.

e-Tec Brasil

40

Tcnicas de Programao

Como fizemos em vrios exemplos e exerccios anteriores, podemos enviar dados para a sada padro utilizando o mtodo System.out.println. Da mesma forma que toda aplicao de console possui uma stream associada para ser utilizada como sada padro, existe outra stream denominada entrada padro, usualmente associada ao teclado do sistema. Essa stream, chamada in, est disponvel estaticamente na classe java.lang.System e pertence classe java.io.InputStream, que tambm aberta, automaticamente, quando a aplicao iniciada pela mquina virtual Java (permanecendo pronta para fornecer os dados digitados). Os mtodos disponveis para a entrada de dados na classe java.lang.System so bastante precrios. Os trs principais mtodos so: a) read(): l um byte; b) read(byte[]): preenche o array de bytes fornecido como argumento; c) skip(long): descarta a quantidade de bytes especificada como argumento. A leitura de bytes equivale entrada de caracteres simples, o que pouco confortvel quando estamos trabalhando com valores numricos (inteiros ou reais), strings ou outra informao diferente de caracteres, pois exige que cada caractere fornecido pelo usurio seja testado e concatenado com os demais para a formao de um determinado valor. Para contornar essa situao, alguns materiais sugerem a criao de uma classe, que chamaremos aqui de Entrada, que contm trs mtodos para leitura de valores digitados pelo usurio: a) readDouble(): l um valor double da entrada padro; b) readInteger(): l um valor inteiro da entrada padro; c) readString() l uma string da entrada padro. No cdigo da Figura 2.11, utilizamos a classe DatainputStream que pertence ao pacote java.io. Entenda o pacote como um grupo de classes do mesmo tipo armazenadas em uma pasta qualquer. O asterisco presente em import java.io.* indica que todas as classes do pacote java.io devem ser carregadas.

Aula 2 Aspectos fundamentais sobre Java

41

e-Tec Brasil

Figura 2.11: Classe DatainputStream


Fonte: Elaborada pelo autor

Resumo
Nesta aula falamos sobre os principais tipos de operadores em Java, como operadores lgicos e relacionais. Tambm abordamos o conceito de tipos de variveis to importante na programao em Java. Citamos tambm como funciona a entrada de dados em Java.

Atividades de aprendizagem
1. Crie um programa para apresentar mensagens, uma de boas-vindas, outra dizendo seu nome e mais uma informando sua idade. 2. Crie um programa que contenha duas variveis de cada um dos tipos primitivos do Java. Coloque valores diferentes em cada uma delas e depois as imprima. 3. Altere trs vezes o valor de uma das variveis do programa anterior. Imprima a varivel a cada nova atribuio. 4. Crie trs variveis do tipo int que contenham os valores 12, 13 e 14. Converta cada uma para um float e imprima o valor convertido. Qual o resultado impresso na tela?

e-Tec Brasil

42

Tcnicas de Programao

5. Agora, crie trs variveis do tipo float que contenham os valores 12.3, 12.5 e 12.8. Converta cada uma para int e imprima o valor convertido. Qual o resultado impresso na tela? 6. Tente imprimir a soma de uma varivel inteira com uma do tipo float. O que acontece? 7. Crie variveis que contenham o primeiro termo e a razo de uma Progresso Aritmtica, alm de um inteiro n qualquer (que indique o nmero de termos dessa P.A.). Utilizando os valores criados, calcule o n-simo termo da progresso e a soma de seus n primeiros elementos. 8. Agora, crie variveis que contenham o primeiro termo e a razo de uma Progresso Geomtrica, e um inteiro n qualquer (que indique o nmero de termos dessa P.G.). Calcule o n-simo termo da progresso e a soma de seus n primeiros elementos. 9. Crie valores para a largura, o comprimento e a altura de uma embalagem e calcule seu volume. 10. Crie uma varivel inteira que contenha um nmero de segundos e imprima o nmero equivalente de horas, minutos e segundos. 11. Crie variveis para a base e a altura de um retngulo e calcule sua rea, permetro e diagonal. 12. Calcule a rea e o comprimento de uma circunferncia de raio r = 12. Crie as variveis reais a, b e c. Calcule as razes da equao ax2 + bx + c.

Aula 2 Aspectos fundamentais sobre Java

43

e-Tec Brasil

Aula 3 Estruturas condicionais e de controle


Objetivos
Utilizar corretamente as estruturas condicionais. Verificar as diferentes estruturas de repetio. Verificar aplicaes prticas.

3.1 Comandos condicionais


Comandos condicionais so aqueles que alteram o funcionamento do programa de acordo com uma determinada condio. Eles podem inserir interatividade entre o programa e o usurio. Existem comandos condicionais para tomada de decises (IF-ELSE e SWITCH-CASE) e para criao de laos ou repeties (FOR, WHILE, DO-WHILE).

3.1.1 If-else
A clusula IF (que em portugus significa SE) executa um bloco de instrues caso uma determinada condio seja verdadeira. A clusula ELSE (que em portugus significa SENO) executa um bloco de instrues caso a condio seja falsa. A sintaxe do IF-ELSE no Java a seguinte: if ( <condio booleana> ) { <cdigo para condio verdadeira>; } else { <cdigo para condio falsa>; } No necessrio que todo IF seja acompanhado de um ELSE, mas todo ELSE s pode existir aps um IF. Uma expresso booleana qualquer expresso que retorne true ou false e pode ser criada com os operadores de comparao e/ou lgicos.

Aula 3 Estruturas condicionais e de controle

45

e-Tec Brasil

O trecho de cdigo a seguir, por exemplo, no imprime nada na tela, pois 37 no maior que 40: int x = 37; if ( x > 40 ) { System.out.println(x); } O trecho de cdigo a seguir verifica se uma pessoa maior de idade: int x = 15; if ( x < 18 ) { System.out.println(Entrada permitida.); } else { System.out.println(Entrada proibida.); } Podemos tambm concatenar expresses booleanas com os operadores lgicos E e OU. O primeiro representado por &&, e o segundo por | |. No exemplo a seguir, o programa verifica se uma pessoa precisa pagar passagem de acordo com sua idade (nesse caso, no pagam passagens pessoas com at 2 anos ou a partir de 60 anos): if ( x > 2 && x < 60 ) { System.out.println(Usurio deve pagar passagem.); } else { System.out.println(Passagem gratuita.); } Apesar de diferente, o trecho de cdigo a seguir faz efetivamente o mesmo que o anterior:
Como sugesto de link, utilize o endereo: http://www.youtube. com/watch?v=dijtgZiGtnA

if ( x <= 2 || x >= 60 ) { System.out.println(Passagem gratuita.); } else { System.out.println(Usurio deve pagar passagem.); }

e-Tec Brasil

46

Tcnicas de Programao

Criar um programa em Java para ler cinco valores inteiros e mostrar a impresso desses valores em ordem crescente.

3.1.2 Switch-case
A estrutura SWITCH-CASE equivale a um conjunto de clusulas IF encadeadas, deixando o cdigo mais legvel e eficiente no caso de grandes desvios condicionais. Exemplo: switch (x) { case 0: System.out.println(zero); break; case 1: System.out.println(um); break; case 2: System.out.println(dois); break; case 3: System.out.println(tres); break; case 4: System.out.println(quatro); break; case 5: System.out.println(cinco); break; case 6: System.out.println(seis); break; case 7: System.out.println(sete); break; case 8: System.out.println(oito); break; case 9: System.out.println(nove); break; default : System.out.println(Nmero desconhecido); }

3.2 Excees em Java


O Java oferece duas importantes estruturas para o controle de erros muito semelhantes s estruturas existentes na linguagem C++: try-catch e try-finally. Ambas tm o propsito de evitar que o programador tenha que realizar testes de verificao e avaliao antes da realizao de certas operaes, desviando, automaticamente, o fluxo de execuo para rotinas de tratamento de erro. Utilizando essas diretivas (detalhadas nas prximas sees) delimita-se um trecho de cdigo que ser monitorado, automaticamente, pelo sistema.

3.3 Uso da estrutura try catch


Quando ocorre um ou mais tipos de erros dentro de um trecho de cdigo delimitado, o TRY-CATCH desvia, automaticamente, a execuo para uma rotina designada para o tratamento especfico desse erro. A sintaxe a seguinte:

Aula 3 Estruturas condicionais e de controle

47

e-Tec Brasil

try { // cdigo normal } catch ( <exceo 1> ) { // cdigo de tratamento do primeiro tipo de erro } catch ( <exceo 2> ) { // cdigo de tratamento do segundo tipo de erro } catch ( <exceo 3> ) { // cdigo de tratamento do terceiro tipo de erro } Por exemplo, podemos criar um programa que precisa receber um nmero inteiro da linha de comando. Como os argumentos so passados em um vetor de strings, precisamos transformar a string que contm o nmero para um inteiro. Se a converso gerar um erro, significa que o argumento no um nmero inteiro vlido. A exceo usada, nesse caso, o java.lang. NumberFormatException. Outro erro de que podemos tratar o caso de no ser fornecido o argumento desse mesmo programa, utilizando a exceo ArrayIndexOutOfBoundsException. Nesse caso, ocorrer um erro ao tentarmos acessar o ndice 0 do vetor (que est vazio). O cdigo a seguir mostra como fazemos esses dois tratamentos com o TRY-CATCH: int j = 10; try { while (j > Integer.parseInt(args[0])){ System.out.println(+j); j--; } } catch (ArrayIndexOutOfBoundsException e){ System.out.println(No foi fornecido um argumento.); } catch (java.lang.NumberFormatException e) { System.out.println(Argumento no um inteiro vlido.); }

Podem existir inmeros blocos catch no tratamento de erros (cada um para um tipo de exceo).

e-Tec Brasil

48

Tcnicas de Programao

3.4 Uso da estrutura try-finally


Com o TRY-FINALLY, podemos assegurar que uma rotina de finalizao seja garantidamente executada mesmo que ocorra um erro (isto , o trecho de cdigo contido na clusula FINALLY executado sempre que o programa passa pela clusula TRY). A sintaxe do TRY-FINALLY a seguinte: try { <cdigo normal>; } finally { <cdigo que sempre deve ser executado>; } Isto particularmente interessante quando certos recursos do sistema ou estruturas de dados devem ser liberados, independentemente de sua utilizao. Um mesmo try pode ser usado com as diretivas catch e finally. A seguir, mostramos um exemplo de cdigo utilizando TRY, CATCH e FINALLY. public class TratamentoDeErro{ public static void main(String[] args ){ int[] array = {0, 1, 2, 3, 4, 5}; // array de 6 posies try{ for(int i=0; i<10; i++ ){ array[i] += i; System.out.println(array[i]); } System.out.println(Bloco executado com sucesso); } catch( ArrayIndexOutOfBoundsException e ){ System.out.println(Acessou um ndice inexistente); } catch( Exception e ) { System.out.println(Outro tipo de exceo ocorreu); } finally{ System.out.println(Isto SEMPRE executa!); } } }

Aula 3 Estruturas condicionais e de controle

49

e-Tec Brasil

3.5 While
Utilizamos um WHILE para criarmos um lao (loop), ou seja, repetir um trecho de cdigo algumas vezes enquanto uma determinada condio for verdadeira. O exemplo a seguir imprime os cinco primeiros mltiplos de 9: int x = 1; while (x <= 5) { System.out.println(9*x); x++; } O trecho de cdigo dentro do WHILE ser executado enquanto a condio x <= 5 for verdadeira. Isso deixar de acontecer no momento em que x > 5.

3.6 For
O comando FOR tambm utilizado para criarmos loops. A ideia a mesma que a do WHILE, mas existe um espao prprio para inicializar e modificar a varivel de controle do lao, deixando-o mais legvel. A sintaxe do FOR a seguinte: for ( <inicializao>; <condio>; <incremento>) { <trecho de cdigo>; } O exemplo a seguir gera o mesmo resultado do WHILE acima: for (int x = 1; x <= 5; x++) { System.out.println(9*x); } O FOR e o WHILE podem ser usados para a mesma coisa. Porm, o cdigo do FOR indica claramente que a varivel i serve, em especial, para controlar a quantidade de laos executados. Use cada um quando achar mais conveniente. O for tambm muito til para percorrermos um array. Para isso, basta usarmos o atributo length, que retorna o tamanho do array. Veja um exemplo: for (int x = 0; x <= nome_do_array.length; x++) {

e-Tec Brasil

50

Tcnicas de Programao

System.out.println(nome_do_array[i]); } Veja o Exemplo0307 mostrado nas Figuras 3.1 e 3.2 a seguir:

Figura 3.1: Exemplo0307


Fonte: Elaborada pelo autor

Figura 3.2: Execuo do programa Exemplo0307


Fonte: Elaborada pelo autor

Como sugesto de link, utilize o endereo: http://www.youtube. com/watch?v=8krfObWwZ8I&f eature=related

Criar um programa em Java para mostrar os valores do fatorial dos nmeros inteiros de 1 at 100.

Resumo
Nesta aula falamos sobre os conhecimentos necessrios para a utilizao correta das estruturas condicionais. Tambm abordamos as diferentes estruturas de repetio em Java. Citamos tambm como funcionam as excees em Java.

Atividades de aprendizagem
1. Imprima o fatorial dos nmeros de 1 a 10. Crie um for que comece imprimindo o fatorial de 1, e a cada passo utilize o ltimo resultado para o clculo do fatorial seguinte. 2. Imprima os 30 primeiros elementos da srie de Fibonacci. A srie a seguinte: 1, 1, 2, 3, 5, 8, 13, 21 etc. Para calcul-la, o primeiro e segundo elementos valem 1, da por diante, cada elemento vale a soma dos dois elementos anteriores (ex.: 8 = 5 + 3). 3. Imprima a soma de todos os nmeros de 1 a 1.000. 4. Imprima todos os mltiplos de 3, entre 1 e 100. 5. Calcule a soma dos 70 primeiros elementos de uma Progresso Aritmtica na qual o primeiro termo vale 7 e a razo vale 13.

Aula 3 Estruturas condicionais e de controle

51

e-Tec Brasil

6. Calcule a soma dos 10 primeiros elementos de uma Progresso Geomtrica na qual o primeiro termo vale 3 e a razo vale 2. 7. Crie um nmero inteiro n e imprima um quadrado feito por n asteriscos de cada lado. 8. Imprima o fatorial de um nmero inteiro qualquer. 9. Crie um nmero inteiro qualquer e calcule a soma dos algarismos desse nmero. 10. Crie um nmero inteiro e verifique se ele primo. 11. . Crie um nmero inteiro e imprima todos os seus divisores. 12. Crie uma varivel com um caractere contendo uma operao (+, -, * ou /) e outras duas com nmeros inteiros. Execute a operao indicada pelo caractere com as duas variveis inteiras. 13. Crie uma varivel com o nmero de um ms e imprima o nome do ms. 14. Escreva um programa que verifique se uma nota pssima (nota=1), ruim (2), regular (3), boa (4), tima (5) ou nenhuma delas (nota invlida). 15. Crie trs variveis inteiras e um trecho de cdigo que descubra a maior entre elas. Imprima as trs variveis em ordem crescente. Verifique se as mesmas trs variveis podem ser lados de um tringulo (ou seja, nenhuma pode ser maior que a soma das outras duas). 16. Crie uma varivel contendo a idade de uma pessoa e verifique sua classe eleitoral: (at 16 anos no pode votar); (entre 16 e 18 anos ou mais que 65 facultativo); (entre 18 e 65 anos obrigatrio). 17. Crie variveis contendo as notas de trs provas feitas por um aluno. Calcule a mdia parcial do aluno (mdia aritmtica simples) e verifique se ele passou direto. Se no, calcule sua mdia final (peso 4 para a mdia parcial e peso 6 para uma outra varivel contendo a nota de sua prova final) e verifique se ele ficou reprovado.

e-Tec Brasil

52

Tcnicas de Programao

Aula 4 Funes matemticas e de string


Objetivos
Demonstrar as principais funes matemticas em Java. Demonstrar os principais mtodos para manipulao de strings em Java. Mostrar as tcnicas de localizao de caracteres em strings.

4.1 Funes matemticas


A linguagem Java possui uma classe com diversos mtodos especializados em realizar clculos matemticos. Para realizar esses clculos, so utilizados os mtodos que devem apresentar a seguinte sintaxe: Math.<nome do mtodo> (<argumentos ou lista de argumentos>). No necessrio importar a classe Math em um programa para poder utilizar seus recursos, pois ela j faz parte do pacote java.lang, importado automaticamente pelo compilador do Java. A classe Math define duas constantes matemticas, sendo Math.PI o valor de pi (p= 3,14159265358979323846) e Math.E que se refere ao valor da base e para logaritmos naturais (e=2,7182818284590452354). A seguir, so apresentados os mtodos mais comuns da classe Math.

4.1.1 Mtodo ceil


Este mtodo tem como funo realizar o arredondamento de um nmero do tipo double para seu prximo inteiro. Sua sintaxe a seguinte: Math.ceil (<valor do tipo double>). No Exemplo0401 da Figura 4.1 o mtodo ceil da classe math chamado para realizar o arredondamento do nmero tipo double entre parnteses, representando nesse caso por uma varivel (linhas 6 a 8). As variveis entre parnteses compem o argumento (do tipo double) do mtodo ceil. Este mtodo retorna um resultado arredondado, mantendo o tipo do dado, isto , a varivel retornada tambm ser do tipo double, porm mostrando ape-

Aula 4 Funes matemticas e de string

53

e-Tec Brasil

nas a parte inteira do nmero verificado. O tipo double o nico que pode ser utilizado, uma vez que o mtodo ceil no aceita o tipo float. A Figura 4.2 apresenta a tela de resultados do Exemplo0401.

Figura 4.1: Exemplo0401


Fonte: Elaborada pelo autor

Figura 4.2: Execuo do programa Exemplo0401


Fonte: Elaborada pelo autor

Todos os exemplos apresentados utilizam o prompt (ou console) para a sada de dados.

4.1.2. Mtodo oor


Assim como ceil, o mtodo oor tambm utilizado para arredondar um determinado nmero, mas para o seu inteiro anterior. Sua sintaxe idntica do mtodo ceil: Math.floor(<valor do tipo double>). As Figuras 4.3 e 4.4 mostram o Exemplo0402 para ilustrar o mtodo oor.

Figura 4.3: Exemplo0402


Fonte: Elaborada pelo autor

e-Tec Brasil

54

Tcnicas de Programao

Figura 4.4: Execuo do programa Exemplo0402


Fonte: Elaborada pelo autor

4.1.3 Mtodo max


Utilizado para verificar o maior valor entre dois nmeros, que podem ser do tipo double, float, int ou long. A sua sintaxe a seguinte: Math. max(<valor1>,<valor2>). Observe que o clculo do maior nmero pode ocorrer entre dois nmeros do mesmo tipo de dados ou no. Pode-se obter o maior entre dois nmeros do tipo double, entre dois nmeros do tipo int ou entre um do tipo double e outro do tipo int. As Figuras 4.5 e 4.6 mostram o Exemplo0403.

Figura 4.5: Exemplo0403


Fonte: Elaborada pelo autor

Figura 4.6: Execuo do programa exemplo0403


Fonte: Elaborada pelo autor

4.1.4 Mtodo min


O mtodo min fornece o resultado contrrio do mtodo max, sendo ento utilizado para obter o valor mnimo entre dois nmeros. Do mesmo modo que o mtodo max, esses nmeros tambm podem ser do tipo double, float, int ou long. A sua sintaxe a mesma do mtodo max, mudando apenas para Math.min mostrada a seguir:

Aula 4 Funes matemticas e de string

55

e-Tec Brasil

Math.min(<valor1>,<valor2>) No Exemplo0404 utiliza-se dos mesmos valores do exemplo anterior (Exemplo0403), porm troca o mtodo max() pelo mtodo min().

Figura 4.7: Exemplo0404


Fonte: Elaborada pelo autor

Figura 4.8: Execuo do programa Exemplo0404


Fonte: Elaborada pelo autor

4.1.5 Mtodo sqrt


Quando h necessidade de calcular a raiz quadrada de um determinado nmero, utiliza-se o mtodo sqrt. O nmero do qual se deseja extrair a raiz quadrada deve ser do tipo double e o resultado obtido tambm ser um nmero do tipodouble. Veja sua sintaxe: Math.sqrt(<valor do tipo Double>) O Exemplo0405 mostra a utilizao do mtodo sqrt conforme Figuras 4.9 e 4.10 a seguir.

Figura 4.9: Exemplo0405


Fonte: Elaborada pelo autor

e-Tec Brasil

56

Tcnicas de Programao

Figura 4.10: Execuo do programa Exemplo0405


Elaborada pelo autor

4.1.6 Mtodo pow


Assim como possvel extrair a raiz quadrada de um nmero, tambm possvel fazer a operao inversa, ou seja, elevar um determinado nmero ao quadrado ou a qualquer outro valor de potncia. A potenciao de um nmero pode ser calculada pelo mtodo pow. Os nmeros a serem usados no clculo, isto , os valores da base e da potncia, devem ser do tipo double. Sua sintaxe a seguinte: Math.pow(<valor da base>,<valor da potncia>). O Exemplo0406 demonstra o uso do mtodo pow conforme mostrado nas Figuras 4.11 e 4.12 a seguir.

Figura 4.11: Exemplo0406


Fonte: Elaborada pelo autor

Figura 4.12: Execuo do programa Exemplo0406


Fonte: Elaborada pelo autor

4.1.7 Mtodo random


utilizado para gerar valores de forma aleatria. Toda vez que o mtodo random chamado, ser sorteado um valor do tipo double entre 0 e 1 (o valor 1 nunca sorteado). Nem sempre essa faixa de valores suficiente numa aplicao real.

Por exemplo, para simular o sorteio de nmeros entre 0 e 99 para um jogo de loteria qualquer, torna-se necessrio o sorteio de nmeros inteiros aleatrios no intervalo de 0 a 99.

Aula 4 Funes matemticas e de string

57

e-Tec Brasil

Para que esses nmeros possam ser sorteados, preciso utilizar o operador de multiplicao (*) em conjunto com o mtodo random. Com isso torna-se possvel definir o intervalo em que o nmero ser sorteado. O conversor (int) tambm pode ser usado para truncar a parte do ponto flutuante (a parte depois do ponto decimal) para que um nmero inteiro seja gerado, da seguinte forma: (int) (math.random() * 100). Com isso seriam gerados nmeros inteiros entre 0 e 99, atendendo plenamente necessidade exposta. O Exemplo0407 demonstra o uso do mtodo random para simular a gerao de cinco cartes de loteria com seis nmeros cada (Figura 4.13).

Figura 4.13: Exemplo0407


Fonte: Elaborada pelo autor

Figura 4.14: Execuo do programa Exemplo0407


Fonte: Elaborada pelo autor

No Exemplo0407 o primeiro loop for (linha 5) o responsvel pela contagem de um a cinco (os cinco cartes). O segundo loop for (linha 7) o responsvel pela contagem de um a seis (os seis nmeros de cada carto). Os nmeros so mostrados um ao lado do outro e a cada carto pulada uma linha em branco (linha 12). A Figura 4.14 mostra o resultado da execuo do programa Exemplo0407.

e-Tec Brasil

58

Tcnicas de Programao

4.1.8 Formatao com a classe DecimalFormat


Os clculos matemticos, em especial os que envolvem multiplicao e diviso, podem gerar resultados com muitas casas decimais. Isso nem sempre necessrio e esteticamente correto, pois apresentar um resultado com muitas casas decimais no muito agradvel e legvel maioria dos usurios. Por exemplo: considere duas variveis do tipo double x=1 e y=6. Ao realizar a diviso de x por y, aparece na tela o resultado 0,166666666666. Esse resultado no o mais adequado para se apresentar na tela. Seria mais conveniente mostrar o resultado formatado com duas ou trs casas decimais. Para realizar a formatao, necessrio definir um modelo conhecido pelo nome de pattern. Considere pattern como o estilo de formatao que ser apresentado sobre um valor numrico. Em outras palavras, voc ter de informar ao compilador qual estilo de formatao deve ser usado para apresentar um nmero. Para definir o pattern, so usados caracteres especiais. O Quadro 4.1 apresenta os caracteres mais usados. Quadro 4.1: Caracteres mais utilizados na classe DecimalFormat
Caractere Significado
0 Imprime o dgito normalmente, ou caso ele no exista, coloca 0 em seu lugar. Exemplo: sejam as variveis int x=4, y=32 e z=154, ao usar o pattern 000, o resultado impresso na tela seria x - 004,y - 032 e z - 154. Imprime o dgito normalmente, desprezando os zeros esquerda do nmero. Exemplo: sejam as variveis double x=0.4 e y= 01.34, ao usar o pattern ##.##, o resultado impresso na tela seria x - . 4,y - 1.34. Separador decimal ou separador decimal monetrio (depende do sistema usado). Sinal de nmero negativo. Para realizar a formatao de nmeros, vamos usar a classe DecimalFormat.

# . -

Para realizar a formatao de nmeros, vamos usar a classe DecimalFormat conforme ilustrado no Exemplo0408 nas Figuras 4.15 e 4.16 a seguir.

Aula 4 Funes matemticas e de string

59

e-Tec Brasil

Figura 4.15: Exemplo0408


Fonte: Elaborada pelo autor

Figura 4.16: Execuo do programa Exemplo0408


Fonte: Elaborada pelo autor

Funcionalidades mais importantes no Exemplo0408: Linha 1: importa a classe DecimalFormat do pacote java.text, uma vez que ela no pertence ao conjunto de classes default do pacote java.lang. Linha 6: declara um objeto (df) de classe DecimalFormat que ser usado para realizar a formatao dos nmeros pelo mtodo format (df.format). Essa linha poderia conter a definio do pattern no momento da inicializao do objeto df. Uma definio vlida pode ser: DecimalFformat df = decimalformat (000). possvel observar que a definio do pattern pode ser realizada dentro dos parnteses. Linha 8: contm a definio do pattern pelo mtodo applypattern (df.appypattern(000). Essa instruo define que todos os nmeros impressos a partir do objeto df sero formatados com trs dgitos, mesmo que eles possuam menos que isso, conforme exemplificado no Quadro 4.1. As linhas 12,16, 20, 24 e 28 redefinem o pattern,

e-Tec Brasil

60

Tcnicas de Programao

aplicando novas formataes ao objeto df, isto , aos nmeros que sero impressos pelo mtodo format. Linha 29: apresenta uma maneira de formatar um nmero a partir de um formato string. Observe que a varivel valorEmReais armazena um contedo do tipo string, que no pode ser manipulado diretamente pela classe DecimalFormat. Para que isso seja possvel, o valor string convertido no tipo double pelo mtodo parseDouble da classe double (Double.parseDouble (valorEmReais). O resultado da execuo do programa Exemplo0408 aparece na Figura 4.16

4.2 Funes com strings


Uma string um tipo que corresponde unio de um conjunto de caracteres. Em Java, as strings so instncias da classe String, isto , geram objetos que possuem propriedades e mtodos, diferentemente dos tipos primitivos com int, float, double, etc. Essas strings podem ser manipuladas de vrias formas. Por exemplo, possvel verificar seu comprimento, retirar um pedao dela, acessar ou mudar caracteres individuais. As strings constituem uma cadeia de caracteres entre aspas. Exemplo: Frase = linguagem Java da mesma forma que as funes matemticas, existem diversos mtodos para manipulao de strings, os quais acompanham a seguinte sintaxe: <Nome da string>.<nome-do-metodo>( argumentos>) A seguir, so apresentados os mtodos mais comuns (e mais usados) da classe String.

4.2.1 Mtodo length


O mtodo length muito utilizado para retornar o tamanho de uma determinada string, incluindo tambm os espaos em branco que esto presentes. Esse mtodo retorna sempre um valor do tipo int. Veja sua sintaxe: < string>.length() O Exemplo0410 mostra o uso do mtodo length conforme Figuras 4.17 e 4.18 a seguir.
Na prtica, o mtodo length muito utilizado quando necessrio ler uma varivel string do comeo at o final, tanto para a busca de caracteres ou palavras quanto para a criao de banners, algo extremamente usado na internet.

Aula 4 Funes matemticas e de string

61

e-Tec Brasil

Figura 4.17: Exemplo0410


Fonte: Elaborada pelo autor

Figura 4.18: Execuo do programa Exemplo0410


Fonte: Elaborada pelo autor

No Exemplo0410, a linha 5 contm a declarao da string frase. Cabe uma observao: conforme citado anteriormente, na realidade frase no uma varivel e sim um objeto, pois uma varivel no pode conter mtodos atrelados a ela; somente os objetos que possuem mtodos para manipulao de suas informaes. A linha 7 contm a utilizao de length por meio de frase.length(), isto , retorna o nmero de caracteres armazenado em frase ( no caso 15). Em vez de usar frase.length() poderia ser utilizada a forma literal do seguinte modo: tamanho=Aprendendo Java . length(). O resultado seria o mesmo.

4.2.2 Mtodo charAt


Usando para retornar um caractere de determinada string de acordo com um ndice especificado entre parnteses. Esse ndice refere-se posio do caractere na string, sendo 0 (zero) o ndice do primeiro caractere, 1 (um) o do segundo e assim por diante. O mtodo charAt til quando for necessrio verificar a existncia de um caractere na string. Por exemplo: suponha que uma determinada string s possa conter nmeros a funo charAt pode ser usada para verificar a existncia de dgitos numricos nessa string.

e-Tec Brasil

62

Tcnicas de Programao

A sintaxe do mtodo charAt a seguinte: < string>.charAt (<ndice>) O Exemplo0411 mostra o uso do mtodo charAt conforme as Figuras 4.19 e 4.20 a seguir.

Figura 4.19: Exemplo0411


Fonte: Elaborada pelo autor

Figura 4.20: Execuo do programa Exemplo0411


Fonte: Elaborada pelo autor

Veja na Figura 4.20, os resultados desse exemplo e repare que o quinto caractere apresentado o d e no n, pois o ndice comea a partir do zero. As linhas 9 a 12 so responsveis por apresentar o trecho equivalente aos ndices de nmero 11 a 14, cujos caracteres correspondem palavra Java armazenada na varivel frase.

4.2.3 Mtodos toUpperCase e toLowerCase


Os mtodos toUpperCase e toLowerCase so utilizados para transformar todas as letras de uma determinada string em maisculas ou minsculas. O mtodo toUpperCase transforma todos os caracteres de uma string em maisculos. O mtodo toLowerCase transforma todos os caracteres de uma string em minsculos. Sua sintaxe a seguinte: < string>.toUpperCase() ou <String>.toLowerCase(). O Exemplo0412 demonstra o uso dos mtodos toUpperCase e toLowerCase e dispensa mais detalhes, dada a simplicidade dessas duas funes. A

Aula 4 Funes matemticas e de string

63

e-Tec Brasil

nica observao se refere ao fato de que esses mtodos no alteram o valor original da string. Mesmo aplicando os mtodos das linhas 6 e 7, o contedo das variveis palavra1 e palavra2 permanece o mesmo, isto , a transformao ocorre apenas com fins de impresso em tela. Se for necessrio alterar o contedo de uma varivel string, substituindo seu valor original pelo transformado, a prpria varivel deve receber o valor de sua transformao, por exemplo: palavra1=palavra.toLowerCase().

Figura 4.21: Exemplo0412


Elaborada pelo autor

Figura 4.22: Execuo do programa Exemplo0412


Fonte: Elaborada pelo autor

4.2.4 Mtodo substring


Ele retorna a cpia de caracteres de uma string a partir de dois ndices inteiros especificados, funcionando basicamente da mesma forma que o mtodo charAt, dentro de um lopping, conforme indica a seo 4.2.2. A sintaxe de substring a seguinte: < string>.substring(< ndice inicial>,[<indice final>]). O primeiro argumento especifica o ndice a partir do qual se inicia a cpia dos caracteres (da mesma forma que charAt, o ndice inicia-se em 0). O segundo argumento opcional e especifica o ndice final, em que termina a cpia dos caracteres; entretanto, o ndice final deve especificar um ndice alm do ltimo caractere. Para melhor entendimento do mtodo substring, considere a varivel frase com o seguinte contedo:

e-Tec Brasil

64

Tcnicas de Programao

Frase ndice

L 1

I 2

N 3

G 4

U 5

A 6

G 7

E 8

M 9 10

J 11

A 12

V 13

A 14

Cada caractere de uma varivel string indexado a partir do 0 (zero). Vamos apresentar alguns exemplos: 1. String x= frase. substring (10) - x Recebe o contedo JAVA , pois ao passar apenas o primeiro argumento para o mtodo substring, ele retorna da posio informada (no caso 10, a posio da letra J) at o ltimo caractere da string. 2. String x= frase. substring (3) - x Recebe o contedo GUAGEM JAVA isto , do caractere de ndice 3 at o ltimo caractere da string frase. 3. String x= frase. substring (3,9) - x Recebe o contedo GUAGEM , isto , do caractere de ndice 3 at o caractere de ndice 8 (9-1). 4. String x= frase. substring (0,1) - x Recebe o contedo L , isto , do caractere de ndice 0 at o caractere de ndice 0 (1-1). 5. String x= frase. substring (10,14) - x Recebe o contedo JAVA , isto , do caractere de ndice 10 at o caractere de ndice 13 (14-1). Observe que o resultado deste exemplo igual ao do exemplo 1. Se os ndices especificados estiverem fora dos limites da string, gerado o erro stringlndexOutOfBoundsException. No exemplo, se voc usar frase. substring(10,20) ocorre o erro citado, uma vez que no existe ndice 20. O Exemplo0413 apresenta um cdigo que usa o mtodo substring para separar as palavras de uma frase pela manipulao de seus ndices, ilustrado nas Figuras 4.23 e 4.24 a seguir.

Aula 4 Funes matemticas e de string

65

e-Tec Brasil

Figura 4.23: Exemplo0413


Fonte: Elaborada pelo autor

Figura 4.24: Execuo do programa Exemplo0413


Fonte: Elaborada pelo autor

4.2.5 Mtodo trim


Seu objetivo remover todos os espaos em branco que aparecem no incio e no final de uma determinada string. So removidos apenas os espaos do incio e do fim da string. No so removidos os espaos entre as palavras. Sua sintaxe a seguinte: <string>.trim() O Exemplo0414 mostra a utilizao do mtodo trim conforme as Figuras 4.25 e 4.26 a seguir.

Figura 4.25: Exemplo0414


Fonte: Elaborada pelo autor

e-Tec Brasil

66

Tcnicas de Programao

Figura 4.26: Execuo do programa Exemplo0414


Fonte: Elaborada pelo autor

A varivel frase armazena uma string com espaos em branco no incio e no final. Quando no utilizado o mtodo trim, os espaos permanecem na string: em contrapartida, ao usar trim, os espaos desaparecem. O mtodo frase. trim () no retirou, realmente, os espaos em branco da varivel, ou seja, apenas foi mostrado na tela um trim da varivel, que consequentemente a exibe sem os espaos em branco, mas a varivel em si ainda continua com os espaos no seu incio e no seu final. Para que realmente os espaos sejam retirados, necessrio que o resultado de trim seja atribudo prpria varivel, com a seguinte instruo: frase=frase.trim(). Isso tornaria a varivel livre dos espaos em branco.

4.2.6 Mtodo replace


utilizado para substituio de caracteres, ou grupo de caracteres, em uma determinada string. Para seu funcionamento, necessrio informar o(s) caractere(s) que deseja substituir e por qual(is) caractere(s) ele(s) ser(o) substitudos(s). Caso no haja na string nenhuma ocorrncia do caractere a ser substitudo, a string original retornada, isto , no ocorre nenhuma alterao. No Exemplo0415, a linha 5 declara uma string (frase1) que recebe uma frase. A linha 6 armazena essa frase na varivel frase2, porm sem os espaos em branco, uma vez que o mtodo replace foi usado para substituir todos os espaos por vazios ( por ). As linhas 8 e 9 substituem um caractere por outro ( por _ e a por u) e a linha 10 substitui uma palavra por outra (na por NA). Da mesma forma que trim, o mtodo replace no altera o contedo da varivel. Para fazer com que uma varivel receba o resultado de uma troca de caracteres, faa como apresentado na linha 6. Para melhor compreenso dos resultados observe o Exemplo0415 nas Figuras 4.27 e 4.28 a seguir.

Aula 4 Funes matemticas e de string

67

e-Tec Brasil

Figura 4.27: Exemplo0415


Fonte: Elaborada pelo autor

Figura 4.28: Execuo do programa Exemplo0415


Fonte: Elaborada pelo autor

4.2.7 Mtodo valueOf


O mtodo valueOf usado para converter diversos tipos de dados em strings. Esse mtodo aceita vrios tipos de argumento (nmeros ou cadeia de caracteres) e transforma-os em strings. Esta seo aborda apenas a converso de tipos numricos em strings. Uma das sintaxes possveis para o mtodo valueOf : string.valueOf(<nome da varivel a ser convertida>) Para facilitar o entendimento, o Exemplo0416 demonstra a converso de vrios tipos numricos com o uso do mtodo valueOf conforme as Figuras 4.29 e 4.30 a seguir.

e-Tec Brasil

68

Tcnicas de Programao

Figura 4.29: Exemplo0416


Fonte: Elaborada pelo autor

No Exemplo0416 todas as variveis numricas (a,b,c,d) declaradas nas linhas 6 a 9 so convertidas e acumuladas em uma varivel string (x) nas linhas 10 a 13. Essa no a funcionalidade mais importantes do mtodo valueOf, uma vez que o mesmo resultado pode ser alcanado sem sua utilizao por meio da concatenao das variveis com o operador de concatenao (+), conforme demonstrado em seguida: string x = a _ + c + _ .d: <COD

Figura 4.30: Execuo do programa Exemplo0416


Fonte: Elaborada pelo autor

4.2.8 Mtodo indexOf


O mtodo indexOf usado para localizar caracteres ou substrings em uma string. Quando realizamos a busca de uma palavra em um texto, usamos algo parecido com o funcionamento de indexOf, isto , ele busca uma palavra e retorna a posio onde ela se encontra. Voc j sabe que um texto (ou uma string) indexado a partir do nmero zero. Caso haja sucesso na busca, retornado um nmero inteiro referente posio do texto (o ndice) onde o caractere foi encontrado, ou a posio do texto onde inicia a substring localizada. Caso haja insucesso na busca, isto , caso o caractere ou substring no tenha sido encontrado, retornado o

Aula 4 Funes matemticas e de string

69

e-Tec Brasil

valor inteiro -1. De qualquer modo, o retorno de indexOf sempre ser um nmero inteiro (o valor do ndice, ou -1). A sintaxe geral para utilizao do mtodo indexOf : string.indexof(<caractere ou substring a ser localizada, [ posio inicial]>) No Exemplo0417 (Figuras 4.31 e 4.32) verificamos que a linha 5 contm o texto que ser usado nas pesquisas. A linha 6 declara um caractere a que ser buscado no texto. As formas de busca so as seguintes:

Figura 4.31: Exemplo0417


Fonte: Elaborada pelo autor

linha 7: busca o caractere a no texto e retorna o ndice referente sua primeira ocorrncia. No caso, retorna o ndice 7. linha 8: busca o caractere a no texto a partir do ndice 10 e retorna o ndice referente sua primeira ocorrncia. No caso, retorna o ndice 25. Na realidade, a primeira ocorrncia do caractere a seria na posio 7; entretanto, foi solicitado que a busca iniciasse na posio 10. linha 9: busca a substring Ensino no texto e retorna o ndice referente sua primeira ocorrncia. No caso, retorna o ndice 15. linha 10: busca a substring Java no texto a partir da posio 15 e retorna o ndice referente e sua primeira ocorrncia. Como no existe a palavra Java aps a posio 15, retornado o valor -1 (busca sem sucesso). O mesmo princpio aplicado quando voc procura uma palavra em um editor de textos e ele no a encontra.

e-Tec Brasil

70

Tcnicas de Programao

Figura 4.32: Execuo do programa Exemplo0417


Fonte: Elaborada pelo autor

Resumo
Nesta aula falamos sobre os conhecimentos necessrios para a utilizao correta das funes matemticas e de strings. Aprendemos a trabalhar com pesquisa de substrings e determinar o comprimento de uma string.

Atividades de aprendizagem
1. Crie uma classe que simule a jogada de um dado de seis lados dez vezes e mostre o resultado na tela. 2. Crie uma classe que calcule quantos metros cbicos de gua suporta uma determinada caixa de gua em forma de cubo todos os lados so iguais. O usurio deve informar o valor do lado e o volume ser calculado pela frmula volume=lado3. Arredonde o valor para seu inteiro anterior. 3. Construa uma classe que receba uma frase qualquer e mostre-a de forma invertida. 4. Elabore uma classe que mostre o efeito: Frase: Java Efeito J Ja Jav Java Jav Ja J

Aula 4 Funes matemticas e de string

71

e-Tec Brasil

Aula 5 Criando funes


Objetivos
Identificar os principais tipos de mtodos em Java. Introduzir o conceito de modularidade. Mostrar as tcnicas de criao de mtodos em Java.

5.1 Criao de mtodos em Java


Mtodos so trechos de programa que permitem modularizar um sistema, isto , so pequenos blocos que, juntos, compem um sistema maior. Os mtodos recebem um determinado nome e podem ser chamadas vrias vezes durante a execuo de uma classe. Os principais motivos que levam utilizao de mtodos se referem reduo do cdigo de um sistema, melhoria da modularizao do sistema e facilitao da manuteno do sistema. Para ilustrar esses conceitos, imagine um grande sistema envolvendo muitas classes em Java, que existe a necessidade de verificao se uma determinada data vlida. Imagine, ainda, que h diversas aplicaes onde isso deve ser realizado. Um mtodo pode invocar outro mtodo, isto , durante a execuo do mtodo 1 pode ser necessria a execuo do mtodo 2, que pode invocar o mtodo 3, e assim por diante. Todo mtodo possui uma declarao e um corpo cuja estrutura declarada a seguir: Qualificador tipo_retorno_metodo nome_metodo ([lista de argumentos]) { Cdigo do corpo; }
Mtodo uma sub-rotina que pode ser invocada toda vez que sua funcionalidade for necessria em um trecho da classe ou ainda a partir de outra classe.

Aula 5 Criando funes

73

e-Tec Brasil

O qualificador pode ser do tipo:


Qualificador conhecido tambm pelo nome de modificador e define a visibilidade do mtodo. Trata-se de uma forma de especificar se o mtodo visvel apenas para a prpria classe em que est declarada, ou pode ser visualizado e utilizado por classes externas.

a) Public: o mtodo visvel por qualquer classe. o qualificador mais aberto no sentido de que qualquer classe pode usar esse mtodo. b) Private: o mtodo visvel apenas pela prpria classe. o qualificador mais restritivo. c) Protected: o mtodo visvel pela prpria classe, por suas subclasses e pelas classes do mesmo pacote. Tipo de retorno: refere-se ao tipo de dado retornado pelo mtodo. Mtodos que no retornam valores devem possuir nesse parmetro a palavra void. Sempre que void utilizada em uma declarao de mtodo, nenhum valor retornado aps sua execuo. Nome do mtodo: pode ser qualquer palavra ou frase, desde que iniciada por uma letra. Se o nome for uma frase, no pode conter espaos em branco. Por padro, todo nome de mtodo inicia com letra maiscula. Lista de argumentos: trata-se de uma lista de valores opcionais, que podem ser recebidos pelo mtodo de tratamento interno. Quando um mtodo invocado ele pode receber valores de quem o chamou. Esses valores podem ser manipulados internamente e devolvidos ao emissor da solicitao. Cdigo do corpo: trata-se dos cdigos em Java que realizam os processos internos e retornam os valores desejados, isto , constituem o programa do mtodo.

5.2 Mtodos sem retorno


No retornam valores e so semelhantes s procedures encontradas na maioria das linguagens de programao. Os mtodos que no retornam valores devem ser definidos como void. Dessa forma, todos os mtodos sem retorno observam a seguinte estrutura: Qualificador void nome_mtodo ([lista de argumentos]) { Cdigo do corpo; }

e-Tec Brasil

74

Tcnicas de Programao

Algumas declaraes possveis: Public void imprime() Public static void imprime() Private void imprimeteste() Protected void gravatexto()

Vamos trabalhar com a prtica e mostrar um exemplo de mtodo em que ele chamado para que uma mensagem seja mostrada na tela. O Exemplo0501 mostra a chamada de um mtodo que imprime na tela uma frase qualquer, conforme ilustrado nas Figuras 5.1 e 5.2 a seguir.

Figura 5.1: Exemplo0501


Elaborada pelo autor

Figura 5.2: Execuo do programa Exemplo0501


Fonte: Elaborada pelo autor

A classe Exemplo0501 possui dois mtodos: main() e imprime(). Observe que cada mtodo possui um incio e um encerramento por meio de abre e fecha chaves. Toda vez que um mtodo for declarado, ele deve obrigatoriamente possuir uma chave inicial e uma final. A chamada de um mtodo deve corresponder exatamente sua declarao, ou melhor, sua assinatura. Quando invocado, o mtodo deve possuir o mesmo tipo de retorno, o mesmo nome e o mesmo nmero de argumentos.

Aula 5 Criando funes

75

e-Tec Brasil

Quando declarada a palavra reservada void, significa que no existe um valor de retorno. O mtodo declarado como public, como j foi falado, possibilita que ele seja utilizado externamente classe que declarada. O Exemplo0502 demonstra o uso de um mtodo com passagem de argumentos, conforme ilustrado nas Figuras 5.3 e 5.4 a seguir. Neste exemplo utiliza-se um mtodo para imprimir o contedo de uma varivel string qualquer, funcionando de forma similar a System.out.println().

Figura 5.3: Exemplo0502


Fonte: Elaborada pelo autor

Figura 5.4: Execuo do programa Exemplo0502


Fonte: Elaborada pelo autor

O Exemplo0502 bem parecido com o anterior, s que as variveis (frase1, frase2, frase3) recebem uma string que passada para o mtodo tela() que se encarrega da sua impresso na tela. A classe possui trs mtodos: o mtodo main, obrigatrio em uma classe executvel, o mtodo tela que imprime uma frase na tela e o mtodo limpatela que realiza a limpeza da tela.

e-Tec Brasil

76

Tcnicas de Programao

O nome usado para invocar o mtodo tela que recebe o argumento tela(fraseN), no qual: Tela: Nome do mtodo; FraseN: o contedo que ser enviado ao mtodo, ou seja, o mtodo invocado e recebe uma varivel do tipo string. Ao declarar o mtodo public static void tela(string texto), foi informado, entre parnteses, o tipo de varivel a ser recebido(string texto). O mtodo tela ser invocado cinco vezes pelo mtodo main. O mtodo limpatela vai imprimir 25 linhas em branco na tela. O Exemplo0503 apresenta outra classe com dois mtodos que no retornam valores (alm do main) e so executados em cascata, uma vez que o mtodo main chamar tela, que chamar tempo conforme ilustrado nas Figuras 5.5 e 5.6 a seguir.

Figura 5.5: Exemplo0503


Fonte: Elaborada pelo autor

Aula 5 Criando funes

77

e-Tec Brasil

Figura 5.6: Execuo do programa Exemplo0503


Fonte: Elaborada pelo autor

Neste exemplo foi includo um novo mtodo, chamado tempo, que funciona como temporizador durante a execuo do programa.

5.3 Mtodos com retorno de valores


A sintaxe para a declarao de mtodos que retornam valores a mesma apresentada anteriormente. Public static int soma(int x, int y) A declarao desse mtodo informa que ele receber dois argumentos inteiros (x,y) e retornar um nmero do tipo inteiro (int). Os valores recebidos e retornados no precisam ser, necessariamente, do mesmo tipo, conforme aparece na declarao. Podem existir mtodos que recebem nmeros e retornam uma string, recebem inteiros e retornam nmeros com ponto flutuante ou qualquer outra combinao. O Exemplo0504 apresentado nas Figuras 5.7 e 5.8 demonstram a utilizao de um mtodo que recebe duas variveis do tipo string e retorna a soma entre elas na forma de um nmero do tipo inteiro.

e-Tec Brasil

78

Tcnicas de Programao

Figura 5.7: Exemplo0504


Fonte: Elaborada pelo autor

Figura 5.8: Execuo do programa Exemplo0504


Fonte: Elaborada pelo autor

Ao executar a aplicao, o mtodo main executado e invoca a execuo do mtodo soma. O resultado da execuo do mtodo soma armazenado na varivel res, cujo tipo o mesmo declarado para o retorno do mtodo. Ao invocar o mtodo soma, so enviadas duas variveis do tipo string que se referem aos valores fornecidos pelo usurio no momento da execuo do programa (n1, n2). Ao ser invocado, o mtodo soma recebe duas variveis do tipo string, num1 que recebe o contedo de n1 e num2 que recebe o contedo de n2, executa suas tarefas internas entre chaves e retorna um valor inteiro por meio da palavra return.

Aula 5 Criando funes

79

e-Tec Brasil

Todo mtodo que no foi declarado como void, isto , que retornar algum valor, necessita obrigatoriamente utilizar o mtodo return() para retornar um valor. O valor retornado deve ser sempre do mesmo tipo declarado no mtodo.

5.4 Recursividade
Os programas so geralmente estruturados como mtodos que chamam uns aos outros, o que facilita a resoluo de muitos problemas, alm de reduzir consideravelmente o tamanho do cdigo. A recursividade ocorre quando um mtodo chama a si prprio, direta ou indiretamente, por meio de outro mtodo. Para entender corretamente o funcionamento desse tipo de mtodo, necessrio muita dedicao por parte dos desenvolvedores, pois sua utilizao pode ser complexa. O Exemplo0505 mostra uma recursividade gerada para imprimir o fatorial dos nmeros inteiros de 0 a 10, conforme ilustrado nas Figuras 5.9 e 5.10 a seguir. Observe neste exemplo existe uma chamada ao prprio fatorial, isto , ele chama a si mesmo. A cada vez que o mtodo chamado, o valor da varivel num diminudo de 1.

Figura 5.9: Exemplo0505


Fonte: Elaborada pelo autor

e-Tec Brasil

80

Tcnicas de Programao

Figura 5.10: Execuo do programa Exemplo0505


Fonte: Elaborada pelo autor

Resumo
Nesta aula falamos sobre os principais mtodos existentes em Java, desde os que retornam at os que no retornam valores, o acesso a mtodos e a recursividade. Verificamos a importncia de trabalhar com recursividade na linguagem Java pela execuo de exemplos. Trabalhamos com exemplos de mtodos em Java com retorno de strings e inteiros.

Atividades de aprendizagem
1. Crie uma classe que tenha um mtodo o qual desenhe uma moldura na tela. Essa moldura deve ter 80 caracteres de comprimento por 5 de largura. Para isso utilize a sequncia de caracteres ASC II. 2. Elabore uma classe que receba o raio de uma esfera do tipo double e chame o mtodo volume_esfera para calcular e exibir o volume da esfera da tela. A frmula a ser utilizada (4/3)* PI * raio * raio. 3. Construa uma classe que receba uma temperatura qualquer em Fahrenheit e apresente seu valor correspondente em Celsius por um mtodo. Para calcular utilize a frmula: =5/9 *(f-32).

Aula 5 Criando funes

81

e-Tec Brasil

Aula 6 Utilizando vetores e matrizes


Objetivos
Diferenciar vetores e matrizes. Demonstrar a praticidade de utilizao de vetores. Apresentar as vantagens de usar arrays.

6.1 Definio de array


Em determinados rotinas de programa torna-se necessrio manipular diversas variveis de um mesmo tipo de dado, por exemplo, manipular ao mesmo tempo 100 nomes de pessoas. Em vez de realizar a declarao de 100 variveis, possvel a declarao de apenas uma: trata-se de uma varivel definida como um vetor (array) de nomes. O array possibilita armazenar diversos valores em uma nica varivel, alm do armazenamento de vrios objetos. Esses diversos itens so armazenados em forma de tabela de fcil manipulao, sendo diferenciados e referenciados por um ndice numrico. Os arrays esto presentes em praticamente todas as linguagens de programao e constituem um dos aspectos mais importantes e facilitadores no desenvolvimento de aplicaes. Em Java, os arrays so estruturas que permitem armazenar uma lista de itens relacionados.
Os arrays so utilizados para armazenar um conjunto que tenham o mesmo tipo de dado primitivo ou a mesma classe.

6.2 Arrays unidimensionais


Os arrays unidimensionais so os que possuem apenas um ndice para acessar seu contedo. Eles so declarados da seguinte maneira: Tipo_de_dado nome_array[] = new tipo_dado[quantidade];

Aula 6 Utilizando vetores e matrizes

83

e-Tec Brasil

Tipo_do_dado: pode ser qualquer tipo de varivel primitiva ou classe; Nome_array: um nome qualquer vlido, da mesma forma que os nomes das variveis. Por exemplo: Int n[]=new int[100]; String mes[]=ney string[12]; Veja o Exemplo0601 que mostra a utilizao de um array para armazenar um conjunto de argumentos do tipo inteiro, passado pelo usurio na linha de execuo (Figuras 6.1 e 6.2).

Figura 6.1: Exemplo0601


Fonte: Elaborada pelo autor

O Exemplo0601 recebe diversos nmeros na linha de comando (no Mximo dez) e armazena-os em um array de nmeros inteiros. Isso no realizado diretamente, pois inicialmente os nmeros so armazenados no array args(um valor de strings). O lao FOR se encarrega de converter os elementos do array, um a um. Armazenados no array n, os elementos so totalizados pela varivel total.

e-Tec Brasil

84

Tcnicas de Programao

Figura 6.2: Execuo do programa Exemplo0601


Fonte: Elaborada pelo autor

Os arrays podem ser criados e inicializados simultaneamente. Em vez de usar o operador new para criar um objeto array, preciso colocar os elementos do array entre chaves e separados por vrgula. Esses elementos dentro das chaves devem ser do mesmo tipo que a varivel que contm o array. Os arrays criados dessa forma tm o mesmo tamanho do nmero de elementos colocados entre chaves. A sintaxe ficaria assim: Tipo de dado nome_array[] = (valores separados por vrgula) O Exemplo0602 a seguir demonstra como usar essa declarao e utiliza tambm o mtodo valueOf() para manipular o contedo de um array de caracteres (Figuras 6.3 e 6.4).

Figura 6.3: Exemplo0602


Fonte: Elaborada pelo autor

Existe uma diferena bsica na atribuio de valores aos arrays de caracteres e de strings: nos arrays de caracteres so utilizados apstrofos para cada caractere declarado; j para os arrays de strings so utilizadas as aspas duplas. O mtodo valueOf() pode ser utilizado para apresentar todos os elementos de um array de caracteres ou um trecho dele.

Aula 6 Utilizando vetores e matrizes

85

e-Tec Brasil

Figura 6.4: Execuo do programa Exemplo0602


Fonte: Elaborada pelo autor

6.3 Arrays bidimensionais


Os arrays bidimensionais permitem a criao de vetores com mais de um ndice. Essa caracterstica possibilita que os valores sejam armazenados na forma de matriz de qualquer dimenso. A linguagem Java no suporta array bidimensional no formato linha e coluna como em outra linguagem; entretanto, possvel criar array de arrays. Esses arrays devem ser declarados da seguinte maneira: Tipodedado nome_array[][] = new tipo_dado [ndice][ndice]; O Exemplo0603 a seguir demonstra o array bidimensional para coletar duas notas de trs alunos. Uma vez armazenadas, o programa solicita ao usurio o nmero de um aluno para mostrar suas notas e a mdia do grupo de alunos (Figuras 6.5 e 6.6).

Figura 6.5: Exemplo0603


Fonte: Elaborada pelo autor

e-Tec Brasil

86

Tcnicas de Programao

So coletadas e armazenadas duas notas de trs alunos no array no formato de uma tabela. A nota fornecida pelo usurio armazenada no vetor de notas.

Figura 6.6: Execuo do programa Exemplo0603


Fonte: Elaborada pelo autor

6.4 Passagem de arrays em mtodos


possvel a criao de mtodos que recebem valores, manipulam esses valores e retornam um resultado. Na passagem desses valores pode ser usado qualquer tipo de varivel. Da mesma forma, possvel tambm criar mtodos com passagem retorno de arrays. O funcionamento basicamente o mesmo: quando o mtodo invocado, um array qualquer passado, o qual manipulado internamente pelo mtodo e depois retornado. A sintaxe para um mtodo que recebe e retorna um array : public static tipo_array[] nome_metodo (tipo_array nome_array[]) O Exemplo0604 a seguir mostra um mtodo que recebe um array do tipo inteiro, organiza seus elementos e o retorna em ordem crescente (Figuras 6.7 e 6.8).

Aula 6 Utilizando vetores e matrizes

87

e-Tec Brasil

Figura 6.7: Exemplo0604


Fonte: Elaborada pelo autor

Figura 6.8: Execuo do programa Exemplo0604


Fonte: Elaborada pelo autor

6.5 Array de objetos


Da mesma forma que variveis primitivas, possvel criar um array para armazenamento de objetos. Isso muito importante na linguagem Java, pois permite realizar as mesmas operaes com diversos objetos do mesmo tipo. O Exemplo0605 demonstra a utilizao de um array de objetos, aproveitando-se da funcionalidade de uma classe pessoa, conforme mostrado nas Figuras 6.9 e 6.10 a seguir.

e-Tec Brasil

88

Tcnicas de Programao

Figura 6.9: Exemplo0605


Fonte: Elaborada pelo autor

Observe que se os objetos fossem tratados de forma individual, isto , cada um com nome diferente, seriam necessrias 100 linhas de cdigo, uma para cada objeto.

Resumo
Nesta aula falamos sobre as principais formas de utilizao de arrays em Java, desde as estruturas mais simples at estruturas complexas para tratar dados. Apresentamos as vantagens de usar arrays na manipulao de objetos e trabalhamos com conceitos que permitem ao programador desenvolver aplicaes mais consistentes e com cdigo reduzido.

Atividades de aprendizagem
1. Crie uma classe que leia dez valores inteiros quaisquer e imprima na tela os que so maiores que a mdia dos valores coletados. 2. Elabore uma classe que colete uma indefinida quantidade de nmeros inteiros pela linha de execuo e no final mostre o menor e o maior nmero fornecidos. 3. Faa uma classe que colete dez nomes de pessoas e os armazene em um array. No final verifique se uma determinada pessoa foi cadastrada no array, informando o usurio. 4. Uma escola precisa de um programa que controle a mdia das notas de cada classe e a mdia das notas de todos os alunos da escola. Considerando que essa escola possui trs classes com cinco alunos em cada classe, gerando um total de 15 alunos, crie uma classe que receba as notas de cada aluno e no final mostre a mdia da classe e a mdia da escola em geral.

Aula 6 Utilizando vetores e matrizes

89

e-Tec Brasil

Aula 7 Manipulando arquivos


Objetivos
Demonstrar a importncia do armazenamento e recuperao de dados. Enumerar os aspectos fundamentais para a leitura e gravao em arquivos. Apresentar os passos necessrios para armazenar arquivos no formato texto.

7.1 Definio
A grande maioria das aplicaes necessita armazenar dados para manipul-los posteriormente. So poucas as aplicaes que se limitam a armazenar dados na memria durante o processo de execuo. Os dados manipulados durante o processo de execuo precisam ser recuperados a qualquer momento. Por esse motivo devem ser usados os arquivos de dados. Para a manipulao de arquivos em Java, necessria a utilizao do pacote java.io. Os dados podem ser armazenados e recuperados pelo pacote java.io por intermdio de um sistema de comunicao denominado controle de fluxo (Stream), permitindo a manipulao de diferentes formatos de arquivo, entre eles: txt, data, gif.

7.2 Leitura e gravao de um arquivo texto


Existem diversas maneiras de realizar a manipulao de arquivo texto. A forma apresentada utiliza a classe BufferedReader para a leitura do arquivo e classe PrintWriter para a gravao.

Arquivo um conjunto de dados armazenados em uma memria secundria no voltil que pode ser recuperado pelo programa a qualquer instante.

Aula 7 Manipulando arquivos

91

e-Tec Brasil

O Exemplo1101 a seguir demonstra o cdigo necessrio para a criao de um cadastro de pessoas usando a leitura e gravao em arquivo texto (Figuras 7.1 e 7.2). O nome do arquivo cdigo da pessoa mais a extenso txt e ser armazenado na mesma pasta em que a classe estiver localizada.

e-Tec Brasil

92

Tcnicas de Programao

Figura 7.1: Exemplo1101


Fonte: Elaborada pelo autor

Figura 7.2: Execuo do programa Exemplo1101


Fonte: Elaborada pelo autor

Aula 7 Manipulando arquivos

93

e-Tec Brasil

O pacote java.io necessrio para a manipulao de arquivos de fluxo.

O aplicativo do Exemplo1101 possui trs botes: um para abrir texto, outro para gravar o arquivo texto e outro para limpar o contedo das caixas de texto, conforme indica a Figura 7.2. Ao pressionar o boto Gravar, o contedo das caixas de texto armazenado num arquivo texto cujo nome igual ao cdigo da pessoa (mais a extenso .txt). Dessa forma, cada pessoa cadastrada armazenada num arquivo texto diferente, isto , a pessoa de cdigo 10 armazenada no arquivo 10.txt, a pessoa de cdigo 15 armazenada no arquivo 15.txt e assim sucessivamente. Ao pressionar o boto Abrir, ocorre o processo inverso, isto , o contedo armazenado no arquivo, cujo nome deve ser fornecido pelo usurio, copiado para as caixas de texto. Ao pressionar o boto Limpar, o contedo das caixas de texto tfCodigo, tfNome e tfEmail apagado. A validao das caixas de texto realizada ao pressionar o boto Gravar. Todas as caixas de texto precisam ter algum contedo; caso contrrio, uma mensagem enviada ao usurio indicando a obrigatoriedade do preenchimento. Observe que utilizado o mtodo requestFocus(), responsvel por fornecer o foco (do cursor) ao objeto correspondente. O Exemplo1101 contm a classe PrintWriter usada para criar o arquivo texto, cujo nome o contedo da caixa de texto tfcodigo concatenado com a extenso .txt. O arquivo a ser criado controlado pelo objeto out. O objeto out realiza a gravao dos valores do cdigo, nome e e-mail, cada um em uma linha diferente do arquivo texto por meio do mtodo println, que faz com que cada dado gravado ocupe uma linha diferente do arquivo. Imagine que voc est criando um arquivo texto por meio do bloco de notas e cada linha receber um dado diferente. O mtodo close() responsvel por fechar o arquivo. Os dados so efetivamente transferidos para o arquivo texto quando o objeto out fechado. A exceo IOException gerada quando, por um motivo qualquer, no for possvel realizar a gravao do arquivo. Em resumo, para o armazenamento de dados em um arquivo texto, necessrio:

e-Tec Brasil

94

Tcnicas de Programao

a) criar um arquivo de fluxo para a sada de dados por meio da classe PrintWriter; b) gravar os dados no arquivo por meio do mtodo println(); c) fechar o arquivo gravado por meio do mtodo close(). A abertura e leitura de um arquivo texto so executadas quando o usurio pressiona o boto Abrir. O objeto br criado como um objeto da classe BufferedReader. Observe que o objeto tenta abrir o arquivo cujo nome foi solicitado ao usurio. Caso haja sucesso na abertura do arquivo, o cursor fica posicionado na primeira linha do arquivo. Isso tambm ocorre quando um arquivo de texto aberto por meio do bloco de notas. Experimente abrir o arquivo.txt com o bloco de notas e verifique que o cursor fica posicionado no primeiro caractere da primeira linha. A leitura do contedo do arquivo texto, linha a linha, realizada por meio do mtodo readLine(), que o armazena nas caixas de texto correspondentes o cdigo, nome e e-mail. Cada vez que o mtodo readLine() executado, uma linha do arquivo lida e o cursor posicionado automaticamente na prxima linha. O Exemplo1102 a seguir apresenta uma aplicao que funciona como um editor de textos bem bsico. Ele realiza a leitura ou a gravao de um arquivo texto qualquer, escolhido pelo usurio por meio da caixa de dilogo da classe FileDialog. Quando o usurio pressiona o boto Gravar ou o boto Abrir, aparece uma caixa de dilogo semelhante utilizada pelo Windows, por exemplo, no bloco de notas. Com isso, torna-se possvel realizar a escolha do arquivo que ser lido ou gravado pela aplicao. O Exemplo1102 mostra tambm outras duas classes (FileWriter e FileReader) que podem ser usadas para a manipulao de arquivos texto. O cdigo do exemplo apresentado na Figura 7.3 e a Figura 7.4 exibe a execuo do programa.

Aula 7 Manipulando arquivos

95

e-Tec Brasil

Figura 7.3: Exemplo1102


Fonte: Elaborada pelo autor

Figura 7.4: Execuo do programa Exemplo1102


Fonte: Elaborada pelo autor

e-Tec Brasil

96

Tcnicas de Programao

No Exemplo1102 so declarados dois objetos (fdAbrir e fdSalvar) como da classe FileDialog, usada na criao de caixas de dilogo para manipulao de arquivos. O comando fdAbrir = new FileDialog (this, Abrir arquivo, FileDialog. LOAD); inicializa o objeto fdAbrir como uma caixa de dilogo com o ttulo Abrir arquivo para a leitura de arquivos (FileDialog.LOAD). O comando fdSalvar = new FileDialog ( this, salvar arquivo , FileDialog. SAVE); inicializa o objeto fdSalvar como uma caixa de dilogo com o ttulo Salvar arquivo para a gravao de arquivos (FileDialog.SAVE). A abertura da caixa de dilogo de gravao pelo mtodo denominado setVisible(true). O comando if (fdSalvar.getFile()==null) return; no momento de realizar a gravao do arquivo, aberta uma caixa de dilogo. Para descobrir o arquivo escolhido pelo usurio, utilizado o mtodo getFile. Caso o usurio no tenha escolhido nenhum arquivo, ou se pressionou o boto Cancelar da caixa de dilogo, o mtodo getFile retorna null, o que provoca o encerramento do mtodo actionPerformed por meio de return e, consequentemente, a no gravao do arquivo. Caso contrrio, o caminho e o nome do arquivo so armazenados na varivel nome_do_arquivo pelos mtodos getDirectory e getFile, de acordo com: nome_do_arquivo = fdsalvar.getDirectory() + fdsalvar.getFile(); realizada a inicializao de out como um objeto da classe FileWriter, apontando para a varivel nome_do_arquivo que contm o arquivo escolhido ou digitado pelo usurio. Todo o contedo do TextArea armazenado no arquivo pelo mtodo write. A abertura da caixa de dilogo de leitura pelo mtodo setVisible(true). inicializado in como um objeto da classe FileReader apontando para a varivel nome_do_arquivo que contm o arquivo escolhido ou digitado pelo usurio. No processo de leitura utilizada a classe FileReader, por meio do mtodo read, cada caractere lido como um inteiro. Quando o final do arquivo for encontrado, retornado o valor -1.

Aula 7 Manipulando arquivos

97

e-Tec Brasil

Tambm verificado se o ponteiro j se encontra no final do arquivo, ou seja, enquanto i for diferente de -1, o arquivo lido caractere a caractere, cada caractere lido (tipo inteiro) e convertido no tipo char, sendo acumulado na String s. Dessa forma, realiza-se o processo de leitura do primeiro ao ltimo caractere do arquivo texto escolhido.

Resumo
Nesta aula falamos sobre as principais formas de utilizao de arquivos em Java, desde as estruturas mais simples at estruturas complexas para tratar dados e salvar em arquivos. Enumeramos os aspectos fundamentais para a leitura e gravao em arquivos. Demonstramos a importncia do armazenamento e da recuperao de dados. Apresentamos os passos necessrios para armazenar arquivos no formato texto.

Atividades de aprendizagem
1. Crie uma classe para armazenar que tenha as seguintes opes na manipulao de arquivo: Abrir, gravar e limpar. Os dados utilizados devem ser: matrcula, nome_aluno, endereo, telefone e CEP. 2. Crie uma classe para simular um editor de textos bsico e tente implementar algumas opes extras diferentes dos exemplos aqui apresentados.

e-Tec Brasil

98

Tcnicas de Programao

Aula 8 Estruturas de dados em Java: listas


Objetivos
Demonstrar a importncia do armazenamento e recuperao em estruturas de dados. Enumerar os aspectos fundamentais para a utilizao de listas lineares. Apresentar os passos necessrios para implementao de listas.

8.1 Definio de listas


Uma das formas mais fceis de interligar elementos de um conjunto por meio de uma lista. A lista um tipo de estrutura de dados bastante flexvel, porque permite o crescimento ou reduo de seu tamanho durante a execuo do programa. Os itens da lista podem ser acessados, retirados ou inseridos. Podemos tambm juntar duas listas para formar uma nica, assim como uma lista pode ser partida em duas ou mais listas. As listas so utilizadas para aplicaes nas quais no possvel prever a utilizao de memria, permitindo a manipulao de quantidade imprevisvel de dados. As listas so teis em aplicaes tais como manipulao simblica, gerncia de memria, simulao e compiladores. Uma lista linear uma sequncia de zero ou mais itens: x1, x2, , xn, na qual xi de um determinado tipo e n representa o tamanho da lista linear. Sua principal propriedade estrutural envolve as posies relativas dos itens em uma dimenso:

Aula 8 Estruturas de dados em Java: listas

99

e-Tec Brasil

assumindo n 1, x1 o primeiro item da lista e xn o ltimo item da lista xi precede xi+1 para i = 1, 2, , n 1 xi sucede xi1 para i = 2, 3, , n o elemento xi dito estar na i-sima posio da lista.

Para criar um tipo abstrato de dados Lista em Java, necessrio definir um conjunto de operaes sobre os objetos do tipo lista. O conjunto de operaes pode ser definido e depende de cada aplicao. Um conjunto de operaes necessrias a uma maioria de aplicaes : a) Criar uma lista linear vazia. b) Inserir um novo item imediatamente aps o i-simo item. c) Retirar o i-simo item. d) Localizar o i-simo item para examinar e/ou alterar o contedo de seus componentes. e) Combinar duas ou mais listas lineares em uma lista nica. f) Partir uma lista linear em duas ou mais listas. g) Fazer uma cpia da lista linear. h) Ordenar os itens da lista em ordem ascendente ou descendente, de acordo com alguns de seus componentes. i) Pesquisar a ocorrncia de um item com um valor particular em algum componente.

8.2 Implementao de listas por meio de arranjos


Em um tipo estruturado arranjo, os itens da lista so armazenados em posies contguas de memria. Os itens da lista so armazenados em posies contguas de memria. Algumas caractersticas de arranjos:

e-Tec Brasil

100

Tcnicas de Programao

A lista pode ser percorrida em qualquer direo. A insero de um novo item pode ser realizada aps o ltimo item com custo constante. A insero de um novo item no meio da lista requer um deslocamento de todos os itens localizados aps o ponto de insero. Retirar um item do incio da lista requer um deslocamento de itens para preencher o espao deixado vazio.
Itens

primeiro = 0 1

x1 x2
. . .

ltimo - 1

xn
. . .

maxTam - 1
Figura 8.1: Lista utilizando arranjo
Fonte: Elaborada pelo autor

A estrutura lista utilizando arranjo uma possvel implementao para as nove operaes definidas anteriormente para o tipo abstrato de dados lista. No programa mostrado na Figura 8.2 utilizamos a estrutura lista em que o campo item o principal componente da classe Lista.

Aula 8 Estruturas de dados em Java: listas

101

e-Tec Brasil

Figura 8.2: Lista com arranjo


Fonte: Elaborada pelo autor

Os itens so armazenados em um arranjo de tamanho suficiente para armazenar a lista.

e-Tec Brasil

102

Tcnicas de Programao

O i-simo item da lista est armazenado na i-sima posio do arranjo, 1 i <ltimo. A constante MaxTam define o tamanho mximo permitido para a lista.

8.2.1 Lista utilizando arranjo: vantagem e desvantagens


Vantagem: Economia de memria (os apontadores so implcitos nessa estrutura). Desvantagens: Custo para inserir ou retirar itens da lista, que pode causar um deslocamento de todos os itens, no pior caso. Em aplicaes em que no existe previso sobre o crescimento da lista, a utilizao de arranjos deve ter a realocao de memria.

8.3 Implementao de listas por meio de estruturas autorreferenciadas


Em uma estrutura autorreferenciada, cada item da lista contm a informao que necessria para alcanar o prximo item. Esse tipo de implementao permite utilizar posies no contguas de memria, sendo possvel inserir e retirar elementos sem haver a necessidade de deslocar os itens seguintes da lista. H uma clula cabea para simplificar as operaes sobre a lista (Figura 8.3).

Lista
Fonte: Elaborada pelo autor

x1

...

xn

ni1

Figura 8.3: Lista utilizando estruturas autorreferenciadas

A estrutura da lista utilizando estruturas autorreferencidas e uma possvel implementao para as nove operaes definidas anteriormente para o tipo lista so mostradas no exemplo mostrado na Figura 8.4 a seguir.

Aula 8 Estruturas de dados em Java: listas

103

e-Tec Brasil

Figura 8.4: Exemplo de Lista com estrutura autoreferenciadas


Fonte: Elaborada pelo autor

8.3.1 Caractersticas principais das listas autoreferenciadas


A lista constituda de clulas: Cada clula contm um item da lista e uma referncia para a clula seguinte.

e-Tec Brasil

104

Tcnicas de Programao

A classe Lista contm uma referncia para a clula cabea, uma referncia para a ltima clula da lista e uma referncia para armazenar a posio corrente na lista.

8.3.2 Lista utilizando estruturas autorreferenciadas: vantagens e desvantagem


Vantagens: Permite inserir ou retirar itens do meio da lista a um custo constante (importante quando a lista tem de ser mantida em ordem). boa para aplicaes em que no existe previso sobre o crescimento da lista (o tamanho mximo da lista no precisa ser definido a priori). Desvantagem: Utilizao de memria extra para armazenar as referncias.

Resumo
Nesta aula falamos sobre as principais formas de utilizao de estruturas de dados em Java. Programamos a utilizao da estrutura de dados lista na forma de arranjos e estrutura autorreferenciadas.

Atividades de aprendizagem
1. Refazer a estrutura do exemplo na Figura 8.2 para sempre permitir a insero de novos elementos na lista. Para isso devemos alterar a operao Insere e toda vez que a insero de um novo item esgotar a memria disponvel pelo arranjo item, uma nova rea de memria com capacidade maior deve ser alocada e o contedo do arranjo item deve ser copiado para ela. 2. Considerada a implementao de listas lineares utilizando estruturas autorreferenciadas e com a clula cabea, escreva um mtodo em Java para a classe lista que retorna true caso o valor ch estiver na lista e retorna false se o valor ch no estiver na lista.

Aula 8 Estruturas de dados em Java: listas

105

e-Tec Brasil

Aula 9 Estruturas de dados em Java: pilha


Objetivos
Demonstrar a importncia do armazenamento e recuperao utilizando estruturas de dados. Enumerar os aspectos fundamentais para a utilizao de pilhas. Apresentar os passos necessrios para implementao de pilhas.

9.1 Definio de pilha


Existem aplicaes para listas lineares nas quais inseres, retiradas e acesso a itens ocorrem sempre em um dos extremos da lista. Pilha uma lista linear em que todas as inseres, retiradas e acessos so feitos em apenas um extremo da lista. Os itens em uma pilha so colocados um sobre o outro, com o item inserido mais recentemente no topo e o item inserido menos recentemente no fundo.

9.2 Propriedades e aplicaes das pilhas


Propriedades: O ltimo item inserido o primeiro item que pode ser retirado da lista. So as chamadas listas LIFO (last-in, first-out). Existe uma ordem linear para pilhas, do mais recente para o menos recente. ideal para processamento de estruturas aninhadas de profundidade imprevisvel. Uma pilha contm uma sequncia de obrigaes adiadas. A ordem de remoo garante que as estruturas mais internas sero processadas antes das mais externas.
O modelo padro da pilha o de um monte de pratos em uma prateleira, sendo conveniente retirar pratos ou adicionar novos pratos na parte superior.

Aula 9 Estruturas de dados em Java: pilha

107

e-Tec Brasil

Aplicaes em estruturas aninhadas: Quando necessrio caminhar em um conjunto de dados e guardar uma lista de coisas a fazer posteriormente. O controle de sequncias de chamadas de subprogramas. A sintaxe de expresses aritmticas. As pilhas ocorrem em estruturas de natureza recursiva (como rvores). Elas so utilizadas para implementar a recursividade.

9.3 Conjunto de operaes


a) Criar uma pilha vazia. b) Verificar se a lista est vazia. Retorna true se a pilha est vazia; caso contrrio, retorna false. c) Empilhar o item x no topo da pilha. d) Desempilhar o item x no topo da pilha, retirando-o da pilha. e) Verificar o tamanho atual da pilha. Veja o exemplo mostrado na Figura 9.1 a seguir.

Figura 9.1: Exemplo de pilha com arranjo


Fonte: Elaborada pelo autor

e-Tec Brasil

108

Tcnicas de Programao

9.4 Implementao de pilhas por meio de arranjo


Em uma implementao por meio de arranjos os itens da pilha so armazenados em posies contiguas de memria. Por causa das caractersticas da pilha, as operaes de insero e de retirada de itens devem ser implementadas de forma diferente da implementao feita com listas.
Itens
primeiro = 0 1

x1 x2 . . .

topo - 1

xn . . .

maxTam - 1
Figura 9.2: Pilha utilizando arranjo
Fonte: Elaborada pelo autor

Como as retiradas e inseres ocorrem no topo da pilha, um cursor chamado topo utilizado para controlar a posio do item no topo da pilha. Na estrutura da pilha usando arranjo, o campo item o principal componente da classe pilha mostrado no exemplo abaixo:

9.5 Implementao de pilhas por meio de estruturas autorreferenciadas


Ao contrrio da implementao de listas lineares por meio de estruturas autorreferenciadas, no h necessidade de manter uma clula cabea no topo da pilha. Para desempilhar um item, basta desligar a clula que contm xn, e a clula que contm xn1 passa a ser a clula de topo. Para empilhar um novo item, basta fazer a operao contrria, criando uma nova clula para receber o novo item (Figura 9.3).

Aula 9 Estruturas de dados em Java: pilha

109

e-Tec Brasil

ni1 x 1 . . . x 1-1

topo
Fonte: Elaborada pelo autor

xn

Figura 9.3: Pilha utilizando autoreferncia

Algumas caractersticas da estrutura e operaes sobre pilhas utilizando estruturas autorreferenciadas: O campo tam evita a contagem do nmero de itens no mtodo tamanho. Cada clula de uma pilha contm um item da pilha e uma referncia para outra clula. A classe Pilha contm uma referncia para o topo da pilha.

e-Tec Brasil

110

Tcnicas de Programao

Figura 9.4: Exemplo de pilha com estrutura autoreferenciada


Fonte: Elaborada pelo autor

Aula 9 Estruturas de dados em Java: pilha

111

e-Tec Brasil

Resumo
Nesta aula falamos sobre as principais formas de utilizao de estruturas de dados pilha em Java. Programamos a utilizao da estrutura de dados pilha na forma de arranjos e estruturas autorreferenciadas.

Atividades de aprendizagem
1. Duas pilhas podem coexistir em um mesmo vetor, uma crescendo em um sentido, e a outra, no outro? 2. Duas pilhas podem ser alocadas no mesmo vetor com o mesmo grau de eficincia? Por qu? 3. possvel resolver o problema da representao por alocao sequencial para mais de duas pilhas?

e-Tec Brasil

112

Tcnicas de Programao

Referncias
DEITEL, H. M.; DEITEL, P. J. Java: como programar. Traduo e reviso tcnica de Carlos Arthur Lang Lisba. 4. ed. Porto Alegre: Editora Bookman, 2003. ARNOLD, Ken; GOSLING, James; HOLMES, David. A linguagem de programao Java. 4. ed. Porto Alegre: Editora Bookman, 2007. GOODRICH, Michael T.; TAMASSIA, Roberto. Estrutura de dados e algoritmos em Java. 4. ed. Porto Alegre: Editora Bookman, 2007. BONAN, Adilson Rodrigues. Java. fundamentos, prticas & certificaes. So Paulo: Editora Alta Books, 2008. FURGERI, Srgio. Java 6: ensino didtico: desenvolvendo e implementando aplicaes. 6. ed. So Paulo: Editora rica, 2008. MOREIRA NETO, Eziel. Entendendo e dominando o Java. 3. ed. So Paulo: Editora Digerati Books, 2009. MOREIRA NETO, Eziel. Entendendo e dominando o Java para internet. 2. ed. So Paulo: Editora Digerati Books, 2009. LIGUORI, Robert; LIGUORI, Patricia. Java: guia de bolso. So Paulo: Editora Alta Books, 2008.

Referncias

113

e-Tec Brasil

Currculo do professor-autor
Antonio Luiz Santana graduado em Engenharia Mecnica com nfase em produo, com especializao em Redes de Computadores e Anlise de Sistemas. Professor de algumas instituies de ensino superior e curso tcnico desde 1991, lecionando disciplinas para o Curso Tcnico em Informtica e Superior de Tecnologia em Redes de Computadores e Anlise de sistemas. Em EaD, o responsvel pelas disciplinas Tcnicas de Programao, Sistemas de Informao I e Sistemas de Informao II, Servios de Redes. Atua na rea de Informtica e redes desde 1992, quando se formou Tcnico em Processamento de Dados pelo SENAC. Participou da elaborao do projeto do Curso Superior de Sistemas de Informao e dos Cursos Tcnicos em Informtica (modalidade presencial e EaD). Tambm coordenador de TI e Redes de computadores do Campus Vitria do IFES.

e-Tec Brasil

114

Tcnicas de Programao

Programao Orientada a Objetos


Victorio Albani de Carvalho Giovany Frossard Teixeira

Curso Tcnico em Informtica

Programao Orientada a Objetos


Victorio Albani de Carvalho Giovany Frossard Teixeira

Colatina - ES 2012

Presidncia da Repblica Federativa do Brasil Ministrio da Educao Secretaria de Educao a Distncia

Instituto Federal de Educao, Cincia e Tecnologia do Esprito Santo Este Caderno foi elaborado em parceria entre o Instituto Federal de Educao, Cincia e Tecnologia do Esprito Santo e a Universidade Federal de Santa Catarina para a Rede e-Tec Brasil.
Equipe de Elaborao Instituto Federal de Educao, Cincia e Tecnologia do Esprito Santo IFES Coordenao Institucional Guilherme Augusto de Morais Pinto/IFES Joo Henrique Caminhas Ferreira/IFES Coordenao Curso Allan Francisco Forzza Amaral/IFES Professor-autor Victorio Albani de Carvalho/IFES Giovany Frossard Teixeira/IFES Comisso de Acompanhamento e Validao Universidade Federal de Santa Catarina UFSC Coordenao Institucional Araci Hack Catapan/UFSC Coordenao do Projeto Silvia Modesto Nassar/UFSC Coordenao de Design Instrucional Beatriz Helena Dal Molin/UNIOESTE e UFSC Coordenao de Design Grfico Andr Rodrigues/UFSC Design Instrucional Gustavo Pereira Mateus/UFSC Web Master Rafaela Lunardi Comarella/UFSC Web Design Beatriz Wilges/UFSC Mnica Nassar Machuca/UFSC Diagramao Andr Rodrigues da Silva/UFSC Brbara Zardo/UFSC Juliana Tonietto/UFSC Marlia C. Hermoso/USFC Nathalia Takeuchi/UFSC Reviso Jlio Csar Ramos/UFSC Projeto Grfico e-Tec/MEC

C331p Carvalho, Victorio Albani de Programao orientada a objetos : Curso tcnico de inform tica / Victorio Albani de Carvalho, Giovany Frossard Teixeira. Colatina: IFES, 2012. 134 p. : il. Inclui bibliografia ISBN: 978-85-62934-38-4 1. Java (Linguagem de programao de computador). 2. Programao orientada a objetos (Computao). 3. Banco de dados. I. Carvalho, Victorio Albani de. II. Teixeira, Giovany Frossard . III. Instituto Federal do Esprito Santo. IV. Ttulo. CDD: 005.133

Apresentao e-Tec Brasil


Prezado estudante, Bem-vindo ao e-Tec Brasil! Voc faz parte de uma rede nacional pblica de ensino, a Escola Tcnica Aberta do Brasil, instituda pelo Decreto n 6.301, de 12 de dezembro 2007, com o objetivo de democratizar o acesso ao ensino tcnico pblico, na modalidade a distncia. O programa resultado de uma parceria entre o Ministrio da Educao, por meio das Secretarias de Educao a Distancia (SEED) e de Educao Profissional e Tecnolgica (SETEC), as universidades e escolas tcnicas estaduais e federais. A educao a distncia no nosso pas, de dimenses continentais e grande diversidade regional e cultural, longe de distanciar, aproxima as pessoas ao garantir acesso educao de qualidade, e promover o fortalecimento da formao de jovens moradores de regies distantes, geograficamente ou economicamente, dos grandes centros. O e-Tec Brasil leva os cursos tcnicos a locais distantes das instituies de ensino e para a periferia das grandes cidades, incentivando os jovens a concluir o ensino mdio. Os cursos so ofertados pelas instituies pblicas de ensino e o atendimento ao estudante realizado em escolas-polo integrantes das redes pblicas municipais e estaduais. O Ministrio da Educao, as instituies pblicas de ensino tcnico, seus servidores tcnicos e professores acreditam que uma educao profissional qualificada integradora do ensino mdio e educao tcnica, capaz de promover o cidado com capacidades para produzir, mas tambm com autonomia diante das diferentes dimenses da realidade: cultural, social, familiar, esportiva, poltica e tica. Ns acreditamos em voc! Desejamos sucesso na sua formao profissional! Ministrio da Educao Janeiro de 2010
Nosso contato etecbrasil@mec.gov.br

e-Tec Brasil

Indicao de cones
Os cones so elementos grficos utilizados para ampliar as formas de linguagem e facilitar a organizao e a leitura hipertextual. Ateno: indica pontos de maior relevncia no texto.

Saiba mais: oferece novas informaes que enriquecem o assunto ou curiosidades e notcias recentes relacionadas ao tema estudado. Glossrio: indica a definio de um termo, palavra ou expresso utilizada no texto. Mdias integradas: sempre que se desejar que os estudantes desenvolvam atividades empregando diferentes mdias: vdeos, filmes, jornais, ambiente AVEA e outras. Atividades de aprendizagem: apresenta atividades em diferentes nveis de aprendizagem para que o estudante possa realiz-las e conferir o seu domnio do tema estudado.

e-Tec Brasil

Sumrio
Apresentao da disciplina Projeto instrucional Aula 1 Introduo plataforma Java 1.1 Introduo 1.2 A plataforma Java 1.3 Ambientes de desenvolvimento Java 1.4 Primeiro exemplo de programa em Java 1.5 Variveis e constantes 1.6 Converses entre tipos primitivos 1.7 Comentrios 1.8 Atribuio, entrada e sada de dados 1.9 Operadores 1.10 Comandos de deciso ou seleo 1.11 Comandos de repetio 1.12 Escopo de variveis 1.13 Vetores e matrizes Aula 2 Introduo Orientao a Objetos 2.1 Conceitos bsicos 2.2 Classes em Java 2.3 Declarao de atributos e mtodos 2.4 Utilizao de objetos 2.5 Atributos e mtodos estticos 2.6 A classe String 2.7 Listas Aula 3 Construtores, destrutores e encapsulamento 3.1 Construtores 3.2 Destrutores 3.3 Encapsulamento 13 15 17 17 18 19 20 22 23 25 26 27 28 30 31 31 35 35 36 38 41 43 44 45 49 49 50 51

e-Tec Brasil

Aula 4 Herana e polimorfismo 4.1 Herana 4.2 Utilizao de atributos protected 4.3 Polimorfismo 4.4 Sobrescrita 4.5 Sobrecarga 4.6 Classe Object Aula 5 Classes abstratas e associaes 5.1 Classes abstratas 5.2 Mtodos abstratos 5.3 Associaes Aula 6 Herana mltipla e interfaces 6.1 Herana mltipla 6.2 Interfaces Aula 7 Interfaces grficas em Java Parte I 7.1 Java Swing 7.2 JFrame 7.3 JLabel e ImageIcon 7.4 JOptionPane 7.5 Tratamento de eventos e JButton 7.6 JTextField e JPasswordField Aula 8 Interfaces grficas em Java parte II 8.1 Padres de layout 8.2 JComboBox e tratamento de eventos 8.3 JCheckBox 8.4 JRadioButton e ButtonGroup 8.5 JMenuBar, JMenu e JMenuItem

55 55 57 58 59 62 64 69 69 72 73 77 77 78 83 83 84 86 88 91 93 99 99 102 105 106 109

e-Tec Brasil

Nome da disciplina

Aula 9 Integrao com Banco de Dados parte I 9.1 Programao cliente-servidor 9.2 Acesso a Bancos de Dados em Java 9.3 Fontes de dados ODBC 9.4 Conectando com o Banco de Dados 9.5 Consultando dados no banco Aula 10 Integrao com Banco de Dados parte II 10.1 Introduo 10.2 Insero de dados 10.3 Atualizao de dados 10.4 Excluso de dados Referncias Currculo dos professores-autores

115 115 116 117 119 122 127 127 129 130 131 133 134

e-Tec Brasil

Palavra do professor-autor
Caro estudante! Somos Victorio Albani de Carvalho e Giovany Frossard Teixeira, responsveis pela elaborao deste material para a disciplina de Programao Orientada a Objetos. Ao se deparar com mais uma disciplina voltada programao, voc pode se questionar sobre o motivo de termos mais uma disciplina com esse foco. De fato, nesta disciplina daremos continuidade aos assuntos das outras disciplinas, mas estudaremos a programao sob um novo paradigma: a orientao a objetos. Nessa nova forma de programar, modelaremos o universo do nosso problema como um conjunto de objetos que tm determinadas caractersticas e agruparemos esses objetos em categorias chamadas classes. Ento, em ltima instncia, nossos programas sero um conjunto de classes. Alm disso, teremos outras duas novidades nos programas desenvolvidos nesta disciplina: interfaces grficas com tratamento de eventos e acesso a banco de dados. Esse ltimo assunto vem para fazer a ligao entre os programas que desenvolvemos nas disciplinas de programao e os conceitos estudados na disciplina de banco de dados. Ou seja, ser necessrio relembrar diversos conceitos estudados em vrias outras disciplinas e ainda estudar vrios conceitos totalmente novos. Assim, trata-se de uma disciplina com contedo muito denso e que demanda muita dedicao. Lembre-se: a melhor forma de aprender praticando! Essa frase ainda mais verdadeira para a programao. Assim, organize seu tempo, dedique-se ao curso e aproveite: voc dever divertir-se durante o processo de aprendizagem. Um abrao! Prof. Victorio Albani de Carvalho e Prof. Giovany Frossard Teixeira

11

e-Tec Brasil

Apresentao da disciplina
Nesta disciplina estudaremos os conceitos do paradigma de orientao a objetos utilizando a linguagem de programao Java para aplicar tais conceitos. Alm disso, desenvolveremos programas com interface grfica e com acesso a bancos de dados. Ao programar seguindo o paradigma de orientao a objetos, usamos uma maneira de pensar diferente do que fazamos nas disciplinas de programao anteriores, mas todos os conceitos aprendidos nas outras disciplinas sero utilizados nesta. Assim, fundamental revisar conceitos como: variveis, operadores, estruturas de lao e de deciso, vetores etc. A primeira aula desta disciplina visa revisar esses conceitos e apresentar a sintaxe de Java. De fato fazemos uma reviso geral da linguagem, pois consideramos que o aluno j utilizou a linguagem Java em alguma disciplina anterior sem se aprofundar nos conceitos de orientao a objetos ou vem estudando linguagem C, cuja sintaxe muito parecida com a sintaxe de Java. Aps essa reviso inicial, focaremos nos conceitos de orientao a objetos e em sua aplicao na programao em Java. Em seguida focaremos na construo de programas com interface grficas e no tratamento de eventos. Nesse contexto estudaremos as classes de Java voltadas construo de interfaces grficas. Por fim, aprenderemos a construir programas Java que acessem bancos de dados com capacidade para inserir, consultar, excluir e alterar dados. Assim, para essa ltima parte da disciplina sero fundamentais os conhecimentos assimilados na disciplina de Banco de Dados. Este material se prope a ser um guia didtico dos conceitos a serem estudados. Entretanto, impossvel esgotar tantos assuntos em um nico material. Assim, importante ressaltar que estudos das bibliografias recomendadas podem ser necessrios para um melhor aprendizado e desenvolvimento de capacitaes complementares imprescindveis formao direcionada para este curso. Bons estudos e sucesso! Prof. Victorio Albani de Carvalho e Prof. Giovany Frossard Teixeira

13

e-Tec Brasil

Projeto instrucional
Disciplina: Programao Orientada a Objetos (carga horria: 90 hs). Ementa: Parte 1: Paradigmas de programao orientada a objetos. Linguagem de programao orientada a objetos. Parte 2: Programao de interfaces grficas e tratamento de eventos. Programao cliente-servidor, compilao em separado. Bibliotecas dinmicas (DLL). Integrao com Banco de Dados.
OBJETIVOS DE APRENDIZAGEM
Entender o funcionamento da plataforma Java. Entender o que so os ambientes de desenvolvimento Java. Conhecer ou revisar as principais caractersticas e recursos da linguagem Java: variveis, comentrios, operadores, comandos de deciso e de repetio, vetores e matrizes.

AULA

MATERIAIS
Softwares: DK e NetBeans. Artigo sobre o que Java em: http://javafree.uol.com.br/ artigo/871498/Tutorial-Java-O-que-e-Java.html Artigo sobre as caractersticas bsicas de Java em http://javafree.uol.com.br/artigo/871496/ Tutorial-Java-2-Caracteristicas-Basicasindex Softwares: JDK e NetBeans.

CARGA HORRIA (horas)

1. Introduo plataforma Java

10

2. Introduo a orientao a objetos

Conhecer os conceitos fundamentais de orientao a objetos: objetos, classes, mtodos, atributos e pacotes. Aprender a criar e a utilizar classes e objetos em Java. Conhecer e aprender a utilizar a classe String e a classe ArrayList.

Documentao oficial da Oracle sobre a classe ArrayList em http://download.oracle.com/ javase/6/docs/api/java/util/ ArrayList.html Documentao oficial da Oracle sobre a classe LinkedList em http://download.oracle.com/ javase/6/docs/api/java/util/ LinkedList.html

10

3. Construtores, destrutores e encapsulamento

Entender os conceitos de construtores e destrutores. Entender o conceito de encapsulamento e sua importncia. Criar programas com maior manutenibilidade e extensibilidade pela utilizao do conceito de encapsulamento.

Softwares: JDK e NetBeans.

08

(continua)

15

e-Tec Brasil

AULA

OBJETIVOS DE APRENDIZAGEM
Conhecer o conceito de herana e aprender a implementar esse conceito em Java. Compreender o conceito de polimorfismo.

MATERIAIS

CARGA HORRIA (horas)

Softwares: JDK e NetBeans. Documentao oficial da Oracle sobre a classe Object em http://download.oracle.com/ javase/6/docs/api/java/lang/ Object.html.

4. Herana e polimorfismo

Conhecer os conceitos de sobrecarga e sobrescrita de mtodos. Aprender a utilizar polimorfismo pela aplicao dos conceitos de herana, sobrecarga e sobrescrita de mtodos. Conhecer os conceitos de classes e mtodos abstratos.

10

5. Classes abstratas e associaes

Aprender a utilizar classes abstratas em hierarquias de classes. Conhecer o conceito de associao entre classes. Aprender a implementar associaes entre classes em Java. Entender o conceito de herana mltipla. Conhecer o conceito de interface.

Softwares: JDK e NetBeans.

08

6. Herana mltipla e interfaces

Aprender a aplicar o conceito de interface em Java. Entender como o conceito de interface pode ser utilizado para simular uma herana mltipla em Java. Construir as primeiras interfaces grficas em Java.

Softwares: JDK e NetBeans.

04

Softwares: JDK e NetBeans. Documentao oficial da Oracle sobre a classe JTextArea em http://download.oracle.com/ javase/6/docs/api/javax/swing/ JTextArea.html 10

7. Interfaces grficas em Java parte I

Conhecer algumas classes para construo de interfaces grficas em Java: JFrame, JLabel, ImageIcon, JOptionPane, JTextField e JPassword. Aprender a fazer tratamento de eventos sobre interface grfica em Java. Aprender o conceito de padres de layout. Conhecer alguns padres de layout de Java. Conhecer mais classes para construo de interfaces grficas em Java: JComboBox, JCheckBox, JRadioButton, ButtonGroup, JMenuBar, JMenu e JMenuItem. Desenvolver novos exemplos de tratamento de eventos sobre interface grfica em Java. Compreender o conceito de Programao cliente-servidor. Aprender a acessar bancos de dados em Java utilizando drivers nativos e ODBC. Aprender a construir aplicaes em Java capazes de consultar dados de bancos de dados. Aprender a construir aplicaes em Java capazes de inserir, alterar e excluir dados de bancos de dados.

8. Interfaces grficas em Java parte II

Softwares: JDK e NetBeans.

10

9. Integrao com Bancos de Dados parte I

Softwares: JDK, NetBeans, MySQL Server e driver nativo do MySQL.

10

10. Integrao com Bancos de Dados parte II

Softwares: JDK, NetBeans, MySQL Server e driver nativo do MySQL.

10 (concluso)

Aula 1 Introduo plataforma Java


Objetivos
Entender o funcionamento da plataforma Java. Entender o que so os ambientes de desenvolvimento Java. Conhecer ou revisar as principais caractersticas e recursos da linguagem Java: variveis, comentrios, operadores, comandos de deciso e de repetio, vetores e matrizes.

1.1 Introduo
Nesta disciplina estudaremos os conceitos de programao orientada a objetos. Para isso, precisaremos aprender a programar em uma linguagem de programao que siga esses conceitos: a linguagem Java. A linguagem Java apresenta uma sintaxe muito semelhante s linguagens C e C++. Nesta disciplina consideramos que o aluno j utilizou a linguagem Java no semestre anterior sem se aprofundar nos conceitos de orientao a objetos, ou o aluno vem estudando linguagem C nos perodos anteriores, j tendo assim familiaridade com a sintaxe dessa linguagem. Nesse contexto, essa primeira aula traz uma viso geral da plataforma e da linguagem Java apenas para solidificar conhecimentos prvios do aluno. Dentre as caractersticas da linguagem Java destacam-se: Orientao a objetos: suporte ao paradigma de programao orientada a objetos. Portabilidade: possvel rodar um software feito em Java em qualquer mquina que disponha de mquina virtual implementada para ela.

Aula 1 Introduo plataforma Java

17

e-Tec Brasil

Multithreading: possibilidade de desenvolvimento utilizando threads. Suporte programao para internet: Java foi concebida originalmente para ser usada no ambiente da World Wide Web, diferentemente de outras linguagens que foram adaptadas para o desenvolvimento web. Suporte comunicao: classes para programao em rede. Acesso remoto a banco de dados dados recuperados e/ou armazenados de qualquer ponto da internet. Segurana: mecanismos de segurana que a linguagem oferece para realizao de processos pela internet. Sintaxe baseada na sintaxe da linguagem C.

1.2 A plataforma Java


Plataforma o ambiente de software ou hardware no qual um programa executado.

Plataformas podem ser descritas como a combinao do sistema operacional e o hardware em que rodam. Nesse contexto, a maioria das plataformas de desenvolvimento existentes possui uma restrio marcante: cada programa produzido para uma plataforma (Sistema Operacional + hardware) especfica. A plataforma Java difere dessas plataformas pelo fato de desagregar o hardware de si, ou seja, trata-se de uma plataforma de software que roda em cima de outras plataformas baseadas em hardware. Essa independncia de hardware obtida pela plataforma Java deve-se utilizao do conceito de mquina virtual: a Java Virtual Machine (JVM). A JVM um software que funciona sobre o sistema operacional, sendo responsvel pelo processo de traduo de um programa Java para uma plataforma especfica. Assim, um programa feito em Java pode rodar em qualquer SO de qualquer arquitetura, desde que exista uma JVM implementada para ele. A Figura 1.1 ilustra o processo de execuo de um aplicativo Java.

e-Tec Brasil

18

Programao Orientada a Objetos

Aplicativo Java

Aplicativo Java

JVM

JVM

Windows

Linux

Mquina
Figura 1.1: Execuo de um aplicativo Java
Fonte: Elaborada pelos autores

Mquina

1.3 Ambientes de desenvolvimento Java


Um programa Java precisa passar por um processo de compilao para ser analisada a existncia de erros de sintaxe. Esse processo de compilao traduz o cdigo-fonte escrito pelo programador para uma linguagem intermediria chamada Java bytecodes. Esse processo de traduo dos cdigos fontes para Java bytecodes feito por um programa chamado compilador. Ento, necessrio que outra ferramenta chamada interpretador se responsabilize por interpretar esses bytecodes para o sistema operacional. Essa ferramenta que interpreta bytecodes a mquina virtual Java (JVM). O conjunto de ferramentas necessrias para desenvolver, compilar e rodar aplicativos Java disponibilizado em um kit conhecido como Java Development Kit (JDK). Assim, para comear a programar em Java voc deve realizar o download do JDK e instal-lo. Ao realizar o download do JDK, escolha a verso correta para seu sistema operacional. Com o JDK instalado, voc pode comear a programar em Java utilizando um simples editor de texto para editar seus programas, como, por exemplo, o bloco de notas. Assim, voc teria de editar seus programas, salv-los com extenso .Java, compil-los e ento execut-los.
A plataforma Java consiste em trs partes principais: a linguagem de programao Java, a mquina virtual Java (JVM) e diversas APIs Java. O projeto da plataforma Java controlado pela Sun e por sua comunidade de usurios.

Aula 1 Introduo plataforma Java

19

e-Tec Brasil

Para facilitar e agilizar esse processo, existem disponveis vrios Ambientes de Desenvolvimento Integrated Development Environment (IDE), que do suporte linguagem Java. Um IDE um programa de computador que rene ferramentas de apoio ao desenvolvimento de software com o objetivo principal de agilizar o processo de codificao.
Acesse o site http://www. netbeans.org/index_pt_BR.html e baixe a verso mais recente do NetBeans (a verso utilizada neste material a 7.0). Note que voc pode baixar diretamente o JDK com o NetBeans IDE Java SE j embutido. Nesse caso, no ser necessrio executar o download e instalao do JDK. Baixe a verso mais recente do NetBeans com JDK embutido e instale em seu computador. A instalao muito simples! Basta seguir as mensagens informadas nas janelas exibidas pelo assistente de instalao.

H vrios IDEs para programao Java. Os dois mais amplamente utilizados so o NetBeans e o Eclipse. Nessa disciplina utilizaremos o NetBeans. O NetBeans IDE um ambiente de desenvolvimento integrado gratuito e de cdigo aberto. Esse IDE executado em muitas plataformas, como Windows, Linux, Solaris e MacOS, sendo fcil de instalar e usar. O NetBeans IDE oferece aos desenvolvedores todas as ferramentas necessrias para criar aplicativos profissionais de desktop, empresariais, web e mveis multiplataformas. Assim, todo o processo de edio, compilao e execuo dos programas ser feito dentro do NetBeans.

1.4 Primeiro exemplo de programa em Java


Nesta aula ainda no estudaremos os conceitos de orientao a objeto, que uma das principais caractersticas da linguagem Java. Por enquanto, vamos nos focar na criao de programas em Java semelhantes aos que crivamos em linguagem C. Para ilustrar as semelhanas entre a linguagem C e Java, utilizaremos um exemplo simples de programa que apenas imprime na tela a mensagem Primeiro Exemplo!. A Figura 1.2 exibe no lado esquerdo o cdigo do programa em linguagem C e, no lado direito, o cdigo equivalente em Java.
Exemplo em JAVA Exemplo em C

Figura 1.2: Programa simples em Java e em C


Fonte: Elaborada pelos autores

Assim como a linguagem C, Java case sensitive, ou seja, o compilador diferencia letras minsculas de maisculas. Logo, tenha muita ateno ao digitar!

e-Tec Brasil

20

Programao Orientada a Objetos

A principal diferena que podemos notar j de incio que todo programa em Java inicia-se com a definio de uma classe. Uma classe definida pela palavra reservada class, seguida pelo nome da classe (neste caso, o nome da classe Exemplo01). Por conveno, todo nome de classe inicia-se com uma letra maiscula. Um programa Java formado por uma ou mais classes. No se preocupe agora com a definio de classe. Estudaremos esse conceito mais frente. Assim como em C todo programa Java tem sua execuo iniciada pelo mtodo main, alguma das classes do programa Java dever conter um mtodo main. Essa classe chamada de classe principal. As palavras public e static que aparecem na definio do mtodo main sero explicadas em aulas futuras. J a palavra void, assim como em C, indica que o mtodo no possui retorno. O argumento String args[ ] um vetor de Strings formado por todos os argumentos passados ao programa na linha de comando quando o programa invocado. O comando System. out.println ( ) utilizado para imprimir algo na tela. Ele equivalente ao printf() da linguagem C. Voc poderia editar esse programa no bloco de notas e salv-lo com o nome Exemplo01.java e, em uma mquina com o Java Development Kit (JDK) instalado, compil-lo digitando no prompt comando: javac Exemplo01.java. Esse comando geraria o arquivo bytecode com o nome Exemplo01.class. Ento, para executar o programa, deveria ser digitado no prompt comando: java Exemplo01.class. Em Java, o nome do arquivo deve ser sempre igual ao nome da classe, seguida da extenso .java. No caso do nosso exemplo, o nome do arquivo precisa ser Exemplo01.java porque o nome da classe Exemplo01. Mas, vamos utilizar o NetBeans, pois nos poupa bastante trabalho e seu editor oferece alguns recursos que facilitam a edio do cdigo. O primeiro passo abrirmos o NetBeans e criarmos um novo projeto. Para isso, realize os passos a seguir: 1. Clique em Arquivo > Novo Projeto. 2. Dentre as opes Categorias da janela aberta, escolha Java. Dentro de Projetos, escolha Aplicativo Java. Clique em Prximo.

Aula 1 Introduo plataforma Java

21

e-Tec Brasil

3. Escolha um nome para o projeto (por exemplo, Exemplos) e deixe marcadas as opes Criar classe principal (defina o nome da classe principal como Exemplo01) e Definir como projeto principal. Clique em Finalizar. Aps criarmos o projeto, ele passa a ser exibido na aba Projetos, que fica no canto esquerdo do NetBeans. Na rea de edio principal ser exibida a classe Exemplo01 criada. Ela j ir possuir um mtodo main. Nesse caso, apenas insira no mtodo o comando System.out.println (Primeiro exemplo!). Para compilar e executar o programa basta acessar o menu Executar> Executar Projeto Principal ou pressione a tecla F6 ou, ainda, clique no boto Executar da barra de ferramentas (um tringulo verde). Ento, a sada do programa ser exibida na aba Sada, localizada abaixo da rea de exibio de cdigo do NetBeans. A Figura 1.3 exibe a tela do NetBeans destacando a aba de sada e o boto Executar.

Leia mais sobre Java em http://javafree.uol.com.br/ artigo/871498/Tutorial-Java-Oque-e-Java.html. Com base no texto lido, descreva as trs edies de Java (J2SE, J2ME e J2EE). Figura 1.3: Resultado da execuo do exemplo da Figura 1.2
Fonte: NetBeans IDE 7.0.1

1.5 Variveis e constantes


Varivel um lugar onde as informaes podem ser armazenadas enquanto um programa est sendo executado. O valor pode ser alterado em qualquer ponto do programa da o nome (CADENHEAD; LEMAY, 2005, p. 22).

Assim como em linguagem C, programas feitos em Java devem ter suas variveis declaradas e inicializadas antes de serem utilizados. Em Java toda varivel identificada por um nome e tem um tipo definido no ato da declarao, que no pode ser alterado. A sintaxe para declarao de variveis em Java idntica que utilizamos em C.

e-Tec Brasil

22

Programao Orientada a Objetos

Sintaxe: <tipo_da_varivel> <nome_da_varivel>; Exemplos: double salario_liquido, salario_bruto; O tipo da varivel define, alm do tipo de dado que ela pode armazenar, o tamanho do espao de memria que deve ser alocado para ela. O Quadro 1.1 apresenta os tipos primitivos da linguagem Java. So os mesmos tipos de C, com o acrscimo do tipo boolean.
Quadro 1.1: Tipos primitivos da linguagem Java
Tipo primitivo char byte short int long float double Valores a serem armazenados Permite armazenar um caractere. Exemplo: a. Permite armazenar um nmero inteiro de -128 at +127. Exemplo: 10. Permite armazenar um nmero inteiro de -32.768 at +32.767. Exemplo: 10. Permite armazenar um nmero inteiro de -2.147.483.648 at +2.147.483.647. Exemplo: 10. Permite armazenar um nmero inteiro de -9.223.372.036.854.775.808 at +9.223.372.036.854.775.807. Exemplo: 10. Permite armazenar um ponto flutuante de -3,40292347E+38 at +3,40292347E+38. Exemplo: 3.1416. Permite armazenar um ponto flutuante de -1,79769313486231570E+308 at +1,79769313486231570E+308. Exemplo: 3.1416. Tamanho em bits 16 8 16 32 64 32 64 8

Ponto flutuante um formato de representao de nmeros reais em computadores.

boolean Permite armazenar apenas o valor true ou o valor false. Fonte: Elaborado pelos autores

Em Java no h a definio de constantes. Quando queremos definir variveis com valores constantes em Java utilizamos a palavra reservada final. Sintaxe: final <tipo_da_varivel> <nome_da_varivel> = <valor_constante>; Exemplo: final float PI = 3.1416;

1.6 Converses entre tipos primitivos


A converso de tipos consiste em utilizar uma varivel ou valor de um tipo para gerar um novo valor de outro tipo. Em alguns casos essa converso feita de forma direta, como, por exemplo, quando atribumos um valor inteiro a uma varivel do tipo double. Nesse caso a converso direta (tambm chamada de converso implcita) porque bvio que um nmero inteiro pode ser representado como um nmero real.

Aula 1 Introduo plataforma Java

23

e-Tec Brasil

Mas, alguns tipos de variveis apresentam valores incompatveis entre si. Assim, nesses casos no possvel fazer uma atribuio direta. Por exemplo, se tentarmos atribuir a uma varivel inteira o valor de uma varivel double, teremos um erro de compilao; veja a Figura 1.4.

Figura 1.4: Atribuio entre valores incompatveis


Fonte: Elaborada pelos autores

Para que atribuies como esta sejam possveis, precisamos solicitar explicitamente que o nmero real seja moldado (casted) como um nmero inteiro. Essa operao de converso entre tipos tambm chamada de casting. Para realizar a converso explcita, coloca-se, antes da expresso a ser convertida, o tipo destino da transformao entre parnteses (Figura 1.5).

Figura 1.5: Converso correta


Fonte: Elaborada pelos autores

No primeiro caso do exemplo apresentado na Figura 1.5, o valor da varivel p foi convertido para caber em uma varivel inteira. Assim, a varivel i assumiu o valor 23. Logo depois, a varivel i assumiu o valor 2. Ao fazer o casting para forar a atribuio de um valor a uma varivel, deve-se prestar ateno aos limites de valores de cada tipo primitivo. Esses limites foram apresentados no Quadro 1.1. Por exemplo, se atribumos o valor 200 a uma varivel inteira e depois utilizamos um casting para atribuir esse valor a uma varivel byte cujos possveis valores so de -128 a 127 no teremos erro de compilao, mas, como 200 estoura o valor mximo para uma varivel byte, ocorrer uma falha conhecida como overflow e o valor armazenado na varivel byte ser -56 (Figura 1.6).

Figura 1.6: Converso com overflow


Fonte: Elaborada pelos autores

As converses entre tipos primitivos podem ainda ser necessrias em expresses aritmticas quando so utilizados operandos com tipos divergentes (Figura 1.7).

e-Tec Brasil

24

Programao Orientada a Objetos

Figura 1.7: Converses necessrias em expresses aritmticas


Fonte: Elaborada pelos autores

Note que no exemplo da Figura 1.7 foi necessrio fazer a converso da varivel l que do tipo long para o tipo int, pois quando realizada uma operao entre operadores de tipos distintos o Java faz as contas utilizando o maior tipo que aparece nas operaes, no caso, long. No entanto, na ltima linha do exemplo, mesmo fazendo a converso da varivel i1 que do tipo int para o tipo byte continuou no compilando. Isso aconteceu porque o Java armazena o resultado de expresses em, no mnimo, um int. Assim, para que o trecho de cdigo apresentado pela Figura 1.7 seja compilado sem erros, as duas linhas marcadas devem ser retiradas ou comentadas. O Quadro 1.2 exibe alguns exemplos de converses entre tipos.
Quadro 1.2: Converso entre tipos
Tipo de Origem int double double long Tipo de Destino double int float int Exemplo int a = 20; double b = a; //nesse caso a converso implcita double a = 20.1; int b = (int) a; //converso explcita double a = 20.1; float b = (float) a; //converso explcita long a = 20; int b = (long) a; //converso explcita

Fonte: Elaborado pelos autores

Valores do tipo boolean no podem ser convertidos para nenhum outro tipo.

1.7 Comentrios
Comentrios so indicaes que colocamos no cdigo para facilitar que outros programadores o entendam. Java aceita trs tipos de comentrios: Quando queremos fazer um comentrio de uma nica linha, basta utilizar // para iniciar o comentrio (assim como em linguagem C). Quando queremos fazer comentrios de vrias linhas, iniciamos o comentrio com /* e finalizamos com */ (assim como em linguagem C).

Aula 1 Introduo plataforma Java

25

e-Tec Brasil

Quando queremos fazer comentrios de vrias linhas e gerar documentao Javadoc, iniciamos o comentrio com /** e finalizamos com */ .
Javadoc um programa que gera automaticamente documentao em HTML de programas Java a partir de comentrios que seguem um determinado formato. O Javadoc fornecido junto com o kit de desenvolvimento Java.

Figura 1.8: Exemplo de utilizaes de comentrios e de declarao de variveis e constantes.


Fonte: Elaborada pelos autores

1.8 Atribuio, entrada e sada de dados


Em Java, quando queremos atribuir um determinado valor a uma varivel, utilizamos o operador =exatamente como fazemos na linguagem C. Para obter entradas de dados digitados pelo usurio, em linguagem C ns utilizamos o comando scanf. Em Java utilizaremos a classe Scanner. O uso dessa classe bastante simples e poderemos entender melhor no exemplo apresentado pela Figura 1.9 a seguir.

Figura 1.9: Utilizao da classe Scanner para entrada de dados


Fonte: Elaborada pelos autores

e-Tec Brasil

26

Programao Orientada a Objetos

Ainda no aprendemos o conceito de classe, mas utilizaremos algumas classes bsicas, como a classe Scanner. O primeiro passo criarmos um objeto do tipo Scanner, conforme a linha: Scanner scan = new Scanner(System.in); Para lermos valores do tipo int utilizando o objeto scan, utilizamos o mtodo nextInt(). J para valores do tipo double, utilizamos o mtodo nextDouble(). No podemos esquecer de fechar o objeto quando findamos seu uso pelo mtodo close(). Para exibir mensagens e dados na tela, utilizamos em linguagem C o comando printf. Em Java utilizaremos os mtodos System.out.print e System.out. println. A nica diferena entre eles que o primeiro imprime a mensagem na mesma linha em que a mensagem anterior foi impressa, enquanto o segundo imprime a mensagem em uma nova linha. Note que os dois foram utilizados no exemplo da Figura 1.9. Note que os comandos System.out.print e System.out.println no utilizam os cdigos de formatao (%c, %d, %f...) que nos acostumamos a utilizar com a funo printf da linguagem C. Em Java basta indicar os dados que se deseja imprimir na tela e o compilador se encarrega de fazer a transformao desses dados para String.
No exemplo da Figura 1.9, existe uma linha comentada que basicamente seria a criao de uma varivel do tipo File (arquivo). Para que o nosso exemplo lesse de arquivo em vez do teclado, descomentaramos essa linha, na linha seguinte, trocaramos System.in por fil e pronto. Agora os dados viriam do arquivo C:/arquivo.txt. Quando a linha comentada for descomentada, ser necessrio acrescentar a linha; no cdigo-fonte ou permitir que o NetBeans o faa.

Em Java, podemos utilizar bibliotecas definidas em pacotes da linguagem. Para isso, utilizamos o comando import <caminho do pacote>.<classe>; O comando import de Java parecido com o include que utilizamos em linguagem C. Veja na segunda linha do exemplo apresentado na Figura 1.9 que a classe Scanner foi importada para o nosso programa para que pudssemos utiliz-la. Quando o NetBeans identifica que uma classe foi utilizada e no foi feita sua importao, ele sugere a sua incluso, facilitando o trabalho do programador.

1.9 Operadores
Os operadores aritmticos so smbolos que representam operaes aritmticas, ou seja, as operaes matemticas bsicas. Os operadores aritmticos da linguagem Java so os mesmos da linguagem C, como pode ser visto no Quadro 1.3 a seguir.
Quadro 1.3: Operadores aritmticos da linguagem Java
Operador + * / -++ Descrio da operao matemtica Soma (inteira e ponto flutuante) Subtrao (inteira e ponto flutuante) Multiplicao (inteira e ponto flutuante) Diviso (inteira e ponto flutuante) Decremento unrio (inteiro e ponto flutuante) Incremento unrio (inteiro e ponto flutuante)

% Resto da diviso de inteiros Fonte: Elaborado pelos autores

Aula 1 Introduo plataforma Java

27

e-Tec Brasil

Os operadores relacionais so utilizados para realizar comparaes entre dois valores de um mesmo tipo, retornando como resultado sempre um valor lgico, ou seja, verdadeiro ou falso. A exemplo do que ocorre com os aritmticos, os operadores relacionais de Java tambm so os mesmos que aprendemos em linguagem C, como exibido no Quadro 1.4 a seguir.
Quadro 1.4: Operadores relacionais de Java
Descrio igual a maior que menor que maior ou igual a menor ou igual a diferente de Fonte: Elaborado pelos autores Operador == (dois sinais de igual) > < >= <= !=

Os operadores lgicos so utilizados para formar novas proposies lgicas a partir da juno de duas outras. Os operadores lgicos de Java tambm foram obtidos da linguagem C, como mostra o Quadro 1.5 a seguir.
Quadro 1.5: Operadores lgicos de Java
Descrio E OU NO Fonte: Elaborado pelos autores Operador && || (duas barras verticais) ! (exclamao)

Revise a teoria sobre operadores lgicos, operadores relacionais e tabelas-verdade, que foi estudada na disciplina de Lgica de Programao e aplicada em todas as disciplinas de programao do curso; por isso, no ser repetida aqui.

1.10 Comandos de deciso ou seleo


O Java fornece trs tipos de instrues de seleo. A instruo if realiza uma ao se uma condio for verdadeira ou pula a ao se ela for falsa. A instruo if...else realiza uma ao se uma condio for verdadeira ou realiza uma ao diferente se a condio for falsa. A instruo switch realiza uma de muitas aes, dependendo do valor de uma expresso (DEITEL; DEITEL, 2010, p. 84). Os comandos de deciso existentes em Java so os mesmos aprendidos na linguagem C, at mesmo a sintaxe.

e-Tec Brasil

28

Programao Orientada a Objetos

O exemplo apresentado na Figura 1.10 ilustra a utilizao do comando if... else. Nesse exemplo, lemos uma nota e verificamos se ela est entre 0 e 100: se estiver, a nota considerada vlida; caso contrrio, invlida.

Figura 1.10: Exemplo de utilizao do comando de deciso if...else


Fonte: Elaborada pelos autores

No exemplo apresentado na Figura 1.11, faremos uso do comando switch-case. Nesse exemplo, dado um nmero de ms, temos a impresso do nome do ms no prompt de comando.

Figura 1.11: Exemplo de utilizao do comando de deciso switch...case


Fonte: Elaborada pelos autores

Aula 1 Introduo plataforma Java

29

e-Tec Brasil

1.11 Comandos de repetio


O Java fornece trs instrues de repetio que permitem que programas executem instrues repetidamente, contanto que uma condio permanea verdadeira. As instrues de repetio so while, do...while e for (DEITEL; DEITEL, 2010, p. 84). Os comandos de repetio de Java funcionam exatamente como os da linguagem C. Na Figura 1.12, temos um exemplo de uso do comando for que imprime nmeros de 0 a 10 na tela.

Figura 1.12: Exemplo de utilizao do comando de repetio for


Fonte: Elaborada pelos autores

A Figura 1.13 apresenta duas novas verses do mesmo exemplo; porm, nessas novas verses utilizamos os comandos while e do-while em lugar do comando for.

Figura 1.13: Exemplos de utilizao dos comandos de repetio while e do-while


Fonte: Elaborada pelos autores

Assim como nos comandos de repetio e de deciso da linguagem C, o uso das chaves em Java s obrigatrio quando temos mais de uma linha dentro do bloco. Em casos de blocos compostos por apenas uma linha, as chaves podem ser omitidas.

e-Tec Brasil

30

Programao Orientada a Objetos

1.12 Escopo de variveis


Em Java, assim como em linguagem C, podemos declarar variveis a qualquer momento. Entretanto, o trecho de cdigo em que a varivel ser vlida depender de onde ela foi declarada. Quando abrimos um novo bloco com as chaves, as variveis declaradas ali dentro s existiro at o fim daquele bloco, ou seja, at o ponto onde se fecham as chaves do bloco. public static void main(String [] args){ // Aqui a varivel x ainda no existe int x = 1; // Aqui a varivel x j existe while ( <condio> ) { // Aqui a varivel x continua existindo e y ainda no existe int y = 0; // Aqui a varivel y j existe } // Aqui a varivel j no existe mais. O x continua existindo. } Tenha cuidado! Se criar uma varivel dentro de um bloco e tentar utiliz-la fora desse bloco, haver um erro de compilao.
Escopo da varivel o nome dado ao trecho de cdigo em que a varivel existe e no qual possvel acess-la.

1.13 Vetores e matrizes


Como j aprendemos nas disciplinas anteriores, vetor (array) uma estrutura de dados utilizada para representar certa quantidade de variveis de valores homogneos, ou seja, um conjunto de variveis, todas do mesmo tipo. Em Java podemos criar vetores de tipos primitivos ou de objetos. Declarao: <tipo_do_dado> <nome_do_vetor> [] = new <tipo_do_ dado>[quantidade]; Exemplo: int notas[] = new int[30]; No exemplo acima, ser criado um vetor de 30 inteiros (inicializados com o valor 0). Tambm possvel inicializar um vetor com um conjunto de valores ao mesmo tempo em que o declaramos.

Aula 1 Introduo plataforma Java

31

e-Tec Brasil

int notas[] = { 1,2,3}; Uma vez que o vetor j foi devidamente criado, sua utilizao idntica utilizao de vetores em linguagem C, ou seja, acessamos cada elemento pelo seu ndice (os ndices de um vetor se iniciam do zero). Por exemplo: i.nt numeros[] = new int[3]; numeros[0] = 57; numeros[1] = 51; numeros[3] = 37; // Esta linha gera um erro de execuo! A ltima linha do trecho de cdigo acima causa um erro de compilao, pois o ndice 3 no existe em um vetor com apenas trs elementos. Para sabermos o tamanho de um vetor, podemos utilizar o atributo length. A Figura 1.14 exibe um exemplo de utilizao desse atributo.

Figura 1.14: Utilizao de vetores e do atributo length


Fonte: Elaborada pelos autores

e-Tec Brasil

32

Programao Orientada a Objetos

Vetores podem ter mais de uma dimenso, sendo conhecidos como vetores multidimensionais ou matrizes. As sintaxes para declarao e uso de matrizes so idnticas s de vetores acrescentando valores para cada uma de suas dimenses. Abaixo apresentado um exemplo: int matriz[][] = new int[10][10]; matriz[9][9] = -3; matriz[2][10]=5;//Erro de compilao!! A segunda dimenso est acima do mximo! A partir do momento em que um vetor ou matriz foi criado, ele no pode mudar de tamanho. Se voc precisar de mais espao, ser necessrio criar um novo e copiar os elementos do vetor antigo para o novo.

Leia mais sobre as caractersticas bsicas de Java em http://javafree.uol.com.br/ artigo/871496/Tutorial-Java-2Caracteristicas-Basicasindex Segundo o texto acima, Java possui 49 palavras-chave. Mas, o que vem a ser palavra- chave no contexto de linguagens de programao? O que acontece se eu definir uma varivel que tenha nome igual ao de alguma palavra-chave?

Resumo
Consideramos que o aluno desta disciplina j estudou linguagem C ou a prpria linguagem Java em disciplinas anteriores. Assim, nesta aula fizemos uma rpida apresentao sobre a plataforma Java e uma reviso geral sobre a linguagem Java, destacando que a sintaxe dessa linguagem idntica da linguagem C. Nesse contexto, vimos como declarar variveis, constantes e vetores e como fazer comentrios em Java. Apresentamos os operadores aritmticos, lgicos e relacionais da linguagem e conhecemos os comandos de deciso e repetio da linguagem. Enfim, nesta aula relembramos vrios conceitos e comeamos a esquentar as turbinas para nossa viagem ao mundo da programao orientada a objetos

Aula 1 Introduo plataforma Java

33

e-Tec Brasil

Atividades de aprendizagem
1. Faa um programa que dada a idade de uma pessoa verifique sua classe eleitoral: menor que 16 anos no pode votar; com 16 ou 17 anos ou mais que 65 anos, votar facultativo; entre 18 e 65 anos (inclusive), votar obrigatrio. 2. Faa um programa que imprima os trinta primeiros elementos da srie de Fibonacci. A srie a seguinte: 1, 1, 2, 3, 5, 8,13 etc. Para calcul-la, o primeiro e segundo elementos valem 1; da por diante, cada elemento vale a soma dos dois elementos anteriores. 3. Crie um programa que armazene um vetor com as notas de dez alunos, calcule e imprima a mdia dessas notas e depois informe a quantidade de notas acima e abaixo da mdia calculada. 4. Faa um programa que fique em lao solicitando a digitao de nmeros inteiros maiores ou iguais a zero. Quando o usurio digitar um nmero menor que zero, o programa deve exibir a quantidade de nmeros digitados e a mdia desses nmeros.

e-Tec Brasil

34

Programao Orientada a Objetos

Aula 2 Introduo Orientao a Objetos


Objetivos
Conhecer os conceitos fundamentais de orientao a objetos: objetos, classes, mtodos, atributos e pacotes. Aprender a criar e a utilizar classes e objetos em Java. Conhecer e aprender a utilizar a classe String e a classe ArrayList.

2.1 Conceitos bsicos


Todos os sistemas de computao, dos mais complexos aos mais simples programas de computadores, so desenvolvidos para auxiliar na soluo de problemas do mundo real. Mas, de fato, o mundo real extremamente complexo. Nesse contexto, a orientao a objetos tenta gerenciar a complexidade inerente aos problemas do mundo real abstraindo o conhecimento relevante e encapsulando-o dentro de objetos. Na programao orientada a objetos um programa de computador conceituado como um conjunto de objetos que trabalham juntos para realizar uma tarefa. Cada objeto uma parte do programa, interagindo com as outras partes de maneira especfica e totalmente controlada (CADENHEAD; LEMAY,2005, p. 6). Na viso da orientao a objetos, o mundo composto por diversos objetos que possuem um conjunto de caractersticas e um comportamento bem definido. Assim, quando programamos seguindo o paradigma de orientao a objetos, definimos abstraes dos objetos reais existentes. Todo objeto possui as seguintes caractersticas: Estado: conjunto de propriedades de um objeto (valores dos atributos). Comportamento: conjunto de aes possveis sobre o objeto (mtodos da classe). Unicidade: todo objeto nico (possui um endereo de memria ).

Aula 2 Introduo Orientao a Objetos

35

e-Tec Brasil

Quando voc escreve um programa em uma linguagem orientada a objetos, no define objetos individuais. Em vez disso define as classes utilizadas para criar esses objetos (CADENHEAD; LEMAY, 2005, p. 7). Assim, podemos entender uma classe como um modelo ou como uma especificao para um conjunto de objetos, ou seja, a descrio genrica dos objetos individuais pertencentes a um dado conjunto. A partir de uma classe possvel criar quantos objetos forem desejados. Uma classe define as caractersticas e o comportamento de um conjunto de objetos. Assim, a criao de uma classe implica definir um tipo de objeto em termos de seus atributos (variveis que contero os dados) e seus mtodos (funes que manipulam tais dados). Fazendo um paralelo com a linguagem C, podemos visualizar os mtodos das classes como funes e os atributos de uma classe como campos de uma struct. J um objeto uma instncia de uma classe. Ele capaz de armazenar estados por meio de seus atributos e reagir a mensagens enviadas a ele, assim como se relacionar e enviar mensagens a outros objetos. Joo, Jos e Maria, por exemplo, podem ser considerados objetos de uma classe Pessoa que tem como atributos nome, CPF, data de nascimento, entre outros, e mtodos como calcularIdade. Quando desenvolvemos um sistema orientado a objetos, definimos um conjunto de classes. Para organizar essas classes surge o conceito de pacote. Pacote um envoltrio de classes, ou seja, guarda classes e outros pacotes logicamente semelhantes ao pacote que os contm. Podemos visualizar os pacotes como diretrios ou pastas, nos quais podemos guardar arquivos (classes) e outros diretrios (pacotes) que tenham contedo relacionado com o pacote que os contm.

Classe um componente de programa que descreve a estrutura e o comportamento de um grupo de objetos semelhantes isto , as informaes que caracterizam o estado desses objetos e as aes (ou operaes) que eles podem realizar.

Objeto a criao de uma instncia da classe. Quando instanciamos um objeto, criamos fisicamente uma representao concreta de sua classe. Ser Humano uma classe, um molde, j Roberto uma instncia de Ser Humano. Apesar de carregar todas as caractersticas do molde Ser Humano, ele completamente diferente (independente) das outras instncias de Ser Humano. Pacotes Em Java so uma maneira de agrupar classes e interfaces relacionadas. Pacotes permitem que grupos de classes estejam disponveis apenas se forem necessrios e eliminam possveis conflitos entre nomes de classes em diferentes grupos de classes (CADENHEAD; LEMAY, 2005, p. 17).

2.2 Classes em Java


Um sistema bem elaborado organiza suas classes em pacotes logicamente consistentes, facilitando, assim, sua manutenibilidade, extensibilidade e flexibilidade.

Sabemos que para desenvolver programa orientado a objetos precisamos criar classes. Uma classe como um tipo de objeto que pode ser definido pelo programador para descrever uma entidade real ou abstrata. Mas, como definir classes em Java?

e-Tec Brasil

36

Programao Orientada a Objetos

Sintaxe: <qualificador> class <nome_da_classe>{ } Como funciona? <qualificador>: O qualificador de acesso determinar a visibilidade da classe. Pode ser public (classe pblica) ou private (classe privada). Classes privadas s podero ser visualizadas dentro de seu prprio pacote enquanto as pblicas sero acessveis por qualquer classe de qualquer pacote. Se o qualificador for omitido, a classe ser privada por padro. <nome>: nome que identifica a classe. H um padro entre os programadores de sempre iniciarem os nomes de classes com letras maisculas. Mas, apesar de ser uma boa prtica, seguir esse padro no uma obrigao. Como exemplo, a Figura 2.1 ilustra a criao de uma classe Conta para representar os dados de uma conta bancria. Nesse exemplo definimos trs atributos para a classe Conta, mas no definimos mtodos. <declarao dos atributos da classe> <declarao dos mtodos da classe>

Figura 2.1: Criao de classe em Java


Fonte: Elaborada pelos autores

Para ilustrar a utilizao do qualificador de acesso, veja o exemplo apresentado nas Figuras 2.2 e 2.3 a seguir.

Para criar uma nova classe em um projeto do NetBeans j existente, siga os seguintes passos: 1. Clique em Arquivo> Novo Arquivo. 2. Dentre as opes Categorias da janela aberta, escolha Java e dentre as opes Tipos de Arquivo, escolha Classe Java. Clique em Prximo. 3. D um nome para a classe e indique o nome do pacote no qual a classe ser criada. Clique em Finalizar.

Aula 2 Introduo Orientao a Objetos

37

e-Tec Brasil

Figura 2.2: Criao de classes pblicas e privadas


Fonte: Elaborada pelos autores

A Figura 2.2 ilustra a criao de duas classes que diferem apenas por um detalhe: uma delas pblica e a outra privada. Note que ambas esto no pacote1(primeira linha do cdigo). A Figura 2.3 exibe o cdigo de uma classe que est em um outro pacote (pacote2), mas tenta utilizar as classes criadas na Figura 2.2.

Figura 2.3: Tentativa de acessar classes pblicas e privadas


Fonte: Elaborada pelos autores

Para criar um novo pacote em um projeto do NetBeans j existente, faa os seguintes passos: 1. Clique em Arquivo > Novo Arquivo. 2. Dentre as opes Categorias da janela aberta, escolha Java e dentre as opes Tipos de Arquivo, escolha Pacote Java. Clique em Prximo.

As linhas sublinhadas em vermelho indicam erro no NetBeans. Os erros ocorreram exatamente nas linhas em que tentamos utilizar a classe privada em um pacote externo ao pacote no qual ela foi criada. Mas, note que, como a classe ClasseOutroPacote est em um pacote diferente das classes que definimos no exemplo da Figura 2.2, precisamos importar as classes antes de utiliz-las (segunda e terceira linha do cdigo).

2.3 Declarao de atributos e mtodos


J vimos que quando criamos uma classe em Java precisamos declarar os atributos e mtodos da classe. Para declarar um atributo, utilizamos a seguinte sintaxe:

e-Tec Brasil

38

Programao Orientada a Objetos

Sintaxe: <qualificador> <tipo_do_atributo> <nome_do_atributo>; Como funciona? <qualificador>: O qualificador de acesso determinar a visibilidade do atributo. opcional e, se no for informado, por padro o atributo ser protegido (protected). No se preocupe com isso agora. Voltaremos a falar sobre os qualificadores quando estudarmos encapsulamento. <tipo_do_atributo>: um tipo primitivo ou classe que define o atributo. <nome_do_atributo>: nome que identifica o atributo. H um padro entre os programadores de sempre iniciarem os nomes de atributos com letras minsculas. Mas, apesar de ser uma boa prtica, seguir esse padro no uma obrigao. Caso queiramos definir vrios atributos de mesmo tipo podemos colocar os vrios nomes separados por vrgula. Exemplos: private double saldo; String nome, endereo; Para declararmos um mtodo, utilizamos a seguinte sintaxe: Sintaxe: <qualificador> <tipo_de_retorno> <nome_do_metodo> (<lista_de_argumentos>){ <corpo_ do_ mtodo> } Como Funciona? <qualificador>: Mesmo conceito usado no caso de atributos. <tipo_do_retorno>: um tipo primitivo ou classe que define o retorno a ser dado pelo mtodo.

Aula 2 Introduo Orientao a Objetos

39

e-Tec Brasil

<nome_do_mtodo>: nome que identifica o mtodo. <corpo_do_mtodo>: cdigo que define o que o mtodo faz. Exemplo: public double getSaldo(){ } A Figura 2.4 exibe uma nova verso da classe Conta, agora com um mtodo depositar. return saldo;

Figura 2.4: Classe Conta com mtodo depositar


Fonte: Elaborada pelos autores

O mtodo depositar recebe como argumento o valor a ser depositado na conta e soma esse valor ao saldo da conta. Note que no lugar do tipo de retorno do mtodo foi utilizada a palavra void, que indica que nenhum valor ser retornado pelo mtodo. O uso da palavra void em Java o mesmo que feito na linguagem C.

e-Tec Brasil

40

Programao Orientada a Objetos

Outro detalhe interessante no exemplo da Figura 2.4 o uso da palavra this. A palavra this utilizada para acessar atributos do objeto corrente. A palavra this obrigatria apenas quando temos um argumento ou varivel local de mesmo nome que um atributo. Entretanto, recomendvel sua utilizao, mesmo quando no obrigatrio, por uma questo de padronizao. A Figura 2.5 exibe um novo mtodo para a classe Conta: o mtodo sacar.

Figura 2.5: Mtodo sacar


Fonte: Elaborada pelos autores

O mtodo sacar recebe como argumento o valor a ser sacado. Ento, o mtodo verifica se a conta tem saldo suficiente para permitir o saque. Se o saldo for maior ou igual ao valor do saque, o valor do saque descontado do saldo e o mtodo retorna o valor true informando que o saque ocorreu com sucesso. Caso contrrio, o mtodo apenas retorna o valor false, indicando que o saque no pde ser efetuado. Por isso, o tipo de retorno do mtodo boolean.

2.4 Utilizao de objetos


Para utilizar um objeto em Java, precisamos executar dois passos, a saber: Declarar uma varivel que referenciar o objeto: assim como fazemos com tipos primitivos, necessrio declarar o objeto. Instanciar o objeto: alocar o objeto em memria. Para isso utilizamos o comando new e um construtor. A Figura 2.6 exibe o exemplo de uma classe de um programa que utiliza a classe Conta apresentada em exemplo anterior.

Aula 2 Introduo Orientao a Objetos

41

e-Tec Brasil

Figura 2.6: Criao de instncias da classe Conta


Fonte: Elaborada pelos autores

A classe Conta tem por objetivo mapear os dados e comportamentos de uma conta bancria. Assim, ela no ter um mtodo main. Esse mtodo estar na classe principal do nosso programa. A classe Programa exibida na Figura 2.6 que representa esse nosso programa principal e nela que utilizaremos a classe Conta. Note que na linha 6 do exemplo 2.6 declarada uma varivel de nome c que referenciar um objeto da classe Conta enquanto na linha 7 o objeto instanciado em memria. Para instanciar um objeto em memria utilizamos o operador new (o mesmo que utilizamos para alocar vetores) acompanhado pelo construtor Conta(). Logo estudaremos mais sobre construtores. No momento encare como um mtodo que tem nome igual ao da classe e no recebe argumento nenhum. Na linha 8 atribudo o valor Z ao atributo nome_titular da conta instanciada e, na linha 9, h uma chamada ao mtodo depositar (j exibido em exemplo anterior) passando como argumento o valor 100. Preste ateno ao ponto que foi utilizado nas linhas 8 (c.nome_titular) e 9 (c.depositar(100)). assim que acessamos mtodos e atributos de um objeto em Java. Nas linhas 10 e 11 do cdigo apresentado pela Figura 2.6 h dois comandos de sadas de dados que imprimiro na tela o nome do titular e o saldo atual da conta, respectivamente. Note que em nosso exemplo da Figura 2.6 foi possvel acessar o atributo nome_titular e o mtodo depositar() da classe Conta. Esse acesso foi possvel, pois na definio dessa classe Conta (feita na Figura 2.4) no definimos um qualificador de acesso para o atributo e nem para o mtodo. Logo, tanto o mtodo quanto o atributo so, por padro, protegidos (protected).Alm disso, a classe Conta (Figura 2.4) est no mesmo pacote que a classe Programa (Figura 2.5). Em breve estudaremos o conceito de encapsulamento e veremos que essa no uma boa estratgia para controlar os acessos a atributos de uma classe.

e-Tec Brasil

42

Programao Orientada a Objetos

O mtodo depositar no retorna nenhum valor para a classe que o chamou (note na Figura 2.4 que o retorno dele void). J o mtodo sacar (definido na Figura 2.5), por exemplo, retorna um boolean que indica se o saque pde ser efetuado com sucesso ou no. Mas, ento, como utilizar o valor retornado por um mtodo? A Figura 2.7 mostra um exemplo em que o mtodo sacar() chamado pelo programa principal e seu retorno utilizado para exibir uma mensagem informando se o saque foi realizado com sucesso ou no.

Figura 2.7: Utilizao do valor retornado por um mtodo


Fonte: Elaborada pelo autor

Note que na linha 9 do exemplo apresentado criada uma varivel booleana com o nome saque_efetuado, que receber o valor retornado pela chamada ao mtodo sacar(). Depois, o valor dessa varivel utilizado para decidir entre exibir a mensagem de Saque Efetuado com Sucesso ou a de Saque no efetuado.

2.5 Atributos e mtodos estticos


Atributos estticos so atributos que contm informaes inerentes a uma classe e no a um objeto em especfico. Por isso so tambm conhecidos como atributos ou variveis de classe. Por exemplo, suponha que quisssemos ter um atributo que indicasse a quantidade de contas criadas. Esse atributo no seria inerente a uma conta em especfico, mas a todas as contas. Assim, seria definido como um atributo esttico. Para definir um atributo esttico em Java, basta colocar a palavra static entre o qualificador e o tipo do atributo. O mesmo conceito vlido para mtodos. Mtodos estticos so inerentes classe e, por isso, no nos obrigam a instanciar um objeto para que possamos utiliz-los. Para definir um mtodo como esttico, basta utilizar a palavra static, a exemplo do que acontece com atributos. Para utilizar um mtodo esttico devo utilizar o nome da classe acompanhado pelo nome do mtodo.
Varivel de classe Define um atributo de uma classe inteira. A varivel se aplica prpria classe e a todas as suas instncias, de modo que somente um valor armazenado, no importando quantos objetos dessa classe tenham sido criados (CADENHEAD; LEMAY, 2005, p. 9).

Aula 2 Introduo Orientao a Objetos

43

e-Tec Brasil

Mtodos estticos so muito utilizados em classes do Java que proveem determinados servios. Por exemplo, Java fornece na classe Math uma srie de mtodos estticos que fazem operaes matemticas como: raiz quadrada (sqrt), valor absoluto (abs), seno (sin) entre outros. A Figura 2.8 apresenta exemplos de uso dos mtodos da classe Math a fim de ilustrar a utilizao de mtodos estticos.

Figura 2.8: Utilizao de mtodos estticos da classe Math


Fonte: Elaborada pelos autores

Note no exemplo da Figura 2.8 que no instanciamos objetos da classe Math para utilizar seus mtodos e constantes, pois so estticos. Um mtodo criado como esttico s poder acessar atributos que tambm sejam estticos, alm dos seus argumentos e variveis locais.

2.6 A classe String


J estudamos que Java no conta com um tipo primitivo para trabalhar com cadeia de caracteres. Para isso temos em Java a classe String.
String uma classe de Java utilizada para representarmos uma cadeia de caracteres, que oferece diversos mtodos para manipularmos essa cadeia.

Para criar uma instncia de String, no precisamos utilizar o operador new, como acontece com as outras classes. Para instanciar um objeto do tipo String, basta declarar uma varivel desse tipo e inici-la com um valor. importante saber tambm que objetos da classe String podem ser concatenados utilizando o operador +. Para comparar se os valores de duas Strings so iguais, utilizamos o mtodo equals e no o operador == que utilizado para tipos primitivos. A classe String conta ainda com diversos mtodos muito teis, dentre os quais podemos destacar: length: retorna o tamanho ( tipo int ) de uma String. charAt: retorna o caracter (char) da String que se localiza no ndice passado como parmetro. Vale ressalta que o primeiro ndice de uma String o ndice zero. toUppperCase: retorna uma String com todas as letras maisculas a partir da String que chamou o mtodo.

e-Tec Brasil

44

Programao Orientada a Objetos

toLowerCase: retorna uma String com todas as letras minsculas a partir da String que chamou o mtodo. trim: retorna uma String sem espaos em branco no incio e no final dela, a partir da String que chamou o mtodo. replace: Retorna uma String com substrings trocadas, a partir da Stringque chamou o mtodo. As trocas so feitas de acordo com os parmetros do mtodo: em que aparecer a substring1 ser substituda pela substring 2. valueOf: retorna uma String a partir de um valor de outro tipo, como um nmero por exemplo. A Figura 2.9 apresenta um exemplo de programa que utiliza esses mtodos da classe String e, a Figura 2.10 exibe o resultado da execuo de tal programa.

Figura 2.9: Exemplos de utilizao dos mtodos de String


Fonte: Elaborada pelos autores

Figura 2.10: Sada gerada pelo exemplo da Figura 2.9


Fonte: Elaborada pelos autores

2.7 Listas
A estrutura de dados lista utilizada para armazenar conjuntos de elementos. A vantagem em utilizar listas em lugar de vetores o fato de as listas serem alocadas dinamicamente de forma que no precisamos prever seu tamanho mximo. Java fornece classes que implementam o conceito de lista. Nesse aula utilizaremos uma dessas classes: o ArrayList. Para trabalharmos com a classe ArrayList precisamos conhecer seus mtodos. Seguem os principais:
Aula 2 Introduo Orientao a Objetos

45

e-Tec Brasil

public ArrayList(): cria um ArrayList vazio. public boolean add(<elemento>): adiciona um elemento no final da lista. public void add(index, <elemento>): adiciona um elemento na posio index. public <elemento> get(int index): obtm o elemento de ndice index. public <elemento> remove(int index): retorna o elemento de ndice index e o elimina da lista.

public boolean isEmpty(): verifica se a lista est vazia. Para navegarmos em uma lista, utilizaremos a interface Iterator. Seguem os principais mtodos de Iterator: boolean hasNext(): verifica se existe prximo elemento na lista; next(): obtm o elemento sob o Iterator e avana para o prximo elemento; void remove(): remove o elemento sob o Iterator. A Figura 2.11 exibe um exemplo no qual criamos duas instncias da classe Conta, inserindo-as em uma lista; depois navegamos na lista exibindo os nmeros das contas da lista.

Figura 2.11: Exemplo de utilizao de ArrayList


Fonte: Elaborada pelos autores

e-Tec Brasil

46

Programao Orientada a Objetos

O ArrayList pode armazenar objetos de quaisquer tipo. Assim, quando obtemos um objeto ele retorna uma instncia do tipo Object. Por isso, no exemplo foi necessrio fazer a converso explcita para o tipo Conta.

Resumo
Nessa aula iniciamos nossos estudos sobre orientao a objetos. Conhecemos os conceitos fundamentais da orientao a objetos e aprendemos a implement-los em Java. Por fim, conhecemos duas classes muito teis de Java: String e ArrayList.
Uma outra classe fornecida por Java para implementar o conceito de listas a classe LinkedList. Acesse as documentaes oficiais da Oracle sobre as classes ArrayList e LinkedList respectivamente em http://download.oracle. com/javase/6/docs/api/java/ util/ArrayList.html e http:// download.oracle.com/javase/6/ docs/api/java/util/LinkedList. html. Utilizando as informaes dessas documentaes, reimplemente o exemplo apresentado na Figura 2.11 utilizando a classe LinkList em lugar da classe ArrayList.

Atividades de aprendizagem
1. Implementar uma classe Conta tendo como atributos o nome do titular, nmero e saldo e os mtodos sacar e depositar (seguindo os exemplos das Figuras 2.4 e 2.5). 2. Criar um programa principal que instancie uma Conta (exerccio anterior). Solicite ao usurio os dados da conta atribuindo os valores informados aos seus atributos. Depois o sistema deve entrar em lao exibindo as seguintes opes para o usurio: digitar 1 para depositar, 2 para sacar ou outro nmero para terminar a execuo. Se o usurio digitar 1, o sistema deve solicitar o valor a ser depositado, chamar o mtodo depositar, exibir o saldo atualizado e voltar a exibir as opes. Se o usurio digitar 2, o sistema deve solicitar o valor a ser sacado, chamar o mtodo sacar verificando o retorno. Se o retorno for true, exibir uma mensagem de saque efetuado com sucesso; caso contrrio, uma mensagem de saque no efetuado e voltar a exibir as opes. 3. Vamos avanar o exerccio anterior. Agora o programa principal ter uma lista de instncias de Conta. A lista iniciar vazia. O programa entrar em um lao que exibir as seguintes opes para o usurio: digitar 1 para criar uma conta, 2 para ver o saldo de uma conta, 3 para sacar, 4 para depositar e outro nmero para finalizar. Se o usurio escolher a opo 1, o sistema deve instanciar uma nova conta, solicitar o nome do titular e o saldo inicial atribuindo esses valores conta criada. O nmero da conta ser sequencial, atribudo pelo prprio programa. Ento o programa exibir o nmero da conta criada, adicionar a conta lista e exibir as opes novamente. Se o usurio digitar opo 2, 3 ou 4, perguntar o nmero da conta que o usurio deseja e localizar essa conta na lista. Depois

Aula 2 Introduo Orientao a Objetos

47

e-Tec Brasil

de localizar a conta, se a opo tiver sido 2, o sistema apenas exibe uma mensagem informando o saldo da conta solicitada. Se for 3, o sistema deve efetuar um saque na conta seguindo o mesmo procedimento do exerccio 2. Se for 4, o sistema deve efetuar um saque na conta seguindo o mesmo procedimento do exerccio 2.

e-Tec Brasil

48

Programao Orientada a Objetos

Aula 3 Construtores, destrutores e encapsulamento


Objetivos
Entender os conceitos de construtores e destrutores. Entender o conceito de encapsulamento e sua importncia. Criar programas com maior manutenibilidade e extensibilidade pela utilizao do conceito de encapsulamento

3.1 Construtores
Como estudamos, sempre que queremos criar um novo objeto de uma determinada classe utilizamos a palavra new acompanhada por um construtor. O construtor de uma classe tem, por definio, o mesmo nome que a classe. A Figura 3.1 exibe dois exemplos de construtores para a classe Conta que utilizamos em exemplos da aula anterior.
Construtor um mtodo especial para a criao e inicializao de uma nova instncia de uma classe. Um construtor inicializa o novo objeto e suas variveis, cria quaisquer outros objetos de que ele precise e realiza quaisquer outras operaes de que o objeto precise para inicializar-se (CADENHEAD; LEMAY, 2005, p. 41).

Figura 3.1: Mtodos construtores para a classe Conta


Fonte: Elaborada pelos autores

possvel definir diversos construtores para a mesma classe, tendo os tipos ou a quantidade de parmetros diferentes para cada um deles. O primeiro construtor do exemplo da Figura 3.1 cria objetos j atribuindo aos mesmos valores passados como parmetros para os atributos numero, nome_titular e saldo. J o segundo construtor recebe como parmetros valores apenas para os atributos numero e nome_titular e atribui o valor zero ao saldo. Note a utilizao da palavra reservada this para diferenciar os atributos dos parmetros de mesmo nome.

Aula 3 Construtores, destrutores e encapsulamento

49

e-Tec Brasil

A Figura 3.2 exibe o cdigo de um programa que cria dois objetos da classe Conta, utilizando cada um dos construtores apresentados no exemplo da Figura 3.1.

Figura 3.2: Criao de instncias da classe Conta


Fonte: Elaborada pelos autores

Note que na criao do objeto c1 foi chamado o construtor que recebe trs parmetros enquanto na criao do objeto c2 foi chamado o outro construtor que recebe apenas dois parmetros. A conta referenciada por c1 ter como o valor 1 para o atributo numero, o valor Z para o atributo nome_titular e o valor 0 para o saldo. O Java define um construtor padro para classes que no tem nenhum construtor definido. O construtor padro no recebe nenhum argumento. No exemplo apresentado na Figura 2.4 (aula anterior), como a classe Conta no tinha construtores definidos, Java utilizou o construtor padro para instanciar os objetos. Porm, a partir do momento em que voc declara um construtor, o construtor padro deixa de existir. Assim, agora que criamos esses dois construtores impossvel criar uma nova instncia de Conta sem utilizar um dos dois.

3.2 Destrutores
Em C, aprendemos que sempre devamos desalocar (comando free) tudo o que alocssemos dinamicamente em memria. Em Java isso no necessrio, pois essa linguagem possui um Coletor Automtico de Lixo (Garbage Collector), o qual responsvel por desalocar tudo aquilo que no mais utilizado. Assim, os objetos que no so mais referenciados por um programa so automaticamente desalocados por esse coletor, liberando memria.
Mtodo destrutor um mtodo acionado imediatamente antes de o objeto ser desalocado.

Em Java, o mtodo destrutor de uma classe o mtodo finalize. Quando no definido um mtodo destrutor para uma classe, Java utiliza um mtodo destrutor padro que no faz nada.

e-Tec Brasil

50

Programao Orientada a Objetos

O mtodo finalize raramente utilizado porque pode causar problemas de desempenho e h uma incerteza sobre se ele ser chamado (DEITEL; DEITEL, 2010, p. 258).

3.3 Encapsulamento
Encapsulamento uma tcnica utilizada para restringir o acesso a variveis (atributos), mtodos ou at prpria classe. Os detalhes da implementao ficam ocultos ao usurio da classe, ou seja, o usurio passa a utilizar os mtodos de uma classe sem se preocupar com detalhes sobre como o mtodo foi implementado internamente. Para facilitar o entendimento, faamos uma analogia com um carro. Para dirigir um carro uma pessoa no precisa conhecer os detalhes sobre como funciona o motor ou os demais componentes dele. Um motorista no precisa saber o que acontece internamente no carro quando ele acelera ou quando troca de marcha. Para dirigir ele precisa apenas saber como dirigir o carro utilizando pedais de acelerador, freio e embreagem, volante e alavanca de cmbio. Esses componentes encapsulam toda a complexidade existente no carro sob a tica do motorista que o utiliza. A ideia do encapsulamento na programao orientada a objetos que no seja permitido acessarmos diretamente as propriedades de um objeto. Nesse caso, precisamos operar sempre por meio dos mtodos pertencentes a ele. A complexidade de um objeto escondida, portanto, pela abstrao de dados que esto por trs de suas operaes. Quando aprendemos a criar classes, vimos que na definio de cada mtodo e atributo poderamos definir um qualificador de acesso, mas foi falado que ainda no era hora de nos preocuparmos com tais detalhes e que poderamos omitir o qualificador. Pois bem, so exatamente esses qualificadores que nos permitem implementar o encapsulamento. Esses qualificadores nos permitem modificar o nvel de acesso aos atributos, aos mtodos e at mesmo s classes. So trs os possveis qualificadores de acesso em Java:
Encapsulamento Consiste na separao entre os aspectos externos de um objeto, acessveis por outros objetos.

Aula 3 Construtores, destrutores e encapsulamento

51

e-Tec Brasil

public ( pblico ): indica que o mtodo ou o atributo so acessveis por qualquer classe, ou seja, que podem ser usados por qualquer classe, independentemente de estarem no mesmo pacote ou estarem na mesma hierarquia; private ( privado ): indica que o mtodo ou o atributo so acessveis apenas pela prpria classe, ou seja, s podem ser utilizados por mtodos da prpria classe; protected ( protegido ): indica que o atributo ou o mtodo so acessveis pela prpria classe, por classes do mesmo pacote ou classes da mesma hierarquia (estudaremos hierarquia de classes quando tratarmos de herana).

Quando omitimos o qualificador de acesso, o atributo ou mtodo so considerados protected por padro. Agora que entendemos o conceito de encapsulamento e conhecemos os trs qualificadores de acesso, vem a pergunta: por que restringir o acesso aos atributos de uma classe? Para responder a essa pergunta, utilizaremos como exemplo a classe Conta criada em aula anterior. Quando o mtodo sacar() daquela classe foi criado, tomamos o cuidado de no permitir saques maiores que o saldo, a fim de que este nunca ficasse negativo. Mas, como no nos preocupamos em restringir o acesso aos atributos daquela classe, um problema que poderia acontecer seria de algum alterar o saldo, atribuindo um nmero negativo diretamente ao atributo, como no exemplo da Figura 3.3:

Figura 3.3: Alterando o valor do atributo saldo diretamente


Fonte: Elaborada pelos autores

Assim, o melhor que teramos a fazer seria impossibilitar o acesso ao atributo saldo, obrigando que as alteraes a ele fossem obrigatoriamente feitas pelos mtodos depositar() e sacar(). De forma geral, a ideia do encapsulamento a de que cada classe responsvel por controlar seus atributos; portanto, ela deve julgar se aquele novo valor vlido ou no. Essa validao no deve ser controlada por quem est

e-Tec Brasil

52

Programao Orientada a Objetos

utilizando a classe, e sim pela prpria classe, centralizando essa responsabilidade e facilitando futuras mudanas no sistema. Assim, em geral, os atributos de uma classe devem ser privados e deve haver mtodos pblicos que permitam o acesso a eles. A Figura 3.4 apresenta uma nova verso da classe Conta seguindo essa ideia (os construtores no so exibidos na figura).

Figura 3.4: Classe Conta com atributos encapsulados


Fonte: Elaborada pelos autores

Os atributos private de uma classe s podem ser manipulados pelos mtodos da classe. Portanto, um cliente de um objeto isto , qualquer classe que utilize o objeto dever chamar os mtodos public da classe para manipular os campos private de um objeto da classe (DEITEL; DEITEL, 2010, p. 66). Por padro, os atributos encapsulados devem ter um mtodo que obtenha o valor atual do atributo (mtodo get) e um mtodo que altere o valor do atributo (mtodo set). Por exemplo, note que na nova verso da classe Conta h um mtodo getNomeTitular() que retorna o nome do titular da conta e um mtodo setNomeTitular(String) que atribui um novo nome ao ti-

Aula 3 Construtores, destrutores e encapsulamento

53

e-Tec Brasil

O NetBeans oferece uma funcionalidade que gera automaticamente os mtodos get e set para os atributos. Para utilizar essa funcionalidade, basta clicar com o boto direito do mouse sobre o nome da classe e escolher as opes Refatorar > Encapsular Campos. Depois, na nova tela que exibida, escolha os mtodos que deseja que sejam criados e clique no boto Refatorar.

tular da conta. Mas, como consideramos que o nmero da conta atribudo em sua criao (note que os dois construtores da classe exigem o nmero) e nunca pode ser alterado, criamos apenas o mtodo getNumero(). No caso do saldo, como ele s pode ser alterado por saques e depsitos, no faria sentido criar um mtodo setSaldo. Assim, os mtodos depositar e sacar servem para alterar o saldo e o getSaldo() nos retorna o valor atual do saldo. Vale ressaltar que o qualificador private tambm pode ser usado para modificar o acesso a um mtodo quando este existe apenas para auxiliar a prpria classe e no queremos que outras pessoas o utilizem. Entenderemos melhor o uso do qualificador protected na prxima aula, quando abordarmos os conceitos de herana e de hierarquias de classes.

Resumo
Nesta aula aprendemos dois conceitos importantssimos de programao orientada a objetos: construtores e encapsulamentos. Vimos que os construtores so utilizados sempre que um objeto instanciado e que ao encapsular os atributos de uma classe conseguimos esconder a complexidade de um objeto pela definio de mtodos. Com a utilizao desses conceitos, criaremos sistemas mais modulares e com maior manutenibilidade e segurana.

Atividades de aprendizagem
1. Partindo do cdigo da classe Conta que voc criou no exerccio 1 da aula 2, crie dois construtores como os apresentados na Figura 3.1 e encapsule os atributos como na Figura 3.3. 2. Agora altere o cdigo do programa que voc desenvolveu no exerccio 3 da aula 2, de forma que ele utilize a nova classe Conta gerada no exerccio anterior.

e-Tec Brasil

54

Programao Orientada a Objetos

Aula 4 Herana e polimorfismo


Objetivos
Conhecer o conceito de herana e aprender a implementar esse conceito em Java. Compreender o conceito de poliformismo. Conhecer os conceitos de sobrecarga e sobrescrita de mtodos. Aprender a utilizar poliformismo pela aplicao dos conceitos de herana, sobrecarga e sobrescrita de mtodos.

4.1 Herana
Uma das vantagens das linguagens orientadas a objeto a possibilidade de se reutilizar cdigo. Mas, quando falamos em reutilizao de cdigo, precisamos de recursos muito mais poderosos do que simplesmente copiar e alterar o cdigo. Um dos conceitos de orientao a objetos que possibilita a reutilizao de cdigo o conceito de herana. Pelo conceito de herana possvel criar uma nova classe a partir de outra classe j existente. Para ilustrar o conceito de herana vamos criar uma classe para representar as contas especiais de um banco. Em nosso exemplo, uma conta especial um tipo de conta que permite que o cliente efetue saques acima de seu saldo at um limite, ou seja, permite que o cliente fique com saldo negativo at um dado limite. Assim, criaremos uma classe ContaEspecial que herdar da classe Conta que criamos em aulas anteriores. Adotaremos essa estratgia, j que uma ContaEspecial um tipo de Conta que tem, alm de todos os atributos comuns a todas as contas, o atributo limite. Sendo assim, deve-se utilizar a palavra reservada extends para que ContaEspecial herde de Conta suas caractersticas. A Figura 4.1 exibe o cdigo da classe da classe ContaEspecial. Note na definio da classe a utilizao da palavra extends.

Herana um mecanismo que permite que uma classe herde todo o comportamento e os atributos de outra classe (CADENHEAD; LEMAY, 2005, p. 13) Em uma herana, a classe da qual outras classes herdam chamada de classe pai, classe base ou superclasse. J a classe que herda de uma outra chamada de classe filha, classe derivada ou subclasse.

Aula 4 Herana e polimorfismo

55

e-Tec Brasil

Figura 4.1: Cdigo da classe ContaEspecial que herda da classe Conta


Fonte: Elaborada pelos autores

Nesse caso dizemos que ContaEspecial uma subclasse ou classe filha de Conta. Podemos tambm dizer que Conta ancestral ou classe pai de ContaEspecial. Note que ContaEspecial define um tipo mais especializado de conta. Assim, ao mecanismo de criar novas classes herdando de outras dado o nome de especializao. Agora suponha que tenhamos um outro tipo de conta: a ContaPoupanca. A ContaPoupanca tem tudo o que a Conta tem com um mtodo a mais que permite atribuir um reajuste percentual ao saldo. Agora teramos duas classes herdando da classe Conta Nesse contexto podemos dizer que a classe Conta generaliza os conceitos de ContaEspecial e ContaPoupanca. A Figura 4.2 exibe o cdigo da classe ContaPoupanca. Note que ela herda as caractersticas da classe Conta e apenas implementa um novo mtodo: reajustar.

Figura 4.2: Cdigo da classe ContaPoupanca que herda da classe Conta


Fonte: Elaborada pelos autores

Quando visualizamos uma hierarquia partindo da classe pai para filhas, dizemos que houve uma especializao da superclasse. Quando visualizamos partindo das classes filhas para as classes ancestrais, dizemos que houve uma generalizao das subclasses. Aps definir as classes ContaPoupanca e ContaEspecial, conforme ilustrado nas Figuras 4.1 e 4.2, o NetBeans nos sinalizar com erros nas duas classes pois, na aula anterior definimos construtores para a classe Conta que ancestral das duas que criamos agora e no definimos construtores para as duas subclasses que acabamos de gerar.

e-Tec Brasil

56

Programao Orientada a Objetos

Caso voc no tenha definido um construtor em sua superclasse, no ser obrigado a definir construtores para as subclasses, pois Java utilizar o construtor padro para a superclasse e para as subclasses. Porm, caso haja algum construtor definido na superclasse, obrigatoriamente voc precisar criar ao menos um construtor para cada subclasse. Vale ressaltar que os construtores das subclasses utilizaro os construtores das superclasses pelo uso da palavra reservada super. A Figura 4.3 exibe o construtor criado para a classe ContaEspecial enquanto a Figura 4.4 exibe o construtor da classe ContaPoupanca.

Figura 4.3: Construtor da classe ContaEspecial


Fonte: Elaborada pelos autores

Figura 4.4: Construtor da classe ContaPoupanca


Fonte: Elaborada pelos autores

Note que o construtor da classe ContaEspecial recebe como parmetros o nmero, o nome do titular e o limite. Ento, pelo uso da palavra super, esse construtor chama o construtor da classe Conta (que criamos em aula anterior) repassando o nmero e o nome do titular e, depois, atribui ao limite o valor recebido como parmetro. J o construtor da classe ContaPoupanca apenas se utiliza do construtor da superclasse, pois ele no recebe atributos alm dos j tratados pela superclasse.

4.2 Utilizao de atributos protected


Quando estudamos encapsulamento aprendemos que devemos preferencialmente manter os atributos com nvel de acesso privado (private) de forma que para acess-los outras classes precisem utilizar mtodos. Mas, vimos tambm que h um nvel de acesso protegido (protected) que faz com que o atributo se comporte como pblico para classes da mesma hierarquia ou do mesmo pacote e como privado para as demais classes. Definir alguns atributos da superclasse como protected pode trazer algumas facilidades para implementar mtodos das subclasses.

Aula 4 Herana e polimorfismo

57

e-Tec Brasil

Por exemplo, note que na implementao do mtodo reajustar da classe ContaPoupanca apresentado na Figura 4.2, tivemos de obter o saldo, calcular o reajuste e depois depositar esse reajuste na conta para que fosse somado ao saldo, pois o atributo saldo foi definido na superclasse Conta como privado, no permitindo que o alterssemos diretamente de dentro da classe ContaPoupanca. A Figura 4.5 apresenta uma nova implementao para o mtodo reajustar da classe ContaPoupanca, considerando que o atributo saldo teve sua definio alterada para protegido (protected).

Figura 4.5: Nova implementao do mtodo reajustar considerando o atributo saldo como protected
Fonte: Elaborada pelos autores

Note que na nova implementao podemos acessar diretamente o atributo, o que a torna mais simples.
Apesar de potencialmente facilitar a implementao de mtodos nas subclasses, a utilizao de atributos protegidos perigosa, pois o atributo ficar acessvel a todas as classes que estejam no mesmo pacote e no somente s subclasses. Assim, pense bastante sobre as vantagens e desvantagens antes de se decidir por definir um atributo como protected.

4.3 Polimorfismo
A palavra polimorfismo vem do grego poli morfos e significa muitas formas. Na orientao a objetos, isso representa uma caracterstica que permite que classes diferentes sejam tratadas de uma mesma forma.

e-Tec Brasil

58

Programao Orientada a Objetos

O polimorfismo permite escrever programas que processam objetos que compartilham a mesma superclasse (direta ou indiretamente) como se todos fossem objetos da superclasse; isso pode simplificar a programao (DEITEL; DEITEL, 2010, p. 305). Em outras palavras, podemos ver o polimorfismo como a possibilidade de um mesmo mtodo ser executado de forma diferente de acordo com a classe do objeto que aciona o mtodo e com os parmetros passados para o mtodo. Com o polimorfismo podemos projetar e implementar sistemas que so facilmente extensveis novas classes podem ser adicionadas com pouca ou nenhuma alterao a partes gerais do programa, contanto que as novas classes faam parte da hierarquia de herana que o programa processa genericamente. As nicas partes de um programa que devem ser alteradas para acomodar as novas classes so aquelas que exigem conhecimento direto das novas classes que adicionamos hierarquia (DEITEL; DEITEL, 2010, p. 305). O polimorfismo pode ser obtido pela utilizao dos conceitos de herana, sobrecarga de mtodos e sobrescrita de mtodo (tambm conhecida como redefinio ou reescrita de mtodo).

4.4 Sobrescrita
A tcnica de sobrescrita permite reescrever um mtodo em uma subclasse de forma que tenha comportamento diferente do mtodo de mesma assinatura existente na sua superclasse. Para ilustrar o conceito de sobrescrita, vamos criar um mtodo imprimirTipoConta() na superclasse Conta e vamos sobrescrev-lo nas duas subclasses da nossa hierarquia de exemplo (ContaEspecial e ContaPoupanca). Esse mtodo simplesmente imprimir na tela uma mensagem de acordo com o tipo da conta, ou seja, de acordo com o tipo do objeto ele imprimir uma mensagem diferente. A Figura 4.6 exibe apenas a linha de definio de cada classe e seu respectivo mtodo imprimirTipoConta() (omitimos o resto dos cdigos das classes e as juntamos todas em uma nica figura por uma questo de espao).

Aula 4 Herana e polimorfismo

59

e-Tec Brasil

Figura 4.6: Exemplo de sobrescrita de mtodo


Fonte: Elaborada pelos autores

Note que no exemplo da Figura 4.6, nas linhas anteriores aos mtodos ImprimirTipoConta das classes ContaEspecial e ContaPoupana, h uma notao @Override. A notao @Override inserida automaticamente pelo NetBeans para indicar que esse mtodo foi definido no ancestral e est sendo redefinido na classe atual. A no colocao da notao @Override no gera erro, mas gera um aviso (Warning). Isso ocorre porque entende-se que, quando lemos uma classe e seus mtodos, importante existir alguma forma de sabermos se um certo mtodo foi ou no definido numa classe ancestral. Assim a notao @Override fundamental para aumentar a legibilidade e manutenibilidade do cdigo. A Figura 4.7 exibe um exemplo de utilizao dos mtodos apresentados na Figura 4.6, a fim de ilustrar o polimorfismo.

e-Tec Brasil

60

Programao Orientada a Objetos

Figura 4.7: Exemplo de polimorfismo


Fonte: Elaborada pelos autores

No exemplo da Figura 4.7, vemos que, de acordo com a opo escolhida no menu impresso, temos a criao de um objeto diferente. Quando o usurio digita 2, por exemplo, criada uma instncia de ContaEspecial. Note que a varivel c do tipo Conta. Mas, ainda assim, possvel atribuir a ela uma instncia de ContaPoupanca ou de ContaEspecial pois ambas herdam da classe Conta. Na ltima linha do cdigo apresentado, o mtodo imprimirTipoConta() chamado. Mas, sabemos que esse mtodo foi implementado na classe Conta e sobrescrito nas duas classes filhas. Assim, qual das implementaes ser usada por essa chamada? A resposta a essa pergunta vai depender da opo digitada pelo usurio! Por exemplo, caso o usurio digite 2, a varivel c receber uma instncia de ContaEspecial. Nesse caso, na ltima linha ser chamado o mtodo imprimirTipoConta() da classe ContaEspecial. Analogamente, caso o usurio digite a opo 1, ser utilizado o mtodo da classe Conta e, caso digite 3, ser utilizado o mtodo da classe ContaPoupanca. Nesse exemplo, a mesma linha de cdigo pode ter um comportamento diferente, dependendo das circunstncias. Isso polimorfismo!

Aula 4 Herana e polimorfismo

61

e-Tec Brasil

Agora que entendemos o conceito de sobrescrita, vamos corrigir uma falha que cometemos ao definir nossa hierarquia de classes! A classe ContaEspecial tem um atributo limite que define um valor que o proprietrio da conta poderia sacar mesmo no tendo saldo. O problema que quando implementamos a classe ContaEspecial no reescrevemos o mtodo sacar; logo, essa classe est utilizando o mtodo da superclasse Conta. Assim, independentemente do valor do atributo limite da ContaEspecial, o saque no ser efetuado caso no haja saldo suficiente, pois essa a lgica implementada no mtodo sacar da classe Conta. A Figura 4.8 exibe uma implementao para o mtodo sacar na classe ContaEspecial que sobrescreve o mtodo da superclasse e permite a realizao do saque caso o valor a ser sacado seja menor ou igual a soma entre o saldo e o limite da conta.

Figura 4.8: Mtodo sacar sobrescrito na classe ContaEspecial


Fonte: Elaborada pelos autores

4.5 Sobrecarga
Mtodos de mesmo nome podem ser declarados na mesma classe, contanto que tenham diferentes conjuntos de parmetros (determinado pelo nmero, tipos e ordem dos parmetros). Isso chamado sobrecarga de mtodo (DEITEL; DEITEL, 2010, p. 174). Para que os mtodos de mesmo nome possam ser distinguidos, eles devem possuir assinaturas diferentes. A assinatura (signature) de um mtodo composta pelo nome do mtodo e por uma lista que indica os tipos de todos os seus argumentos. Assim, mtodos com mesmo nome so considerados diferentes se recebem um diferente nmero de argumentos ou tipos diferentes de argumentos e tm, portanto, uma assinatura diferente. Quando um mtodo sobrecarregado chamado, o compilador Java seleciona o mtodo adequado examinando o nmero, os tipos e a ordem dos argumentos na chamada (DEITEL; DEITEL, 2010, p. 174).

e-Tec Brasil

62

Programao Orientada a Objetos

Mesmo sem saber, ns j utilizamos o conceito de sobrecarga quando criamos os construtores da classe Conta. Ao criar a classe Conta ns definimos dois construtores, sendo que um deles recebendo trs parmetros e o outro recebendo dois parmetros (veja a Figura 4.1 da Aula 4). Para ilustrar melhor o conceito de sobrecarga, implementaremos na classe Conta um novo mtodo imprimirTipoConta que receber como parmetro uma String e imprimir na tela o tipo da conta seguido pela String recebida. A Figura 4.9 exibe os dois mtodos imprimirTipoConta da classe Conta.

Figura 4.9: Exemplo de sobrecarga


Fonte: Elaborada pelos autores

Na Figura 4.10 apresentado um exemplo que visa ilustrar o comportamento dos objetos diante o uso de herana, sobrecarga e sobrescrita. A figura exibe tanto o cdigo-fonte de uma classe que utiliza as classes Conta e ContaEspecial quanto a sada da execuo desse programa (destacada em vermelho).

Figura 4.10: Utilizao de sobrecarga e sobrescrita


Fonte: NetBeans IDE 7.0.1

No exemplo da Figura 4.10, a varivel c1 contm uma instncia da classe Conta e c2, uma instncia da classe ContaEspecial. Aps a criao dos objetos, primeiro feita uma chamada ao mtodo imprimirTipoConta de c1 sem passar nenhum parmetro, e depois outra chamada passando uma String. Em seguida foram feitas as mesmas chamadas a partir de c2. Note que como no criamos na classe ContaEspecial, um mtodo imprimirTipoConta que

Aula 4 Herana e polimorfismo

63

e-Tec Brasil

receba uma String como argumento, a ltima chamada feita a partir de c2 foi atendida pelo mtodo da classe Conta. O que aconteceu foi que, como c2 contm uma instncia de ContaEspecial, o compilador procurou por um mtodo imprimirTipoConta(String) na classe ContaEspecial. Como no encontrou, ento o compilador fez uso do mtodo existente na superclasse, j que ContaEspecial herda de Conta.

4.6 Classe Object


Todas as classes no Java herdam direta ou indiretamente da classe Object; portanto, seus 11 mtodos so herdados por todas as outras classes (DEITEL; DEITEL, 2010, p. 258). Vejamos alguns mtodos: toString(): esse mtodo indica como transformar um objeto de uma classe em uma String. Ele utilizado, automaticamente, sempre que necessrio transformar um objeto de uma classe em uma String. Na classe Conta, por exemplo, esse mtodo poderia ser definido da seguinte forma:

@Override public String to String() { return (Conta: + this.numero); }


Note o uso da notao @Override para o mtodo toString(). Isso ocorre porque estamos sobrescrevendo um mtodo definido em Object. getClass: retorna a classe de um objeto. Muito utilizado quando se trabalha na criao de ferramentas geradoras de cdigo ou frameworks. Utilizaremos esse mtodo no exemplo da Figura 4.11 para construir o mtodo toString . equals(): esse mtodo possibilita comparar os valores de dois objetos. Se considerarmos esses objetos iguais, devemos retornar true; caso sejam diferentes, devemos retornar false.

e-Tec Brasil

64

Programao Orientada a Objetos

Quando comparamos dois objetos com o operador ==, na realidade estamos comparando se eles so o mesmo objeto e no se seus valores so iguais. Isso ocorre porque os objetos em Java so ponteiros para espaos de memria. Assim, dois objetos podem ter os mesmos valores em seus atributos e no serem iguais, pois podem apontar para locais diferentes. Dessa forma, para comparar os valores de dois objetos, devemos utilizar o mtodo equals. Por isso que quando queremos comparar Strings, por exemplo, utilizamos o mtodo equals. A Figura 4.11 exibe uma implementao do mtodo equals para a classe Conta. Nesse mtodo consideramos que duas contas so iguais se so de uma mesma classe e se tm o mesmo nmero.

Figura 4.11; Exemplo de mtodo equals para a classe Conta


Fonte: Elaborada pelos autores

No mtodo equals apresentado so feitas as seguintes verificaes: if ( o == null ): estamos prevendo que se pode tentar comparar um objeto Conta com um valor nulo (varivel no instanciada). Como o objeto Conta que acionou o mtodo equals est instanciado, ele no pode ser igual a null. if (o.getClass() != this.getClass()): estamos verificando se o objeto passado como parmetro da mesma classe que o objeto que est invocando o mtodo, ou seja, se estamos comparando duas instncias da classe Conta. Caso os objetos sejam de classes diferentes, consideramos que eles so diferentes. if (((Conta) o).getNumero() != this.getNumero()): caso os dois objetos sejam do mesmo tipo (Conta), ento comparamos os valores do atributo numero dessas contas. Se os nmeros so diferentes, consideramos que so contas diferentes; caso contrrio, as consideramos iguais.

Aula 4 Herana e polimorfismo

65

e-Tec Brasil

importante conhecermos a hierarquia de uma classe para evitarmos replicar cdigos de forma desnecessria. Conforme voc ver na documentao acima, a classe Object prov o mtodo clone, cujo objetivo criar uma cpia de um objeto. Nesse contexto, explique por que a expresso x.clone().equals(x) tipicamente verdadeira, enquanto a expresso x.clone() == x tipicamente falsa.

Acesse a URL http://download. oracle.com/javase/6/docs/api/ java/lang/Object.html. L voc encontrar a documentao oficial da Oracle sobre a classe Object.

Resumo
Nesta aula aprendemos dois dos principais conceitos de orientao a objetos: herana e polimorfismo. O conceito de herana nos permite criar uma classe a partir de outra. Assim, quando temos um conjunto de classes com caractersticas comuns, utilizamos o conceito de herana para agrupar essas caractersticas em vez de repetirmos suas implementaes vrias vezes. J o polimorfismo permite que um mesmo mtodo seja executado de formas diferentes de acordo com a classe do objeto que o aciona e com os parmetros passados para o mtodo. De fato, o polimorfismo conseguido pela implementao de conceitos como herana, sobrecarga e sobrescrita de mtodos. Esses conceitos nos permitem desenvolver cdigos mais reutilizveis e elegantes. O entendimento desses conceitos fundamental para desenvolver programas realmente orientados a objetos.

e-Tec Brasil

66

Programao Orientada a Objetos

Atividades de aprendizagem
1. Crie a hierarquia de classes utilizada como exemplo nesta aula: crie a classe ContaEspecial (Figura 4.1) e ContaPoupanca (Figura 4.2), crie os construtores dessas classes (Figuras 4.3 e 4.4), crie o mtodo reajustar na classe ContaPoupanca (Figura 4.5) e o mtodo sacar na classe ContaEspecial (Figura 4.8). 2. Agora que temos vrios tipos de contas, vamos alterar o programa que iniciamos no exerccio 3 da aula 2 e incrementamos no exerccio 2 da aula 3. Nessa nova verso, quando o usurio escolher a opo 1 (criar nova Conta) o sistema deve questionar o tipo de conta a ser criada dando como opes 1 para Conta, 2 para ContaEspecial e 3 para ContaPoupanca. Com base na resposta do usurio, o sistema deve instanciar o tipo correto de conta (lembre-se que os argumentos necessrios para instanciar um objeto variam de acordo com o tipo da conta). Aps criada, a conta continua sendo inserida na lista. No so necessrias alteraes no resto do cdigo graas ao polimorfismo! Note que no exerccio 2 da aula 4 o nico trecho de cdigo que ser alterado devido ao fato de termos contas de tipos diferentes o trecho que trata de criao de contas. Todo o resto continua funcionando, pois, independentemente do tipo, toda conta tem mtodos para sacar, depositar e exibir saldo. Note tambm que, de acordo com o tipo da conta, o mtodo correto chamado de forma automtica. o polimorfismo funcionando na prtica!

Aula 4 Herana e polimorfismo

67

e-Tec Brasil

Aula 5 Classes abstratas e associaes


Objetivos
Conhecer os conceitos de classes e mtodos abstratos. Aprender a utilizar classes abstratas em hierarquias de classes. Conhecer o conceito de associao entre classes. Aprender a implementar associaes entre classes em Java.

5.1 Classes abstratas


J aprendemos que uma classe define as caractersticas e o comportamento de um conjunto de objetos. Assim, os objetos so criados (instanciados) a partir de classes. Mas, nem todas as classes so projetadas para permitir a criao de objetos. Algumas classes so usadas apenas para agrupar caractersticas comuns a diversas classes e, ento, ser herdada por outras classes. Tais classes so conhecidas como classes abstratas. s vezes til declarar classes chamadas classes abstratas para as quais voc nunca pretende criar objetos. Como elas s so usadas como superclasses em hierarquias de herana, so chamadas superclasses abstratas. Essas classes no podem ser usadas para instanciar objetos, porque so incompletas. Suas subclasses devem declarar as partes ausentes para tornarem-se classes concretas, a partir das quais voc pode instanciar objetos (DEITEL; DEITEL, 2010, p. 309). As classes que no so abstratas so conhecidas como classes concretas. As classes concretas podem ter instncias diretas, ao contrrio das classes abstratas que s podem ter instncias indiretas, ou seja, apesar de a classe abstrata no poder ser instanciada, ela deve ter subclasses concretas que por sua vez podem ser instanciadas.

Aula 5 Classes abstratas e associaes

69

e-Tec Brasil

O conceito de classe abstrata est intimamente ligado ao conceito de herana estudado na aula anterior. Assim, caso voc ainda tenha alguma dvida sobre a aula anterior, tente esclarec-la antes de continuar. Para ilustrar o conceito de classe abstrata, voltemos ao nosso exemplo de contas bancrias. No exemplo apresentado na aula sobre herana e polimorfismo, tnhamos as classes ContaEspecial e ContaPoupana herdandas da classe Conta. Agora, suponha que toda conta criada no nosso banco tenha que ser uma conta especial ou uma conta poupana. Nesse caso, nunca teramos uma instncia da classe Conta,pois toda conta criada seria uma instncia de ContaEspecial ou de ContaPoupanca. Nesse contexto surgem algumas perguntas: teria sentido criar a classe Conta? Por que criar uma classe que nunca ser instanciada? A resposta primeira pergunta sim! A classe Conta continuaria existindo para organizar as caractersticas comuns aos dois tipos de contas. Ento, para garantir que a classe Conta exista, mas nunca seja instanciada, essa classe deve ser criada como abstrata. Para definir uma classe abstrata em Java, basta utilizar a palavra reservada abstract. A palavra abstract deve ser inserida entre o qualificador de acesso e o nome da classe. A Figura 5.1 exibe o cdigo da classe Conta agora como classe abstrata.

Figura 5.1: Verso abstrata da classe Conta


Fonte: Elaborada pelos autores

e-Tec Brasil

70

Programao Orientada a Objetos

Note que a nica diferena em relao ao cdigo original o uso da palavra abstract. A Figura 5.1 apresenta apenas os atributos e construtores da classe Conta, no apresentando os seus mtodos. Mas, vale ressaltar que a transformao de uma classe em abstrata no traz impacto para nenhum de seus mtodos e nem para os cdigos das suas subclasses. Observando o exemplo da Figura 5.1, surge uma nova questo: tendo em vista que uma classe abstrata no pode ser instanciada, faz algum sentido uma classe abstrata ter construtores? A resposta sim! Como vimos na aula sobre herana, os construtores das subclasses se utilizam dos construtores da superclasse. Assim, mesmo no podendo ser instanciadas, comum classes abstratas terem construtores que inicializam seus prprios atributos e so utilizados pelas subclasses. Mas, vale ressaltar que, assim como em qualquer outra classe, no obrigatrio definir construtores para as classes abstratas. Mas, e se eu tentar utilizar um construtor de uma classe abstrata para instanciar um objeto, o que acontece? A resposta erro de compilao. A Figura 5.2 exibe um exemplo de classe que tenta criar uma instncia de Conta, uma instncia de ContaEspecial e uma instncia de ContaPoupanca.

Figura 5.2: Tentativa de instanciar uma classe abstrata


Fonte: Elaborada pelos autores

Note que na linha 6 do cdigo exibido na Figura 5.2 tentamos instanciar um objeto da classe Conta, mas o NetBean s apontou o erro. J na linha 7, criamos normalmente uma instncia de ContaEspecial. Por fim, preste ateno linha 8. Apesar de c1 ser uma varivel do tipo Conta que abstrato, foi possvel atribuir a ela uma instncia de classe ContaPoupanca, pois ContaPoupanca uma classe concreta e herda de Conta.

Aula 5 Classes abstratas e associaes

71

e-Tec Brasil

5.2 Mtodos abstratos


Mtodos abstratos So aqueles que no possuem cdigo e devem ser implementados em classes concretas que herdem da classe abstrata ( no abstratas ).

Em algumas situaes as classes abstratas podem ser utilizadas para prover a definio de mtodos que devem ser implementados em todas as suas subclasses, sem apresentar uma implementao para esses mtodos. Tais mtodos so chamados de mtodos abstratos. Toda classe que possui pelo menos um mtodo abstrato uma classe abstrata, mas uma classe pode ser abstrata sem possuir nenhum mtodo abstrato. Para definir um mtodo abstrato em Java, utiliza-se a palavra reservada abstract entre o especificador de visibilidade e o tipo de retorno do mtodo. Vale ressaltar que um mtodo abstrato no tem corpo, ou seja, apresenta apenas uma assinatura. Para exemplificar o conceito de mtodo abstrato, vamos novamente recorrer ao exemplo das contas bancrias. sensato imaginar que todo tipo de conta bancria deve ter uma forma de sacar. Mas, de acordo com o tipo da conta, h regras diferentes para o saque. Em nosso exemplo, a ContaEspecial possui um limite de forma que ela permite saques acima do saldo disponvel at o limite da conta. J a ContaPoupanca no permite saques acima do saldo disponvel. Nesse contexto, podemos definir, na classe Conta, um mtodo abstrato sacar. Assim, toda classe que herdar de conta dever sobrescrever (lembra-se do conceito de sobrescrita?) esse mtodo implementando suas prprias regras de saque. A Figura 5.3 exibe o cdigo do mtodo abstrato sacar definido na classe Conta.

Figura 5.3: Mtodo abstrato sacar da classe Conta


Fonte: Elaborada pelos autores

Note que o mtodo apresentado na Figura 5.3 no possui corpo, ou seja, ele no define como deve ser feito um saque em uma conta. Esse mtodo serve apenas para obrigar todas as classes que herdem de Conta a sobrescrever o mtodo sacar. Caso uma subclasse de Conta no sobrescreva o mtodo sacar, ela no poder ser definida como uma classe concreta. A Figura 5.4 exibe as implementaes dos mtodos sacar nas classes ContaPoupanca e ContaEspecial.

e-Tec Brasil

72

Programao Orientada a Objetos

Figura 5.4: Implementaes concretas do mtodo sacar nas classes ContaEspecial e ContaPoupanca
Fonte: Elaborada pelos autores

Para que uma subclasse de uma classe abstrata seja concreta, ela deve obrigatoriamente apresentar implementaes concretas para todos os mtodos abstratos de sua superclasse. Por exemplo, se o mtodo sacar no fosse implementado na classe ContaEspecial, essa classe teria de ser abstrata ou ocorreria erro de compilao.

5.3 Associaes
Como sabemos, a base do paradigma de orientao a objetos que o mundo pode ser visto como um conjunto de objetos e, objetos com estruturas similares podem ser agrupados em classes de objetos. Assim, as classes descrevem as estruturas (pelos atributos) e o comportamento (pelos mtodos) de um conjunto de objetos. fcil notar que no mundo real esses objetos se ligam uns aos outros de diversas maneiras. Voltando ao exemplo do banco, podemos dizer que o banco tem clientes e esses clientes possuem contas bancrias. Note que os clientes constituem um conjunto de objetos desse universo bancrio que possui um conjunto de caractersticas prprias como nome, CPF, entre outras. Ou seja, podemos criar uma classe Cliente para representar nossos clientes. Alm disso, como clientes possuem contas bancrias, necessrio mapear as ligaes que relacionam o cliente sua conta. Essas ligaes entre classes so chamadas de associaes. As associaes podem ser implementadas como atributos e/ou como mtodos. Por exemplo, vimos que a classe Conta poderia ser associada a classe Cliente. Assim, uma forma de implementar essa associao seria criar na classe Conta um atributo do tipo Cliente e mtodos que nos permitam obter o cliente titular da conta e atribuir um novo cliente conta.

Associao Representa uma conexo entre classes.

Aula 5 Classes abstratas e associaes

73

e-Tec Brasil

Utilizamos associaes quando desejamos representar relacionamentos que existam entre objetos de duas classes distintas, como por exemplo: Um Curso tem Disciplinas Um Produto de uma Marca. No exemplo que criamos anteriormente, a classe conta tinha trs atributos: o nmero, o saldo e o nome do titular. Note que nmero e saldo so realmente caractersticas da conta. Porm o nome_titular na verdade uma caracterstica do cliente. Assim, agora que criamos uma classe Cliente para encapsular as caractersticas do cliente, tiraremos o atributo nome_titular da classe Conta e colocaremos em seu lugar um atributo titular que ser do tipo Cliente. Esse atributo representar a associao entre a classe Conta e a classe Cliente. Veja na Figura 5.5 o cdigo da classe Cliente e na Figura 5.6 o novo cdigo da classe Conta implementando a associao com a classe Cliente (a Figura 5.6 exibe apenas a parte do cdigo da classe Conta que foi alterada devido associao com a classe Cliente).

Veja que no mtodo SetCPF apenas recebemos uma String e atribumos ao CPF. Na verdade, o ideal seria validar se a String passada um CPF vlido e s atribuir em caso positivo. Nesse caso o mtodo retornaria um boolean indicando se a operao foi realizada ou no. Como vimos na Aula 4, esse o maior motivo para encapsular atributos: validar os valores atribudos.

Figura 5.5: Classe Cliente


Fonte: Elaborada pelos autores

e-Tec Brasil

74

Programao Orientada a Objetos

Figura 5.6: Classe Conta


Fonte: Elaborada pelos autores

Note que na classe Conta os atributos numero e saldo so representados por tipos primitivos enquanto o atributo titular representado por outro objeto, ou seja, um atributo cujo tipo uma outra classe (no caso, a classe Cliente). Isso significa que um objeto pode ser construdo pela associao de outros objetos. Na Figura 5.6 vemos que alguns construtores da classe Conta recebem como argumento um objeto da classe Cliente. Porm, possvel fazer a instanciao de um objeto de uma Classe no construtor de uma outra classe com a qual a primeira tenha uma associao. Por exemplo, note na Figura 5.6 que h um construtor da classe Conta que recebe como parmetros os dados do Cliente e instancia um objeto Cliente dentro do seu construtor. Mas, deve-se tomar cuidado com essa abordagem quando se trabalha com sistemas grandes nos quais uma mesma classe tem associao com diversas outras. Nas classes que utilizam associao, portanto, existem instanciaes de objetos de uma dada classe ou recebimento de objetos construdos em outras partes do cdigo.

Aula 5 Classes abstratas e associaes

75

e-Tec Brasil

A associao um tipo de estruturao de classes que facilita o reuso de cdigo. Em nosso exemplo, agora que temos a classe Cliente criada, se formos desenvolver um sistema para uma loja varejista, por exemplo, podemos reutilizar essa classe. No confunda o conceito de herana com o de associao. A herana um tipo de estruturao entre classes que indica que um objeto de um certo tipo, contendo algumas especializaes. Uma ContaEspecial, por exemplo, um tipo de Conta. Assim, para representar essa estruturao utilizamos herana. J Cliente no um tipo de Conta e nem Conta um tipo de Cliente. Na verdade uma Conta pertence a um Cliente. Da a utilizao de associao para representar essa estruturao.

Resumo
Esta aula foi dedicada ao estudo de dois conceitos muito interessantes da orientao a objetos: classes e mtodos abstratos. As classes abstratas no podem ser instanciadas e so utilizadas para agrupar um conjunto de caractersticas a serem herdadas por classes concretas. Os mtodos abstratos so aqueles que no tm uma implementao, mas so obrigatoriamente implementados nas classes concretas que herdam da abstrata que a define. Toda classe que tem um mtodo abstrato abstrata, mas nem toda classe abstrata tem um mtodo abstrato. A utilizao desses conceitos possibilita trazer mais flexibilidade e qualidade para os programas orientados a objetos.

Atividades de aprendizagem
1. Com base na hierarquia de contas criada no exerccio 1 da aula 4, transforme a classe Conta em uma classe abstrata (Figura 5.1). Transforme o mtodo sacar da classe Conta em abstrato (Figura 5.3), implementando-o nas subclasses (Figuras 5.4 e 5.5). 2. Crie, no mesmo pacote, a classe Cliente (Figura 5.5) e altere a classe Conta para que tenha uma associao com a classe Cliente (Figura 5.6). Faa as alteraes necessrias nos construtores das subclasses de Conta. 3. Altere o programa construdo no exerccio 2 da aula 4, para que continue funcionando, utilizando nossa nova hierarquia de Contas e a classe Cliente. Note que como Conta agora abstrata, dentro da opo de criar nova conta no deve mais haver a opo de criar uma instncia de Conta.

e-Tec Brasil

76

Programao Orientada a Objetos

Aula 6 Herana mltipla e interfaces


Objetivos
Entender o conceito de herana mltipla. Conhecer o conceito de interface. Aprender a aplicar o conceito de interface em Java. Entender como o conceito de interface pode ser utilizado para simular uma herana mltipla em Java.

6.1 Herana mltipla


Imaginemos que precisamos fazer um sistema para a Federao Brasileira de Atletismo e, para isso, precisamos definir classes que representem Nadadores, Corredores, Ciclistas e Triatletas. Ento, quando comeamos a analisar o problema, notamos que esses indivduos tm vrias caractersticas em comum, como, por exemplo, todos eles devem se aquecer antes da prova. Assim, decidimos criar uma classe que represente todos os tipos de Atletas de forma que as demais classes herdaro dessa. Avaliando o problema mais a fundo, chegaremos concluso que todo Atleta uma Pessoa, o que nos levaria a criar uma classe para organizar as caractersticas comuns a todas as pessoas. Ento, at o momento, decidimos criar uma superclasse Pessoa da qual herdar a classe Atleta que, por sua vez, tem como subclasses Nadador, Corredor, Ciclista e Triatleta. Mas, note que, um Triatleta deve saber correr como um Corredor, nadar como um Nadador e pedalar como um Ciclista. Assim, seria natural que Triatleta herdasse caractersticas dessas trs classes. Nesse contexto ento teramos a seguinte hierarquia: Teramos uma superclasse Pessoa para agrupar as caractersticas comuns a todos as pessoas. Todo atleta uma pessoa. Assim, Atleta herdaria de Pessoa (Em Java: Atleta extends Pessoa).

Aula 6 Herana mltipla e interfaces

77

e-Tec Brasil

Todo nadador um atleta. Assim, Nadador herdaria de Atleta (Em Java: Nadador extends Atleta).
Herana mltipla O conceito de herana mltipla torna possvel que uma classe descenda de vrias classes.

Todo corredor um atleta. Assim, Corredor herdaria de Atleta (Em Java: Corredor extends Atleta). Todo ciclista um atleta. Assim, Ciclista herdaria de Atleta (Em Java: Ciclista extends Atleta).

Java no implementa herana mltipla por opo. Isso ocorre porque a herana mltipla pode nos gerar situaes inusitadas. Suponhamos que temos um mtodo aquecer() em Atleta e esse mtodo redefinido em Nadador, Corredor e Ciclista. Suponhamos, ainda, que esse mtodo no foi implementado em Triatleta. Dessa forma, o Triatleta deveria, por herana, utilizar o mtodo aquecer() de seu ancestral. Entretanto, Triatleta tem trs ancestrais; a vem a dvida: qual dos trs ele iria utilizar? Em outras palavras, um Triatleta aquece como um Nadador, como um Corredor ou como um Ciclista? Java, para evitar esse problema, eliminou a possibilidade de herana mltipla fazendo uso de interfaces. Outras linguagens utilizam outros tipos de solues e permitem herana mltipla, mas acabam, de certa forma, entrando em conflito com o conceito de herana.

Todo triatleta nadador, corredor e ciclista. Assim Triatleta deveria herdar de Nadador, Corredor e Atleta. No caso do Triatleta emprega-se o conceito de herana mltipla. O problema que Java no implementa o conceito de herana mltipla. Mas, como implementar o comportamento da herana mltipla em Java, se Java no suporta herana mltipla? Isso possvel por meio de interfaces.

6.2 Interfaces
Uma interface pode ser vista como um conjunto de declaraes de mtodos, sem as respectivas implementaes. Uma interface parecida com uma classe; porm, em uma interface, todos os mtodos so pblicos e abstratos e todos os atributos so pblicos, estticos e constantes. A sintaxe para criar uma interface muito parecida com a sintaxe para criar uma classe: public interface <nome_da_interface>.

Interface uma coleo de mtodos que indica que uma classe possui algum comportamento alm do que herda de suas superclasses. Os mtodos includos em uma interface no definem esse comportamento; essa tarefa deixada para as classes que implementam a interface (CADENHEAD; LEMAY, 2005, p. 17).

O problema de herana mltipla apresentado na seo anterior pode ser resolvido com a criao de: quatro interfaces: Atleta, Corredor, Nadador e Ciclista; duas classes: Pessoa e Triatleta. A Figura 6.1 exibe as implementaes das interfaces citadas. A implementao da classe Pessoa exibida na Figura 6.2, enquanto a Figura 6.3 exibe o cdigo da classe Triatleta.

e-Tec Brasil

78

Programao Orientada a Objetos

Figura 6.1: Implementaes das interfaces Atleta, Nadador, Corredor e Ciclista


Fonte: Elaborada pelos autores

Note que Nadador, Corredor e Ciclista herdam de Atleta. A herana entre interfaces feita da mesma forma que a herana entre classes: utilizando a palavra reservada extends.

Figura 6.2: Implementao da classe Pessoa


Fonte: Elaborada pelos autores

A classe Pessoa traz os atributos nome e endereco, os mtodos que manipulam esses atributos e um construtor.

Aula 6 Herana mltipla e interfaces

79

e-Tec Brasil

Figura 6.3: Implementao da classe Triatleta


Fonte: Elaborada pelos autores

A classe Triatleta herda da classe Pessoa e implementa as interfaces Nadador, Corredor e Ciclista. O construtor de Triatleta apenas chama o construtor de sua superclasse (Pessoa) repassando para ele o nome que recebera como parmetro. A classe Triatleta teve de implementar os mtodos nadar(), correr() e correrDeBicicleta() porque ela implementa as interfaces Nadador, Atleta e Ciclista. Note que tambm obrigatria a implementao do mtodo aquecer() pois, as interfaces Nadador, Atleta e Ciclista que so implementadas pela classe Triatleta herdam da interface Atleta. O uso de interfaces recomendvel no desenvolvimento de sistemas para fornecer um contexto menos acoplado e mais simplificado de programao. Vamos supor, por exemplo, que temos uma interface responsvel pela comunicao com banco de dados; dessa forma, qualquer classe que implementar a interface responder a todas as funcionalidades para acesso a banco. Suponhamos que um novo banco seja elaborado e que desejemos fazer a troca do banco antigo por esse banco novo; ser necessrio apenas elaborar a classe que implemente a interface de acesso a esse banco novo e, ao invs de utilizarmos um objeto da classe antiga, utilizaremos um objeto da nova classe elaborada.

e-Tec Brasil

80

Programao Orientada a Objetos

Resumo
O principal conceito trabalhado nesta aula foi o de herana mltipla. Herana mltipla um tipo especial de herana na qual uma classe herda de duas ou mais outras classes. Mas, Java no implementa herana mltipla. Ento o conceito de interface surge como uma alternativa. Uma interface define um conjunto de mtodos sem suas implementaes, de forma que toda classe que implemente uma interface deve trazer implementaes para todos os mtodos definidos em tal interface.

Atividades de aprendizagem
1. Implemente as interfaces Nadador, Corredor e Ciclista e as classes Pessoa e Triatleta como apresentadas nos exemplos deste captulo. Faa um programa principal que instancie um triatleta e utilize seus mtodos. 2. Crie uma interface Investimento que defina um mtodo reajustar que receba um double como parmetro e retorne void. Ento altere a classe Poupana que criamos em exerccios anteriores de forma que ela implemente a interface Investimento e continue herdando da classe Conta, pois se trata de uma conta que tambm um investimento.

Aula 6 Herana mltipla e interfaces

81

e-Tec Brasil

Aula 7 Interfaces grficas em Java Parte I


Objetivos
Construir nossas primeiras interfaces grficas em Java. Conhecer algumas classes para construo de interfaces grficas em Java: JFrame, JLabel, ImageIcon, JOptionPane,JTextField e JPassword. Aprender a fazer tratamento de eventos sobre interface grfica em Java.

7.1 Java Swing


A construo de interfaces grficas para programas desktop em Java se baseia em duas bibliotecas principais: a AWT (Abstract Window Toolkit) e a Swing. Ao contrrio do que muitos pensam, a Swing no um substituto da AWT. Em vez disso, a Swing funciona como uma camada disposta acima da AWT. Dessa forma, apesar de nosso estudo nessa disciplina se concentrar em Swing, inevitvel referenciar a AWT. Para utilizar as classes Java Swing, os programas a serem implementados devem importar classes de trs pacotes: import java.awt.* import java.awt.event.* import javax.swing.* Se no fizermos essas importaes, o NetBeans poder indicar erro quando utilizarmos classes Java Swing. Assim, podemos fazer as trs importaes e, quando alguma das importaes no for utilizada, ns a apagaremos. Outra opo deixar o NetBeans fazer as correes de importao classe a classe.

Java Swing um conjunto de classes destinado elaborao de aplicaes com interface grfica padro Windows.

Aula 7 Interfaces grficas em Java Parte I

83

e-Tec Brasil

7.2 JFrame
JFrame uma classe do pacote Swing que fornece todas as propriedades, mtodos e eventos de que precisamos para construir janelas padro Windows. Frame uma classe do pacote AWT responsvel pela criao de janelas, parecidas com as encontradas no ambiente Windows (FUGIERI, 2006, p. 176).

A janela a parte mais importante da interface do aplicativo, pois sobre ela que os demais componentes sero construdos. A janela principal de aplicativos Java para desktop criada como uma instncia da classe JFrame (herana da classe Frame implementada no pacote Java Swing). A classe JFrame prov um conjunto de mtodos que permitem criar e configurar janelas. Abaixo so citados alguns deles: JFrame(): construtor padro. Apenas cria uma nova janela. JFrame(String t): cria uma janela atribuindo um ttulo a mesma. getTitle(): obtm o ttulo da janela. setTitle( String t ): atribui um ttulo janela. isResizable(): verifica se a janela redimensionvel. setResizable(boolean b): especifica se a janela ou no redimensionvel. Caso seja passado true como parmetro, a janela ser redimensionvel. Caso o parmetro passado seja false, a janela no ser redimensionvel. setSize(int l, int a): define o tamanho da janela. Os parmetros passados so a largura e a altura da janela. setLocation(int x, int y): define a posio da janela na tela. O primeiro parmetro a ser passado a posio horizontal da janela a partir do lado esquerdo da tela. O segundo parmetro define a posio vertical a partir da parte superior da tela. A Figura 7.1 exibe um exemplo de cdigo de janela criada a partir da classe JFrame. Note que nesse exemplo foi utilizada grande parte dos mtodos citados acima.

e-Tec Brasil

84

Programao Orientada a Objetos

Figura 7.1: Primeiro exemplo de janela Jframe


Fonte: Elaborada pelos autores

A classe PrimeiraJanela apresentada no exemplo 7.1 herda de JFrame. Assim, ela tem todos os mtodos e atributos de JFrame. No construtor da classe PrimeiraJanela temos chamadas a vrios dos mtodos da classe JFrame sendo chamados (this.<metodo>). O mtodo getContentPane() retorna um objeto que representa a parte interior da janela; esse objeto possui um mtodo que possibilita alterarmos a cor de fundo (setBackground) desse objeto. Note, ainda, que configuramos a cor de fundo da janela para azul utilizando a classe Color e seu atributo esttico blue. A Figura 7.2 exibe a janela gerada pela execuo do cdigo apresentado na Figura 7.1.

Aula 7 Interfaces grficas em Java Parte I

85

e-Tec Brasil

Figura 7.2: Janela gerada pelo exemplo da Figura 7.1


Fonte: Elaborada pelos autores

7.3 JLabel e ImageIcon


A classe JLabel utilizada para criar etiquetas (labels) de textos nas janelas (FUGIERI, 2006, p. 178). Ela permite o controle de propriedades do texto a ser utilizado, tais como: alinhamento, tipo de letra, tamanho, cor, etc. A classe JLabel fornece vrios construtores dentre os quais destacamos: JLabel(): construtor padro. JLabel(String): recebe como parmetro uma String que ser o texto apresentado pelo Label. JLabel(String, int): alm do texto a ser apresentado, recebe como parmetro um inteiro que representa o tipo de alinhamento a ser utilizado. JLabel(String, Image): alm do texto a ser apresentado, recebe como parmetro um image que ser o cone a ser exibido. JLabel(String, Image, int ): recebe como parmetros o texto a ser apresentado, o cone a ser exibido e o tipo de alinhamento a ser utilizado. Outros dois mtodos essenciais para o uso de JLabels so o mtodo getText() que retorna o texto do Label e o setText(String) que especifica (altera) o texto a ser apresentado pelo Label. A classe ImageIcon utilizada, entre outras possibilidades, para colocar um cone no JLabel. A Figura 7.3 exibe o cdigo de uma janela que utiliza as classes JLabel e ImageIcon.

e-Tec Brasil

86

Programao Orientada a Objetos

Figura 7.3: Exemplo de utilizao de JLabel e ImageIcon


Fonte: Elaborada pelos autores

No exemplo da Figura 7.3 note que a classe UsaJLabel_ImageIcon herda da classe Jframe; assim, conseguimos utilizar seus mtodos. O mtodo setUndecorated da classe JFrame retira da janela a borda padro Windows. A linha janela.getRootPane().setWindowDecorationStyle(JRootPane. FRAME);, por sua vez, coloca na janela a borda padro Java. Temos tambm a definio do layout da janela: this.getContentPane(). setLayout(new GridLayout(2, 1));. O layout Grid divide a tela em partes iguais de linhas e colunas. No nosso exemplo, temos a tela divida em duas linhas e uma coluna. A ordem de insero de objetos nesse layout da esquerda para a direita e de cima para baixo. A insero feita com o mtodo add (this.getContentPane().add(this.label1);). Nos aprofundaremos no estudo dos layouts futuramente. A Figura 7.4 exibe a janela gerada pelo cdigo exibido na Figura 7.3.

Figura 7.4: Janela gerada pelo cdigo da Figura 7.3


Fonte: Elaborada pelos autores

Aula 7 Interfaces grficas em Java Parte I

87

e-Tec Brasil

7.4 JOptionPane
A classe JOptionPane utilizada para gerar caixas de dilogo (FUGIERI, 2006, p. 207). Ela nos permite criar vrios tipos de caixas de dilogo, a saber: MessageDialog, ConfirmDialog, InputDialog e OptionDialog.

7.4.1 MessageDialog
Uma MessageDialog uma caixa de dilogo que apresenta uma mensagem. Sintaxe para criao: JOptionPane.showMessageDialog (<componente>, <mensagem>, <ttulo da mensagem>, <tipo da mensagem>) Parmetros para criao: <componente>: objeto continer que permite definir a posio da tela em que a caixa de mensagem aparecer. Normalmente esse parmetro null. <mensagem>: mensagem a ser exibida na caixa. <ttulo da mensagem>: ser exibido na barra de ttulo da caixa de mensagem. <tipo da mensagem>: determina o cone que aparecer junto mensagem. Podendo ser: Pergunta: QUESTION_MESSAGE Informao: INFORMATION_MESSAGE Alerta: WARNING_MESSAGE Erro: ERROR_MESSAGE Definido pelo Usurio: INFORMATION_MESSAGE ( e acrescenta-se o argumento do tipo ImageIcon na chamada do showMessageDialog ) Vazio: PLAIN_MESSAGE

Exemplo de utilizao: JOptionPane.showMessageDialog(null, s, Login confirmado, JOptionPane. INFORMATION_MESSAGE);

7.4.2 ConfirmDialog
Uma ConfirmDialog uma caixa de dilogo que apresenta uma mensagem e possibilita ao usurio responder uma pergunta.

e-Tec Brasil

88

Programao Orientada a Objetos

Sintaxe para utilizao: int resposta = JOptionPane.showConfirmDialog (<componente>, <mensagem>, <ttulo da mensagem>, <botes presentes>, <tipo da mensagem> Parmetros para utilizao: os parmetros so os mesmos apresentados no MessageDialog com acrscimo do parmetro que indica os botes a serem apresentados: < botes presentes>: determinam quais botes iro aparecer. Podendo ser: YES_NO_OPTION ou 0: aparecem yes e no. YES_NO_CANCEL ou 1: aparecem yes, no e cancel. OK_CANCEL_OPTION ou 2: aparecem ok e cancel. Retorno: O valor retornado pode ser: YES_OPTION = 0 NO_OPTION = 1 CANCEL_OPTION = 2 Exemplo de utilizao: JOptionPane.showConfirmDialog(null, Confirma login ?, Caixa de confirmao, JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);

7.4.3 InputDialog
Uma InputDialog uma caixa de dilogo que apresenta uma mensagem e possibilita que o usurio digite um texto. Sintaxe para utilizao: String resposta = JOptionPane.showInputDialog(<componente>, <mensagem>, <ttulo da mensagem>, < tipo da mensagem>)

Aula 7 Interfaces grficas em Java Parte I

89

e-Tec Brasil

Exemplo de utilizao: String s = JOptionPane.showInputDialog(null, Digite seu login, Login no sistema, JOptionPane.INFORMATION_MESSAGE);

7.4.4 OptionDialog
Uma OptionDialog uma caixa de dilogo que possibilita a exibio de vrias opes para escolha do usurio. Ela apresenta vrios botes para o usurio e retorna um nmero inteiro indicando em qual dos botes o usurio clicou (o primeiro boto representado pelo nmero zero; o segundo, pelo um e assim sucessivamente). Sintaxe para utilizao: int resposta = JOptionPane.showOptionDialog (<componente>, <mensagem>,<ttulo da mensagem>,<botoes presentes>, <tipo da mensagem>, <icone>, <array de objetos>, <seleo padrao>) Parmetros para utilizao: os parmetros so os mesmos apresentados nas anteriores com os seguintes acrscimos: <array de objetos>: utilizado para exibir opes fora do padro YES_NO_ OPTION, YES_NO_CANCEL_OPTION ou OK_CANCEL_OPTION ( personalizar botes de seleo ). < seleo padro >: determina o boto padro selecionado. Exemplo: String[] nomes = { Joo, Maria, Pedro }; int resp = JOptionPane.showOptionDialog (null, Escolha um login padro, Login no sistema , 0, JOptionPane.INFORMATION_MESSAGE, null, nomes, nomes[0]); A Figura 7.5 exibe um cdigo que utiliza a classe JOptionPane para criar vrias caixas de dilogo diferentes.

e-Tec Brasil

90

Programao Orientada a Objetos

Figura 7.5: Exemplos de utilizao da classe JOptionPane


Fonte: Elaborada pelos autores

O exemplo da Figura 7.5 no tem uma funcionalidade especfica. Seu objetivo apenas ilustrar o uso de mtodos da classe JOptionPane.

7.5 Tratamento de eventos e JButton


Quando desenvolvemos aplicativos com interface grfica precisamos programar as respostas que o sistema dar s interaes do usurio com a interface grfica. A essa programao do comportamento do sistema de acordo com as aes do usurio d-se o nome de tratamento de eventos. Quando o usurio clica em um boto, pressiona a tecla ENTER ou seleciona algo na tela, so disparados eventos correspondentes ao do usurio e cabe ao programador definir qual o procedimento a ser adotado na ocorrncia de tal evento. A interface ActionListener possibilita a identificao dos eventos, permitindo assim que seja programado o comportamento do sistema ao evento. Para ilustrar a utilizao da interface ActionListener para o tratamento de eventos, vamos desenvolver um exemplo (apresentado na Figura 7.6) que exibir uma janela com um boto e, ao clicar no boto, ser exibida uma caixa de dilogo. Para criar um boto na janela precisaremos utilizar a classe JButton. Dentre os mtodos mais utilizados da classe JButton esto: JButton(): construtor que cria um boto sem texto. JButton( String ): construtor que cria um boto exibindo o texto passado como parmetro. JButton(String, Image): construtor que cria um boto com texto e imagem.

Aula 7 Interfaces grficas em Java Parte I

91

e-Tec Brasil

getLabel(): obtm o texto apresentado pelo boto. setLabel(String): define o texto a ser apresentado pelo boto. setEnabled(boolean): define se o boto est habilitado (true) ou desabilitado (false). setHorizontalTextPosition(): define o alinhamento horizontal, que pode ser: LEFT (esquerda) ou RIGHT (direita ). setVerticalTextPosition(): define o alinhamento vertical que pode ser: TOP (por cima) ou BOTTOM (por baixo). setMnemonic(int): define o atalho (combinao de teclas) para acionar o boto (equivalente ao clique sobre o boto). setToolTipText(String): possibilita colocar uma mensagem de ajuda no boto. No exemplo da Figura 7.6 temos o uso do layout Flow (FlowLayout). Esse padro de layout preenche as linhas da janela e, quando no possvel mais inserir componentes numa linha, avana para a linha seguinte. Os layouts sero objetos de estudo da prxima aula.

e-Tec Brasil

92

Programao Orientada a Objetos

Figura 7.6: Exemplo de tratamento de evento e de utilizao de JButton


Fonte: Elaborada pelos autores

Note que no exemplo da Figura 7.6, nossa janela, alm de herdar de JFrame, implementa a interface ActionListener. Sempre que quisermos tratar eventos como cliques em botes de nossas janelas, elas devero implementar tal interface e, por consequncia, teremos de implementar o mtodo actionPerformed (ActionEvent e) que definir o comportamento do programa sempre que um evento for detectado. Note o mtodo actionPerformed do exemplo da Figura 7.6: sempre que um evento for disparado, verificado se ele foi disparado pelo boto (if e.getSource() == b1) e, em caso positivo, uma caixa de dilogo exibida. importante ressaltar que para que o mtodo actionPerformed seja chamado na ocorrncia de um evento em um objeto, esse objeto deve avisar para a janela que ele deseja ser ouvido. Isso feito pelo mtodo addActionListener. No exemplo da Figura 7.6 os eventos do boto s sero ouvidos devido linha b1.addActionListener(this). Assim como tratamos eventos de um boto, podemos tratar eventos de outros componentes de interface, bastando para isso avisar que eles devem ser ouvidos e programar o mtodo actionPerformed para responder ao evento.

7.6 JTextField e JPasswordField


A classe JTextField utilizada para criar caixas de texto. Normalmente, utiliza-se a classe JLabel para apresentar um texto fixo e a classe JTextField para campos de texto a serem digitados pelos usurios.

Aula 7 Interfaces grficas em Java Parte I

93

e-Tec Brasil

Dentre os mtodos utilizados para manipular um JtextField, destacam-se: JTextField(): construtor padro utilizado para criar uma caixa de texto vazia. JTextField(String): construtor utilizado para criar uma caixa de texto com a String fornecida. JTextField(int): construtor utilizado para criar uma caixa de texto com a quantidade de colunas especificada. JTextField(String, int): construtor utilizado para criar uma caixa de texto com uma determinada String e com a quantidade de colunas especificada. getText(): obtm o texto do objeto. setText(String): atribui uma String ao objeto. getSelectedText(): obtm o texto selecionado no objeto. isEditable(): verifica se o componente editvel ou no e retornando um boolean (true ou false) . setEditable( boolean ): especifica se o componente editvel ou no. H uma classe especial para criar caixas de texto prprias para campos de senha: JpasswordField (FUGIERI, 2006, p. 190). O funcionamento dessa classe bastante semelhante ao de JTextField. A diferena bsica que os caracteres digitados so substitudos por outros para ocultar a senha. Assim, os principais mtodos de JPasswordField so idnticos aos de JTextField (exceto os construtores, obviamente) merecendo destaque adicionam apenas os seguintes mtodos: setEchoChar(char): determina o caracter que ser utilizado para esconder a senha. getPassword(): gera um vetor de char com a senha digitada. getText(): mtodo obsoleto que retorna a String do objeto.

e-Tec Brasil

94

Programao Orientada a Objetos

A Figuras 7.7 e 7.8 exibem o cdigo de uma janela que utiliza as classes JTextField e JpasswordField (o cdigo de uma janela est dividido nas duas figuras). Note que nesse exemplo foi criado um mtodo privado montarLayout que responsvel por montar o layout da janela, ou seja, por inserir e organizar os componentes na janela. Assim como no exemplo da Figura 7.4 foi utilizado o layout GridLayout.

Figura 7.7: Primeira parte do exemplo de utilizao de JTextField e JpasswordField


Fonte: Elaborada pelos autores

Figura 7.8: Segunda parte do exemplo de utilizao de JTextField e JpasswordField


Fonte: Elaborada pelos autores

Aula 7 Interfaces grficas em Java Parte I

95

e-Tec Brasil

No mtodo actionPerformed, que como vimos anteriormente define o tratamento de eventos para a janela, temos a criao de uma caixa de mensagem por meio da classe JOptionPane e seu mtodo showMessageDialog (veja a caixa de mensagem criada na Figura 7.10). Lembre-se que para tratar o evento de clique no boto, no podemos esquecer de fazer a janela ouvir esse evento. Para isso foi utilizado o comando this.b1.addActionListener(this);. Note que no exemplo das Figuras 7.7 e 7.8 fizemos uso tambm de um componente grfico que ainda no conhecamos: o JPanel. Utilizando JPanel podemos dividir uma janela em painis independentes de forma que podemos aplicar layouts diferentes a cada painel e inserir nos painis outros componentes de interface. Porm, no caso especfico desse exemplo utilizamos um JPanel apenas para ocupar o espao abaixo dos rtulos de texto de forma que o boto ficasse alinhado abaixo dos campo para preenchimento de senha. A Figura 7.9 exibe a janela criada. A Figura 7.9 exibe a janela criada pela execuo do cdigo apresentado nas Figuras 7.7 e 7.8.
Para facilitar o entendimento do uso de JPanel nesse exemplo, refaa o exemplo das Figuras 7.7 e 7.8 retirando do cdigo a utilizao do JPanel e veja o resultado. Note que o boto ser deslocado para a esquerda.

Figura 7.9: Janela gerada pela execuo do cdigo apresentado nas Figuras 7.7 e 7.8
Fonte: Elaborada pelos autores

A Figura 7.10, por sua vez, exibe a caixa de dilogo criada pelo evento de clique no boto conforme define o mtodo actionPerformed.

Figura 7.10: Caixa de mensagem criada ao clicar no boto


Fonte: Elaborada pelos autores

e-Tec Brasil

96

Programao Orientada a Objetos

Resumo
Nesta aula comeamos a criar interfaces grficas em Java. Aprendemos que a principal biblioteca de Java para trabalhar interfaces grficas a biblioteca Swing. Vimos que a classe JFrame responsvel por criar uma janela e aprendemos diversas outras classes que representam vrios tipos de componentes grficos. Por fim, vimos como tratar eventos ocorridos nas interfaces. Com esses conhecimentos j somos capazes de criar nossos primeiros programas com interfaces grficas em Java.
A classe JTextField no foi projetada para permitir a digitao de textos em mltiplas linhas. Para isso Java tem a classe JTextArea que tem funcionamento muito parecido com a classe JTextField. Acesse a documentao oficial da Oracle sobre a classe JTextArea em http://download. oracle.com/javase/6/docs/api/ javax/swing/JTextArea.html e, utilizando as informaes l apresentadas, acrescente ao exemplo da Figura 7.7 um JTextArea que permita ao usurio digitar uma ou mais frases de lembrete sobre sua senha.

Atividades de aprendizagem
1. Faa um programa com interface grfica que permita criar contas do tipo ContaEspecial (utilize as classes criadas em exerccios anteriores). Sua janela deve conter campos para que o usurio informe o nome do titular, o saldo da conta e o limite da conta e um boto que o usurio dever clicar para criar a conta. Assim, o usurio dever preencher os campos e, quando clicar no boto o programa, deve instanciar uma nova conta com os dados informados e o nmero da conta ser sequencial atribudo pelo prprio programa. Ento o programa deve inserir a conta criada em uma lista que conter todas as contas j criadas e deve exibir uma janela de mensagem (JOptionPane) informando o nmero da conta criada e o nome do seu titular. 2. Acrescente janela criada no exerccio anterior um boto que, ao ser clicado, exiba os nmeros e os nomes dos titulares de todas as contas criadas em uma janela de mensagem (JOptionPane). 3. No mesmo projeto do exerccio anterior, crie uma nova janela que contenha um campo no qual o usurio digitar um nmero de uma conta e um boto para consultar o saldo da conta. Na janela criada no exerccio anterior, crie um boto que, ao ser clicado, instanciar a nova janela e a tornar visvel. O construtor da nova janela receber como parmetro um ArrayList. Assim, quando a nova janela for instanciada, j receber como parmetro o ArrayList de contas que existe na antiga. Ento o usurio dever preencher na nova janela o nmero da conta e clicar no boto de consultar saldo. Nesse momento o sistema deve procurar pela conta desejada na lista. Se encontrar, deve exibir o saldo da conta em uma janela de mensagem (JOptionPane). Se no encontrar, deve exibir uma mensagem de erro informando que a conta no existe.

Todas as janelas de exemplo que fizemos tm um mtodo main, ou seja, so executveis. Porm, em programas comuns temos vrias janelas que no so executveis, e sim so exibidas a partir de outras. Para exibir uma janela a partir de um clique em um boto de uma outra janela, basta programar esse evento de forma que a janela a ser exibida seja instanciada e se torne visvel, como fazemos no mtodo main do exemplo apresentado na Figura 7.8.

Aula 7 Interfaces grficas em Java Parte I

97

e-Tec Brasil

Aula 8 Interfaces grficas em Java parte II


Objetivos
Aprender o conceito de padres de layout. Conhecer alguns padres de layout de Java. Conhecer mais classes para construo de interfaces grficas em Java: JComboBox, JCheckBox, JRadioButton, ButtonGroup, JMenuBar, JMenu e JmenuItem. Desenvolver novos exemplos de tratamento de eventos sobre interface grfica em Java.

8.1 Padres de layout


Os padres de layout definem como os objetos sero dispostos na janela (FUGIERI, 2006, p. 230). possvel desenvolver uma janela sem a utilizao de um padro de layout, mas, nesse caso, necessrio, para cada objeto, definir manualmente sua posio na janela, o que gera mais flexibilidade, mas tambm mais trabalho para a definio do layout. O uso de padres de layout deixa nossas janelas mais genricas e adaptveis a modificaes. Nesta aula aprenderemos como utilizar dois padres de layout: FlowLayout e GridLayout.

8.1.1 FlowLayout
O padro de layout FlowLayout insere os objetos, um aps o outro, linha a linha. Assim, quando no mais possvel inserir objetos numa linha, criada uma nova linha e novos objetos podem ser inseridos. Esse padro de layout assemelha-se a um editor de textos, pois quando no existe mais espao numa dada linha criada uma nova linha para insero de mais contedos. A Figura 8.1 apresenta um exemplo de uso do padro FlowLayout.

Aula 8 Interfaces grficas em Java parte II

99

e-Tec Brasil

Figura 8.1: Exemplo de uso de FlowLayout


Fonte: Elaborada pelos autores

Note no exemplo que o construtor do FlowLayout recebe trs parmetros: o alinhamento desejado (no caso utilizamos alinhamento centralizado), o espaamento horizontal e o espaamento vertical. Para aplicar o layout janela, utilizamos o mtodo setLayout. A Figura 8.2 exibe o resultado da execuo do cdigo apresentado na Figura 8.1.

Figura 8.2: Janela utilizando FlowLayout


Fonte: Elaborada pelos autores

e-Tec Brasil

100

Programao Orientada a Objetos

8.1.2 GridLayout
O padro de layout GridLayout organiza os objetos como uma tabela, com clulas de objetos de mesmo tamanho. um layout flexvel, pois uma vez redimensionada a janela ele ajusta automaticamente os objetos de forma que o padro se mantenha, ou seja, que cada objeto de cada clula seja apresentado com o mesmo tamanho. A Figura 8.3 apresenta um exemplo de uso do padro GridLayout.

Figura 8.3: Exemplo de uso de GridLayout


Fonte: Elaborada pelos autores

Note no exemplo que o construtor do GridLayout recebe quatro parmetros: o nmero de linhas em que a janela ser dividida (no caso 2), o nmero de colunas em que a janela ser dividida (no caso 3), o espaamento horizontal e o espaamento vertical. Para aplicar o layout janela, utilizamos o mtodo setLayout. A Figura 8.4 exibe o resultado da execuo do cdigo apresentado na Figura 8.3.

Aula 8 Interfaces grficas em Java parte II

101

e-Tec Brasil

Figura 8.4: Janela utilizando GridLayout


Fonte: Elaborada pelos autores

8.2 JComboBox e tratamento de eventos


A classe JComboBox utilizada para criar caixas que permitem que o usurio selecione apenas um item da sua lista de opes. Para criar um objeto do tipo JComboBox, necessrio passar um vetor de Strings que indicar as opes de seleo a serem exibidas na caixa. Exemplo de Criao: String[] animais = { Leo, Elefante, Cobra, Jabuti }; JComboBox combo = new JComboBox(animais); Dentre os mtodos mais utilizados da classe JComboBox, destacam-se: getSelectedIndex: retorna o ndice do item selecionado no combobox. importante notar que o ndice do primeiro elemento 0. removeItemAt: dado um ndice, elimina do combobox o item que est nessa posio. removeAllItens: remove todos os itens do combobox. addItem: dado um novo item, insere-o no combobox. getSelectedItem: retorna o item selecionado. getItemCount: retorna a quantidade de itens do combobox. A seguir apresentado um exemplo em que utilizamos um combobox para exibir uma listagem de animais. A janela construda no exemplo permite incluir novas opes no combobox e exibe um texto informando a opo se-

e-Tec Brasil

102

Programao Orientada a Objetos

lecionada. Para isso, foi preciso tratar o evento de clique em um boto (para adicionar item) e o evento de mudana de item selecionado. Como o exemplo ficou muito extenso, ele foi dividido em trs Figuras (8.5, 8.6 e 8.7). Mas note que as trs figuras juntas apresentam o cdigo de uma nica classe.

Figura 8.5: Exemplo de utilizao de JComboBox parte I


Fonte: Elaborada pelos autores

Figura 8.6: Exemplo de utilizao de JComboBox parte II


Fonte: Elaborada pelos autores

Aula 8 Interfaces grficas em Java parte II

103

e-Tec Brasil

Figura 8.7: Exemplo de utilizao de <IT>JComboBox<IT> parte III


Fonte: Elaborada pelos autores

No exemplo apresentado temos um campo de texto que informa qual o item atualmente selecionado no combobox. Assim, sempre que o usurio alterar o item selecionado, temos que identificar a ocorrncia desse evento e atualizar o texto exibido. Para que o evento de mudana de item selecionado seja acionado, necessrio adicionar o combobox ao controlador de eventos de mudana de item (ItemListener) do prprio combobox. Para isso, utilizamos o comando: this.combo.addItemListener(this);. Adicionalmente, para que a janela seja capaz de ouvir, ou melhor, de tratar o evento, ela dever implementar a interface ItemListener e, consequentemente, implementar o mtodo itemStateChanged que definir o comportamento da janela sempre que houver mudana de item selecionado em algum dos combobox adicionados na janela. O mtodo itemStateChanged do nosso exemplo apresentado na Figura 8.6. No exemplo apresentado, se houvesse mais combos na janela seria necessrio determinar o combo selecionado utilizando e.getSource() == this.combo (como foi feito no mtodo actionPerformed do mesmo exemplo). A Figura 8.8 exibe a janela gerada pela execuo do exemplo apresentado pelas trs figuras anteriores.

e-Tec Brasil

104

Programao Orientada a Objetos

Figura 8.8: Janela gerada pela execuo do exemplo anterior


Fonte: Elaborada pelos autores

8.3 JCheckBox
As caixas de opo so criadas a partir da classe JCheckBox e permitem representar uma opo que est ativada (true) ou desativada (false) (FUGIERI, 2006, p. 201). As Figuras 8.9 e 8.10 apresentam um exemplo que utiliza JCheckBox. Nesse exemplo h um texto e um checkbox. Se o checkbox estiver selecionado, o texto ser apresentado em negrito e, caso contrrio, ser apresentado em fonte plana. Para verificar se um objeto JCheckBox est selecionado, utilizamos o mtodo isSelected(). Como o exemplo ficou muito extenso, ele foi dividido em duas Figuras (8.9 e 8.10). Mas, note que as duas figuras juntas apresentam o cdigo de uma nica classe.

Figura 8.9: Exemplo de utilizao de JCheckBox parte I


Fonte: Elaborada pelos autores

Aula 8 Interfaces grficas em Java parte II

105

e-Tec Brasil

Figura 8.10: Exemplo de utilizao de JCheckBox parte II


Fonte: Elaborada pelos autores

Note no exemplo que, assim como acontece com JComboBox, os eventos de alterao de estados da classe JCheckBox acionam o mtodo ItemStateChanged da interface ItemListener (veja o mtodo ItemStateChanged do exemplo na Figura 8.10). Note tambm que necessrio acrescentar objetos JCheckBox ao tratador de eventos para que o mtodo itemStateChanged reconhea os eventos ocorridos com os checkbox. No exemplo isso feito pelo comando: this. c1.addItemListener(this);. A Figura 8.11 exibe a janela gerada pela execuo do exemplo apresentado pelas duas figuras anteriores.

Figura 8.11: Janela gerada pela execuo do exemplo da Figura 8.9 e 8.10
Fonte: Elaborada pelos autores

8.4 JRadioButton e ButtonGroup


A classe JRadioButton utilizada para criar botes de rdio. Esses botes so graficamente muito semelhantes aos checkbox. A diferena entre radio-

e-Tec Brasil

106

Programao Orientada a Objetos

button e checkbox est no fato que os primeiros so usados em conjuntos de forma que apenas um elemento do conjunto pode estar selecionado em um dado momento. Mas, para haver esse controle, os JRadioButton devem estar em um grupo representado pela classe ButtonGroup. Um objeto da classe ButtonGroup no visual, ou seja, no tem impacto na interface grfica, mas sem ele perdemos a garantia de que apenas um boto de rdio est selecionado. Dentre os mtodos mais utilizados da classe JRadioButton, destacamos: setMnemonic: permite que uma combinao de teclas tenha o mesmo efeito do clique sobre um objeto JRadioButton. isSelected: determina se um boto de rdio est selecionado. setSelected: recebe um parmetro booleano (true ou false) que faz com que o boto de rdio seja selecionado ou no. As Figuras 8.12, 8.13 e 8.14 exibem um exemplo de utilizao de JRadioButton. Como o exemplo ficou muito extenso, ele foi dividido em trs Figuras (8.12, 8.13 e 8.14). Mas, note que as trs figuras juntas apresentam o cdigo de uma nica classe.

Figura 8.12: Exemplo de utilizao de JRadioButton parte I


Fonte: Elaborada pelos autores

Aula 8 Interfaces grficas em Java parte II

107

e-Tec Brasil

Figura 8.13: Exemplo de utilizao de JRadioButton parte II


Fonte: Elaborada pelos autores

Figura 8.14: Exemplo de utilizao de JRadioButton parte III


Fonte: Elaborada pelos autores

e-Tec Brasil

108

Programao Orientada a Objetos

Note que o tratamento dos eventos de mudana de estados dos radiobuttons tambm feito atravs do mtodo itemStateChanged. Note tambm que, para que o mtodo itemStateChanged seja disparado quando ocorre um evento em um radiobutton necessrio acrescentar o objeto JRadioButton ao tratador de eventos (this.radio1.addItemListener(this)). No exemplo apresentado so utilizados dois campos de texto nos quais o usurio deve informar dois nmeros, e os radiobuttons so utilizados para permitir que se selecione a operao aritmtica a ser realizada com os nmeros digitados. Assim, quando o usurio seleciona a operao, o resultado dela apresentado em um terceiro campo de texto posicionado na parte inferior da janela. A Figura 8.15 exibe a janela gerada pela execuo desse exemplo.
comum os JRadioButton serem colocados em painis (JPanel) nas janelas como forma de destacar seu agrupamento. Os JPanel podem assumir vrios tipos de layout, assim como um JFrame qualquer. Pode-se colocar quantos JPanel forem desejados em uma JFrame.

Figura 8.15: Janela gerada pela execuo do exemplo de utilizao de rabiobutton


Fonte: Elaborada pelos autores

8.5 JMenuBar, JMenu e JMenuItem


Agora aprenderemos a criar barras de menu em nossas janelas (FUGIERI, 2006, p. 222). Para que nossa janela conte com uma barra de menu, necessrio, inicialmente, instanciar uma barra de menus, ou seja, uma JMenuBar e associ-la janela. Para isso, utilizamos comandos como os apresentados abaixo: JMenuBar menuBar = new JMenuBar(); this.setJMenuBar(menuBar); Para acrescentar um menus na barra de Menu, precisamos instanciar um objeto da classe JMenu e depois adicion-lo barra de menu. As linhas de cdigo abaixo apresentam um exemplo de como fazer isso: JMenu menu1 = new JMenu(<nome do menu>); menuBar.add(menu1) Por fim, para acrescentar itens a um menu, precisamos instanciar objetos da classe JMenuItem e adicion-los ao menu, como nas linhas apresentadas a seguir:

Aula 8 Interfaces grficas em Java parte II

109

e-Tec Brasil

JMenuItem menuItem1 = new JMenuItem(< nome do item do menu>) menu1.add( menuItem1 ) As Figuras 8.16, 8.17 e 8.18 exibem um exemplo de criao de janela com barra de menu. Como o exemplo ficou muito extenso, ele foi dividido em trs Figuras (8.16, 8.17 e 8.18). Mas, note que as trs figuras juntas apresentam o cdigo de uma nica classe.

Figura 8.16: Exemplo de criao de janela com barra de menu parte I


Fonte: Elaborada pelos autores

e-Tec Brasil

110

Programao Orientada a Objetos

Figura 8.17: Exemplo de criao de janela com barra de menu parte II


Fonte: Elaborada pelos autores

Figura 8.18: Exemplo de criao de janela com barra de menu parte III
Fonte: Elaborada pelos autores

Aula 8 Interfaces grficas em Java parte II

111

e-Tec Brasil

No exemplo apresentado, exibido um texto em uma caixa de acordo com o menu selecionado na janela. Note que, para isso, mais uma vez implementamos o mtodo actionPerformed da interface ActionListener (Figura 8.16), a exemplo do que fizemos para tratar o evento de clique em boto. Note tambm que foi necessrio adicionar os menus aos actionListeners (Figura 8.17). Note que apenas os JMenuItem respondem interface ActionListener. Os JMenu e os JMenuBar no tm como acionar o mtodo actionPerformed. Na Figura 8.19 exibida a janela gerada pela execuo desse exemplo.

Figura 8.19: Janela gerada pela execuo do exemplo de criao de janela com barra de menu
Fonte: Elaborada pelos autores

e-Tec Brasil

112

Programao Orientada a Objetos

Resumo
Nesta aula aprendemos a utilizar vrias classes Swing que criam diversos componentes de interface grfica. Aprendemos o conceito de padres de layout e dois dos padres mais utilizados em Java e vimos novos exemplos de tratamento de eventos. Com o que aprendemos nas duas ltimas aulas, somos capazes de criar programas com interfaces grficas em Java; porm, este assunto no foi esgotado nessas aulas. A inteno dessas aulas dar uma boa introduo ao assunto, de forma que voc tenha base para se aprofundar futuramente.

Atividades de aprendizagem
1. Faa um programa com interface grfica que permita ao usurio criar contas (use o exerccio 1 da aula 7 como base). Assim como no exerccio 1 da aula 7, as contas criadas devem ser armazenadas em um ArrayList. Neste exerccio, porm, o usurio deve selecionar o tipo de conta que deseja criar: ContaPoupanca ou ContaEspecial (utilizar as classes criadas no exerccio 1 da aula 4). Assim, deve ser utilizado um RadioGroup com RadioButtons para indicar o tipo de conta a ser criada. Note que ContaPoupanca no tem o atributo limite. Se for selecionado o tipo ContaPoupanca, o campo limite deve ficar desabilitado na tela (dica: voc ter de programar os eventos dos RadioButtons). 2. Faa uma janela para consultar saldo, idntica a que foi feita no exerccio 3 da aula 7. Crie um menu na janela do exerccio 1 da aula 8 e programe o evento de clique nesse menu para exibir a janela de saldo.

Aula 8 Interfaces grficas em Java parte II

113

e-Tec Brasil

Aula 9 Integrao com Banco de Dados parte I


Objetivos
Compreender o conceito de programao cliente-servidor. Aprender a acessar bancos de dados em Java utilizando drivers nativos e ODBC. Aprender a construir aplicaes em Java capazes de consultar dados de bancos de dados.

9.1 Programao cliente-servidor


Originalmente, o termo cliente-servidor era usado para descrever softwares que se utilizavam de mais de um hardware em sua execuo. Atualmente, porm, comum utilizar este termo para caracterizar situaes nas quais diferentes componentes de software se comunicam uns com os outros, mesmo que rodando em uma mesma mquina. Nesse contexto podemos ter arquiteturas cliente-servidor nas quais os componentes de software executam em mquinas espalhadas ao redor do mundo e se comunicam por uma arquitetura de rede ou, em outro extremo, podemos ter arquiteturas cliente-servidor nas quais todos os componentes de software executam em uma mesma mquina. Vale ressaltar, que, em ambas as situaes, cada componente de software executa uma funo independente e se comunica com os demais componentes. Um uso comum para arquiteturas cliente-servidor manter no lado cliente o gerenciamento das interfaces grficas com o usurio e utilizar o servidor para manter a integridade dos dados do negcio havendo diversas variaes para essa abordagem. Uma classificao muito comumente utilizada para designar a filosofia utilizada em uma arquitetura cliente-servidor define dois tipos de arquitetura:

Aula 9 Integrao com Banco de Dados parte I

115

e-Tec Brasil

Cliente pesado: quando a interface com o usurio e toda a lgica de negcio esto no lado cliente, ficando o servidor dedicado apenas ao armazenamento, acesso e distribuio de dados. Servidor pesado: quando o cliente responsvel apenas pela interface com o usurio, ficando sob responsabilidade do servidor a maior parte da lgica de negcio e o gerenciamento dos dados. Para implementar uma arquitetura desse tipo, necessrio que se faa uma separao entre a poro de cdigo que trata da interface com o usurio e a poro que implementa as regras de negcio. A forma de programao que utilizaremos nesta disciplina pode ser enquadrada como cliente pesado pois desenvolveremos programas que ficaro responsveis pela interface com o usurio e toda a lgica de negcio (cliente) e que acessaro os dados armazenados em servidores de bancos de dados (servidor). De fato, nos exemplos e exerccios que faremos nesta aula, nossos programas sero executados na mesma mquina que o servidor de banco de dados. Porm, veremos que para colocar o servidor de banco de dados para funcionar em uma mquina separada, precisaramos apenas de uma estrutura de rede entre as duas mquinas e seria necessrio alterar uma linha de cdigo que define o endereo do servidor.

9.2 Acesso a Bancos de Dados em Java


A linguagem Java possui um conjunto de classes para acesso e manipulao de dados em banco de dados. Essas classes ficam no pacote JDBC. O primeiro passo para acessar um banco pela aplicao estabelecer a conexo. Para isso, necessrio utilizar um driver que estabelecer a conexo com o banco. Em ambientes Windows temos basicamente dois tipos de drivers para conexo com banco de dados: Drivers ODBC: o Windows possui uma fonte de dados, de forma que, uma vez existente um driver ODBC para um dado banco, fica sob responsabilidade do Windows a comunicao entre o software e o banco. Drivers nativos: so implementaes de um driver diretamente para uma dada linguagem, no nosso caso, Java.

e-Tec Brasil

116

Programao Orientada a Objetos

O Quadro 9.1 exibe um comparativo entre os dois tipos de drivers para conexo com banco de dados em Java.
Quadro 9.1: Drivers nativos x drivers ODBC
Drivers nativos Drivers ODBC Facilitam a troca de banco em ambiente Windows (MySQL para Sybase por exemplo), pois basta trocar a fonte de dados no Windows que o programa atuar sobre o novo banco desejado. Se for necessrio migrar para outro sistema operacional que no seja Windows, obviamente, no ser possvel continuar utilizando o ODBC.

Normalmente, so mais rpidos, pois so otimizados para uma dada plataforma.

Um programa feito em Java utilizando um driver nativo migrado para outro SO (Windows para Linux, por exemplo) apenas recompilando os cdigos fonte existentes (obviamente esse outro SO dever possuir a JVM e o driver nativo para o banco desejado). Fonte: Elaborado pelos autores

9.3 Fontes de dados ODBC


Se optarmos por utilizar um banco de dados com um driver ODBC, precisaremos, inicialmente, configurar a fonte de dados ODBC, de forma que, seja criado um Data Source e que por este possa ser feita a conexo em nossa aplicao. Para criarmos o Data Source de um banco, no Windows XP, por exemplo, precisamos ir em Painel de Controle->Ferramentas Administrativas->Fontes de Dados (ODBC) (Figura 9.1).

Figura 9.1: Fonte de dados ODBC


Fonte: Windows XP Professional

Na janela apresentada, clicando em Adicionar, temos a janela apresentada pela Figura 9.2, na qual devemos selecionar o driver de acordo com o servidor de banco de dados a ser utilizado.

Aula 9 Integrao com Banco de Dados parte I

117

e-Tec Brasil

Figura 9.2: Adicionando fonte de dados


Fonte: Windows XP Professional

Utilizaremos nesta disciplina o sistema gerenciador de banco de dados (SGBD) MySQL. Escolhemos esse SGBD por ser gratuito e pelo fato de ter sido utilizado na disciplina Banco de Dados deste curso. Assim, necessrio que a mquina a ser utilizada para implementar os exemplos e exerccios desta aula tenha o MySQL instalado e configurado. Como vamos incluir uma fonte de dados MySQL ODBC 5.1 Driver, devemos selecionar essa opo e clicar em Concluir. Ento ser exibida a janela apresentada pela Figura 9.3.

Figura 9.3: Configurando um DataSource MySQL


Fonte: MySQL Conector/ODBC para Windows XP

Na Figura 9.3 temos a configurao da Fonte de Dados ODBC. Para finalizar a configurao, devemos definir: Data Source: nome que identificar o banco em nossos programas Java (ou em outra linguagem que faa uso dessa tecnologia). Description: apenas uma descrio acerca da fonte de dados configurada.

e-Tec Brasil

118

Programao Orientada a Objetos

Server: IP da mquina onde est o banco que se deseja conectar. Caso o servidor de banco de dados seja a mesma mquina em que a aplicao rodar, podemos preencher esse campo com localhost ou com o IP 127.0.0.1 ou ainda com o endereo IP da mquina. Port: porta por onde ser feita a comunicao (a porta utilizada pelo MySQL por padro a 3306). User: nome do usurio que ir conectar ao banco de dados. Note que no se trata do usurio do sistema operacional e sim do usurio do banco de dados (usurio que voc utilizava para acessar o MySQL na disciplina Banco de Dados). Password: senha do usurio que ir conectar ao banco de dados. Database: iro aparecer no combobox os bancos de dados existentes no servidor informado, de forma que possa ser escolhido o banco de dados desejado. Agora basta clicar em Ok que o Data Source ser criado.

9.4 Conectando com o Banco de Dados


Como vimos, aplicativos Java podem se conectar com um banco de dados utilizando driversnativos ou por fontes de dados ODBC (FUGIERI, 2006, p.2 97). Em ambos os casos algumas informaes so necessrias para o estabelecimento da conexo: O nome do usurio do banco de dados e sua senha. O driver utilizado nativo ou ODBC? Caso seja nativo: IP da mquina onde est o banco que se deseja conectar. A porta a ser utilizada pela conexo. O nome do banco de dados.

Aula 9 Integrao com Banco de Dados parte I

119

e-Tec Brasil

Caso seja ODBC: Data Source do banco: identificao do banco no Windows (fonte de dados ODBC). Como primeiro exemplo, a Figura 9.4 exibe um cdigo que estabelece uma conexo com um banco de dados utilizando um driver ODBC.

Figura 9.4: Conexo com banco de dados via ODBC


Fonte: Elaborada pelos autores

Avaliemos alguns trechos principais desse cdigo.

Figura 9.5: Definio do Data Source a ser utilizado


Fonte: Elaborada pelos autores

Como exibe a Figura 9.5, foi definida uma String com nome url que faz referncia ao nome do Data Source (fonte de dados ODBC): Banco_LP. J a Figura 9.6 exibe o trecho de cdigo que utiliza o mtodo Class.forName para verificar se o driver ODBC existe na mquina (nas mquinas com Windows praticamente sempre haver). Caso no exista o driver, ser disparada a exceo ClassNotFoundException.

Figura 9.6: Verificao da existncia do driver ODBC


Fonte: Elaborada pelos autores

e-Tec Brasil

120

Programao Orientada a Objetos

No cdigo exibido pela Figura 9.7 feita a conexo com o banco, utilizando para isso o mtodo DriverManager.getConnection passando como parmetros a url contendo o nome do data source, o nome do usurio a ser utilizado para acessar o banco e a senha desse usurio.
Figura 9.7: Estabelecimento da conexo com o banco
Fonte: Elaborada pelos autores

Finalizando nossa anlise sobre o cdigo da Figura 9.4, vemos que a tentativa de conexo est envolta em um bloco try...catch. Assim, em caso de erro na conexo (data source inexistente, usurio ou senha invlidos, entre outros) ser disparada uma exceo do tipo SQLException. Caso no ocorra erro, exibida uma mensagem e a conexo fechada utilizando o mtodo close: minhaConexao.close(); Vamos agora exemplificar como fazer uma conexo utilizando um driver nativo. Para utilizar um driver nativo precisamos acrescent-lo ao projeto como uma biblioteca, uma vez que, ele foi compilado separadamente. Para fazer isso, no NetBeans, devemos clicar no projeto com o boto direito do mouse, escolher a opo Propriedades e nela escolher a opo Bibliotecas. Ento o arquivo do driver deve ser escolhido e adicionado ao projeto. A Figura 9.8 ilustra essa funcionalidade.

Figura 9.8: Acrescentando uma biblioteca de driver nativo ao projeto


Fonte: NetBeans IDE 7.0.1

Uma vez o driver nativo adicionado ao projeto, podemos utiliz-lo para criar nossa conexo. O programa exibido pela Figura 9.9 ilustra a conexo com um banco de dados nativo.

Aula 9 Integrao com Banco de Dados parte I

121

e-Tec Brasil

Figura 9.9: Criando uma conexo com banco de dados via driver nativo
Fonte: Elaborada pelos autores

Note que o cdigo muito semelhante ao que utilizamos para conectar a um banco de dados utilizando um driver ODBC. Na url, onde havamos informado o nome do Data Source, agora tivemos que informar o nome do servidor, a porta a ser utilizada e o nome do banco. J a classe buscada pelo Class.forName agora a do driver MySQL nativo. O restante do cdigo continua a mesma coisa.

9.5 Consultando dados no banco


Para uma aplicao Java buscar dados num banco de dados, precisaremos de uma sequncia de aes: conectar com o banco; escrever a consulta que desejamos que seja feita no banco; submeter essa consulta; ler os dados do resultset (resultado da consulta). A consulta deve ser escrita na linguagem SQL, que a linguagem padro utilizada para manipular dados em bancos de dados relacionais. A linguagem SQL no faz parte da ementa dessa disciplina, pois foi objeto de estudo na disciplina Banco de Dados. Assim, fundamental que este assunto seja revisado.

e-Tec Brasil

122

Programao Orientada a Objetos

As Figuras 9.10, 9.11 e 9.12 exibem um exemplo de aplicao que se conecta a um banco de dados, consulta todos os dados da tabela filme e imprime na tela o cdigo, o gnero, a produtora e a data da compra de todos os filmes dessa tabela. O exemplo foi dividido em trs Figuras (9.10, 9.11 e 9.12), mas as trs figuras juntas apresentam o cdigo de uma nica classe.

Figura 9.10: Definio da classe e do mtodo main


Fonte: Elaborada pelos autores

Figura 9.11: Construtor da classe


Fonte: Elaborada pelos autores

Figura 9.12: Execuo da consulta


Fonte: Elaborada pelos autores

Aula 9 Integrao com Banco de Dados parte I

123

e-Tec Brasil

Nesse exemplo, o construtor da classe estabelece a conexo com o banco de dados. O mtodo main cria uma instncia da classe utilizando seu construtor e aciona ento o mtodo buscarDados(). Nesse mtodo, a consulta sql definida em uma String, e executada pelo mtodo meuState.executeQuery(sql). Note que meuState o objeto de conexo criado anteriormente dentro do construtor. Ainda no mtodo buscarDados(), aps a execuo da consulta gerado um ResultSet que, nada mais do que o resultado da consulta submetida ao banco. A partir do ResultSetrs possvel obter os dados resultantes da consulta, navegando linha a linha pelo mtodo rs.next(). Note que o mtodo rs.next() utilizado como condio de um lao while. O comando while (rs. next()) equivalente a dizer: enquanto tivermos mais uma linha, permanea no lao. Na primeira vez esse comando marca a primeira linha para que os dados sejam buscados a partir dela; uma nova chamada de next() marca a linha seguinte, at que no haja mais linhas. Dentro do lao while h quatro comandos de impresso println com o objetivo de imprimir os dados de cada coluna na tela de sada. Nesse contexto, merece destaque o comando rs.getString(<nome_da_coluna_no_banco>). Esse comando retorna o valor da linha atual para a coluna passada como parmetro. Por exemplo, o comando rs.getString(CODIGO) vai retornar uma String com o valor da coluna CODIGO da linha atual da tabela. Para esse exemplo funcionar ser necessrio uma sequncia de passos: criar um banco de dados no MySQL com o nome banco_lp (pode usar outro nome, mas, nesse caso, precisar adequar o script apresentado na Figura 9.13); criar dentro desse banco uma tabela com o nome FILME utilizando o cdigo SQL apresentado na Figura 9.13; inserir algumas linhas nessa tabela para que tenhamos dados para consultar; criar uma fonte de dados ODBC com o nome banco_lp que aponte para o banco criado no primeiro item. Na seo 9.3 aprendemos a criar fontes de dados ODBC.

e-Tec Brasil

124

Programao Orientada a Objetos

Figura 9.13: Cdigo SQL para criao da tabela filme


Fonte: Elaborada pelos autores

Resumo
Nesta aula tivemos uma introduo ao conceito de programao cliente-servidor e aprendemos a acessar servidores de bancos de dados por nossas aplicaes em Java. Vimos que, para conectar com os servidores de bancos de dados, utilizamos drivers que podem ser de dois tipos: nativos ou ODBC. Por fim, aprendemos a consultar dados em bancos de dados.

Atividades de aprendizagem
1. Para fazer os exerccios desta aula, antes crie um banco de dados com uma tabela filme, como a exibida na Figura 9.13 e insira alguns registros nessa tabela utilizando para isso as ferramentas que voc aprendeu a utilizar na disciplina de banco de dados. 2. Construa um programa que acesse o banco de dados criado para obter os dados de todos os filmes da tabela e exiba esses dados em uma janela. Para exibir os dados organizadamente, utilize um JLabel para exibir o valor de cada campo de forma a exibir os dados em formato tabular. Acesse o banco utilizando driver ODBC. 3. Altere o exerccio anterior agora utilizando um driver nativo para acessar o banco. 4. Construa um programa que apresente uma janela com um campo de texto no qual o usurio dever digitar o cdigo do filme desejado e um boto com o texto Consultar. Quando o usurio clicar no boto, o programa dever buscar no banco de dados os dados do filme do cdigo informado e exibir esses dados na tela.
Existe na biblioteca Swing a classe JTable, que prpria para exibir dados tabulares em janelas. Assim, uma boa tarefa seria estudar esse componente e utiliz-lo para fazer os exerccios 1 e 2 da aula 9 em lugar de criar vrios JLabels para exibio dos dados.

Aula 9 Integrao com Banco de Dados parte I

125

e-Tec Brasil

Aula 10 Integrao com Banco de Dados parte II


Objetivos
Aprender a construir aplicaes em Java capazes de inserir, alterar e excluir dados de bancos de dados.

10.1 Introduo
Nesta aula criaremos uma classe para encapsular o processo de conexo a banco de dados, a fim de facilitar a implementao de nossos aplicativos. Nessa classe vamos optar pelo uso de conexes utilizando driver nativo do MySQL. classe criada para nos dar suporte a conexo com bancos de dados daremos o nome de MySQLNativeDriver. O cdigo dessa classe exibido na Figura 10.1.

Figura 10.1: Classe MySQLNativeDriver parte I


Fonte: Elaborada pelos autores

Aula 10 Integrao com Banco de Dados parte II

127

e-Tec Brasil

O mtodo mais importante da classe MySQLNativeDriver o mtodo obterConexao() que cria e retorna uma conexo com um banco de dados utilizando o driver nativo do MySQL. Note tambm que nessa classe temos atributos para definir todos os parmetros necessrios para o estabelecimento de uma conexo com o banco de dados: IP do servidor, porta, nome do banco, nome do usurio e senha. A classe conta ainda com dois construtores: um que recebe como parmetros as cinco informaes necessrias para a conexo, e um segundo que recebe apenas o nome do banco, o nome do usurio e a senha e assume que o banco est na mquina local (localhost) e que a porta a ser utilizada a porta padro do MySQL (3306). importante lembrar que para fazermos uso do driver MySQL nativo precisamos inclu-lo no projeto, como aprendemos na aula anterior (seo 9.4 Figura 9.8). Para os exemplos deste captulo, utilizaremos a mesma tabela FILME j criada na aula anterior (Figura 9.13). Nesta aula faremos insero, atualizao e excluso de dados nessa tabela. Para isso importante entendermos o cdigo de criao dessa tabela, apresentado pela Figura 9.13. Note que a coluna codigo a chave primria da tabela e uma coluna autoincrementvel. Isso significa que ela no precisa participar do INSERT, pois esse dado ser preenchido, automaticamente, pelo banco, utilizando o valor do ltimo registro inserido mais uma unidade (conforme j estudado na disciplina Banco de Dados). Na atualizao (UPDATE) e na excluso (DELETE) a coluna codigo identificar de forma nica cada registro encontrado na tabela filme, possibilitando assim, sua atualizao ou excluso.

e-Tec Brasil

128

Programao Orientada a Objetos

10.2 Insero de dados


A Figura 10.2 ilustra como pode ser feita a insero de dados na tabela filme.

Figura 10.2: Exemplo de insero de dados


Fonte: Elaborada pelos autores

Note que utilizamos a classe MySQLNativeDriver para obter uma conexo com o banco de dados. Em seguida, montamos o nosso comando INSERT (varivel sql). As interrogaes so os locais onde sero inseridos os valores a serem atribudos aos campos em nosso INSERT. Esses valores sero inseridos no comando INSERT pelo mtodo pstmt.setString posicionalmente a cada interrogao (1 para a primeira interrogao, 2 para a segunda, e assim sucessivamente). Para entender o funcionamento desse cdigo fundamental conhecer a sintaxe do comando INSERT da linguagem SQL que foi estudada na disciplina Banco de Dados. Finalmente, o comando pstmt.executeUpdate() efetua a insero dos dados no banco de dados. Note que o cdigo est envolto por uma clusula try...catch de forma que caso ocorra algum erro na insero, ser disparada uma exceo do tipo SQLException que ser tratada pelo seu respectivo catch, que, nesse caso, basicamente ir apresentar uma mensagem de erro.

No caso do nosso exemplo, informamos valores fixos para cada uma das colunas da nossa tabela o que no muito til e serve apenas para ilustrar e para facilitar o entendimento. Normalmente, teremos uma interface grfica na qual o usurio informar o valor desejado para cada campo e clicar em um boto. Nesse caso, o evento de clicar no boto dever disparar um mtodo que ter cdigo muito parecido com o mtodo main do nosso exemplo mas, no lugar dos valores fixos que inserimos em cada campo, buscaremos o valor que o usurio preencheu em cada campo da interface grfica. Por exemplo, suponha que tenhamos na interface um JTextField de nome nomeFilme no qual o usurio dever digitar o nome do filme. Assim, no lugar do comando pstmt.setString(1, Jogos Mortais); do exemplo teramos o comando pstmt.setString(1, nomeFilme.getText());.

Aula 10 Integrao com Banco de Dados parte II

129

e-Tec Brasil

10.3 Atualizao de dados


A atualizao de dados ocorre de forma semelhante insero. A Figura 10.3 ilustra como pode ser feita a atualizao de dados.

Figura 10.3: Exemplo de atualizao de dados


Fonte: Elaborada pelos autores

Para entender o funcionamento desse cdigo, fundamental conhecer a sintaxe do comando UPDATE da linguagem SQL que foi estudada na disciplina Banco de Dados. Assim como no exemplo de insero de dados, a classe MySQLNativeDriver serve para obter uma conexo com o banco. Em seguida montamos uma String com o nosso comando SQL UPDATE. Note que, tambm a exemplo do que ocorreu na insero, nos lugares dos valores a serem atribudos aos campos das tabelas foram colocadas interrogaes. Note que o campo cdigo foi utilizado na clusula where do seu comando SQL a fim de selecionar o registro desejado para a alterao.

Aqui tambm importante notar que, em uma aplicao comercial, os valores a serem utilizados no UPDATE no sero fixos e sim obtidos a partir de alguma entrada, normalmente, uma interface grfica. Alm disso, antes de uma atualizao, normalmente, ocorre uma consulta a fim de que os dados sejam apresentado para que ento o usurio os atualize.

e-Tec Brasil

130

Programao Orientada a Objetos

10.4 Excluso de dados


O cdigo para executar uma excluso de dados ainda mais simples que os cdigos para atualizao e para insero de dados. A Figura 10.4 ilustra como pode ser feita a atualizao de dados.

Figura 10.4: Exemplo de excluso de dados


Fonte: Elaborada pelos autores

Assim como nos exemplos anteriores, a classe MySQLNativeDriver serve para obter uma conexo com o banco. Para entender o funcionamento desse cdigo, fundamental conhecer a sintaxe do comando DELETE da linguagem SQL que foi estudada na disciplina Banco de Dados. Note que na montagem do comando DELETE foi utilizada apenas uma interrogao. Isso se deve ao fato de que para excluir um registro basta que tenhamos o valor de sua chave primria, que no caso da nossa tabela filme a coluna codigo.

Assim como aconteceu na incluso e na alterao de dados, esse exemplo apenas ilustrativo e tem foco nas classes e mtodos a serem utilizados. Obviamente, que em uma aplicao comercial o cdigo do elemento a ser excludo seria informado pelo usurio. Normalmente, feita uma consulta, os dados so apresentado e s ento o usurio pode optar por solicitar a excluso do registro apresentado.

Aula 10 Integrao com Banco de Dados parte II

131

e-Tec Brasil

Resumo
Nesta aula demos sequncia aos estudos iniciados na aula anterior sobre acesso a bancos de dados pelas aplicaes em Java. Aprendemos a inserir, atualizar e excluir dados em bancos de dados. Vimos que, para isso, precisamos utilizar comandos SQL aprendidos na disciplina Bancos de Dados.

Atividades de aprendizagem
1. Crie uma tabela ContaEspecial em um banco de dados. Altere o programa criado no exerccio 1 da aula 7 de forma que ao invs de armazenar as contas em um ArrayList, os dados das contas criadas sejam inseridos nessas tabelas. 2. Faa um programa que exiba uma janela com um campo de texto nmero da conta, um boto Consultar e um boto Excluir. A janela deve ser exibida com o boto Excluir desabilitado. O usurio deve informar o nmero da conta desejada e clicar no boto consultar. Ento o sistema deve buscar os dados da conta desejada no banco de dados, exibir os dados na janela e o boto excluir deve ser habilitado. Se o usurio clicar ento em excluir, a conta deve ser excluda do banco e uma mensagem deve ser exibida. Se o usurio informar alterar o nmero da conta e clicar novamente em consultar, os dados da nova conta informada devem ser exibidos no lugar da anterior. (Dica: utilize um JTextField para exibir cada um dos dados da conta).

e-Tec Brasil

132

Programao Orientada a Objetos

Referncias
CADENHEAD, Rogers; LEMAY, Laura, Aprenda em 21 dias Java 2. 4. ed. So Paulo: Campus, 2005. DEITEL, Harvey M.; DEITEL, Paul J. Java: como programar. 8. ed. So Paulo: Pearson/ Prentice-Hall, 2010. FUGIERI, Srgio. Java 2 Ensino Didtico. 6 Edio. So Paulo: rica, 2006. PAMPLONA, Vitor Fernando. Tutorial Java: o que Java?Disponvel em: <http:// javafree.uol.com.br/artigo/871498/Tutorial-Java-O-que-e-Java.html>. Acesso em: 12 out. 2011. PAMPLONA, Vitor Fernando. Tutorial Java 2<BOLD>: caractersticas bsicas. Disponvel em: <http://javafree.uol.com.br/artigo/871496/Tutorial-Java-2-CaracteristicasBasicas.html>. Acesso em: 12 out. 2011. PAMPLONA, Vitor Fernando. Tutorial Java 3: orientao a objetos. Disponvel em: <http://javafree.uol.com.br/artigo/871497/Tutorial-Java-3-Orientacao-a-Objetos.html>. Acesso em: 12 out.2011.

Referncias

133

e-Tec Brasil

Currculo dos professores-autores


Victorio Albani Tcnico em Processamento de Dados pela Escola Tcnica Federal do Esprito Santo (1998), graduado em Cincia da Computao pela UFES (2003) e mestre em Informtica pela UFES (2006). professor do Departamento de Informtica do Instituto Federal de Educao, Cincia e Tecnologia do Esprito Santo Campus Colatina, onde trabalha com os cursos Tcnico em Informtica, na modalidade presencial e a distncia, e Superior de Tecnologia em Redes de Computadores. Antes de ingressar no IFES, atuou em vrias empresas pblicas e privadas, dentre as quais se destacam Xerox, Unisys e Cesan, sempre exercendo funes relacionadas ao processo de desenvolvimento de software, como programador, analista/projetista de sistemas e lder de equipe de desenvolvimento. Giovany Frossard Teixeira Graduado em Cincia da Computao (2004) e mestre em Informtica (2006) pela Universidade Federal do Esprito Santo. Atualmente professor do Instituto Federal de Educao, Cincia e Tecnologia do Esprito Santo Campus Colatina, nos cursos Tcnico em Informtica, Tecnlogo em Redes de Computadores e Bacharel em Sistemas de Informao. Tem experincia na rea de Cincia da Computao, com nfase em Linguagens de Programao, Otimizao e Software Bsico.

e-Tec Brasil

134

Programao Orientada a Objetos