Sie sind auf Seite 1von 165

PROGRAMAO APLICADA JAVA

EDIO N 1 - 2007

LARCIO DA CRUZ LOUREIRO

SOCIESC Sociedade Educacional de Santa Catarina

Apresentao

Este livro didtico contm a disciplina de Programao Aplicada em Java. A programao em Java um assunto muito rico, com centenas de livros j publicados, em vrios idiomas, desde o seu lanamento. Este material foi elaborado para que voc conhea as propostas tecnolgicas da plataforma Java e obter sua primeira experincia com a linguagem de programao. Voc ver que a convergncia dos assuntos que voc estudou at agora, iro ser aplicados nas prximas pginas, principalmente sobre a programao orientada a objetos, mtodo utilizado para o desenvolvimento de sistemas usando Java. O mtodo de estudo para este material evolutivo, onde a medida que voc ir avanando nos estudos, as informaes iro complementando as concluses do tpico anterior. Diante do grande volume de informaes e das infinitas possibilidades da plataforma Java, este material procura apresentar os aspectos mais relevantes para o seu incio na construo de aplicaes em Java. Mas com certeza, no esgota o assunto. importante ressaltar que o livro foi desenvolvido com o objetivo de oferecer um aprendizado independente, que est inerente aos estudos do EAD, e o contedo foi revisado com o intuito de oferecer uma linguagem simples, objetiva e estimulante. Lembre-se que a sua passagem por esta disciplina ser tambm acompanhada pelo Sistema de Ensino Tupy Virtual, seja por correio postal, fax, telefone, e-mail ou Ambiente Virtual de Aprendizagem. Sempre entre em contato conosco quando surgir alguma dvida ou dificuldade. Toda a equipe ter a maior alegria em atend-lo, pois a sua aquisio de conhecimento nessa jornada o nosso maior objetivo. Acredite no seu sucesso e bons momentos de estudo! Equipe Tupy Virtual.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

SUMRIO

APRESENTAO....................................................................................2 CRONOGRAMA DE ESTUDO.................................................................6 AULA 1 - CONHECENDO A PLATAFORMA JAVA ...............................8 AULA 2 - SINTAXE, DADOS E OOP EM JAVA....................................30 AULA 3 - ESTRUTURAS DE PROGRAMAO...................................62 AULA 4 - HERANA..............................................................................83 AULA 5 - USANDO SWING E CRIANDO APPLETS ............................93 AULA 6 - TRABALHANDO COM OBJETOS ......................................118 AULA 7 - JAVA COM BANCO DE DADOS ........................................140

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

Carta do Professor

O Java pode estar supervalorizada, mas ela tambm poder ser to significativa para o mundo da computao, como a televiso foi para a comunicao em massa. (U.S. News and World Report, 1995)

Caro aluno, Java um dos assuntos mais instigantes no mundo da programao de computadores. Surgida na dcada de 90 ela j nasceu com uma curiosidade (e at hoje nunca confirmada): a palavra Java vm da marca de caf que os programadores tomavam quando iniciaram o seu projeto, que algumas verses na Internet afirmam que era na verdade o nome da cafeteria prxima do escritrio de trabalho da equipe. Nada surpreendente, pois j dizem os praticantes da velha arte da programao de computadores: o combustvel para os profissionais manterem altas horas de produo era (e talvez ainda seja) o caf. A linguagem Java nasceu com outra curiosidade ainda mais forte: ela havia sido criada para programar eletrodomsticos, pois em 1990 a Sun, desenvolvedora do projeto, tinha a inteno em fabricar eletrnica de consumo com algumas capacidades extras. Ento, veja prezado aluno, com esta primeira percepo que eu desejo lhe motivar. A linguagem Java um assunto que desde de seu projeto, polmico e influencia os profissionais da Tecnologia da Informao , no mnimo, refletir sobre suas possibilidades. Em apenas alguns meses, o Java saiu dos laboratrios de pesquisa e desenvolvimento da Sun para o centro da era da World Wide Web. Foi a linguagem certa, no momento certo, com a tecnologia certa. De todas as tecnologias e recursos oferecidos pela linguagem Java, talvez a sua caracterstica mais importante a portabilidade. A Internet e seu servio WWW ofereciam um mundo de possibilidades e a portabilidade era o elemento que o Java oferecia para que as aplicaes pudessem explorar este novo ambiente para se fazer negcios. Alm Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

disso, como a linguagem Java foi construda com base nas famosas e largamente utilizadas linguagens C e C++, ela arregimentou um grande exrcito de programadores. Para fechar, ela explorou de forma nativa a programao orientada a objetos, que at ento era um mtodo exclusivo de linguagens pouco absorvidas, como o Smalltalk. Aprender a programar em Java hoje muito mais fcil. A verso atual da linguagem est muito poderosa. H um grande nmero de ambientes de programao para auxiliar o programador no trabalho com a linguagem e o grande volume de informaes na Internet sobre o tema, favorecem um aprendizado mais rpido, sem contudo deixar de ser uma experincia profissional das mais procuradas da atualidade. Cabe aqui ainda destacar, que a Sun criou o Java com uma mentalidade totalmente nova sobre o licenciamento e uso. Todo o entorno da tecnologia foi transformado em especificao e publicada na Internet, e agora mantida por um comit chamado Java Community Process (JCP), que rene profissionais de renome em Java e a prpria Sun, seguindo um modelo demoncrtico para a conduo da melhorias das tecnologias. Ento, com este clima de atualidade e de grande potencial de crescimento que lhe convido para mais esta aventura do conhecimento na informtica. Desejo a voc um estudo rico e cheio de surpresas positivas, j que voc estar adentrando em um grande mundo de tecnologias, servios, recursos e possibilidades de negcios, que o Java oferece a todos. Bom estudo! Professor Larcio da Cruz Loureiro

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

Cronograma de Estudo
Acompanhe no cronograma abaixo os contedos das aulas, e atualize as possveis datas de realizao de aprendizagem e avaliaes. Semana
1

Carga horria
6

Aula
Conhecendo a Plataforma Java

Data / Avaliao
_/_ a _/_

18

Sintaxe, dados e OOP

_/_ a _/_

24

Estruturas de Progamao

_/_ a _/_

12

Herana

_/_ a _/_

16 Usando Swing e criando 4 16 Applets

_/_ a _/_

_/_ a _/_ 5 14 Trabalhando com Objetos

16

Java com Banco de Dados

_/_ a _/_

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

Plano de Estudo
Ementa

Objetivos da Disciplina

Geral
o Implementar os princpios da orientao a objetos usando a linguagem Java e aprender como implementar aplicaes Java usando os principais recursos da plataforma. Especficos o Descrever os componentes da plataforma Java; o Construir programas orientados a objetos usando a linguagem Java; o Conhecer e desenvolver programas usando a sintaxe de comandos da linguagem Java; o Aprender a utilizar recursos de banco de dados em Java.

Carga Horria: 120 horas

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

Aula 1

CONHECENDO A PLATAFORMA JAVA

OBJETIVOS DA AULA

Compreender os objetivos da plataforma Java; Conhecer variaes; Saber diferenciar os tipos de programas Java; Aprender como identificar qual a verso do Java a ser utilizada em determinadas aplicaes; Obter o conhecimento em como preparar um computador para o desenvolvimento em Java. os componentes da plataforma e suas

CONTEDO DA AULA Acompanhe os assuntos desta aula, se preferir, aps o seu trmino, assinale o contedo j estudado. A plataforma Java; O ambiente Java; Tipos de programas; As verses do Java; Instalando o ambiente para programao.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

Prezado aluno, Tm um ditado nos Estados Unidos assim: Voc precisa comer antes de cozinhar. Voc precisa ouvir antes de ver. Voc precisa viajar antes de dirigir. E voc precisa executar programas em um computador, antes de programar. Este o objetivo desta aula. Voc ver como a plataforma Java foi construda para executar programas e quais os componentes disponveis na plataforma, que ajudam o programador na elaborao de solues de tecnologia. Voc tambm aprender como instalar o Java para programao, como tambm, a instalao necessria para execuo de programas feitos em Java. Finalmente, voc conhecer as vrias verses que o Java possui e os direcionamentos tecnolgicos que a plataforma est seguindo. Boa Aula!

1.1 A PLATAFORMA JAVA

A tecnologia Java foi desenvolvida pela Sun Microsystems para que fosse uma linguagem de programao orientada a objetos, como tambm, uma plataforma de desenvolvimento. Uma plataforma um ambiente de hardware e software no qual um programa executado. Algumas das plataformas mais populares so o Windows, Linux, Solaris e o Macintosh. Algumas das plataformas existentes podem ser descritas como uma combinao de sistema operacional com hardware. A plataforma Java difere da maioria das plataformas de mercado, pois ela se posiciona como uma plataforma apenas de software, que executada SOBRE as plataformas baseadas em hardware. A tecnologia Java pode ser utilizada para a construo de sistemas convencionais de negcios, como tambm, para o desenvolvimento de sistemas bseados na Internet. Algumas das vantagens que a linguagem de programao Java

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

10

oferece aos programadores destes dois tipos de aplicaes a sua segurana e a sua capacidade de ser independente de arquitetura, o que significa permitir ao programador a capacidade de construir programas em Java que executados em qualquer plataforma ou sistema operacional. A plataforma Java possui dois componentes: A Java Application Programming Interface (API), uma grande coleo de componentes de software prontos para uso que fornecem capacidades importantes para reuso. A API Java organizada em bibliotecas de classes e interfaces relacionadas. Estas bibliotecas so conhecidas como packages (pacotes java.*, javax.* e extenses); A Java Virtual Machine (JVM), a base da plataforma Java, utilizada para a execuo dos programas escritos e compilados em Java. Foi construda para vrias plataformas de hardware e software do mercado. podero ser

1.2 O AMBIENTE JAVA

Um programa Java pode ser executado em vrios tipos de computadores por que ele no executa instrues diretamente no computador. Na verdade, executa o programa em um computador virtual conhecido como Java Virtual Machine (JVM). Voc pode escrever um programa Java usando qualquer editor de textos. O arquivo contendo as instrues de programao em Java tambm conhecido como cdigo-fonte. O compilador Java converte o cdigo-fonte um tipo de arquivo chamado bytecode, que independente de plataforma. Um programa chamado Interpretador Java verifica o bytecode e executa as instrues do bytecode, linha a linha, dentro da JVM. Considerando que o programa Java executa de forma isolada do sistema operacional, permite que possa ser executado em qualquer computador que possua uma verso JVM. Desta forma, com a JVM sendo a responsvel pela execuo do programa, recursos de segurana so disponibilizados para o programador, que esto acima das fragilidades que possam existir no sistema operacional.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

11

Figura 1 O ambiente Java (JRE Java Runtime Environment) Ao contrrio do Java, o uso de outras linguagens de programao, os fornecedores de software precisam ter diferentes verses do programa para cada plataforma que deseja execut-lo. No Java uma nica verso do programa executada em todas as plataformas. O Bytecode Java permite que se realize a promessa de escrever uma vez e executar em qualquer lugar. Voc pode compilar seu programa em bytecode para qualquer plataforma que possua um compilador Java. Ento o bytecode poder ser executado em qualquer implementao da JVM. Isso significa que um programa construdo em Windows, ter o mesmo comportamento em Linux, em Unix e etc.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

12

Figura 2 O mtodo Java escrever uma vez, executar vrias vezes Alm disso, duas tecnologias de implementao fazem parte do JRE: Java Plug-in, a qual permite que applets sejam executados nos navegadores para a Internet, e o Java Web Start, que permite a instalao de aplicaes stand alone atravs de uma rede.

1.3 TIPOS DE PROGRAMAS

Trs tipos de programas podem ser construdos usando Java: Aplicaes, que so executadas em uma JVM instalada no sistema operacional do computador local; Applets, que so executadas atravs de uma JVM no navegador, usando um plug-in; Servlets, so aplicaes executadas em uma JVM instalada em um servidor Web.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

13

Enquanto os applets e as aplicaes so usualmente um tipo de interface grfica com o usurio e um conjunto de funcionalidades embutidas, os servlets fornecem funcionalidades para serem consumidas por pginas Web, ou seja, atravs dos servlets o programador constri recursos a serem executados em back-end no servidor Web. Desta forma, a interface com o usurio de um servlet normalmente uma pgina HTML com um formulrio, a qual chama o servlet. Mas tambm importante observar que um applet ou uma aplicao Java, que so executadas atravs de HTTP (Hypertext Transfer Protocol) podem chamar um servlet. As aplicaes Java podem ser subdivididas em: Aplicaes Console: so as aplicaes com o foco em apresentao e interface com o usurio atravs apenas de caracteres, por exemplo no Windows, so executadas em uma sesso do Prompt do MS-DOS; Aplicaes grficas com Janelas: possuem uma interface grfica com elementos visuais, como por exemplo menus, barras de ferramentas e caixas de dilogo.

Figura 3 Os tipos de aplicaes Java

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

14

1.4 AS VERSES DO JAVA

Desde 1995 a Sun vm lanando vrias verses do Java que resultado das melhorias tecnolgicas e inovaes recebidas por profissionais do mundo todo, e tambm como consequncia de sua larga adoo. Java 2 Platform Standard Edition (J2SE): o kit necessrio para o desenvolvimento de todas as aplicaes em Java, exceto aquelas desenhadas para dispositivos de consumo. O J2SE j vm com um compilador, o ambiente de execuo e as APIs principais do ncleo da plataforma Java; Java 2 Platform Enterprise Edition (J2EE): este pacote inclui um servidor de aplicaes, um servidor Web, APIs especficas para a J2EE, suporte Enterprise JavaBeans, Java Servlets API e a tecnologia Java Server Pages (JSP). O J2EE utiliza o J2SE; Java Server Pages Development Kit (JSWDK): se voc est interessado em construir e testar pginas JavaServer ou servlets, este kit fornece os componentes fundamentais para execuo, incluindo o J2SE. Mas se voc estiver trabalhando com JavaBeans, ser necessria a instalao do J2EE; Java Platform, Micro Edition (J2ME): direcionada para os

programadores que esto construindo programas para dispositivos mveis como Palm Pilots, celulares e dispositivos de consumo, este kit fornece as ferramentas para a compilao, disponibilizao e configuraes de dispositivos, incluindo as APIs especficas para cada tipo de dispositivo. A J2SE oferece um ambiente completo para suportar o desenvolvimento de sistemas, inclusive para desktop e servidores e ela a base para todas as demais plataformas, como a J2EE.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

15

A plataforma J2SE verso 1.6 est distribuda em blocos que determinam sua especialidade e recursos, de acordo com a necessidade do programador. Uma viso clara sobre os componentes da plataforma est na imagem seguinte:

Figura 4 A plataforma J2SE A verso do Java 1.0 lanada em 1995 forneceu a estrutura bsica para o desenvolvimento de programas, basicamente as bibliotecas necessrias para escrever e compilar programas simples. A verso 1.1 do Java incorporou grandes avanos, lanada em 1997, com sua maior implementao para uma interface grgica (GUI) usando um pacote de bibliotecas (package) chamada AWT. Sua abordagem usando AWT foi uma grande evoluo nas interfaces grficas, j que suportava Netscape e Internet Explorer com o mesmo cdigo. Tambm nesta verso foram lanados recursos para auxiliar na construo de programas com acesso a banco de dados (JDBC) e a comunicao em rede (RMI). O Java 2.0 lanado em 1998, na verdade internamente considerada como verso 1.2 do JDK. O principal objetivo de batiz-la como 2.0 para amplificar as mudanas significativas que ocorreram na plataforma, onde esta verso agregou mais de 500 novas classes, o dobro da verso anterior. Tambm nesta verso,

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

16

novas adies foram incorporadas plataforma, trazendo cada vez mais a abordagem de uso de plu-ins linguagem. Uma nova capacidade de criao usando interfaces grficas foi liberada, chamada SWING. As verses da J2SE comearam a ser lanadas, estando hoje na verso 6 (J2SE 1.6). O site oficial da plataforma Java e para obter maiores informaes sobre as verses esto no seguinte endereo: http://java.sun.com

1.5 INSTALANDO O AMBIENTE PARA PROGRAMAO

Antes de voc iniciar os trabalhos de programao, necessrio preparar o seu computador para permitir que os programas sejam interpretados e compilados. Conforme j foi tratado anteriormente, a linguagem Java no exige que o programador utilize uma ferramenta particular para a construo de seus programas em Java. Na verdade a linguagem nasceu com um apelo de uso livre, ou seja, incentivar o programador a escolher qual a melhor forma que deseja trabalhar, e com isto quebrando paradigmas de algumas linguagens que demonstravam uma amarrao um ambiente de produo, o que era comercialmente aceitvel. Historicamente, as linguagens compiladas no exigem necessariamente uma ferramenta para construir programas, mas a sua adoo facilita o trabalho do programador e aumenta a sua produtividade. Por isto surgiram as IDEs (acronismo de Integrated Development

Environment, ou Ambiente de Desenvolvimento Integrado) com o objetivo de auxiliar o programador na construo dos sistemas e acelerando o processo de construo, integrando em um nico lugar, todos os recursos necessrios para a composio de uma aplicao em Java. Neste sentido, como a especificao Java busca estabelecer, vrios fabricantes de software liberaram suas verses de IDE, sendo algumas muito conhecidas, como a Borland, a IBM e a Oracle. Mas outras iniciativas surgiram, de forma gratuita atravs do modelo de software livre, para atender aos programadores Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

17

que desejavam manter uma linha de iniciativa sem custos. O produto gratuito mais utilizado no mundo Java o Eclipse (www.eclipse.org).

Figura 5 O ambiente do Eclipse

Segundo o resultado do Java IDE Market Survey (http://www.qasystems.com/products/qstudioforjava/ide_marketshare.html), o Eclipse permanece como o lder de mercado de IDE para Java.

Figura 6 Resultados da Pesquisa

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

18

importante ainda ressaltar que o grau de maturidade destas ferramentas fez com que elas no ficassem exclusivas para uma determinada linguagem, como o caso do Eclipse, que permite a construo de programas usando linguagem C++ e Java. Mas outro aspecto comeou a incomodar a comunidade Java: a medida que as IDEs ficavam poderosas, maior era a capacidade exigida de processamento e recursos do computador, gerando um certo desconforto para os profissionais. Esta situao gerou uma nova onde de IDEs alternativos com finalidades especficas e com o objetivo de oferecer ambientes equivalentes a cada condio do profissional. Neste curso estaremos utilizando um IDE muito simples chamado Jcreator (www.jcreator.com). Para que voc possa construir programas usando o Jcreator, primeiramente voc precisa efetuar a instalao do JDK (Java Development Kit) da Sun. O JDK o pacote que fornece todas as bibliotecas principais da linguagem, o compilador e o ambiente de execuo de aplicaes, ou runtime, que conhecido como JRE (Java Runtime Environment). Para apenas executar aplicaes, somente o JRE necessrio. Em hardware Intel, o Java 2 SDK suporta as seguintes plataformas: Windows 98, Windows NT 4.0, Windows ME, Windows XP, Windows 2000 e 2003. A verso 6 j suporta Windows Vista. A documentao da plataforma sugere que a um hardware com processador Pentium 166 Mhz e 32 Mbytes de RAM so suficientes para executar aplicaes com interfaces grficas. Alm disso, recomenda-se 48 Mbytes de RAM para a execuo de applets a serem executados em navegadores. So necessrios 120 Mbytes de disco rgido para a instalao do SDK. Efeute o download do SDK correspondente sua plataforma no seguinte endereo oficial da Sun: https://sdlc1a.sun.com/ECom/EComActionServlet;jsessionid=3F79837846CC 3A56F4F03527F746C218

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

19

Figura 6 Pgina de download do JDK Aps a concluso do download, execute os seguintes passos: 1. Verifique se o arquivo baixado corresponde corretamente ao tamanho do arquivo informado na pgina ( aproximadamente 50 Mbytes);

Figura 7 Tamanho do arquivo de instalao do JDK 2. Desinstale uma verso anterior do JDK; 3. Execute o programa de instalao, efetuando um duplo clique sobre o arquivo baixado. importante lembrar, que nas verses do Windows XP, NT, 2000, 2003 e Vista, voc precisa ter privilgios como administrador para realizar a instalao; a. O programa de instalao quando executado, apresentada um assistente de instalao, que auxilia o usurio no processo de configurao do JDK no computador. uma abordagem que facilita para o usurio iniciante; b. A primeira tela solicita a sua concordncia com os termos do contrato de licena de uso;

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

20

c. A segunda tela, lhe permite determinar quais os componentes do JDK voc deseja instalar. comum para o JDK, instalar todos os seus componentes; d. Aps ter determinado os componentes a instalar, o programa de instalao iniciar a cpia dos arquivos do JDK para o computador; e. Ao terminar a instalao ser apresentada uma janela de confirmao de que o processo est concludo:

Figura 8 Janela de concluso da instalao 4. Verifique a pasta de instalao do JDK. A instalao criar duas subpastas na pasta Arquivos de Programas do Windows: jdk1.6.0_01 e jre1.6.0_01; 5. Definindo a varivel PATH no Windows XP; Voc pode desenvolver em Java sem preocupar-se com a varivel de ambiente PATH do Windows. Mas se voc deseja ter um ambiente mais conveniente para trabalhar, voc pode determinar o caminho aonde esto as bibliotecas e o compilador do Java. a. Para configurar a varivel no Windows, acesse a janela de propriedades do con Meu Computador ou atravs do Painel de Controle; b. Acesse a guia Avanado;

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

21

c. Clique no boto variveis de ambiente;

Figura 9 Janela de variveis de ambiente d. Localize no grupo inferior de variveis (Variveis do sistema) a palavra TEMP e efetue um duplo clique sobre ela. Esta varivel determinar aonde est o compilador, a mquina virtual (JVM) e os demais utilitrios da plataforma Java; e. Digite ao final do texto j existente na varivel:
;C:\Arquivos de programas\Java\jdk1.6.0_01\bin

Lembre-se que a pasta Arquivos de Programas pode alterar de acordo com o idioma do Windows e a instruo inicia com o sinal de ponto-e-vrgula, para separar a instruo atual da instruo j existente na varivel.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

22

Figura 10 Varivel PATH f. Clique no boto OK; g. Repita os passos para a varivel CLASSPATH, mas o contedo que dever ser adicionado :
;.

h. Feche todas as janelas. Agora que o JDK est instalado e configurado, vamos instalar o JCreator LE, que a ferramenta IDE que vamos utilizar neste curso. Efetue o download do arquivo do site do fabricante (http://www.jcreator.com/download.htm).

Figura 11 Pgina de download do Jcreator LE Repare que existem vrias verses do produto e a que vamos utilizar freeware, ou seja, podemos utilizar a ferramenta sem pagarmos nada e podemos inclusive replicar o produto para outras pessoas. Aps baixar o arquivo, execute-o para entrar no programa de instalao. O processo de instalao da ferramenta o mesmo das demais aplicaes para

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

23

Windows, usando um assistente de instalao. Siga os passos do programa para conduzir a instalao do JCreator. Ao terminar o programa de instalao ir executar o JCreator LE. A primeira vez que voc executa o JCreator, aps a sua instalao, o software apresenta uma caixa de dilogo com o objetivo de determinar: 1) Associao dos tipos de arquivos especficos para o programa; 2) O Java Home Directory, que j definimos nas variveis; 3) E o JavaDoc, que a documentao da plataforma Java.

Figura 12 Configuraes iniciais do JCreator O JCreator tem por finalidade oferecer caminhos rpidos e fceis principalmente para o programador iniciante. O ambiente do produto j est orientado para esta particularidade. Quando voc inicia o programa, uma janela central apresenta a documentao das principais opes de execuo de comandos no produto. Alm disso, o produto segue os padres grficos das aplicaes Windows, com menus, janelas, barra de ferramentas e barra de status.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

24

Figura 13 Janela de incio do JCreator Vamos agora testar se realmente nosso ambiente de programao est configurado adequadamente. Vamos criar uma aplicao simples e compil-la para avaliar os resultados que teremos. 1. Clique no menu File, depois aponte para o item de menu New e no submenu apresentado, clique sobre o item File; 2. Na janela que ser apresentada, selecione a opo Java Class;

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

25

Figura 14 File Wizard 3. Clique no boto Next; 4. Na caixa Name, digite: Exemplo e clique no boto Finish; 5. Repare que ser apresentada a estrutura inicial de uma classe Java:
/** /** * @(#)Exemplo.java * * * @author * @version 1.00 2007/6/3 */

public class Exemplo {

/** * Creates a new instance of <code>Exemplo</code>. */

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

26

public Exemplo() { }

/** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here } }

6. Digite a seguinte instruo de cdigo Java na rea indicativa com o texto TODO code application logic here:
System.out.println(Exemplo de teste para o ambiente Java);

7. Clique no boto Execute da barra de ferramentas;

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

27

Figura 15 Resultados do programa

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

28

EXERCCIOS PROPOSTOS 1) Qual a principal caracterstica da linguagem Java que a diferenciou das demais linguagens na poca em foi lanada? Explique porque. ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ 2) Descreva as verses do Java e identifique qual a base para todas as outras. ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ 3) Qual a importncia do uso de um IDE para programar em Java? ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ ______________________________________________________________

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

29

SNTESE Nesta aula voc aprendeu o que a plataforma Java, sua importncia e seus componentes. Agora voc j consegue identificar quais as verses do Java e como cada uma de suas verses esto orientadas para determinadas necessidades. Voc tambm conheceu um pouco da histria da plataforma, extremamente resumida, mas que lhe oferece uma viso de como as tecnologias envolvidas chegaram at a verso atual da plataforma. Um dos aspectos relevantes que voc pde aprender entender como se iniciam os trabalhos no desenvolvimento de progamas em Java. Na verdade, uma operao simples e que a necessidade de uma ferramenta especfica em algo opcional e muito associado produtividade do que exigncia. Na prxima aula, voc comear a conhecer a linguagem Java, suas regras e padres. Ser trabalhado no seu primeiro programa em Java. At l.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

30

Aula 2

SINTAXE, DADOS E OOP EM JAVA

OBJETIVOS DA AULA

Conhecer as regras de sintaxe da linguagem; Identificar os arquivos envolvidos no processo de programao Java; Aprender a utilizar variveis, tipos de dados e operadores; Entender como os conceitos de OOP podem ser aplicados na linguagem Java.

CONTEDO DA AULA Acompanhe os assuntos desta aula, se preferir, aps o seu trmino, assinale o contedo j estudado. Sintaxe; Usando dados e variveis; Mtodos, classes e objetos.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

31

Prezado aluno, Nesta aula voc aprender os elementos bsicos da linguagem Java, especificamente suas regras de sintaxe e como um programa organizado. Voc j estou sobre Lgica de Programao e os conceitos sobre Orientao a Objetos, agora voc ir colocar em prtica os assuntos, utilizando a linguagem Java. Boa Aula!

2.1 SINTAXE

A sintaxe de uma linguagem determina a forma como os programas devem ser construdos. A linguagem Java possui um grande conjunto de regras, mas no muito diferente das demais linguagens orientadas a objetos. tambm importante observar que alguns IDEs mais avanados j facilitam na digitao das instrues, j que fornecem ajuda e auto-complementao de cdigo, de acordo com um determinado contexto. A linguagem Java quanto sua sintaxe muito similar s linguagens C e C++, mas com uma srie de melhorias e agregaes, principalmente no que se refere aos recursos orientados a objetos. A maioria dos autores consideram que o melhor caminho para aprender a sintaxe do Java avaliando um programa simples. Vamos utilizar o programa apresentado na aula anterior para testarmos o ambiente de desenvolvimento Java que configuramos.
1 /** 2 /** 3 4 5 6 * @(#)Exemplo.java * * * @author

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

32

7 8 9

* @version 1.00 2007/6/3 */

10 public class Exemplo { 11 12 13 14 15 16 17 18 19 20 21 22 Java); 23 24 } } /** * @param args the command line arguments */ public static void main(String[] args) { System.out.println(Exemplo de teste para o ambiente /** * Creates a new instance of <code>Exemplo</code>. */ public Exemplo() { }

As linhas que esto iniciadas com */ ou * ou // so comentrios e sero desconsideradas quando o compilador realizar o trabalho de gerao de cdigo compilado. Esta condio tambm aplicada para as linhas em branco no cdigo. A combinao */...*.../* permite que voc implemente comentrios em mltiplas linhas. J o uso de duas barras comuns no incio da linha, aplica a condio de comentrio apenas na linha corrente aonde as barras foram inseridas. A linha que contm public class Exemplo { determina a declarao da classe, sendo as palavras public e class reservadas e a palavra Exemplo o nome da classe que est sendo criada. As palavras reservadas da linguagem determinam que no podem ser utilizadas como identificadores em seu cdigo de programao. A lista de palavras reservadas na linguagem esto na tabela abaixo.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

33

Tabela 1 Palavras reservadas da linguagem Java O sinal de abertura de chaves, ao final da linha 10, obrigatria e determina o incio do bloco de instrues que fazem parte da classe. Todo bloco de instrues margeado por chaves. Repare que h um sinal de fechamento de chaves ao final do cdigo na linha 24. Logo em seguida, repare que a linha 15 possui uma declarao public Exemplo() {. Isto a criao de um mtodo membro da classe. Neste caso ele no possui funcionalidades, j que entre as chaves de abertura e fechamento (linha 16) no exitem qualquer instruo de cdigo em Java. Depois na linha 21 h a declarao mais importante de uma aplicao Java. Na verdade, o mtodo Main o ponto de entrada no programa, quando este executado. Alm disso, dentro de uma aplicao Java s pode haver um mtodo Main. A linha de cdigo possui uma srie de detalhes que veremos nas aulas seguintes, mas adiantando alguns detalhes:
public static void main(String[] args) {

A palavra reservada public determina um modificador de acesso. A palavra static implementa ao mtodo main a capacidade de ser acessvel mesmo que no existam objetos para a classe. Isto tambm indica que todo membro criado para a classe ir ter um mtodo idntico de main( ). Na linguagem Java, a palavra static Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

34

tambm indica unicidade, ou seja somente um mtodo main ( ) da classe poder ser armazenado na memria, mas obviamente outras classes podero ter seus prprios mtodos main ( ). A palavra void basicamente significa vazio. Quando a palavra void utilizada na declarao do mtodo main ( ), no significa que o mtodo est vazio, mas que o mtodo no retornar nenhum valor quando for chamado. Isto no significa que no poder produzir sada de dados. Na verdade, o mtodo no enviar qualquer valor de retorno para o outro ponto de cdigo que o chamou. Na verdade, nem todas as classe possuem um mtodo main ( ). Na verdade, a grande maioria no possui. Porm, todas as aplicaes Java precisam conter um mtodo main( ), j que o compilador ou a JVM ir executar primeiro o mtodo main( ) da aplicao. Finalmente, avaliando o mtodo, existem parmetros estabelecidos no mtodo main( ). O contedo entre parnteses determina os argumentos que devero ser passados para o mtodo, quando este for chamado. A palavra String representa uma classe Java que pode ser usada para representar strings de caracteres, e os smbolos de colchetes ([ ]) que acompanha a palavra, significam que a string um array. O identificador args usado para controlar qualquer valor String que sejam enviados para o mtodo Main. Esta palavra no obrigatria, mas tradicional na implementao do mtodo main( ). A linha executvel de fato no programa a correspondente ao nmero de linha 21. Seu contedo :
System.out.println(Exemplo de teste para o ambiente Java);

Note que a instruo foi finalizada com o sinal ; (ponto-e-vrgula). Todas as instrues na linguagem Java precisam terminar com ponto-e-vrgula. A frase Exemplo de teste para o ambiente Java um argumento para o parmetro do mtodo println. Todo argumento para um mtodo deve ser informado entre parnteses e quando o argumento for texto, ele dever ser informado tambm entre aspas.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

35

Argumentos so informaes que os mtodos exigem para realizar uma determinada tarefa. No caso, o mtodo Println imprime uma linha de texto na tela de sada e posiciona o curso para a prxima linha, mantendo o programa pronto para receber outras sadas. Os mtodos so sempre acompanhados de parnteses para distingui-los de nomes de variveis. A palavra out refere-se a um objeto de uma classe base do Java, que tem por finalidade apoiar as operaes de tela. No caso, o mtodo println membro do objeto out, mas outros objetos tambm podem conter um mtodo com o mesmo nome e finalidade. A palavra System uma classe. O objeto out faz parte da classe system e a classe system parte integrante no ncleo de classes do Java. Um ponto importante a observar que a linguagem Java case sensitive, ou seja, textos digitados em maisculas e minsculas so diferentes. Por isso, fundamental que voc observe as regras de digitao de determinado membro da linguagem. Finalmente, os pontos que se apresentam entre os elementos da instruo definem a hierarquia dos elementos na estrutura de classes do Java, que neste caso segue, nome da classe, ponto, nome do objeto, ponto, nome do mtodo.

2.1.1 Classes Java

Tudo que voc utiliza em Java faz parte de uma classe. Quando voc est declarando uma classe, conforme vimos no exemplo do tpico anterior, a linha public class Exemplo representa a criao de uma classe. A palavra Exemplo define o identificador da classe e precisa seguir as seguintes regras: Um nome de uma classe precisa comear com um caractere alfanumrico, smbolo de sublinhado ou o sinal de cifro; O nome da classe somente pode conter caracteres, dgitos, sublinhados e cifro; Um nome de uma classe no pode conter qualquer uma das palavras listadas como reservadas da linguagem; Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

36

Um nome de uma classe no pode ser uma das seguintes palavras: true, false ou null;

O nome de uma classe no pode conter espaos.

2.1.2 Comentrios

Como voc pde observar um simples programa Java recebe um grande nmero de linhas de cdigo. Grandes programas que executam diversas tarefas incluem um grande volume de cdigo, o que dificulta ainda mais a sua clareza. Os comentrios nos programas so instrues que voc insere no seu programa e servem para a sua documentao. Os programadores utilizam comentrios para inserir informaes relevantes sobre o que est sendo realizado nas prximas linhas ou na linha atual, facilitam a clareza do programa e ajudando-o a registrar detalhes que muitas vezes ficam apenas na cabea do programador. Como melhores prticas de mercado, colocar comentrios no incio de uma classe, descrevendo o prposito da classe, documentao sobre seus parmetros, o nome do autor e o controle de verso, so muito comuns. Alm disso, tambm como prtica comum, inserir no incio de cada membro da classe (mtodos, propriedades e eventos), tambm uma breve descrio de sua finalidade. Existem trs tipos de comentrios na linguagem Java: Comentrios de linha: iniciam com duas barras (//) e aplicam-se at o final da linha corrente. Este tipo de comentrio pode ser inserido no incio de uma linha ou na mesma linha de uma instruo, ao seu final; Comentrios de bloco: iniciam com uma barra e um asterisco (/* e finalizam com um asterisco e uma barra (*/). Um comentrio de bloco pode tambm ser utilizado em uma nica linha, mas sua aplicao correta para comentrios que envolvam vrias linhas contguas; Comentrios Javadoc: so blocos especiais de comentrios que iniciam com uma barra e dois asteriscos (/**) e finalizam com um asterisco e uma

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

37

barra (*/). Voc pode utilizar os comentrios Javadoc para gerar documentao com um utilitrio do JDK chamado javadoc. Os comentrios javadoc, quando colocado imediatamente antes de uma declarao (de uma funo ou varivel), indica que o comentrio poderr ser includo automaticamente em uma pgina HTML (gerado pelo comando javadoc). No contedo dos comentrios javadoc, voc pode utilizar descritores, que fornecem uma informao automtica durante a gerao da documentao.

Tabela 2 Exemplos de descritores javadoc Para criar a documentao de um programa Java, usando os comentrios javadoc, utilize o utilitrio javadoc que est incluindo no pacote JDK do Java. O comando poderia ser assim:
javadoc arquivo.java, arquivo2.java

Exemplos de comentrios:
// Exemplo de comentrio de uma linha System.out.println(Teste); //Exemplo de comentrio de linha

/* Exemplo de comentrio de bloco

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

38

*/

/** * Programa para exemplificar o javadoc. */ public class HelloInternet { /** * Mtodo <code>main</code>. Determina o incio da execuo. * @param args Recebe um array de elementos do tipo String que * */ public static void main (String args[]) { System.out.println("Hello Internet!"); } } ser passado na linha de comando.

2.1.3 Executando um programa e conhecendo os arquivos da aplicao

Quando voc salva um arquivo de classe Java, ele deve possuir a extenso java. Este o arquivo que dever ser compilado usando o utilitrio de compilao do J2SE, javac. Caso a compilao ocorrer sem erros, um novo arquivo ser gerado com a extenso class, que o bytecode do seu programa. O utilitrio de execuo de programas, ou runtime, do J2SE o java e para executar o seu programa, simplesmente digite java nome-do-arquivo.class. Toda a operao acima realizada em segundo plano por uma ferramenta IDE, como o caso do JCreator. Quando voc solicita ao JCreator para executar o programa, ele realiza as operaes automaticamente usando os utilitrios do J2SE instalados no computador. Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

39

Um arquivo bytecode o formato binrio que a JVM interpreta e converte para o cdigo de mquina da plataforma corrente, aonde o programa est sendo executado. Um bytecode contm instrues para a mquina virtual e uma tabela de smbolos, e outras informaes especficas para execuo do programa.

2.1.4 Depurando um programa Se voc insere instrues com erros de sintaxe em seu programa, o compilador Java ir apresentar uma mensagem de erro durante o processo de compilao e no far a gerao do bytecode correspondente. A mensagem de erro depende da origem do problema que est gerando-a e o responsvel pela validao e apresentao da mensagem o compilador Java. O compilador detecta que houve uma violao das regras da linguagem e recusa a traduo para o bytecode. Aps voc entender e corrigir o problema indicado pelo compilador, voc dever realizar uma nova tentativa de compilao.

Figura 16 Ciclo de desenvolvimento

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

40

Mas tambm existem os tipos de erros de lgica. Esses tipos no apresentam erros pelo compilador, j que as regras de sintaxe foram atendidas. O problema somente ser apresentado quando o usurio testar a aplicao e o resultado apresentado no esperado. Este tipo de erro de lgica o mais difcil de estabilizar, j que o compilador no pode nos ajudar neste tipo de problema. neste contexto que novamente refora-se a necessidade do uso de uma ferramente IDE. Primeiro porque na maioria delas, h um validador de cdigo durante a digitao do seu programa, lhe indicando quando existe uma quebra de regra da linguagem, e liberando o programador do mtodo tentativa e erro de compilar e testar o programa.

2.2 USANDO DADOS E VARIVEIS

Os dados podem ser categorizados em variveis e constantes. Uma constante quando no se pode alterar o contedo de uma varivel, depois que o programa foi compilado. J uma varivel permite ser alterada dinamicamente, quando o progama est em execuo. Este assunto j foi bastante trabalhado em Lgica de Programao. Como voc j aprendeu as variveis so reas de memria nomeadas que seu programa pode utilizar para armazenar informaes. Voc aplica nomes s variveis em Java, usando as mesmas regras usadas para identificadores de classes. As variveis precisam comear com uma letra e no pode-se utilizar uma palavra reservada da linguagem. Em Java obrigatrio a declarao de todas as variveis que sero utilizadas em seu programa. A declarao de uma varivel em Java inclui:

O tipo de dados que identificar qual o tipo de informao ser armazenada na varivel;

Um identificador como nome da varivel;

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

41

Um valor opcional de atribuio, quando voc deseja que uma varivel j possua um valor inicial;

O sinal de ponto-e-vrgula ao final da linha de declarao.

A linguagem Java no exige padronizao de nomes de classes e variveis, porm, h convenes para a forma de nome-los de maneira que outros programadores tenham maior facilidade em entender o sistema. Vejamos algumas delas:

O nome de classes deve comear com letra maiscula (por exemplo: class Banco);

O nome de mtodos, atributos e variveis deve comear sempre com letra minscula (por exemplo: comprar( ));

O nome de constantes deve utilizar todas as letras maisculas; Utilizar nomes compostos para melhorar a clareza dos nomes, por exemplo, MeuCarrinhoCompras;

As variveis locais devero utilizar a primeira letra referente ao tipo primitivo de dados que est sendo utilizado, por exemplo, byte b, char c, e etc.) e as palavras subsequentes usando nomes compostos.

Sintaxe para a declarao de variveis:


[Tipo de Dados] Nome da varivel = [Valor Inicial];

A declarao de uma varivel sem valor inicial :


int TempoCompra;

E a declarao da varivel com valor inicial :


int TempoCompra = 25;

H tambm a declarao de mltiplas variveis, que neste caso pode-se agrupar variveis do mesmo tipo em uma nica declarao.
int TempoCompra = 25, Identificador = 1;

Se voc desejar declarar variveis de tipos diferentes, obrigatrio utilizar uma instruo para cada declarao.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

42

int TempoCompra = 25; double ResultadoCalculo;

2.2.1 Constantes Constante uma varavel com valor fixo, que no se altera durante a execuo do programa. Por isso, toda constante quando declarada, precisa receber imediatamente um valor no cdigo de programao, caso contrrio ela nunca recebera um valor durante a execuo do programa. Para declarar uma constante utilize a palavra reservada final na seguinte sintaxe:
static [Tipo de Dados] final Nome da varivel = [Valor];

2.2.2 Tipos de dados Como vimos anteriormente, o uso de variveis e constantes precisa ser acompanhado do uso do tipo de dados que ser armazenado. O compilador Java fornecer oito tipos de dados NATIVOS, que ficam automaticamente disponveis para o programador, sem a necessidade de realizar qualquer parametrizao para utilizlos. So eles: int: usado para armazenar nmeros inteiros. Quando atribuir valores no utilizar aspas e pode utilizar o sinal de menos para especificar nmeros negativos; byte, short e long: so variaes do tipo de dados inteiro. Os tipos byte e short so utilizados quando h conhecimento claro dos limites menores que devero ser utilizados e com isto, h capacidade de reduo do consumo de memria. J o tipo de dados long usado quando h conhecimento do tamanho maior dos dados que podero ser

armazenados, e com isto, ocupando maior espao na memria; boolean: o tipo de dados booleano, como o prprio nome descreve, somente pode armazenar os valores verdadeiro ou falso. Seu uso comum nos momentos do programa que se precisa realizar algum teste condicional e este deve ser armazenado para futuro uso; Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

43

float e double: estes tipos de dados so relacionados a manter o armazenamento de valores de ponto flutuante, incluindo quatro valores especiais: infinito positivo, infinito negativo, zero negativo e valores not-anumber (NaN). So valores que contm posies decimais. O float possui a capacidade de preciso de 6 a 7 dgitos, enquanto o double permite a preciso de 14 a 15 dgitos;

char: este tipo de dados permite o armazenamento de caracteres no padro Unicode.

Estes tipos de dados tambm so chamados de primitivos por participarem do ncleo da plataforma Java. Alm disso, os tipos primitivos servem de base para tipods mais complexos, chamados tipos referncia. Um dos maiores obstculos para conseguirmos independncia de plataforma e com isto obter a portabilidade das aplicaes a ausncia de padres para armazenamento de dados na memria. Cada equipamento e cada CPU possui seus prprios padres e formatos para o armazenamento de tipos bsicos. A linguagem Java determina um padro de tamanho e formato para cada tipo de dados nativo e deixa para o interpretador implementar o tamanho e formato particular para a arquitetura em que o programa Java est em execuo.

Tabela 3 Tipos de dados e seus limites importante destacar que escolher os tipos de dados apropriados, permite que o seu programa ocupe menos espao na memria. Alm disso, o compilador ir apresentar um erro para qualquer valor fora do intervalo permitido pela varivel, e

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

44

desta forma servindo tambm como um validador da lgica implementada no programa. 2.2.3 Operadores Aritmticos Os operadores aritmticos permitem a manipulao de valores em sua aplicao. Eles seguem as mesmas regras de outras linguagens:

Tabela 4 Operadores aritmticos Quando voc est combinando operadores em uma expresso em Java, voc precisa conhecer a precedncia de cada operador. Ento a precedncia determina em que ordem as operaes de uma expresso sero realizadas. O parnteses pode ser usado para sobrepor a precedncia. Neste contexto a ordem de precedncia : 1. Operadores multiplicativos: * / % 2. Operadores aditivos: + public class ExemploVariaveis { public static void main(String[] args) { int oneInt = 315; short oneShort = 23; long oneLong = 1234567876543L; System.out.println(O inteiro + oneInt); System.out.println(O tipo Short + oneShort); System.out.println(O tipo long + oneLong);

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

45

int valor1 = 43, valor2 = 10, soma, diferenca, produto coeficiente, modulo; soma = valor1 + valor2; diferenca = valor1 valor2; produto = valor1 * valor2; coeficiente = valor1 / valor2; modulo = valor1 % valor2; System.out.println(A soma + soma); System.out.println(O produto + produto); System.out.println(O coeficiente + coeficiente); System.out.println(O mdulo + modulo); } }

2.2.4 Converso de tipos numricos Quando voc est trabalhando com variveis e constantes do mesmo tipo, o resultado da operao aritmtica mantm o mesmo tipo de dados. Por exemplo, quando voc divide dois nmeros de tipo int, o resultado ser um nmero tambm do tipo int. Porm, s vezes voc precisa realizar operaes aritmticas com tipos de dados diferentes. Nestas condies, o Java escolhe um tipo unificando o resultado. O Java converte automaticamente os operandos para o tipo unificado, mas sempre que existir a garantia que no haver perdade de dados (tipos menos para tipos maiores, tipos de menor preciso em tipos de maior preciso e inteiros em ponto-flutuante). A lista seguinte apresenta em ordem de precedncia, os tipos de dados dos operandos e qual o resultado unificado que dever apresentar entre duas variveis: 1. double; 2. float; 3. long;

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

46

4. int; 5. short; 6. byte. Voc pode explicitamente sobrepor a unificao dos tipos impondo ao compilador Java executar uma operao chamada cast (coero). Com o Type casting o programador assume o risco da converso dos tipos de dados envolvidos na expresso. O operador cast possui maior precedncia sobre os demais operadores.
public class ExemploCast { public static void main(String[] args){ boolean t = true; byte b = 2; short s = 100; char c = 'C'; int i = 200; long l = 24000; float f = 3.14f; double d = 0.000000000000053; String g = "Texto"; System.out.println("Os valores comuns das variveis "); System.out.println("t = " + t ); System.out.println("b = " + b ); System.out.println("s = " + s ); System.out.println("c = " + c ); System.out.println("i = " + i ); System.out.println("l = " + l ); System.out.println("f = " + f ); System.out.println("d = " + d );

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

47

System.out.println("g = " + g ); System.out.println();

//Convertendo de booleando para byte b = (byte)(t?1:0); System.out.println("Valor de b aps converso: " + b);

//Convertendo de booleano para short s = (short)(t?1:0); System.out.println("Valor de s aps converso: " + s);

//Convertendo de booleano para inteiro i = (int)(t?1:0); System.out.println("Valor de i aps converso: " + i);

//Convertendo de booleano para char c = (char)(t?'1':'0'); System.out.println("Valor de c aps converso: " + c); c = (char)(t?1:0); System.out.println("Valor de c aps converso para Unicode: " + c);

//Converso de booleano para long l = (long)(t?1:0); System.out.println("Valor de l aps converso: " + l);

//Converso de booleando para float f = (float)(t?1:0); System.out.println("Valor de f aps converso: " + f);

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

48

//Convertendo booleano para double d = (double)(t?1:0); System.out.println("Valor de d aps converso: " + d);

//Convertendo booleano para string g = String.valueOf(t); System.out.println("Valor de g aps converso: " + g); g = (String)(t?"1":"0"); System.out.println("Valor de g aps converso: " + g); int sum = (int)(b + i + l + d + f); System.out.println("Valor da soma aps converso: " + sum); } }

2.3 MTODOS, CLASSES E OBJETOS

2.3.1 Mtodos Um mtodo uma srie de instrues que tem por objetivo realizar uma determinada tarefa. Qualquer classe em Java pode conter um nmero ilimitado de mtodos. Em resumo, so operaes que manipulam o estado de um objeto e podem fazer parte da interface do objeto (ou seja pode ser utilizado por outras classes) ou realiza uma atividade interna na classe. Sua composio similar uma funo, onde o principal objetivo o reuso e sua sintaxe a seguinte:

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

49

Figura 17 Exemplo de mtodo Ento, como voc pde perceber as regras so as mesmas. A declarao do mtodo pode conter: Modificadores de acesso (opcional), como por exemplo public. Alm disso, ele pode ser private, protected ou static. Na maioria das vezes o mtodo acessvel externamente, sendo assim sua natureza pblica permitindo que outras classes utilizem o mtodo;

Tabela 5 Modificadores possveis usando mtodos Tipo de retorno do mtodo, por exemplo void, que significa que no retorna valor; Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

50

O nome do mtodo; A lista de parmetros do mtodo, entre parentses e separados por pontoe-vrgula. No exemplo, no existem parmetros e por isso a declarao apresenta apenas os parnteses sem contedo;

Finalmente, no corpo do mtodo esto as instrues para realizar uma determinada tarefa, que neste caso ir imprimir trs linhas de texto.

Para chamar o mtodo criado voc deve utilizar o nome que foi declarado. No exemplo apresentado, o nome do mtodo Apresenta. Ento, simplesmente digitando Apresenta( ) em qualquer ponto do cdigo, ir disparar o mtodo criado.

Figura 18 Chamando o mtodo Vamos ver agora como trabalhar com parmetros nos mtodos. Basicamente o objetivo de aplicar parmetros a um mtodo, permitir que ocorra uma troca de informaes entre o cdigo que chamou o mtodo e o prprio mtodo. Atravs dos parmetros possvel que seja enviado um determinado valor para ser processado pelo mtodo e este por sua vez possui rotinas internas que manipulam o valor, transformam e podem retornar o resultado para o cdigo que o chamou. No h limite para a insero de parmetros. Realizando uma comparao com o mundo real, imagine que voc precisa escrever um mtodo para calcular o risco de um emprstimo. Este clculo envolve um conjunto de parmetros que so elementos fundamentais para um bom ou mal resultado do risco. Informaes como

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

51

tempo em que o contratante possui relacionamento com a instituio, qual o valor do emprstimo, remunerao atual da pessoa e histrico de emprstimos anteriores, so parmetros para que uma determinada tarefa seja realizada. Esta a mesma abordagem dos mtodos. Um princpio importante na programao orientada a objetos a noo de implementao de encapsulamento. Quando voc faz a chamada para um mtodo, voc no sabe os detalhes de como o mtodo foi executado. No exemplo anterior, a frmula de clculo do risco do emprstimo no de seu conhecimento, e voc apenas preocupa-se em utilizar bem o mtodo, como passando parmetros adequados para o resultado esperado. Quando voc realiza a chamada para um mtodo, esta instruo deve conter o nome do mtodo e os seus parmetros, na ordem que foram estabelecidos e separados por ponto-e-vrgula.

Figura 19 Passando parmetros e usando no mtodo Lembre-se que os parmetros no so obrigatrios, bem como, no h limite para a quantidade de parmetros que um mtodo pode conter. Perceba tambm que um parmetro usado no corpo do mtodo, como uma varivel e por isso, necessrio a declarao do parmetro incluindo o seu tipo de dados.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

52

Finalmente vamos tratar sobre mais um elemento que estende as capacidade de um mtodo: o retorno de valor. Um mtodo pode retornar valor para o ponto de cdigo que o chamou. Este valor pode ser de qualquer tipo de dados suportado pela linguagem Java, bem como, pode retornar nada usando a declarao void.

Figura 20 Valor de retorno do mtodo Para que se possa utilizar um mtodo e seu retorno, necessrio que o cdigo que o chamou tenha condies de receber o valor retornado. Por exemplo, o mtodo acima pode ser armazenado em uma varavel.
Resultado = CalcularRisco(5000.00);

Reforo

aqui o uso de mtodos a forma mais eficiente para o uso de

encapsulamento e reuso na linguagem Java. Abuse na sua utilizao, mas faa sempre um planejamento para que sua construo tenha sentido e possa ser claramente entendido pelo programador, usurio de sua classe.

2.3.2 Classes Quando voc pensa em orientao a objetos, tudo uma classe, e todo objeto membro de uma classe. O ensino da orientao a objetos, como voc j aprendeu, comum o uso de comparaes com o mundo real, para exemplificar

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

53

classes e objetos. Novamente o conceito de classes muito til para obter reuso. Os objetos herdam atributos da classe e todos os objetos recebem os atributos das classes, j que estes so membros. Os componentes de dados de uma classe so s vezes referenciados como variveis instanciadas de uma classe. Os atributos do objeto derivados de uma classe tambm so chamados de campos, com o objetivo de disntigui-los das demais variveis que possa existir no mesmo contexto. Alm de seus atributos, os objetos derivados de uma classe possuem mtodos associados ela, e todo objeto que uma instncia de uma classe assume-se que possui os mesmos mtodos. As classes definem a estrutura e o comportamento de um determinado tipo de objeto. Na verdade podemos consider-las como modelos de objetos e sua composio pode ser reutilizada por objetos derivados, o que so chamados de instncias do objeto. Quando voc est criando uma classe, voc precisa atribuir um nome para ela e determinar os mtodos e os dados que faro parte da classe, tambm conhecidos como membros. Para criar uma classe a declarao pode conter: Um modificador de acesso (opcional); A palavra reservada class; Qualquer identificador vlido para o nome da classe.
public class Funcionario();

A palavra public refere-se ao modificador de acesso. Voc pode utilizar, por exemplo, os seguintes modificadores de acesso na declarao de uma classe: public, final ou abstract. Se voc no especificar nenhum modificador, a classe naturalmente receber o modificador public.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

54

Tabela 6 Modificadores possveis usando classes As classes pblicas so acessveis por todos os objetos, o que significa que podem ser estendidas ou utilizadas como base para outras classes. O acesso mais liberal para uma classe o public. Os demais modificadores implementam certas restries no uso da classe e somente so utilizados em circunstncias especiais. O modificador public o mais comum utilizado. Aps voc declarar a classe, voc deve construir o corpo de instrues da classe, que devem ser includos dentro de sinais de chaves.
public class Funcionario() { //Instrues em cdigo Java }

Voc pode inserir variveis a nvel de instncias, ou campos, declarando uma varivel dentro do bloco de instrues da classe. A declarao das variveis, por uma boa prtica, sempre realizada usando um modificador e estes podem ser: private, public, static e final. A maioria dos campos de uma classe so private, a qual fornece o mais alto nvel de segurana. O uso de private determina que nenhuma outra classe poder acessar o valor armazenado na varivel e somente os mtodos da mesma classe podero utilizar a varivel. Este um recurso na OOP que determina o encapsulamento, ou seja, o usurio no tem acesso ao contedo da classe.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

55

public class Funcionario() { private int CodFuncionario; }

2.3.3 Trabalhando com objetos Segundo a teoria de OOP, objetos possuem estado, comportamento e identidade. O estado de um objeto mantido por um ou mais atributos (que so as variveis membro do objeto), o comportamento implementado atravs de mtodos e a identidade a referncia exclusiva que cada instncia tm. Enquanto os atributos so variveis contendo alguma informao pertinente ao objeto, um mtodo uma funo associada a ele. Declarar uma classe no cria objetos. Uma classe na verdade uma abstrao do que um objeto ou ser quando for instanciada a classe. Todas as caractersticas de um item em uma fbrica, a ser produzido, primeiro projetado. A classe um projeto de objeto pois ela contm informaes sobre como o objeto possui informaes, como ele deve ser utilizado e como deve ser identificado. O processo de criao de um objeto, ou instanciao de uma classe, conduzido atravs de dois passos. Quando voc est declarando uma varivel, voc determina o tipo de dados que ela dever conter e um identificador, que ser a referncia nomeada da memria que possuir o dado armazenado. Quando voc declara uma varivel do tipo inteiro (int), o compilador est sendo notificado que um valor inteiro ser armazenado na rea de memria. A mesma operao realizada quando estamos criando um objeto. Na sua declarao, a primeira informao que precisa ser passada ao compilador o nome da classe que ir ser utilizada para compor o objeto.
Funcionario exemploFunci = new Funcionario();

No exemplo, a palavra Funcionario o tipo do objeto, ou seja a classe que ir originar o objeto e a palavra exemploFunci o nome do objeto. O operador new

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

56

determina para o compilador a reserva de memria para o objeto e depois seguido da declarao do mtodo Funcionario( );. Esta declarao chamada de o construtor da classe, o que veremos mais adiante. Quando voc no escreve explicitamente um construtor para a classe, o Java escreve uma para voc e o nome do mtodo construtor sempre o nome da prpria classe.
public class Automovel { String modelo,cor; int ano; boolean estadoMotor = false; public void ligaMotor() { estadoMotor = true; }

public void informaDados() { String motorString; if (estadoMotor){ motorString = " ligado"; } else{ motorString = " desligado"; } System.out.println("Automovel:" + modelo + " " + ano + " " + cor + motorString); } }

public class AgenciaAutomoveis

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

57

{ public static void main(String args[]) { // Criando os objetos (instancias) da classe Automovel: Automovel fusca = new Automovel(); Automovel gol = new Automovel(); fusca.modelo = "Fusca"; fusca.cor = "Preto"; fusca.ano = 69; gol.modelo = "Gol"; gol.cor = "Vermelho"; gol.ano = 96; // Ligando o motor de um automoveis: fusca.ligaMotor(); // Mostrando informaes dos automvel fusca.informaDados(); gol.informaDados(); } }

2.3.4 Construtores Quando voc cria uma classe e cria uma instncia desta classe, ou cria um objeto, como vimos voc est chamando um mtodo construtor que possui o mesmo nome da classe, que por sua ausncia, o compilador Java cria automaticamente. Um mtodo construtor o mtodo responsvel pela criao do objeto. Mas comum a necessidade de interferir no processo de criao de um objeto, principalmente para reforar determinadas regras que a classe pode precisar manter.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

58

Para realizar esta definio na classe, voc pode declarar explicitamente um mtodo com o mesmo nome da classe e inserir em seu bloco de instrues (entre as chaves), um conjunto de regras que devero ser seguidas durante a instanciao da classe, ou seja, aps o objeto ter sido criado, o conjunto de instrues contidas no construtor sero executadas.
public class Pessoa { private String nome; private int idade;

public Pessoa(String nome, int idade) { this.nome = nome; this.idade = idade; } }

2.3.5 Garbage Collection Neste momento, voc pode imaginar que um programa Java pode conter inmeras classes e vrios objetos em memria instanciando-as. A medida que voc instancia classes, a alocao de memria ocorre naturalmente. Isto faz com que a memria seja ocupada por um grande nmero de armazenamentos e por sua vez, precisam ser liberadas quando no mais necessrio. Para auxiliar o programador nesta tarefa de gerenciamento de memria da aplicao, a plataforma Java oferece um processo chamado Garbage Collection. O garbage collection um processo executado em segundo plano, a nvel de sistema operacional, que registra toda memria alocada e mantm um contagem do nmero de referncias para cada ponto da memria. A JVM periodicamente verifica se h na memria alguma referncia com valor 0, procedendo ento a desalocao da mesma. Em resumo, este processo responsvel por liberar parte da memria

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

59

alocada que no mais referenciada. Esta condio necessria para garantir que os objetos que no so mais necessrios para o programa em execuo so lixos e podem ser excludos da memria. Esta funcionalidade faz parte do ncleo do ambiente de execuo Java, com o objetivo de liberar os programadores da necessidade de liberar memria alocada, o que em linguagens mais antigas era exigido e gerava mais um trabalho para o progamador (quando no esquecia de faz-lo). Alm disso, o uso do Garbage Collection a garantia da integridade do programa, deixando a responsabilidade do que deve ou no ser descarregado da memria a cargo do processo do JRE e com isto no gerando risco de uma excluso indevida na memria.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

60

EXERCCIOS PROPOSTOS 1) .Porque devemos utilizar modificadores na declarao campos em uma classe? ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ 2) Qual a necessidade do Garbage Collection? ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ 3) O que um mtodo construtor? ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ ______________________________________________________________

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

61

SNTESE Nesta aula tivemos a grande oportunidade de conhecer a aplicao da OOP em Java. a unio dos conceitos que voc j aprendeu com a prtica da implementao de classes e objetos em Java. Na prxima aula voc aprender mais detalhes para a construo do corpo de instrues em linguagem Java, com o uso de estruturas de dados. Agora as peas vo se encaixando cada vez mais, na direo de aplicaes mais complexas em Java. At l.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

62

Aula 3

ESTRUTURAS DE PROGRAMAO

OBJETIVOS DA AULA

Aprender a trabalhar com lgica condicional em Java; Saber utilizar os operadores lgicos; Aprender a implementar blocos de repetio em Java; Conhecer os detalhes no uso de strings e arrays.

CONTEDO DA AULA Acompanhe os assuntos desta aula, se preferir, aps o seu trmino, assinale o contedo j estudado. Trabalhando com estruturas de dados; Controle de fluxo; Operadores lgicos; Blocos de repetio (loops); Strings; Arrays

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

63

Prezado aluno, Nesta aula voc aprender a trabalhar com blocos de programao em Java. Vamos inicialmente falar sobre as princpais caractersticas para trabalhar com blocos de cdigo e suas particularidades. Depois vamos tratar das estruturas convencionais de lgica, como controle de fluxo e loops. Finalmente vamos dar uma ateno especial nos trabalhos com strings e arrays. Perceba que na maioria do contedo desta aula, vamos estar aplicando os conceitos de lgica de programao e OOP, que voc j aprendeu, usando a linguagem Java e entendendo suas regras e sintaxe. Boa Aula!

3.1 TRABALHANDO COM ESTRUTURAS DE DADOS

O contedo de instrues de cdigo Java entre chaves considerado um bloco de cdigo. comum encontrarmos blocos de cdigo dentro de outro bloco e cdigo, como tambm, blocos de cdigo separados em uma mesma classe. O principal objetivo de compreender os limites de um bloco, entender como funciona o escopo de dados na linguagem Java.

Figura 21 Blocos de cdigo em uma classe A regra principal : ao declarar uma varivel em um programa, voc no pode utiliza o valor armazenado nela, em outro programa. Quando esta varivel est Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

64

dentro de um bloco, voc no pode referenci-la em outro bloco. A este tipo de limitao chamado de escopo. Isto tambm determina que um mesmo nome de varivel no pode ser declarado duas vezes no mesmo bloco. Novamente o uso de modificadores de acesso so fundamentais para o uso adequado de variveis de acordo com seu escopo. Quando no especificado o modificador na declarao da varivel, ela considerada friendly (amigvel) e poder ser acessada por todas as classes que pertence ao pacote.

Tabela 7 Modificadores de escopo 3.1.1 Sobrecarga de mtodos A medida que implementamos mtodos em nossas classes, comum termos um grande nmero de mtodos para atender determinadas necessidades. O

conceito de sobrecarga de mtodos a capacidade de voc implementar mtodos com o mesmo nome em uma mesma classe. O compilador consegue diferenci-los atravs do chamado de assinatura do mtodo, que composta do identificador do mtodo, o tipo de retorno, os tipos de dados dos parmetros e a quantidade de parmetros. Este recurso muito til na criao de classes cujos os mtodos utilizam parmetros opcionais, exigindo a criao de mtodos com diferentes quantidades e tipos de parmetros. A sobrecarga de mtodos uma das formas de implementao do polimorfismo em Java.
class ContaBancaria {

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

65

int numeroDeConta; int nomeDoCorrentista; int saldo;

// Mtodo original para realizar depsito public void deposito ( double valorDeposito ) { saldo = saldo + valorDeposito; }

// Mtodo sobrecarregado, permitindo um novo // conjunto de parmetros public deposito ( double valor, double nivel ) { saldo = saldo + val; if ( saldo > nivel ) { System.out.println( "Saldo atual" + saldo ); } }

public void saque ( double valorSaque ) { if ( saldo - valor < 0 ) { System.out.println("Saldo insuficiente"); } else { saldo = saldo - valorSaque; } } }

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

66

3.1.3 Referncia this Quando voc est criando classes a partir de objetos que voc instanciou, as classes podem tornar-se muito grandes rapidamente. Alm dos campos, cada classe pode conter muitos mtodos, inclusive vrias verses de mtodos sobrecarregados. Se voc instanciar muitos objetos de uma classe, a memria do computador pode tornar-se um limitador, j que h um trabalho desnecessrio em armazenar cpias separadas de cada varivel e mtodo para cada instanciao da classe. Quando voc est instanciando uma classe, voc deseja que cada instncia possua seus prprios campos, como por exemplo, para cada classe de Emprstimo, deve conter as informaes de risco, valor, cliente e data, de forma individualizada, ou seja, cada classe dever conter informaes particulares para cada campo. J no caso de um mtodo, o mesmo mtodo utilizado da mesma forma em cada instncia da classe. Desta forma, voc s precisa de um nico armazenamento do mtodo para todas as instncias da classe. Quando voc est usando um membro de um objeto, necessrio sempre referir-se ao nome do objeto, mais o sinal de ponto, mais o nome do mtodo ou do campo. Por exemplo:
aEmprestimo.Valor = 105.000,00; aEmprestimo.Cliente = Marcos de Oliveira;

dblEmprestimo.CalcularRisco();

O compilador Java identifica cada membro da classe de forma simples e clara. Em classes com mltiplos construtores, que realizam tarefas semelhantes, this() pode ser usado para chamar outro construtor local, identificado pela sua assinatura (nmero e tipo de argumentos).

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

67

Figura 22 Uso do mtodo this()

3.2 CONTROLE DE FLUXO

As declaraes de controle de fluxo em Java so usadas para alterar o fluxo sequencial das instrues de um programa. Como voc j aprendeu, as condies lgicas impostas para os programas tem por finalidade determinar resultados lgicos e executar determinadas aes de acordo com a condio apresentada. A linguagem Java oferece todo o suporte s prticas mais comuns para a construo de lgica condicional nos programas. 3.2.1 IF, IF...ELSE e IF...ELSE-IF...ELSE A processo de deciso no programa envolve a avaliao de um determinado elemento e de acordo com seu resultado lgico conduzir caminhos diferentes de execuo do programa. A instruo IF em Java permite que voc avalie uma determinada condio e de acordo com o resultado, o bloco de cdigo ser executado ou no. Este o exemplo de uma condio simples. Voc pode ainda acrescentar o tratamento da condio FALSA, usando a palavra chave ELSE. Com este tipo de implementao voc ter dois blocos de cdigo: um para o caso do resultado verdadeiro da condio lgica aplicada e um outro para o resultado falso. Por exemplo:
public class UsoIF {

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

68

public static void main (String args[]) { int a = 10; int b = 20; int c; if (a > b) c = a; else c = b; System.out.println("O maior valor = " + c); } }

Voc pode ainda aplicar condies que podem estar previstas de acordo com o resultado obtido do teste lgico, usando a instruo else if.
if ( ano < 0) { System.out.println("No um ano!"); } else if ( (ano%4==0 && ano%100!=0) || (ano%400==0) ) { System.out.println(" bissexto!"); } else { System.out.println("No bissexto!"); }

3.2.2 Switch O uso da condies IF muito comum. Mas seu uso em grande quantidade, principalmente quando h declaraes IF dentro de outras declaraes IF (chamados de condies aninhadas), o seu cdigo pode ficar mais complexo e de difcil entendimento.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

69

Uma alternativa para utilizar um grande nmero de condies IF o uso da instruo SWITCH. Esta declarao muito til quando voc necessita realizar um nico teste lgico e seu resultado poder ser uma srie de resultados possveis. A estrutura da instruo SWITCH a seguinte: Switch: inicia a estrutura de cdigo e implementada junto com a expresso lgica a ser testada; Case: a palavra chave que avalia o resultado da expresso para um determinado valor; Break: uma declarao opcional e permite que o bloco de cdigo do Switch seja terminado no ponto em que o break foi declarado; Default: tambm seu uso opcional, e usado para que uma determinada instruo (ou conjunto de instrues) seja executada em caso de nenhuma condio ter sido atendida. Por exemplo:
public class UsoSwitch { public static void main (String args[]) { for (int i = 1; i<5; i++) { switch (i) { case 1: System.out.println ("Numero UM"); break; case 2: System.out.println ("Numero DOIS"); break; case 3: System.out.println ("Numero TRES"); break; default: System.out.println ("NUMERO INVALIDO");

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

70

} } } }

3.2.3 Operadores Relacionais Os operadores relacionais so aplicados nas expresses utilizadas nas condies IF e Switch. Os operadores relacionais aplicam-se apenas a nmeros (todos os tipos primitivos so tratados por seus valores numricos). So eles: maior que(>), maior ou igual a (>=), menor que (<), menor ou igual a (<=), igualdade (==) e diferena (!=). O sinal de == utilizado para avaliar se duas variveis primitivas so iguais (possuem o mesmo contedo/valor). Em Java, da mesma forma que na linguagem C, o smbolo == utilizado tambm para diferenciar do smbolo = que identifica atribuio.

Tabela 7 Operadores relacionais

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

71

3.3 OPERADORES LGICOS

Os operadores lgicos so utilizados nas expresses aplicadas aos testes lgicos, responsveis pela avaliao condicional em um bloco de instrues. A linguagem Java oferece vrios operadores lgicos. 3.3.1 Operadores AND e OR Uma alternativa no uso de instrues IF aninhadas, voc pode utilizar o operador AND em uma expresso lgica que determine que DUAS condies so verdadeiras. O operador AND escrito atravs de dois smbolos &&. importante ressaltar que a utilizao do operador AND exige que uma expresso booleana completa seja inserida em cada lado do operador &&. Por exemplo:
if (Emprestimo > 1000 && TempoConta < 5) risco = 6;

No exemplo, a condio valida se a varivel emprstimo maior que 1000 E a varivel tempo conta menor que 5. Caso positivo em AMBOS os casos, o valor da varivel risco ser 6. Voc pode utilizar o operador OR, escrito como ||, quando voc espera que uma das condies na expresso seja verdadeira. Neste caso, uma e somente uma condio poder ser verdadeira.
// Usando dois Ifs if (ValorItemVenda > 100) comissao = 5; else if (totalVenda > 5000) comissao = 5;

//Usando o operador OR If(ValorItemVenda > 100 || totalVenda > 5000) comissao = 5;

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

72

Os operadores lgicos atuam conforme a descrio da tabela verdade. Mas para obter melhores desempenhos, o Java utiliza a tcnica do curto-circuito, ou seja, quando a anlise do primeiro elemento da expresso j define o resultado, no se avalia o segundo termo.

3.4 LOOPS

Um loop uma estrutura na qual voc pode utilizar repetidamente a execuo de um bloco de instrues, de acordo com uma condio determinada. Como voc j viu, os blocos de repetio (ou loops), testam uma expresso lgica e caso verdadeiro, executam o bloco de instrues e ao terminar a execuo, realiza um novo teste lgico na expresso. 3.4.1 While Permite que um bloco de instrues seja executado enquanto uma expresso for verdadeira. O teste lgico realizado ANTES do bloco de instrues ser executado. Por exemplo:
public class UsoWhile { public static void main (String args[]) { int i = 0; while (i < 11) { if ( (i % 2) == 0)

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

73

{ System.out.println("Nmero " + i + " e' par !"); } i = i + 1; } } }

Voc pode utilizar o loop While para implementar uma tarefa que deve ser executada um determinado nmero de vezes, segundo uma expresso lgica. Neste caso a expresso lgica se utiliza de uma varivel contadora, que delimitar o limite de execues que o bloco de instrues dever realizar. 3.4.2 Do...While O uso do loop DoWhile similar declarao While, sendo a diferena apenas que o teste lgico realizado ao final da primeira execuo do bloco de cdigo. Isto muito til para os casos em que se deseja que pelo menos uma vez o bloco de cdigo seja executado, j que utilizando o loop while, se a expresso no for verdadeira, o bloco de instrues pode nunca ser executado.
public class UsoDoWhile { public static void main (String args[]) { int i = 0; do { if ( (i % 2) == 0) { System.out.println("Nmero " + i + " e' par !"); } i = i + 1;

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

74

} while (i < 11); } }

3.4.3 For O loop for um mtodo especial usado para determinar um nmero finito de iteraces necessrias. muito mais elegante para trabalhar com loops com sequncias limitadas de execues ao invs do loop while. Quando voc est trabalhando com o loop for, voc pode indicar o valor inicial para a varivel de controle, que faz parte do teste de controle do loop. Para construir um loop for voc precisa iniciar o cdigo com a palavra reservada for, seguida de um par de parentses. O trecho entre parentses possui trs sees separadas por ponto-e-vrgula. As trs sees so: A inicializao da varivel de controle para execuo do bloco de instrues; A varivel de teste de controle do loop; A atualizao da varivel do loop de controle.

public class UsoFor { public static void main(String[] args) { for (int i=1;i<=15;i++) { System.out.println ("O quadrado de " + i + " = " + } i * i );

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

75

} }

3.5 STRINGS Uma sequncia de caracteres entre aspas considerada uma string. No Java as strings so tratadas atravs de uma classe String, e uma grande variedade de mtodos so fornecidos para ajud-lo a trabalhar com cadeias de caracteres. 3.5.1 Classe Character O tipo de dados char usado para armazenar qualquer tipo de caracteres. Alm deste tipo primitivo de armazenamento, a linguagem Java oferece uma classe chamada Character, e ela contm mtodos padres para testar os dados contidos na varivel. Na verdade esta classe um Wrapper do tipo de dados primitivo char. O uso de wrapper um meio prtico que o Java trabalha para adicionar funcionalidades a um objeto. Neste caso, a classe Character um wrapper do tipo de dados char e adiciona vrias funcionalidades a ele.

Tabela 8 Mtodos da classe Character


public class ExemploCharacter { public static void main(String[] args) throws Exception

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

76

{ char aChar; System.out.println("Por favor entre com algum caractere"); aChar = (char)System.in.read(); System.in.read(); System.in.read(); if(Character.isDigit(aChar)) System.out.println(aChar + " um nmero"); else System.out.println(aChar + "no um nmero"); if(Character.isLetter(aChar)) System.out.println(aChar + " uma letra"); else System.out.println(aChar + "no uma letra"); if(Character.isWhitespace(aChar)) System.out.println(" um espao em branco"); else System.out.println("no um espao em branco"); if(Character.isLetter(aChar)) if(Character.isLowerCase(aChar)) System.out.println(aChar + "est em letras minsculas"); else System.out.println(aChar + "no est em letras minsculas"); } }

3.5.2 Objeto String Uma varivel String um objeto da classe String. A classe String faz parte das bibliotecas base da linguagem Java e importada automaticamente para todo programa escrito em Java. Esta classe a nica com tratamento especial, a qual

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

77

no pode ser instanciada sem o uso da palavra new. Na verdade, quando se atribui um valor a uma varivel do tripo String, usando apenas as aspas, a JVM criar uma instncia nova por meio de um comando new. Foi otimizada para que o seu contedo seja sempre lido, mas quando o contedo alterado sua performance cai. Uma das caractersticas importantes que todos os mtodos associados esta classe no alteram o contedo do objeto armazenado. Esta classe tambm tem por finalidade o armazenamento de uma sequncia de caracteres e possui um amplo conjunto de mtodos. Por exemplo:
String str = "abc"; char data[] = {'a', 'b', 'c'}; String str = new String(data);

Tabela 9 Mtodos da classe String

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

78

public class TesteString { public static void main(String args[]) { String str1 = "Hello"; String str2 = str1; str2 = str2 + " world!"; System.out.println("str1 = " + str1); System.out.println("str2 = " + str2); } }

3.5.3 Converso de strings Se uma String contm um contedo apenas de nmeros, voc pode converter esta string para um nmero e desta forma permitir que se realizar operaes aritmticas com os dados. Para converter uma String para um inteiro, voc utiliza a classe Integer, a qual faz parte das bibliotecas base do Java e automaticamente importada para o seu programa. O mtodo parseInt() parte da classe Integer e recebe o parmetro em forma de string e retorna um valor inteiro.
int eInt = Integer.parseInt(100034);

Para converter uma String para um double, voc utiliza a classe Double, a qual tambm faz parte das bibliotecas base do Java e automaticamente importada para o seu programa. O mtodo parseDouble() parte da classe Double e recebe o parmetro em forma de string e retorna um valor double.
double doubleValor = Double.parseDouble(100.35);

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

79

Toda classe implementa o mtodo toString, porque a implementao padro est na classe Object. Este recurso tambm permite que se converta dados de qualquer tipo primitivo para String.
// Converso: int para String int i = 10; Integer intObj = new Integer(i); String str1 = intObj.toString();

// Converso: String para int String str = 10; Integer intObj = new Integer(str); int i = intObj.intValue();

// ou

String str = 10; int i = Integer.parseInt(str);

3.6 ARRAYS

Como voc j aprendeu, um array uma lista de dados, que possuem o mesmo tipo de dados e esto associados a um mesmo nome na memria. Voc criar um array da mesma maneira que declara uma varivel em Java, apenas adicionando os sinais de abertura e fechamento de colchetes. A declarao de um array em Java deve ser feita usando a seguinte sintaxe:
double[] Vendas = new Double[20];

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

80

Esta declarao reserva 20 alocaes de memria para a varivel Vendas. Os elementos do array em Java so numerados a partir do 0 e neste caso, o ndice correspondente a cada elemento do array usado entre 0 e 19, para o exemplo acima. Os trabalhos com array seguem as mesmas regras das variveis em Java e voc tambm pode utilizar um array, com a definio do elemento a ser utilizado, da mesma maneira que uma varivel. Por exemplo:
System.out.println(Vendas[15]);

Para inicializar um array, e desta forma estabelecer um valor padro para cada elemento, voc deve utilizar uma lista de valores separados por vrgulas e acompanhados de chaves, por exemplo:
int[] Idade = {20,15,14,32,45};

Abaixo um exemplo de cdigo Java usando array.

public class Arrays { public static void main(String[] args) { int[] array1 = { 1, 2, 3, 4, 5 }; int[] array2; array2 = array1; for(int i = 0; i < array2.length; i++) array2[i]++; for(int i = 0; i < array1.length; i++) System.out.println("array1["+i+ "] = "+array1[i]); } }

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

81

Voc pode declarar arrays que contenham dados dos tipos inteiros e duplos e desta forma voc tambm pode declarar contedos de qualquer tipo de dados, incluindo objetos.

EXERCCIOS PROPOSTOS 1) O que um Wrapper? ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ 2) Quais os tipos de loops suportados pela linguagem Java? Descreva cada um deles. ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ 3) Qual a vantagem em utilizar o modificador protected para uma varivel? ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ ______________________________________________________________

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

82

SNTESE Nesta aula voc avanou um pouco mais e passou a desenvolver programas Java com o controle de fluxo de execuo. Alm disso, voc aprendeu como trabalhar com alguns aspectos particulares da OOP com Java, como a sobrecarga de mtodos. Voc tambm aprendeu como trabalhar com dados do tipo String e as vrias formas de trabalho com classes especiais no Java. Estes dois assuntos tambm participam do ncleo essencial de

conhecimentos para a programao Java, e tenha certeza que voc ir utiliz-los muito ainda neste curso. Na prxima aula, vamos aprender mais alguns detalhes de implementao de rotinas orientadas a objetos usando Java. Continuamos a nossa jornada na sua formao. At a prxima aula.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

83

Aula 4

HERANA

OBJETIVOS DA AULA

Compreender como a herana em OOP funciona na linguagem Java; Aprender como implementar herana, usando os vrios elementos da linguagem Java.

CONTEDO DA AULA Acompanhe os assuntos desta aula, se preferir, aps o seu trmino, assinale o contedo j estudado. Herana; Herana de mtodos.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

84

Prezado aluno, Nesta aula voc aprender um pouco mais sobre orientao a objetos usando a linguagem Java. O foco principal desta aula tratar um pouco sobre o relacionamento entre classes em Java. Quando falamos de herana, estamos tratando de um assunto que muitas vezes parece assunto complexo, mas na verdade uma evoluo natural dos assuntos at aqui tratados. Voc ver ainda que a similaridade com o mundo real muito grande, j que os conceitos de herana seguem as orientaes com base nas interpretaes que temos hoje sobre o assunto. Boa Aula!

4.1 HERANA

Herana um recurso poderoso da linguagem Java que permite que novas classes podem ser derivadas de classes existentes. As classes derivadas herdam a interface da classe base e pode adicionar novos mtodos ou alterar os existentes, para atender um propsito particular. Qualquer quantidade de classes pode ser adicionado a um esquema para produzir uma hierarquia de tipos relacionados. A implementao de herana no Java a base para o polimorfismo, o qual permite que objetos de diferentes tipos possam ser tratados como se fossem do mesmo tipo.

4.1.1 Introduo Herana Os programadores trabalhando com linguagens orientadas a objetos visualizam classes e seu relacionamento com as demais classes atravs de uma hierarquia de tipos de relacionamentos. Desta forma, os programadores generalizam as caractersticas comuns de tipos similares em uma superclass. Na verdade, como veremos mais adiante, toda clase base utilizada para a criao de outras classes

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

85

considerada uma superclasse. Muitas das principais classes da plataforma Java esto relacionadas atravs de herana. Desta forma toda classe Java, existente na plataforma ou criada pelo usurio, faz parte da hierarquia usando herana. Ao menos que voc explicitamente programe ao contrrio, as suas classes so derivadas de uma classe participante do ncleo da plataforma Java: a classe Object. A classe object o ancestral comum de todas as classes Java e a raiz da hierarquia das classes na plataforma. Isto correto dizer porque todas as classes Java, inclusive as criadas por voc, herdam um conjunto padro de caractersticas da classe Object.

Figura 23 Herana 4.1.2 Estendendo uma classe O processo de definio de uma nova classe que herda caractersticas de uma classe existente chamado de extenso de uma classe. Voc adicional campos e mtodos em sua nova subclasse e lhe fornece novas capacidades, ou substitui mtodos herdados da superclasse atravs da sobreposio, para customizar ou implementar recursos adicionais. A linguagem Java possui recursos fceis de serem implementados para se obter herana mltipla, atravs do uso de interfaces. Uma interface, assim como uma classe, um tipo de dados. Definir uma interface muito similar definio de uma classe, exceto que a interface poder conter somente constantes e mtodos abstratos. Alm disso, uma interface no pode ser instanciada.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

86

Voc pode definir uma classe para ser abstrata. Assim com as interfaces, as classes abstratas no podem ser instanciadas, mas elas podem ser estendidas. O uso de classes abstratas est direcionado para quando voc deseja implementar um mtodo padro em uma superclasse. Na programao Java, a implementao de uma extenso da classe feito atravs da palavra chave extends. Toda classe Java implicitamente estendida da classe Object. Um exemplo da declarao da classe estendida:
class Fruta { int gramas; int caloriasPorGrama; } class Citros extends Fruta { int acidoCitrico; }

4.1.3 Classes abstract e final Para prevenir que uma classe possa ser usada como superclasse, utilize a palavra reservada final, e com isto voc ir garantir que a classe nunca ser estendida e seus mtodos nunca sobrepostos. Algumas classes da plataforma Java so final, como por exemplo algumas classses wrapper dos tipos primitivos de dados do Java. Agora h uma forma de voc declarar uma classe para que ela sempre seja uma superclasse e no possa ser instanciada: usando a palavra reservada abstract. Ento a partir deste tipo de classe voc pode estend-la ou pode criar outras subclasses a partir dela, mas no poder utilizar os meios para instanciar uma classe naturalmente. A nica forma de utilizar uma classe com esta caracterstica estendendo-a.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

87

4.1.4 Implementando interfaces Uma interface como um documento de desenho com as caractersticas externas da classe. Definindo uma interface voc determina mtodos pblicos que precisam ser fornecidos pela classe quando estiver implementando-a. Uma interface pode conter mtodos, mas algumas restries precisam ser observadas: Todos os mtodos so abstratos; Voc no pode definir a implementao de mtodos em uma interface; Todos os mtodos so pblicos. Uma interface pode conter campos, mas eles precisam ser static ou final. Desta forma, os dados contidos em uma interface somente podem ser constantes. Para que uma classe possa estabelecer o vnculo com a interface criada, necessrio utilizar a palavra chave implements. Quando uma classe implementa uma interface, chama-se neste contexto que a classe instanciou a interface.
public interface ControleRemoto { public void ligaTV(); public void desligaTV(); public void mudaCanalTV(int canalNovo); } public class TV implements ControleRemoto { public void ligaTV() {...} public void desligaTV() {...} public void mudaCanalTV(int canalNovo) {...} }

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

88

4.2 HERANA DE MTODOS

S h um caminho para chamar mtodos herdados que atravs de referncia a um objeto e com a chamada vinculao dinmica, para garantir que o mtodo chamado pelo objeto um implementado ou herdado pela classe que o objeto instanciou.

4.2.1 Usando construtores Um objeto superclasse criado na memra antes de um objeto subclasse em todos os nveis da hierarquia. Por padro o JVM chama o construtor da superclasse e no passa qualquer parmetros para o construtor. Isto significa que a superclasse possui um construtor sem parmetros. A linguagem Java realiza a inicializao de uma superclasse com um mtodo especial chamado super. Ele funciona como um construtor da superclasse e permite que a partir da subclasse, possamos utilizar membros da superclasse.

4.2.2 Efeitos da Herana Em Java, mtodos privados da classe base no so herdadas por suas subclasses, mas todos os demais membros sim. Alm do uso das palavras reservadas public, private e default para acessar membros da classe base, existem mais dois modificadores de acesso que se aplicam apenas s classes derivadas. Qualquer membro da superclasse declarado como protected acessvel somente pelas classes que que so derivadas da classe atual. Qualquer membro que foi declarado com private protected acessvel somente pela classe que derivada de uma classe que contm o membro. Vamos considerar o seguinte exemplo: Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

89

public Class A { protected int x; private protected int y; }

O membro X acessvel em qualquer classe que for derivada da classe A, bem como, qualquer classe em um mesmo pacote da classe A. J o membro Y somente acessvel por qualquer classe que deriva diretamente da classe A

4.2.3 Sobreposio de mtodos Quando uma subclasse possui um mtodo que possui a mesma assinatura de um mtodo da superclasse, esta situao conhecida como sobreposio de mtodos.
class Fruta { int gramas; int calorias_por_grama; Fruta() { gramas=55; calorias_por_grama=0; } Fruta(int g, int c) { gramas =g; calorias_por_grama =c; } void descascar () {

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

90

System.out.println(Aqui eu descasco frutas); } }

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

91

EXERCCIOS PROPOSTOS 1) Qual a necessidade do uso dos modificadores final e abstract? ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ 2) Qual a vantagem no uso da palavra super? ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ 3) Qual a finalidade da palavra extends? ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ ______________________________________________________________

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

92

SNTESE Nesta aula voc aprendeu mais uma parte importante da orientao a objetos usando a linguagem de programao Java. Voc conheceu os conceitos que esto associados a este recurso da linguagem, bem como, aprendeu como implementar a herana em cdigo Java. Conforme ns vimos, a herana parte fundamental do polimorfismo e est amplamente utilizada na comunicao entre os objetos e classes de um programa em OOP. Na prxima aula vamos aprender como trabalhar com Interfaces Grficas usando Java. Este um assunto com uma riqueza visual que nos permite construir solues visualmente confortveis para nossos usurios. At l.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

93

Aula 5

USANDO SWING E CRIANDO APPLETS

OBJETIVOS DA AULA

Conhecer os conceitos sobre o desenvolvimento de aplicaes com interfaces grficas; Aprender identificar os componentes da plataforma Java para a construo de aplicaes grficas; Conhecer em detalhes os componentes Swing; Aprender como construir um applet.

CONTEDO DA AULA Acompanhe os assuntos desta aula, se preferir, aps o seu trmino, assinale o contedo j estudado. Interfaces Grficas em Java; Componentes Swing; Gerenciadores de Layout; Applets.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

94

Prezado aluno, Nesta aula voc voc aprender um assunto muito exigido nas aplicaes atuais: as interfaces grficas com o usurio. Na verdade, um assunto antigo mas foi atravs do advento do Macintosh e do Windows que realmente este mtodo de envolvimento com o usurio recebeu toda sua potencialidade. Hoje so raras as aplicaes que no possuem uma interface grfica, j que a grande maioria dos computadores esto executando sistemas operacionais Windows ou Linux, alm do prprio Macintosh. A plataforma Java oferece uma ampla cobertura de recursos para o suporte na construo de aplicativos com interface grfica, e inclusive com as ltimas verses do JDK, os programadores receberam mais ateno em tecnologias atuais que auxiliam na construo de interfaces. A grande vantagem do Java que a Sun implementou os mesmos conceitos de portabilidade tambm para as bibliotecas que suportam a construo de interfaces grficas, o que permite uma aplicao grfica ser executada e apresentada da mesma forma em vrias plataformas. Boa Aula!

5.1 INTERFACES GRFICAS EM JAVA

Trabalhar com uma interface grfica do sistema operacional, como o caso do Windows e das diversas interfaces disponveis para Linux, uma operao cada vez mais comum hoje em dia. O principal apelo a facilidade em realizar tarefas que antes, em modo caractere, era muito mais trabalhoso. Ento, podemos concluir que o uso de recursos grficos nas suas aplicaes ser algo comum nos seus trabalhos como programador. Antes de voc aprender como construir aplicaes com recursos grficos, voc precisa entender algumas orientaes essenciais para este tipo de programao. comum encontrarmos programadores que so exmios profissionais da lgica booleana e de complexos algoritmos, mas com grandes dificuldades em explorar as potencialidades das interfaces grficas. Este o objetivo deste tpico: Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

95

despertar em voc uma viso ampla sobre o assunto e compreender a importncia em seguir orientaes e melhores prticas, com o objetivo de obter um resultado superior em suas aplicaes. Um programa com interface grfica est baseado em um modelo especfico de programao, chamada orientada a eventos. O usurio executa a maioria dos eventos atravs da movimentao e cliques do mouse ou pressionando as teclas do teclado (muitas vezes combinando as duas).

Figura 24 Aplicao Java com interface grfica Cada elemento visual considerado um componente, que pode ser ser gerenciado a partir de um objeto particular. O termo controle usado para determinar os componentes que possuem interfaces grficas e esto inseridos em um contexto visual e de negcio. Controles como caixas de verificao, labels, barras de rolagem, caixas de texto e caixa de listas so exemplos de componentes. Alguns componentes, como o boto, so usados individualmente. Outros so chamados de containers, que so componentes que armazenam outros componentes. As janelas, os painis e as caixas de dilogo so containers. Voc pode utilizar uma das bibliotecas principais chamados gerenciadores de layout para controlar como os componentes so arranjados em um container. Para cada container, voc pode selecionar um gerenciador de layout que controlar

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

96

o tamanho e a posio dos componentes dentro do container. Esta separao das classes do container do gerenciador de layout fornecer liberade para escolher o container que deseja e ento selecionar o gerenciador de layout em particular. As bibliotecas Swing e AWT possuem a responsabilidade em como realizar o desenho das interfaces grficas. Existem dois tipos de aplicaes grficas que podem ser criadas em Java: Componentes iniciados atravs de um navegador (applets); Aplicaes locais que so iniciadas atravs do sistema operacional.

Ambas capturam eventos do sistema e so desenhadas sobre um contexto grfico que fornecido pelo sistema e pela JVM.

5.1.1 Component A classe Component representa um objeto que tenha uma representao grfica, como botes, campos de textos, choices etc. Esta classe define o comportamento bsico para a maioria dos componentes visuais do pacote AWT (todos os mtodos definidos nesta classe estaro disponveis para todos os componentes visuais do AWT, bem como todos os recipientes).

Tabela 10 Mtodos da classe Component

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

97

5.1.2 Container Um container uma categoria especial de componente grfico que pode conter outros componentes ou mesmo outros containers. Todos os containers so componentes, mas nem todos os componentes so containers. Um applet, uma janela e um painel so exemplos de container. Um container (painel) pode ser inserido dentro de outro. Cada container possui associado um gerenciador de layout para controlar a maneira pela qual seus componentes sero mostrados (tamanho e posio).

Figura 25 Containers do pacote AWT 5.1.3 Window Uma Window uma janela sem barra de ttulo e borda borda e que necessariamente tem que estar associada com outro objeto da classe Frame (janela) para que possa existir. A classe Window especializa a classe container, logo poder conter outros componentes internamente. A classe Window normalmente utilizada para implementar janelas pop-up, e quando um objeto da classe Window criado, automaticamente associado a ele o gerenciador de layout BorderLayout. O construtor Window responsvel em construir um objeto da classe Window invisvel que estar vinculado ao objeto Frame (janela) previamente instanciado.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

98

Tabela 11 Mtodos da classe Window 5.1.4 A biblioteca AWT Inicialmente a Sun criou um pacote de classes visuais chamado Abstract Window Toolkit (AWT), que possui as classes representativas dos objetos de um programa visual. Este o antigo conjunto de de ferramentas para o

desenvolvimento de interfaces grficas na linguagem Java. A criao de interfaces grficas AWT consiste: Na instanciao de objetos do tipo Component (botes, textos etc.); Na criao de recipientes ou objetos da classe Container (janelas, paineis etc.) para receber os componentes criados; Na adio dos componentes aos recipientes, com base num sistema de coordenadas (especificando a localizao da insero) ou via utilizao de gerenciadores de layouts que se encarregam de definir a localizao e aspecto visual dos componentes inseridos nos recipientes.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

99

Figura 26 Hierarquia de eventos AWT 5.1.2 JFC O Java Foundation Classes (JFC) fornece um poderoso e flexvel suporte para a criao de aplicaes grficas.O objetivo da JFC simplificar o desenvolvimento de programas 100% Java para ambientes de rede e estaes locais. Atravs destas classes voc pode desenhar aplicaes para refletir o sistema operacional que est armazenando a JVM, ou criar sua prpria interface grfica ou utilizar o visual dos recursos da plataforma Java e das implementaes da JVM. So cinco APIs (Application Programming Interface) que compem a JFC. A API AWC e a Swing API so os elementos fundamentais para a criao de interfaces grficas. A Java2D API fornece um conjunto de recursos para, atravs da AWT, permitir que aplicaes avanadas sejam criadas, especificamente para a manipulao de imagens e desenho em 2D. A Accessibility API fornece uma interface de programao necessria para apoio s aplicaes voltadas para tecnologias assistidas, para pessoas com alguma deficincia fsica. A Drag and Drop API fornecem suporte transferncia de dados entre duas aplicaes Java e entre uma aplicao Java e uma aplicao nativa do sistema operacional. Para programar uma aplicao grfica ou um applet, voc precisa referenciar o pacote java.awt em sua aplicao. Dentro deste pacote, a AWT encapsula as caractersticas especficas da plataforma para a implementao da uma aplicao Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

100

grfica Java. Esta classe a ponte entre as particularidades de cada plataforma e as primitivas grficas da plataforma Java, responsveis pelo desenho das interfaces grficas.

Figura 27 Java Foundation Classes 5.1.3 Swing API O conjunto de componentes fornecidos pela AWT adequado para tarefas simples, mas possui algumas limitaes. Por exemplo, a dificuldade na criao de um novo tipo de componente a partir de uma implementao de subclasse Component, porque ele exige que seja criado por objeto. Na verso 1.1 da plataforma Java, a AWT introduziu um framework para a criao leve de componentes grficos. Este framework estende as classes java.awt.Component e a java.awt.Container, sem a necessidade de criar componentes nativos. A Swing API est contruda sobre esta framework e fornece um conjunto de componentes que so completamente independentes de plataforma e sem a necessidade em gerar cdigo para uma plataforma em particular. A Swing API possui 100% dos componentes da AWT, mais componentes adicionais que tambm so 100% Java, ou seja, a biblioteca no possui nenhum cdigo dependente de plataforma. Ela composta de mais de 250 classes e 75 interfaces agrupadas nas seguintes categorias:

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

101

Um componente chamado JComponent que estende a classe de container da AWT e o conjunto de componentes que so subclasses do JComponent. Todos este componentes possuem em seu nome a letra inicial J;

Classes de suporte no visveis, que fornecem servios importantes, como classes de eventos e o modelo de implementao, que a parte do Swing responsvel pelo modelo de Design;

Um conjunto de interfaces relacionadas que so implementadas pelos componentes Swing e classes de suporte da API.

Tabela 12 Componentes Swing As aplicaes Java que possuem interface grfica utiliza componentes Swing e componentes AWT, juntos em uma mesmoa direo. Os componentes Swing utilizam os mesmos gerenciadores de layout, eventos dos objetos e interfaces, assim como os componentes AWT.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

102

Figura 28 Hierarquia de classes AWT e Swing

5.2 Componentes Swing

5.2.1 JComponent Fornece uma aparncia que pode ser especificado pelo programador ou (opcionalmente) selecionada pelo usurio em tempo de execuo, alm disso permite a criao de componentes personalizados. Uma borda que implicitamente define os limites do componente e possui a habilidade para definir o tamanho mximo, mnimo e preferido de um componente. Fornece o recurso de ToolTips -- descries curtas quando o cursor passa sobre um componente. Tambm fornece o recurso de Autoscrolling, que ocorre a rolagem automtica em lista, tabelas ou rvore quando o mouse arrastado sobre estes com o boto pressionado. Todos os componentes possuem dois modos de cores associados: a de fundo (background) e a de frente (foreground). A JFC introduz um conceito de um componente lightweight, que possui um fundo transparente que permite ver o que est atrs do componente. O componente transparente no faz uso de cores de fundo. A classe JComponent possui os mtodos isOpaque, que retorna false se o

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

103

componente transparente, e setOpaque(boolean b), que permite alterar esta propriedade.

Tabela 13 Mtodos da classe JComponent 5.2.2 Frame e JFrame Uma Frame uma janela com uma barra de ttulo e uma borda. A classe Frame especializa a classe Window, que por sua vez, especializa a classe container. A classe Frame implementa a interface MenuContainer, logo uma frame pode ter uma barra de menu associada a ela. Frames so geralmente usadas para construir aplicaes, mas tambm podem ser usadas com applets. Se uma aplicao tem uma janela dependente de outra (que desaparece quando a outra iconificada, por exemplo), ento deve-se utilizar Dialog ou Window para esta janela. A classe Frame por padro no fornece ao usurio mecanismos para ser fechada com o clique do mouse no boto para fechar a janela (x). Quando um programa Java inicia com uma Interface Grfica, v-se a janela onde a aplicao ir fazer as interaes com o usurio atravs de teclado e mouse. No Swing, a interface principal da aplicao implementada pelo componente javax.swing.JFrame. Assim como outros componentes, o JFrame derivado do controle da AWT e segue a estrutura hierrquica dos componentes AWT e Swing. Quando criado, o JFrame possui um nico filho o container que uma instncia da classe JRootPane. A classe JRootPane pode gerenciar outros 4

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

104

componentes: um JLayeredPane, um ContentPane, um MenuBar e um GlassPane. JRootPane gerenciado de forma a cobrir a superfcie inteira da JFrame, exceto a barra de ttulo e o tamanho da barra. A classe MenuBar class encapsula os conceitos da plataforma para os limites da barra de menu para uma janela. O objetivo associar a barra de menu com um objeto Frame, chamando o mtodo setMenuBar.

Tabela 14 Mtodos da classe JFrame


import javax.swing.*; public class BasicFrame extends JFrame { public static void main(String[] args) { BasicFrame bf = new BasicFrame ("Exemplo de Janela Java"); } BasicFrame (String title) { super(title); setSize(250, 200); setVisible(true); } }

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

105

Figura 29 Janela JFrame 5.2.3 JPanel A classe JPanel (painel) uma sub-classe de JComponent. Tem o propsito de agrupar componentes para serem posteriormente inseridos em outro container e permitem a criao de layouts sofisticados. Podem conter componentes incluindo outros painis e utiliza o gerente de layout FlowLayout como padro.
import java.awt.*; import javax.swing.*; public class PanelDemo { private JPanel painelAzul; private JPanel painelVermelho; private JFrame janelaDemo; public PanelDemo() {

painelAzul = new JPanel(); painelVermelho = new JPanel(); janelaDemo = new JFrame(); painelAzul.setBackground(Color.blue); painelVermelho.setBackground(Color.red); painelAzul.setSize(50,50); painelVermelho.setSize(100,100); janelaDemo.getContenPane().setLayout(null); janelaDemo.setSize(200,200);

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

106

janelaDemo.getContentPane().add(painelAzul); janelaDemo.getContentPane().add(painelVermelho); painelAzul.setLocation(10,10); painelVermelho.setLocation(10,70); janelaDemo.setVisible(true); } public static void main(String[] args) PanelDemo p = new PanelDemo(); } } {

5.2.4 JDialog Um JDialog uma janela com uma barra de ttulo. As caixas de dilogos so em geral usadas para obter/mostrar informaes do/para o usurio. O swing fornece um rico conjunto de dilogos que permite interaes bsicas com o usurio sem a necessidade de escrever muito cdigo. Alguns aspectos importantes sobre caixas de dilogo: Caixas de dilogos podem ser modais ou no-modais; Caixas modais no permitem que outras janelas sejam acessadas at que a caixa de dialogo seja fechada; Caixas no-modais permitem que outras janelas sejam manipuladas simultaneamente a janela de dialogo; BorderLayout o gerente de layout usado implicitamente por caixas de dilogos

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

107

Tabela 15 Construtores JDialog JDialog utiliza uma estrutura de camadas como a classe JFrame. Assim, ao adicionarmos um componente, devemos utilizar o ContentPane:
dialog.getContentPane().add(comp1);

Tabela 16 Mtodos da classe JDialog 5.2.5 JLabel Uma rea aonde textos no editveis e imagens podem ser mostrados. Estes rtulos so usados para informaes ou instrues textuais na interface grfica, mostrando um texto no editvel na posio selecionada. Uma vez criado um rtulo, programas raramente modificam seu contedo. Os construtores da classe JLabel so:
public JLabel()

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

108

public JLabel (String s) public JLabel (String s, int alignment) public JLabel(String text, Icon icon,int horizontalAlignment) public JLabel(Icon icon, int horizontalAlignment)

Para avaliarmos como implementar uma classe JLabel, avalie o cdigo Java abaixo:
import java.awt.*; import javax.swing.*; public class TesteLabel { public static void main(String[] args) { JFrame fr = new JFrame(); JLabel lb = new JLabel(Texto em baixo, new ImageIcon(duke.gif), SwingConstants.LEFT); lb.setHorizontalTextPosition(SwingConstants.CENTER); lb.setVerticalTextPosition(SwingConstants.BOTTOM); fr.getContentPane().add(lb); fr.pack(); fr.setVisible(true); } }

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

109

5.2.6 JTextComponent A classe JTextComponent uma abstrao de um componente que recebe inseres de textos do usurio. Ela a super-classe abstrata de duas classes com funcionalidades em comum: JTextField e JTextArea e seus mtodos e atributos so compartilhados por estas.

Tabela 17 Mtodos da classe JTextComponent

5.3 GERENCIADORES DE LAYOUT

Embora seja possvel posicionar objetos em coordenadas fixas (x, y), deve-se evitar essa prtica em Java. Isso causa problemas de portabilidade: outras JVMs, GUIs e Window Managers tero fontes e outros elementos em tamanhos e propores diferentes. Baseados em regras, os Layout Managers calculam as coordenadas automaticamente. H 6 gerenciadores de layout pr-definidos no pacote java.awt.*: FlowLayout; GridLayout;

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

110

BorderLayout; CardLayout; GridBagLayout; BoxLayout.

Implicitamente, cada container possui um gerenciador de layout default associado. Assim, se no for declarado nenhum gerenciador de layout para o container, ser usado o layout default. Um programador pode tambm criar novos gerenciadores de layout. Para escolher um gerenciador de layout adequado para suas necessidades, considere o seguinte: Se voc precisa mostrar alguns componentes utilizando os seus tamanhos naturais em uma linha, ento use o FlowLayout. Se voc precisa mostrar componentes de mesmo tamanho em linhas e colunas, ento use o GridLayout; Se voc precisa mostrar painis alternativamente, ento use o CardLayout; Se voc precisa mostrar componentes e espalh-los utilizando todo espao disponvel, ento utilize o BorderLayout ou GridBagLayout.

Cada container tem um gerenciador de layout default: JPanel (incluindo JApplet) FlowLayout WindowBorderLayout BorderLayout JmenuBar BoxLayout

Para utilizar um gerenciador de layout diferente do default, voc precisa criar uma instncia do gerenciador de layout desejado e avisar ao container para us-lo:
aContainer.setLayout(new CardLayout()); // ou CardLayout meuCardLayout = new CardLayout();

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

111

aContainer.setLayout(meuCardLayout); // ou aContainer.setLayout(null); //sem gerenciador

Os mtodos add, remove e removeAll (que adiciona e removem componentes) podem ser utilizados a qualquer momento. Mas se voc muda o tamanho de um componente indiretamente (por exemplo, mudando a sua Font), ento voc dever invocar o mtodo invalidate para o componente e, logo, aps invocar o mtodo validate para o container. Os mtodos getPreferredSize e getMinimumSize podem retornar valores sem significado (os seus valores so vlidos somente aps o componente ter sido mostrado a primeira vez).

5.4 EVENTOS

5.4.1 O que so eventos Quando o usurio interage com uma interface de aplicativo final (teclado, mouse etc), isso causa o disparo de alguma ao: o evento. Mais propriamente, eventos so objetos que descrevem a ao ocorrida. Qualquer objeto pode ser notificado de um evento. Existem vrios tipos de classes de eventos para tratar as diversas categorias de aes desencadeadas pelo usurio final. necessrio incluir a instruo import java.awt.event.* .

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

112

5.4.2 Como os eventos so processados? Atravs de um modelo de delegao de eventos. Os componentes da AWT implementam rotinas de manipulao de eventos (listener) com o objetivo de receber eventos. O componente que gera o evento chamado de fonte do evento (event source). O componente que trata o evento chamado de manipulador de evento (event handler) ou ouvinte de evento (event listener). Normalmente a manipulao do evento delegada para uma classe separada do componente-fonte desse evento.

import java.awt.*; import java.awt.event.*; import javax.swing.*;

public class TesteEvento { public static void main (String args[]) { JFrame j = new JFrame("Teste de evento"); JButton b = new JButton("Pressione-me!"); b.addActionListener(new ActionDemo()); j.getContentPane().add(b, BorderLayout.CENTER); j.pack(); j.setVisible(true); } }

class ActionDemo implements ActionListener { public void actionPerformed (ActionEvent e){ System.out.println("Acao executada");

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

113

} }//classe externa de tratamento do evento

5.8 APPLETS

Java Applets so mini-programas grficos que executam em um contexto de outro programa, que tambm so conhecidos como containers. A Internet foi a grande alavancadora da tecnologia, considerando que seu uso ficou mais explorado em pginas Web. Um applet no uma aplicao convencional em Java. Na verdade um mini-programa que chamado a partir de um programa maior, como um visualizado de applets ou um navegador compatvel com a tecnologia Applet. Por isso um applet precisa de um outro programa, sempre, para que possa ser executado. Isso significa que o visualizador ou o navegador implementam as funes mais comuns para applets e fornece estas funes para o applet, atravs da Java API. o container que controla a execuo do applet. Um applet grfico por natureza. Cada applet ocupa um painel retangular na janelva de visualizao do container. Os applets podem ser vinculados em uma pgina Web, assim como uma imagem vinculada em uma pgina.
import java.applet.*; import java.awt.*; public class exemploApplet extends Applet { public void paint (Graphics g) { g.drawString (Exemplo de Applet, 25, 50); } }

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

114

Todo applet uma extenso da classe java.applet.Applet. A classe base Applet fornece mtodos que derivam da classe Applet e esta por sua vez mantm a comunicao entre o container e a aplicao. Os mtodos que esto associados instanciao dentro de um navegador so: Obter parmetros do applet; Obter a localizao de rede de um arquivo HTML que contm o applet; Obter a localizao de rede de um applet em um diretrio de classes; Imprimir na barra de status do navegador; Preencher e apresentar uma imagem; Preencher e tocar um arquivo de udio; Alterar o tamanho do applet.

Alm disso, a classe Applet fornece uma interface na qual o container, no caso o navegador, obtm informaes sobre o applet e controla a execuo do applet. Desta forma quando instanciado no container, acontece: Requisita informaes sobre o autor, verso e copyright do applet; Requisita uma descrio dos parmetros que o applet reconhece; Inicializa o applet. Neste caso, o evento init executado quando o applet carregado ou recarregado; A execuo do applet iniciada. Neste momento o evento start ser executado aps o mtodo init ou quando a pgina recarregada; Pra a execuo do applet. neste caso aonde o evento stop executado. Quando o usurio muda de pgina, continuando na memria, ou quando a execuo do browser encerrada; Finalmente h o evento destroy que executado quando a applet for ser removido da memria. Para chamar um applet de uma pgina Web, o cdigo deve ser o seguinte:
<html> <title>Exemplo de uso de applet em pgina HTML</title> <hr> <applet code=exemploApplet.class width=320 height=120>

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

115

Se o seu navegador compatvel com Java, uma mensagem Exemplo de Applet dever aparecer aqui.

</applet> <hr> </html>

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

116

EXERCCIOS PROPOSTOS 1) Qual a vantagem do uso de gerenciadores de layout nos trabalhos de construo de interfaces grficas em Java? ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ 2) Diferencie uma aplicao Java de um applet Java? ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ ______________________________________________________________

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

117

SNTESE Nesta aula voc aprendeu como construir programas com interfaces grficas. No uma tarefa simples, mas a verso mais atual do Java, oferece um grande conjunto de melhorias e as instrues necessrias para a construo de aplicaes grficas est muito facilitado. Voc viu tambm como trabalhar com Applets. Este o tipo de aplicao que tem muita procura a ser atendida, j que atravs deles que possvel gerar uma interao entre um programa convencional Java e recursos de uma pgina Web. Na prxima aula, vamos falar mais sobre como utilizar objetos com Java para expandir ainda mais as capacidades de nossas aplicaes. At l.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

118

Aula 6

TRABALHANDO COM OBJETOS

OBJETIVOS DA AULA

Compreender

os

desafios

do

desenvolvimento

corporativo e as solues baseadas em Java que fornecem suporte s solues; Conhecer a construo de componentes de software usando Java; Aprender como as aplicaes Java operam em ambientes distribudos, inclusive na Internet.

CONTEDO DA AULA Acompanhe os assuntos desta aula, se preferir, aps o seu trmino, assinale o contedo j estudado. Introduo ao J2EE; Usando Java Beans; Java em rede; Java Server Pages e Servlets.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

119

Prezado aluno, A medida que as aplicaes Java cresceram em amplitude de uso e possibilidades de negcios, novas demandas foram surgindo para a plataforma. O uso do Java em ambiente corporativo gerou exigncias como, capacidade de gerenciamento de grande volume de dados, regras de negcios complexas e dinmicas e grande volume de usurios simultneos. O ambiente transacional de hoje espera tecnologias que atendam questes como segurana, distribuio, velocidade e resilincia. Nesta aula, vamos conhecer os componentes da plataforma Java que oferecem respostas para as mais diversas finalidades nas aplicaes corporativas. No centro desta aula estar o conceito de objetos distribudos no Java, como tambm, sobre o conceito de aplicaes empresariais que necessitam de alta capacidade de processamento. Finalmente, vamos falar um pouco de como a linguagem Java oferece suporte ao desenvolvimento Web. Tenha uma boa aula.

6.1 J2EE

6.1.1 O que J2EE? J2EE, ou Java 2 Enterprise Edition, uma plataforma para desenvolvimento de aplicaes distribudas. Apresenta facilidades para a utilizao dos recursos computacionais e distribudos tais como acesso banco de dados, componentes Web, utilizao de mensagens assncronas, execuo de processos transacionais, persistentes e outros. Apresenta uma API, especificada pela Sun MicroSystems, que proporciona um padro para a implementao dos diversos servios que oferece, sendo que isto

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

120

pode ser feito diferentemente por vrias empresas, de formas distintas mas ainda assim oferecendo as mesmas facilidades, por estarem de acordo com as especificaes impostas para a sua construo. Para um programador que j tenha tido contato com a linguagem Java e suas APIs na J2SE (Java 2 Standart Edition), este no ter muitas dificuldades no entendimento e na utilizao de J2EE. O que precisa entender os detalhes da arquitetura e onde se encontram cada componente e seus recursos, isto , se faz necessrio se ambientar neste contexto para se fazer o uso correto da plataforma.

6.1.2 Arquitetura J2EE A arquitetura J2EE se apresenta em vrias camadas, sendo que cada camada composta por componentes e servios que so providos por um container. Um exemplo o uso de pginas HTML em um Web Browser em uma simples navegao em um site qualquer. Podemos entender como container, o prprio navegador que fornece recursos e facilidades para o componente, neste caso as pginas HTML. O componente por sua vez, pode oferecer diversos servios ao usurio, atravs do suporte do container, tais como facilidades visuais como botes, hiperlinks, figuras e tabelas, e o prprio servio de navegao. Em um servidor J2EE, podemos ter diversos containers interagindo entre si.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

121

Figura 30 Arquitetura J2EE (fonte: Sun) Camada cliente: acesso por meio de interfaces standalone (aplicaes Java), pginas HTML ou Applets. Nesta camada os componentes residem em um Applet Container, em um HTML container (Web browser) ou em um Application Client Container. O Applet container, fornece recursos para um componente Applet executar e se tornar funcional para o usurio. O Web Browser apresenta recursos e funcionalidades para o uso de pginas HTML e por fim o Application Client container fornece recursos para a execuo das classe standalone utilizadas pelos usurios para interagirem no sistema; Camada Web: esta camada implementada por JSPs e Servlets, que fornecem a lgica para a camada cliente ( ou de apresentao ) do negcio. JSPs e Servlets residem no Web Container. JSPs oferecem a facilidade de utilizar algumas lgicas de apresentao em uma pgina web sem muitas dificuldades tecnolgicas. O Servlet apresenta-se como um controlador das aes executadas pelos usurios nas pginas de apresentao, e fornece recursos para obtr dados dessas aes e realizar as operaes desejadas.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

122

Os componentes Web residem no Web Container que pode ser um servidor TomCat ou outro similar; Camada de Negcios: esta camada trata da lgica de negcio da aplicao. nela que implementamos todas as regras de negcio, alocao de recursos, persistncia de dados, validao de dados, gerencia de transaes e segurana, providos por componentes conhecidos por EJBs. Este por sua vez residem no EJB Container; Camada EIS Enterprise Information System, ou Sistema de informaes empresariais: nesta camada que se encontram os sistemas de banco de dados, sistemas legados, integrao com outros sistemas no J2EE etc.

6.2 Usando Javabeans O principal objetivos dos programadores realizar a integrao de componentes de software seja uma realidade, com o objetivo de construir aplicaes corporativas de forma mais rpida e segura. O objetivo em criar componentes de software reutilizveis e intercambiveis um modelo definitivo na engenharia de software para aplicaes distribudas. O modelo de componentes JavaBeans fornece um framework para criar, reutilizar e empacotar componentes de software. Ento, o principal objetivo em utilizarmos JavaBeans acelerar o processo de construo de componentes reutilizveis, atravs de mtodos j disponveis nas classes JavaBeans. Normalmente so pequenas aplicaes visuais que tem por finalidade ampliar a capacidade de construo de software com interface grfica (GUI). Para criar uma classe JavaBeans, voc deve se utilizar dos pacotes java.beans e java.beans.context, que esto includos no J2SE. importante observar que no existe uma superclasse que compreenda todas as extenses JavaBeans e que tambm no apresenta um modelo centralizado de interfaces para implementar JavaBeans.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

123

Como o objetivo a criao de componentes que sero utilizados em interfaces grficas, um JavaBean expe membros de sua implementao atravs de trs elementos importantes: Mtodos: um mtodo representa alguma ao que pode ser executada pelo JavaBean; Propriedades: uma propriedade representa um atributo de um JavaBean, como a sua cor ou tamanho da fonte; Eventos: os objetos JavaBean utilizam eventos para notificar os outros objetos que algum evento ocorreu. Estes objetos so os mesmos conceitos que j vimos em orientao a eventos usando Swing. Para trabalhar com JavaBeans importante que voc compreenda os conceitos fundamentais sobre o modelo de desenvolvimento e sua terminologia. Na verdade, os conceitos se utilizam de muitas informaes sobre a linguagem Java e por isso, voc no ter muita dificuldade em conhec-los.

Tabela 18 Terminologia JavaBean Alm da terminologia, importante tambm voc entender como o processo de desenvolvimento de um JavaBean acontece e qual o seu uso. O principal usurio de um JavaBean um programador. Na verdade, o objetivo acelerar o processo de desenvolvimento para um programador, atravs de objetos pr-construdos que venham a atender uma finalidade especfica. Por isso, existem trs profissionais envolvidos neste processo: programador que cria ferramentas para o consumo de

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

124

JavaBeans, o programador que cria um JavaBean e o programador que consome o JavaBean.

Figura 31 Processo JavaBean O importante neste processo que uma vez criado o componente JavaBean, este poder ser reutilizado por vrios programadores e poder ficar disponvel em qualquer ambiente IDE que seja compatvel com o modelo JavaBean. Para conhecer mais sobre a especificao JavaBean, acesse o seguinte endereo: http://splash.javasoft.com/beans/spec.html

6.2.1 Enterprise JavaBeans A especificao Enterprise JavaBeans (EJB) descreve um modelo para componentes Java que foram construdos para serem instalados e disponibilizados a partir de um servidor. A conexo entre os componentes EJB e o JavaBeans que ambos referem-se a um modelo de programao da linguagem Java. Exceto pela similaridade dos nomes, so poucas as similaridades funcionais entre os dois modelos.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

125

Apesar de estar baseada nos conceitos do JavaBeans, a especificao EJB no inclui as mesmas regras de programao que o JavaBeans. Os componentes EJB so destinados para o uso em solues trs camadas e em ambientes de redes de computadores, com a finalidade de compartilhamento de objetos atravs de vrios sistemas. Os componentes EJB possuem somente a lgica necessria para um processo de negcio, ou seja, voc pode desenvolver componentes que possuam apenas cdigo de programao, este componente poder ser armazenado em algum servidor da rede e este componente permitir ser utilizado remotamente por aplicaes nas estaes da rede local. Normalmente, os componentes EJB so disponibilizados em um servidor atravs de um software chamado servidor de aplicaes. Os aplicativos em Java se comunicam com um servidor de aplicaes na rede, e este disponibiliza objetos que podero ser consumidos de acordo com determinadas condies. No servidor de aplicaes, os componentes EJB ficam localizados em um container EJB. O container controla todos os detalhes para a criao, ativao e destruio das instncias de um componente EJB. Ele tambm controla as complexas atividades de controle de transaes e segurana, fazendo com que os componentes distribudos possam receber funcionalidades essenciais, sem a necessidade de serem explicitamente implementadas no cdigo do componente. Para criar uma classe EJB, voc deve definir uma classe que executa uma determinada regra de negcio e ento adicionar os mtodos para uma interface EJB. O servidor precisa fornecer as implementaes que estejam de acordo com a especificao EJB. Seu EJB ento disponibilizado em um servidor de aplicaes.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

126

6.3 Trabalhando com Java em Rede

6.3.1 Trabalhando com URLs Para muitos programadores, a necessidade para programar solues para a Internet, mais especificamente para a Web, foi uma das razes para aprender a linguagem de programao Java. Diferente de muitas outras linguagens, o Java foi desenhado para atuar com bastante facilidade nas tecnologias da Internet. O J2SE SDK oferece um pacote java.net, que especfico para realizar conexes atravs de uma rede de computadores e executar comandos de entrada e sada para os computadores remotamente. Uma aplicao para este pacote o uso em URLs. Os endereos de sites na Web utilizam um protocolo de comunicao, que voc j conhece, chamado HTTP (Hypertext Transfer Protocol). O pacote java.net contm classes que foram construdas ao redor dos padres HTTP. As classes essenciais para esta operao so a URL e a URLConnection. Basicamente voc obtm acesso ao arquivo que est sendo transferido atravs do protocolo e pode processar o seu contedo de acordo com a sua necessidade. Voc tambm pode conectar-se a um servidor URL e executar uma srie de operaes para a criao e leitura de contedo no site. O caminho mais seguro para a comunicao com o servidor URL atravs da classe URLConnection. Aps voc realizar a conexo, voc poder requisitar ou enviar informaes, porm uma URLConnecetion fechada automaticamente aps a troca de dados ter sido concluda e voc no pode manter uma conexo por um perodo longo. Desta forma, voc precisa restabelecer a comunicao com o servidor a cada necessidade de troca de informaes.
package examples.network; import java.net.*; import java.util.Date;

public class ObjetosURL{

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

127

public static void main(String[] args){ try{ URL sunPage = new URL(http://www.sun.com); URLConnection sunPageConn=sunPage.openConnection(); Date lastModified=new Date(sunPageConn.getLastModified(); System.out.println(sunPage+ foi modificada pela ltima vez em +lastModified); catch(Exception x){ System.out.println(x); } } }

6.3.2 Usando RMI O RMI (Remote Method Invocation) uma tecnologia utilizada pelos programadores para chamar diretamente mtodos de objetos Java que residem em outros sistemas. Nesta abordagem voc no precisa estabelecer uma referncia para um objeto que est em um sistema remoto. Ao invs disso, voc estabelece uma referncia para um stub object que um substituto local para o objeto remoto. Este stub retorna um objeto local atravs de um ORB (Object Request Broker), em resposta sua solicitao para localizar um objeto. Um stub object possui os mesmos mtodos suportados pelo objeto remoto, mas ao invs de executar mtodos independentemente, ele encaminha os parmetros para o objeto remoto e passa de volta qualquer retorno de valor do mtodo. A tcnica utilizada para encaminhar os parmetros para um objeto remoto chamada de marshaling. Aps o marshaling, os parmetros so serializados em um arquivo de bytes e enviado para o sistema remoto.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

128

No sistema remoto, que possui o objeto recebe o arquivo e utiliza a tcnica chamada unmarshaling para desserializar o contedo dos parmetros e consequentemente o mtodo executado. Caso tenha valor de retorno, ele enviado de volta ao processo original, realizando as mesmas operaes no caminho inverso.

Figura 32 Processo RMI Voc pode utilizar uma combinao de classes servidora e cliente para colocar o uma classe remota para funcionar. Essencialmente, o programa servidor criar um objeto remoto e ir registr-lo como um servio e o programa cliente ir localizar estes objetos usando o servio para obter as referncias dos objetos. Por padro, os objetos nomeados para os servios so registrados e disponibilizados atravs de um servio no servidor. O servio de registro abre um canal de comunicao com os clientes atravs da porta 1099, que padro do RMI. Exemplo de uma classe servidora RMI:
package examples.network; import java.rmi.Naming; import java.rmi.RMISecurityManager; /** Um programa server-side que cria e registra * objetos StudentImpl com um registro RMI para uso pelos * clientes

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

129

*/ public class StudentEnrollment { public static void main( String[] args ) { if ( System.getSecurityManager() == null ) { System.setSecurityManager( new RMISecurityManager() ); } try { StudentImpl[] students = { new StudentImpl( 1001, "Elaine Jones" ), new StudentImpl( 1002, "Patricia Hartswell" ), new StudentImpl( 1003, "Darius Smith" ), new StudentImpl( 1004, "Mary Bagshaw" ), new StudentImpl( 1005, "Henry Miller" ) }; for ( int i = 0; i < students.length; i++ ) { int id = students[i].getID(); Naming.rebind( "Student" + id , students[i] ); } System.out.println( "Student objects bound." ); } catch ( Exception x ) { x.printStackTrace(); } } }

Exemplo de uma classe cliente RMI usando a classe acima:


package examples.network; import java.rmi.Naming; import java.rmi.RMISecurityManager;

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

130

/** Um programa cliente para acessar e atualizar os * objetos no servidor */ public class StudentClient { private static final String HOST_NAME = "localhost"; public static void main( String[] args ) { if ( System.getSecurityManager() == null ) { System.setSecurityManager( new RMISecurityManager() ); } try { Student s1001 = (Student) Naming.lookup( "//" + HOST_NAME + "/Student1001" ); Student s1005 = (Student) Naming.lookup( "//" + HOST_NAME + "/Student1005" ); System.out.println( s1001.getName() ); System.out.println( s1005.getName() ); System.out.println( s1001.getCredits() ); s1001.addCredits( 3 ); s1001.setName( "Elaine Goldman" ); System.out.println( s1001.getName() ); System.out.println( s1001.getCredits() ); } catch ( Exception x ) { x.printStackTrace(); } } }

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

131

6.3 Java Server Pages e Servlets

A Internet e a linguagem Java j esto muito maduras em seu relacionamento. A Internet j uma realidade para a disponibilizao de informaes mundiais, atravs de um mecanismos simples e acessvel grande maioria das pessoas. Isso fez com que ocorresse uma mudana fundamental na forma como os programadores constrem aplicaes, pois agora temos uma nova plataforma para o desenvolvimento das aplicaes e com muitas tecnologias envolvidas. Isto faz com que o progamador Java precise conhecer um amplo conjunto de conhecimentos para desempenhar com competncia a construo de aplicaes para a Web. Neste tpico vamos falar exclusivamente das duas tecnologias Java que suportam o desenvolvimento Web: pginas JSP e Servlets.

6.3.1 O que um servlet? Servlets so classes Java, desenvolvidas de acordo com uma estrutura bem definida, e que, quando instaladas junto a um Servidor que implemente um Servlet Container (um servidor que permita a execuo de Servlets, muitas vezes chamado de Servidor de Aplicaes Java), podem tratar requisies recebidas de clientes. Veja um exemplo de um Servlet:
import java.io.*; import java.util.Date; import javax.servlet.*; import javax.servlet.http.*; public class TodayServlet extends HttpServlet { public void doGet( HttpServletRequest request, HttpServletResponse response ) throws IOException, ServletException { response.setContentType( "text/HTML" );

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

132

response.setHeader( "Pragma", "no cache" ); response.setHeader( "Cache-Control", "no cache" ); response.setHeader( "Expires", "0" ); PrintWriter out = response.getWriter(); out.println( "<HTML>" ); out.println( "<head>" ); out.println( "<title>Today</title>" ); out.println( "</head>" ); out.println( "<body>" ); out.println( "<h1>The current date and Time is:</h1>" ); Date today = new Date(); out.println( "<p>" + today + "</p>" ); out.flush(); out.println( "</body>" ); out.println( "</HTML>" ); }

Para executar um servlet voc precisa de um servidor Web e este servidor precisa ter o mecanismo de interpretao de servlets. Existem vrios servidores Web de fabricantes diferentes.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

133

Figura 33 Processo de um Servlet 6.3.2 Java Server Pages As pginas JSP, ou Java Server Pages, foram criadas para contornar algumas das limitaes no desenvolvimento com Servlets: se em um Servlet a formatao da pgina HTML resultante do processamento de uma requisio se mistura com a lgica da aplicao em si, dificultando a alterao dessa formatao, em uma pgina JSP essa formatao se encontra separada da programao, podendo ser modificada sem afetar o restante da aplicao. Assim, um JSP consiste de uma pgina HTML com alguns elementos especiais, que conferem o carter dinmico da pgina. Esses elementos podem tanto realizar um processamento por si, como podem recuperar o resultado do processamento realizado em um Servlet, por exemplo, e apresentar esse contedo dinmico junto a pgina JSP. Existe tambm um recurso adicional bastante interessante na utilizao de pginas JSP: a recompilao automtica, que permite que alteraes feitas no cdigo da pgina sejam automaticamente visveis em sua apresentao. Assim, no necessrio interromper o funcionamento da aplicao para incorporar uma modificao de layout, por exemplo.
<HTML> <HEAD> <META NAME="Pragma" CONTENT="no-cache">

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

134

<META NAME="Cache-Control" CONTENT="no-cache"> <META NAME="Expires" CONTENT="0"> <TITLE>Member Info Update</TITLE> </HEAD> <%@ page import="skiclub.*" %> <BODY BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#990099" >

<CENTER> <IMG SRC="/skiclub/images/SkiClub.gif"

ALT="Near Hills Ski Club " > <h2>Member Information Update</H2> </CENTER> <p>Please complete the form below and press <strong>Update</strong> to change the information on our records. </p> <CENTER> <FORM METHOD=POST ACTION= "http://localhost:8080/servlet/skiclub.UpdateServlet"> <TABLE BORDER=0 BGCOLOR="#DDDDFF" CELLPADDING=5 > <TR> <TD><strong>First name</strong></TD> <TD><INPUT TYPE="text" NAME="FNAME" VALUE="<%= ( (ClubMember) session.getValue( "member" ) ).getFirstName() %>" SIZE=30 MAXLENGTH=30 >&nbsp;</TD> </TR> <TR> <TD><strong>Initials</strong></TD> <TD><INPUT TYPE="text" NAME="MNAME"

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

135

VALUE="<%= ( (ClubMember) session.getValue( "member" ) ).getMiddleName() %>" SIZE=30 MAXLENGTH=30 >&nbsp;</TD> </TR> <TR> <TD><strong>Last name</strong></TD> <TD><INPUT TYPE="text" NAME="LNAME" VALUE="<%= ( (ClubMember) session.getValue( "member" ) ).getLastName() %>" SIZE=30 MAXLENGTH=30 >&nbsp;</TD> </TR> <TR> <TD><strong>Phone Number</strong></TD> </TD> <TD><INPUT TYPE="text" NAME="PHONE" VALUE="<%= ( (ClubMember) session.getValue( "member" ) ).getPhoneNumber() %>" SIZE=10 MAXLENGTH=10 > <em>digits only</em> </TD> </TR> <TR> <TD><strong>Address</strong></TD> <TD><em>For demonstration purposes, this field is a placeholder</em></TD> </TR> <TR> <TD><strong>Skiing Ability</strong></TD> <TD>

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

136

<%! String[] levels = { "Novice", "Intermediate", "Advanced", "Expert" }; %> <% String ability = ( (ClubMember) session.getValue( "member" ) ).getAbility(); out.println( "<SELECT NAME=\"ABILITY\" >" ); for ( int i = 0; i < levels.length; i++ ) { out.print( "<OPTION VALUE=\"" + levels[i] + "\""); if ( ability.equals( levels[i] ) ) { out.print( " SELECTED>" ); } else { out.print( ">" ); } out.println( levels[i] + "</OPTION>" ); } out.println("</SELECT>"); %> </TD> </TR> </TABLE> <TABLE BORDER=0 CELLSPACING=20 > <TR> <TD><INPUT TYPE="submit" VALUE=" <TD><INPUT TYPE="reset" </TR> </TABLE> </CENTER> VALUE=" Update Reset "></TD> " ></TD>

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

137

<p>If this information is correct, you may: <ul> <li><a href="/servlet/skiclub.BookingServlet"> Update ski trip bookings</a></li> <li><a href="/skiclub/skiclub/memberHome.jsp"> Return to your member home page</a></li> </ul> </FORM> </p> </BODY> </HTML>

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

138

EXERCCIOS PROPOSTOS 1) Qual a diferena entre uma pgina JSP e um Servlet? ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ 2) Qual a principal finalidade do uso do J2EE? ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ ______________________________________________________________

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

139

SNTESE Nesta aula voc conheceu como as principais tecnologia Java se apresentam para resolver problemas mais complexos, de aplicaes corporativas e baseadas em objetos distribudos. A plataforma J2EE a proposta mais ampla que a Sun e seus colaboradores apresentaram para os programadores, considerando todo o conjunto de tecnologias envolvidas. Tambm neste contexto, voc pde perceber que a Internet uma grande revoluo tambm para os programadores, j que novas necessidades e novos formatos de aplicaes esto sendo exigidas pelo mercado. Isso gera no progamador a necessidade de conhecimentos essenciais sobre como as aplicaes na Web funcionam, incluindo conhecer a linguagem HTML, os protocolos de comunicao envolvidos na Internet, o funcionamento em detalhes de um navegador, uso de servidores de aplicaes e outros. Na prxima aula voc aprender como implementar banco de dados em suas aplicaes. At l.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

140

Aula 7

JAVA COM BANCO DE DADOS

OBJETIVOS DA AULA

Aprender como implementar programas Java usando recursos de banco de dados.

CONTEDO DA AULA Acompanhe os assuntos desta aula, se preferir, aps o seu trmino, assinale o contedo j estudado. Introduo a bancos de dados relacionais; Linguagem SQL; JDBC.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

141

Prezado aluno, Nesta aula voc voc aprender como trabalhar com bancos de dados em sua aplicao Java. A plataforma Java oferece um conjunto de classes principais que voc pode utilizar para acessar dados em um banco de dados relacional, que esteja sendo disponibilizado por um SGBD, que esteja instalado em seu computador local ou na rede, e que possua um driver de conexo para que as classes Java possam acess-lo. Desenvolver solues corporativas usando Java, muito comum a necessidade de implementao de uma conexo com banco de dados e o Java oferece todo o ferramental para que voc possa construir suas aplicaes. Tenha uma boa aula.

7.1 INTRODUO BANCOS DE DADOS RELACIONAIS

Um banco de dados uma coleo organizada de dados e os sistemas gerenciadores de banco de dados (SGBD) fornecem os mecanismos para organizar, armazenar, recuperar e modificar os dados pelo usurio. Em um Banco de Dados relacional temos uma srie de tabelas onde essas tabelas tm um conjunto de linhas e colunas. As colunas representam as informaes pertinentes a uma linha. Desta forma, as linhas devem ser identificadas univocamente por uma chave primria para que possam ser recuperadas posteriormente suas informaes. A chave primria pode ser uma coluna que nunca ter seus dados repetidos ou um conjunto de colunas que juntas nunca sero repetidas.
Coluna 1 CPF 4594545 Coluna 2 Nome Jnior da Silva Coluna 3 DataNascimento 24-08-2005

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

142

9454001 9345400

Armort de Souza Tianak da Costa

31-05-2005 12-02-2004

Vrios autores apresentam quais as vantagens no uso de um SGBD: Vantagem Eliminao da inconsistncia dos dados Descrio
Nos sistemas de arquivos os dados ficavam armazenados em locais isolados e s acessados pela linguagem que lhes deu origem, com isso tnhamos a mesma informao repetida em locais diferentes. Com a chegada dos SGDBs, os dados puderam ser centralizados, evitando esta duplicao e conseqentemente inconsistncia.

Facilidade de acesso aos dados

Devido ao fato dos dados estarem centralizados, estes puderam ser facilmente acessados por qualquer ponto da rede.

Prov eficiente segurana aos dados

Atravs de critrios de permisses definidos pelo administrador, podemos informar ao servidor quem pode acessar o que e quais operaes este pode realizar.

Prov restries de integridade

Nos SGDBs voc pode definir regras de integridade sobre os campos de uma tabela, com isso qualquer valor inserido naquela coluna dever respeitar esta regra.

Prov ferramentas eficientes para Um dos aspectos importante no uso de SGBDs backup e restore
a manuteno dos dados. Utilitrios para cpia de segurana e restaurao de dados so fundamentais para uma administrao dos dados do SGBD.

Um Sistema Gerenciador de Base de Dados (SGBD) uma coleo de programas que permitem aos usurios criarem e manipularem uma base de dados. Um SGBD , assim, um sistema de software de propsito geral que facilita o processo de definir, construir e manipular bases de dados de diversas aplicaes.

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

143

Definir uma base de dados envolve a especificao de tipos de dados a serem armazenados na base de dados;

Construir uma base de dados o processo de armazenar os dados em algum meio que seja controlado pelo SGBD;

Manipular uma base de dados indica a utilizao de funes como a de consulta, para recuperar dados especficos, modificao da base de dados para refletir mudanas no mini-mundo (inseres, atualizaes e remoes), e gerao de relatrios.

Figura 34 Aplicao acessando banco de dados

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

144

7.2 LINGUAGEM SQL

Na histria do desenvolvimento dos Bancos de Dados Relacionais, h o momento que foi necessrio o desenvolvimento de linguagens destinadas sua manipulao. Ento o Departamento de Pesquisas da IBM desenvolveu a SQL (Search and Query Language) como forma de interface para o SGBD denominado SYSTEM R no incio dos anos 70. Mas somente em 1986 o American National Standard Institute ( ANSI ), publicou um padro SQL (Structured Query Language), que estabeleceu-se como linguagem padro de Banco de Dados Relacional. A SQL pode ser dividida em dois tipos de comandos: A DDL (Data Definition Language) apresenta uma srie de comandos que permitem a definio dos dados. composta entre outros pelos comandos Create, destinado a criao do Banco de Dados, das Tabelas que o compe, alm das relaes existentes entre as tabelas. Exemplo de comandos: Create, Alter e Drop; e Os comandos da srie DML (Data Manipulation Language), destinados s consultas, inseres, excluses e alteraes em um ou mais registros de uma ou mais tabelas de maneira simultnea. Como exemplo de comandos, temos os comandos: Select, Insert, Update e Delete. A linguagem SQL um grande padro de banco de dados. Isto decorre da sua simplicidade e facilidade de uso. Ela se ope a outras linguagens no sentido em que uma consulta SQL especifica a forma do resultado e no o caminho para chegar a ele. Ela uma linguagem declarativa em oposio a outras linguagens procedurais. Isto reduz o ciclo de aprendizado daqueles que se iniciam na linguagem. Aps estabelecer a comunicao de sua aplicao C# com um SGBD, a forma como a sua aplicao ir armazenar, alterar e excluir dados atravs do uso da linguagem SQL. Este modelo de aplicao conhecido hoje como arquitetura cliente/servidor, pois as atividades de interface com o usurio (camada de aplicao)

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

145

e SGBD (camada de dados) esto fisicamente separados em uma rede de computadores. medida que este modelo evoluiu, novas camadas foram sendo inseridas, com o objetivo de aumentar a capacidade de processamento simultneo que a aplicao pode atender. Desta forma, as arquiteturas 3-Camadas e NCamadas, foram batizadas com uma camada adicional chamada aplicao, ou seja, as classes, mtodos e funes de uma aplicao, responsveis pela lgica do sistema, podem ficar armazenadas tambm em um servidor separado. O conceito de N-Camadas surgiu com o objetivo de representar a capacidade dos sistemas corporativos poderem escalar horizontalmente, ou seja, para cada camada podemos ter um ou vrios computadores. O processamento de consulta de dados de uma aplicao at o banco de dados, envolve uma srie de passos, os quais envolvem software, tecnologia e informaes.

Figura 35 O processo de consulta ao banco de dados usando SQL

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

146

Comandos DDL: Comando CREATE Descrio Permite a criao de tabelas no banco de dados ou mesmo de sua criao. DROP Elimina a definio da tabela, seus dados e referncias. ALTER Permite inserir/eliminar atributos nas tabelas j existentes

Comandos DML: Comando SELECT INSERT DELETE UPDATE Descrio Realiza a consulta em um banco de dados Insere dados em uma tabela especfica Exclui dadosde uma tabela segundo um critrio Atualiza os dados em uma tabela

7.3 JDBC

JDBC uma API (Application Program Interface) para acesso a SGBDs (Sistemas Gerenciadores de Banco de Dados) relacionais por meio de comandos SQL (Structured Query Language).

Figura 36 JDBC

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

147

A API para programao do sistema a mesma para qualquer SGBD. Por isso, no h necessidade de se desenvolverem aplicaes voltadas para um SGBD especfico, pois elas no esto atreladas a uma arquitetura proprietria. Com isso, fica assegurada a independncia de plataforma de Java. A biblioteca JDBC tambm permite a construo de pginas WWW dinmicas que acessem banco de dados. A grande vantagem do modelo JDBC que nenhuma configurao requerida no lado cliente. Os Passos para conexo JDBC so os seguintes: a) Incluir no programa: import java.sql.*; b) Carregar corretamente o driver desejado; c) Conectar com o banco de dados; d) Criar o comando JDBC; e) Enviar comandos SQL. Como voc pode perceber, o primeiro passo para iniciar a comunicao com o banco de dados o uso de um driver. O driver o software responsvel pela comunicao entre a aplicao, usando JDBC e o sistema de banco de dados envolvido. Cada fabricante de banco de dados possui seu prprio driver e sempre prefervel utilizar o driver nativo do fabricante. A linguagem Java suporta quatro tipos de drivers: 1. Ponte com ODBC: o tipo provido pela Sun. Apropriado para uso experimental e para situaes na qual no haja nenhum outro driver disponvel; 2. Driver independente de SGBD: converte chamadas JDBC em chamadas API do cliente para Oracle, Sybase, Informix, DB2 ou outro SGBD; 3. Acesso ao driver nativo: a API JDBC chama procedimentos do driver nativo do SGBD instalado na mquina local ou no servidor para as aplicaes distribudas; 4. Driver com protocolo proprietrio escrito em Java: a comunicao entre o cliente e o SGBD d-se no protocolo do BD, contudo, como o Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

148

driver escrito em Java, dispensa a instalao ou configurao do driver no cliente. A abertura da conexo (sesso) feita pelo mtodo getConnection da classe DriverManager (o servio bsico para gerenciamento de um conjunto de drivers JDBC) e o mtodo retorna um objeto do tipo Connection. A URL de acesso composta de protocolo:subprotocolo:subnome e o DriverManager tenta conectar com o primeiro driver carregado; se no consegue, tenta o driver seguinte e se no localizar, lanada uma exceo SQLException. Vamos a um exemplo:
import java.sql.*;

java.util.Properties props = new Properties(); props.put("user", objAccessManager.getConta()); props.put("password", objAccessManager.getSenha()); String url = "jdbc:odbc:temp//"+ "fava" +":6024/" + bancoDeDados; try { // carrega o driver da ponte jdbc-odbc Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // abre conexao com o banco de dados Connection con = DriverManager.getConnection(url, props); // Este banco no aceita autocommit //con.setAutoCommit( false ); //se o BD lida com transao } catch(ClassNotFoundException e) //Class.forName() { System.out.println("Classe do Driver JDBC no encontrada"); } catch(SQLException e) //DriverManager.getConnection()

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

149

{ System.out.println( "Falha na conexo com o banco de dados:" ); System.out.println(e.getMessage(); }

O envio de um comando SQL feito por intermdio dos mtodos executeQuery(String s) e executeUpdate(String s) de um Statement, da seguinte forma: executeQuery:
ResultSet rs = stmt.executeQuery (SELECT * FROM Alunos);

executeUpdate:
stmt.executeUpdate (CREATE TABLE Alunos(nome VARCHAR(32), idade INTEGER);); stmt.executeUpdate (INSERT INTO Alunos VALUES(Jonas, 18););

Vamos avaliar um exemplo completo de conexo com banco de dados usando JDBC.
package skiclub;

import java.sql.*; import java.util.*;

public class SkiClubDB {

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

150

static Connection connection = null; static final String dbDriver = "COM.ibm.db2.jdbc.app.DB2Driver"; static final String dbUrl= "jdbc:DB2:SKICLUB"; static final String dbName = "SKICLUB"; // Definindo o usurio para criar o banco de dados static final String dbOwner = "USERID"; // associando o usurio no Windows static final String dbUser = "USERID"; // Informando a senha do usurio static final String dbPassword = "PASSWORD"; static final String memberTable = "MEMBERS"; static final String tripTable = "SKITRIPS"; static final String bookTable = "BOOKINGS";

synchronized static Connection getConnection() throws DBopException { if ( connection == null ) { try { Class.forName( dbDriver ); connection = DriverManager.getConnection( dbUrl, dbUser, dbPassword); } catch ( ClassNotFoundException e ) { throw new DBopException ( "Cannot load database driver: for DB2, " + "your classpath must include " + "SQLLIB\\JAVA\\DB2JAVA.ZIP." );

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

151

} catch ( SQLException e ) { throw new DBopException ( "Cannot connect to database: for DB2, " + "check that DB2 is running and the SKICLUB " + "database exists." ); } } return connection; }

synchronized static ResultSet getAllColumns( String[] tables, String condition ) throws DBopException { String[] columns = {"*"}; return getSelectedColumns( columns, tables, condition ); }

synchronized static ResultSet getSelectedColumns( String[] columns, String[] tables, String condition ) throws DBopException { String select = "SELECT "; try { Statement query = getConnection(). createStatement(); for ( int i = 0; i < columns.length; i++ ) {

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

152

select += columns[i]; select += i + 1 < columns.length ? "," : " "; } select += "FROM "; for ( int i =0; i < tables.length; i++ ) { if ( dbOwner.length() > 0 ) { select += dbOwner + "."; } select += select += } select += condition; System.out.println( select ); return query.executeQuery( select ); } catch ( SQLException e ) { throw new DBopException ( "Cannot extract data with SQL statement:\n " + select ); } } tables[i]; i + 1 < tables.length ? "," : " ";

synchronized static public int getNextId( ) throws SQLException, DBopException { Statement query = getConnection().createStatement(); ResultSet result = query.executeQuery( "SELECT MAX(ID) FROM " + ( dbOwner.length( ) > 0 ? dbOwner + "." : "" ) +

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

153

memberTable ); int newId = 1; if(result.next()==true) { newId = result.getInt(1) + 1; } return newId; }

synchronized static public void addMember( ClubMember member ) throws SQLException, DBopException { int rowInserted = 0; Statement insert = getConnection(). createStatement(); String addrecord = "INSERT INTO " + ( dbOwner.length( ) > 0 ? dbOwner + "." : "" ) + memberTable + " VALUES (" + member.getId() + ",'" + member.getFirstName() + "','" + member.getMiddleName() + "','" + member.getLastName() + "','" + member.getPhoneNumber() + "','" + member.getAbility() + "')" ; System.out.println( addrecord ); rowInserted = insert.executeUpdate(addrecord); if ( rowInserted != 1 ) { throw new DBopException( "Unable to add new member to database" ); }

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

154

return; }

synchronized static public void updateMember( ClubMember member ) throws SQLException, DBopException { Statement update = getConnection().createStatement(); String changeRecord = "UPDATE " + ( dbOwner.length( ) > 0 ? dbOwner + "." : "" ) + memberTable + " SET " + "FNAME = '" + member.getFirstName() + "'," + "MNAME = '" + member.getMiddleName() + "'," + "LNAME = '" + member.getLastName() + "'," + "PHONENUM = '" + member.getPhoneNumber() + "'," + "ABILITY = '" + member.getAbility() + "'" + "WHERE ID = " + member.getId(); System.out.println( changeRecord ); int changed = update.executeUpdate( changeRecord ); if ( changed < 1 ) { throw new DBopException( "No changes made to databare" ); } else if ( changed > 1 ) { throw new DBopException( "More than one member's data was affected: " + changed + "records changed." ); } return; }

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

155

synchronized static public ClubMember getMemberByID ( int id ) throws SQLException, DBopException, BadDataException { String[] tables = { memberTable }; ResultSet result = getAllColumns( tables, "WHERE ID = " + id ); if ( ! result.next() ) { return null; } ClubMember member = new ClubMember(); member.setId( result.getInt( "ID" ) ); member.setFirstName( result.getString( "FNAME" ).trim() ); member.setMiddleName( result.getString( "MNAME" ).trim() ); member.setLastName( result.getString( "LNAME" ).trim() ); member.setPhoneNumber( result.getString( "PHONENUM" ).trim() ); member.setAbility( result.getString( "ABILITY" ).trim() ); if ( result.next( ) ) { throw new DBopException ( "Duplicate Member ID: " + id ); } return member;

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

156

synchronized static public ClubMember getMemberByName ( String firstName, String lastName ) throws SQLException, DBopException, BadDataException { String[] tables = { memberTable }; ResultSet result = getAllColumns( tables, " WHERE FNAME = '" + firstName + "' AND LNAME = '" + lastName + "'" ); if ( ! result.next() ) { return null; } ClubMember member = new ClubMember(); member.setId( result.getInt( "ID" ) ); member.setFirstName( result.getString( "FNAME" ).trim() ); member.setMiddleName( result.getString( "MNAME" ).trim() ); member.setLastName( result.getString( "LNAME" ).trim() ); member.setPhoneNumber( result.getString( "PHONENUM" ).trim() ); member.setAbility( result.getString( "ABILITY" ).trim() ); if ( result.next( ) ) { throw new DBopException ( "Duplicate member name: " + firstName + " " + lastName );

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

157

} return member; }

synchronized static public Vector retrieveTrips( ) throws DBopException { Vector trips = new Vector(); try { String[] tables = { tripTable }; ResultSet result = getAllColumns( tables, "ORDER BY ID" ); while( result.next() ) { SkiTrip trip = new SkiTrip(); trip.setId( result.getInt( "ID" ) ); trip.setWeek( result.getInt( "WEEK" ) ); trip.setDay( result.getString( "DAY" ).trim() ); trip.setCapacity( result.getInt( "CAPACITY" ) ); trip.setBooked( result.getInt( "BOOKED" ) ); trips.addElement(trip); } } catch ( SQLException e ) { throw new DBopException ( "Error reading Table: " + tripTable); } return trips; }

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

158

synchronized static public Vector getSkierTrips( int skierID ) throws DBopException { String[] tables = { tripTable, bookTable }; String condition = "WHERE " + ( dbOwner.length( ) > 0 ? dbOwner + "." : "" ) + tripTable + "." + "ID" + "=" +

( dbOwner.length( ) > 0 ? dbOwner + "." : "" ) + bookTable + "." + "TRIPID" + " AND " + ( dbOwner.length( ) > 0 ? dbOwner + "." : "" ) + bookTable + "." + "MEMBERID=" + skierID; Vector trips = new Vector(); try { ResultSet result = getAllColumns( tables, condition ); while( result.next() ) { SkiTrip trip = new SkiTrip(); trip.setId( result.getInt( "ID" ) ); trip.setWeek( result.getInt( "WEEK" ) ); trip.setDay( result.getString( "DAY" ).trim() ); trip.setCapacity( result.getInt( "CAPACITY" ) ); trip.setBooked( result.getInt( "BOOKED" ) ); trips.addElement(trip); } } catch ( SQLException e ) { throw new DBopException (

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

159

"Error reading Table: " + tripTable); } return trips; }

synchronized static public Vector retrieveBookings( int skierID ) throws DBopException { Vector trips = new Vector(); try { String[] tables = { bookTable }; String[] columns = { "TRIPID" }; ResultSet result = getSelectedColumns( columns, tables, " WHERE MEMBERID = " + skierID + " ORDER BY TRIPID" ); while( result.next() ) { trips.addElement( new Integer ( result.getInt( "TRIPID" ) ) ); } } catch ( SQLException e ) { throw new DBopException ( "Error reading Table: " + bookTable); } return trips; }

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

160

synchronized public static void updateTrip( SkiTrip trip ) throws DBopException, SQLException { Statement update = getConnection().createStatement(); String doChange = "UPDATE " + ( dbOwner.length( ) > 0 ? dbOwner + "." : "" ) + tripTable + " SET " + "BOOKED = " + trip.getBooked() + " WHERE ID = " + trip.getId(); System.out.println( doChange ); int changed = update.executeUpdate( doChange ); if ( changed != 1 ) { throw new DBopException( "Error updating booked count for trip " + trip.getId() ); } return; }

synchronized public static void addBooking( Booking booking) throws DBopException, SQLException { int rowInserted = 0; Statement insert = getConnection().createStatement(); String addrecord = "INSERT INTO " +

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

161

( dbOwner.length( ) > 0 ? dbOwner + "." : "" ) + bookTable + " VALUES (" + booking.getMemberId() + "," + booking.getTripId() + ")"; System.out.println( addrecord ); rowInserted = insert.executeUpdate(addrecord); if ( rowInserted != 1 ) { throw new DBopException( "Problem adding booking for trip" + booking.getTripId() ); } return; }

synchronized public static void dropBooking( Booking booking) throws DBopException, SQLException { int rowDeleted = 0; Statement delete = getConnection(). createStatement(); String addrecord = "DELETE FROM " + ( dbOwner.length( ) > 0 ? dbOwner + "." : "" ) + bookTable + " WHERE MEMBERID="+ booking.getMemberId() + " AND TRIPID=" + booking.getTripId(); System.out.println( addrecord ); rowDeleted = delete.executeUpdate(addrecord); if ( rowDeleted != 1 ) {

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

162

throw new DBopException( "Problem dropping booking for trip" + booking.getTripId() ); } return; }

public static void main( String [] args ) throws SQLException, DBopException, ClassNotFoundException { System.out.println( "Getting Database driver" ); Class.forName( dbDriver ); System.out.println( "Getting Database connection" ); getConnection(); System.out.println( "Database ready" ); return; }

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

163

EXERCCIOS PROPOSTOS 1) Qual a funo do JDBC no Java? ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ 2) possvel executar um comando SQL atravs de uma conexo SQL? Caso positivo, explique os componentes Java envolvidos nesta operao. ______________________________________________________________ ______________________________________________________________ ______________________________________________________________ ______________________________________________________________

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

164

SNTESE Nesta aula voc aprendeu como trabalhar com banco de dados em suas aplicaes e quais os principais componentes da plataforma Java que suportam as operaes de banco de dados.

Com esta aula terminamos o curso de Programao Aplicada usando Java. Espero que voc tenha obtido resultados satisfatrios com o contedo apresentado e que esteja motivado para continuar a construir aplicaes usando a plataforma Java.

Desejo-lhe boa sorte e no pare seus estudos em Java, pois um mundo de oportunidades que est em constante crescimento e hoje est cada vez mais permitindo profissionais a realizar melhor o seu trabalho.

Um grande abrao!

Programao Aplicada - Java

SOCIESC Sociedade Educacional de Santa Catarina

165

REFERNCIAS

MORGAN, M..; Java 2 para programdores profissionais. Sams Books, 2000. RODRIGUES FILHO, Renato; Desenvolva aplicativos com Java 2. rica, 2005. GOSLING, James; A linguagem de programao Java. Bookman, 2007. CADENHEAD, Rogers; Aprenda em 21 dias Java 2. Campus, 2005. LINDEN, Peter; Simplesmente Java2. Alta Books, 2005.

Programao Aplicada - Java

Das könnte Ihnen auch gefallen