Você está na página 1de 41

UFG - Instituto de Informtica

Curso: Cincias da Computao

Programao Orientada a Objetos


Prof.: Fabrzzio A A M N Soares professor.fabrizzio@gmail.com Aula 24 Pacotes e Armazenamento

Pacotes

Usamos pacotes para organizar as classes semelhantes. Pacotes, a grosso modo, so apenas pastas ou diretrios do sistema operacional onde ficam armazenados os arquivos fonte de Java e so essenciais para o conceito de encapsulamento, no qual so dados nveis de acesso as classes.

Pacotes

Java possui um pacote padro que utilizado quando programamos, mesmo embora no seja recomendado pela Sun/Oracle us-lo.

Criando pacotes

Muitos compiladores criam automaticamente os pacotes como uma forma eficaz de organizao, mas a criao de pacote pode ser feita diretamente no sistema operacional. Basta que criemos uma pasta e lhe demos um nome. Aps isso, devemos gravar todos os arquivos fonte de java dentro desta pasta.

Definir pacotes

Agora que j possumos a pasta que ser nosso pacote, devemos definir em nossa classe a qual pacote ela pertence. Isso feito pela palavra reservada package.

Definir pacotes

Package deve ser a primeira linha de comando a ser compilada de nossa classe. Portanto, se tivssemos criado uma pasta chamada ufg e fossemos criar uma classe nesta pasta (pacote), o comeo de nosso cdigo seria: package ufg;

Importar pacotes

Java possui vrios pacotes com outros pacotes internos e vrias classes j prontas para serem utilizadas.

Importar pacotes

Dentre os pacotes Java podemos determinar dois grandes pacotes:

o pacote java, que possui as classes padres para o funcionamento do algoritmo; e o pacote javax, que possui pacotes de extenso que fornecem classes e objetos que implementam ainda mais o pacote java.

Importar pacotes

Exemplo:

o pacote AWT (Abstract Windowing Toolkit) possui as classes necessrias para se criar um ambiente grfico API (Janelas) e est fortemente ligado as funes nativas do Sistema Operacional, ou seja, ele pertence ao pacote java.

Importar pacotes

Mas, o pacote SWING no ligado fortemente as funes nativas do Sistema Operacional, mas as funes do AWT, ou seja, SWING complementa o AWT, portanto SWING faz parte do pacote de extenso javax.

Importar pacotes

Para utilizar as milhares de classes contidas nos inmeros pacotes de Java devemos ou nos referenciar diretamente a classe ou import-la. Para importar um pacote usamos o comando import. Para separar um pacote de seu sub-pacote usamos um ponto (como no acesso a membros de classe).

Importar pacotes

Ao importarmos um pacote podemos utilizar um coringa, o asterisco (*). O astersco serve para importar todos os sub-pacotes e classes do pacote que est definido.

Ex.: import java.awt.*;. Isso importar todos os subpacotes pertencentes ao pacote AWT.

Ou podemos desejamos.

definir

diretamente

qual

pacote

Ex.: import javax.swing.JOptionPane;.

Isso ir importar apenas o sub-pacote JOptionPane do pacote SWING.

Importar pacotes

A diferena entre as duas formas de importao de pacotes o consumo de recursos do computador. Como o asterisco importa todos os subpacotes, o consumo de memria ser alto e, muito provavelmente, no usaremos todas as classes de todos os pacotes importados. Por isso, o recomendado sempre importar apenas o pacote que ser utilizado.

Importar pacotes

Exemplo:

packageufg; importjavax.swing.JOptionPane; publicclassMensagem{ publicstaticvoidmain(Stringargs[]){ JOptionPane.showMessageDialog(null, "BemvindoaomundodeJava!"); } }

Importar pacotes

Mas ateno! Como voc colocou a classe em um pacote, alguns requisitos so necessrios para usa-lo: Voc deve invocar a classe de fora do diretrio que representa o pacote;

Caso voc queira invocar a classe a partir de qualquer diretrio, voc dever indicar o diretrio onde encontrase o pacote ou diretrio na varivel CLASSPATH do ambiente ou do parmetro do java; Voc sempre dever invocar a classe pelo seu nome completo, ou seja, nome_do_pacote.nome_da_classe.

Empacotando seu aplicativo em armazenamentos

Em diversos sistemas operacionais os programas compilados so empacotados em um formato binrio monoltico que representado por araquivos de extenso .exe' e .dll no Windows e .so em S.O. como o linux. Ressalta-se que no linux, a ausncia de extenso em alguns casos tambm pode caracterizar que o programa um binrio executvel.

Empacotando seu aplicativo em armazenamentos

Estes binrios pode conter todas as funes e classes do programa compilado alm das instrues necessrias para o programa ser iniciado.

Empacotando seu aplicativo em armazenamentos

O Java no possui um conceito de programa .exe ou equivalente de outros sistemas operacionais. O Java trata como binrio executvel todo e qualquer arquivo .class que possua uma funo main com a sintaxe:

publicstaticvoidmain(Stringargs[]){ }

Empacotando seu aplicativo em armazenamentos

Assim, um programa constitudo de muitas classes no possuir um nico arquivo e sim vrios. Porm, quando voc iniciar o programa somente uma das classes ser indicada para a JVM executa-la.

Pacotes

Como um programa em Java pode conter vrios arquivos uma tarefa interessante empacota-los, criando assim uma estrutura hierrquica de diretrios para dividir seu aplicativo.

Pacotes

Um inconveniente que ainda persiste o fato de que seu aplicativo fica exposto em diretrios, sujeito a algum usurio excluir ou modificar um ou outro arquivo e prejudicando o bom funcionamento do seu aplicativo.

Pacotes

Para resolver este inconveniente, o Java possui um mecanismo de armazenamento intitulado Java Archive (JAR). Os arquivos JAR so chamados por alguns programadores java de executveis do java. Porm, isto no uma verdade. Os arquivos JAR so na verdade arquivos compactados com o algoritmo pkzip e possuem uma estrutura interna planejada para a JVM trata-lo.

Java Archive

Java Archive (JAR) um arquivo compactado usado para distribuir um conjunto de classes Java, um aplicativo java, ou outros itens como imagens, XMLs, entre outros.

Java Archive

usado para armazenar classes compiladas e metadados associados que podem constituir um programa. Arquivos jar podem ser criados e extrados usando o utilitrio jar da JDK. Ferramentas de compresso (como o Winzip) tambm podem criar arquivos .jar.

Java Archive

Na especificao desse tipo de formato JAR, obrigatrio a presena do arquivo do tipo manifesto em um diretrio META-INF. Esse arquivo pode definir dados do seu arquivo JAR, como verso, cabealho, etc.

Java Archive

O formato JAR tambm ganhou popularidade ao ser conhecido como o executvel de Java. Para tal, isto , tornar seu JAR como um executvel, deve-se adicionar o atributo Main-Class ao manifesto. O valor desse atributo deve ser o nome completo da classe, que contenha o mtodo publicstaticvoidmain(String[]args), isto , necessrio informar qual a porta de entrada de sua aplicao.

Criando arquivos Jar

Para demonstrar como criar um JAR iremos utilizar um exemplo. Para esse exemplo iremos precisar de alguns cdigos .java para que possamos gerar o pacote da nossa aplicao, como o intuito explicar como gerar o arquivo .jar, os cdigos no sero comentados, so apenas dois cdigos simples para esta demonstrao.

Criando arquivos Jar

Vamos criar um diretrio qualquer para o nosso projeto, eu criei um diretrio chamado jarfiles, (que de agora em diante ser chamado de diretrio RAIZ) e dentro dele criaremos mais alguns diretrios:

src - diretrio onde colocaremos nossos arquivos fonte bin - diretrio onde colocaremos os arquivos compilados

Criando arquivos Jar

E dentro do diretorio src criaremos mais um diretrio chamado init, um nome qualquer apenas para mostrar como fazer para rodar um arquivo que estar dentro dele, e para demostrar que possvel criar diversos diretrios e coloc-los todos no nosso .jar.

Criando arquivos Jar

Agora que j temos os diretrios iremos criar duas classes dentro do diretrio ``src/init'', so elas:

OlaMundo.java packageinit; publicclassOlaMundo{ publicvoidfalaOla(){ System.out.println("Olmundocruel!"); } } UsaOlaMundo.java packageinit; publicclassUsaOlaMundo{ publicstaticvoidmain(String[]args){ OlaMundoom=newOlaMundo(); om.falaOla(); } }

Criando arquivos Jar

Agora vamos compilar nossos cdigos java para dentro do diretrio bin, para isso uma vez estando
dentro do diretrio RAIZ no terminal, vamos digitar:
javacsrc/init/*.javadbin/

Isso far com que os arquivos .java que esto em /src/init/ sejam compilados e colocados em /bin/init/.

Criando arquivos Jar

Para criar o arquivo .jar iremos fazer uso do comando jar, existem diversas opes que podemos passar para o comando jar, iremos nesse artigo fazer uso das seguintes: c - cria um novo arquivo

v - modo verbose, mostra na tela o que est acontecendo f ARQUIVO_JAR - especifica o nome que queremos para o arquivo .jar m ARQUIVO_DE_MANIFESTO - inclui o arquivo informado como arquivo de manifesto (veremos isso na segunda parte da explicao)

Criando arquivos Jar

Ainda dentro do diretrio bin, tudo que temos que fazer para criar nosso .jar executar o comando: jarcvfOla.jarinit/*

Criando arquivos Jar

Pronto, com isso temos nossa aplicao agora dentro do arquivo Ola.jar, vamos ento execut-la, para fazer isso devemos informar no classpath onde est nossa aplicao (no caso a classe init.UsaOlaMundo) Podemos tanto colocar o arquivo Ola.jar no nosso classpath quanto informar esse parmetro no momento da execuo como no comando abaixo: java -classpath Ola.jar init.UsaOlaMundo

Criando arquivos Jar

Se olhar dentro do arquivo Ola.jar (abram ele com um compactador qualquer como Winzip ou Winrar, pois ele apenas um arquivo compactado sem utilizar compresso, isso mesmo, voc poderia ter simplesmente criado um arquivo .zip ou .rar com o seu compactador preferido informando a ele para no utilizar compactao, apenas adicionar os arquivos e depois renomear o mesmo para .jar que ainda assim funcionaria.

Criando arquivos Jar

Enfim, voltando a aplicao, veja que dentro dele temos um diretrio META-INF contendo o arquivo MANIFEST.MF Esse arquivo contm informaes sobre a nossa aplicao, como no criamos esse arquivo, ele tem apenas algumas informaes bsica, vamos ento criar o nosso MANIFEST.MF e ver em que ele pode nos ajudar.

Criando arquivos Jar

Quando executamos nossa aplicao vocs se lembram que tivemos que informar no classpath o arquivo Ola.jar para que fosse possvel rodar a classe init.UsaOlaMundo, Agora iremos criar um arquivo de manifesto para que seja possvel rodar nossa aplicao informando apenas o arquivo Ola.jar e no mais o nome da classe e pacote (init.UsaOlaMundo).

Criando arquivos Jar

Para isso criaremos o nosso prprio MANIFEST.MF, salvem o cdigo abaixo em um arquivo chamado MANIFEST.MT dentro do diretrio bin. Manifest-Version: 1.0 Created-By: Nome do Criador Main-Class: init.UsaOlaMundo

O mais importante aqui a ltima linha Main-Class: init.OlaMundo, aqui eu digo qual classe ser chamada quando o arquivo Ola.jar for executado.

Criando arquivos Jar

vamos apagar o nosso antigo Ola.jar e criar um novo, agora informando qual arquivo de manifesto que iremos utilizar Para isso basta mudar um pouco nosso comando jar como no exemplo abaixo:
jar cvfm Ola.jar MANIFEST.MF init/*

Criando arquivos Jar

Agora para rodar nossa aplicao precisamos apenas do comando abaixo:


java -jar Ola.jar

E o arquivo MANIFEST.MF se encarrega de dizer a virtual machine qual a classe que queremos que seja executada.

Criando arquivos Jar

Observaes:

Para que o Jar seja executado no linux, conveniente atribuir a permisso de execuo ao seu arquivo .jar com o comando chmod +x <nome_do_arquivo.jar>. No Windows interessante definir para os arquivos .jar que quem executa o arquivo o programa javaw.exe. Assim, basta um clique duplo e seu programa ser executado. Porm, se for um programa sem janelas grficas, o resultado no ser como o esperado.