paradigmas de linguagem de programação - java

Upload: picoli68

Post on 11-Jul-2015

213 views

Category:

Documents


1 download

TRANSCRIPT

Bruno Ribeiro Ramos Jorge Luiz Marcioneo Dias da Silva Ricardo Picoli Pinheiro Rodrigo Veras Tavares Wescley Martins

A Linguagem JAVA

Trabalho da disciplina Paradigmas de Linguagem de Programao, Turmas CC2A30 e CC3A30, 3 Semestre 2010, Curso Cincia da Computao, Universidade Paulista. Prof. Esp. Ednewton.de Vasconcelos

Braslia Junho - 2010

1. INTRODUO ....................................................................................................... 3 2. HISTRICO ............................................................................................................ 4 3. JAVA UMA IMPLEMENTAO COMPILADA E INTERPRETADA .................... 63.1 A Mquina Virtual Java JVM .............................................................................................................. 6 3.2 Hotspots e JIT ........................................................................................................................................ 8

4. JAVA E A ORIENTAO AO OBJETO ................................................................. 94.1 Objetos, Atributos e Mtodos ................................................................................................................ 9 4.2. Herana ................................................................................................................................................11 4.2.1 Polimorfismo .....................................................................................................................................11 4.2.2 Interfaces ...........................................................................................................................................12

5. CONCLUSO ........................................................................................................ 14 REFERNCIAS BIBLIOGRFICAS ........................................................................ 16

1. IntroduoO Java foi lanado pela Sun Microsystems no segundo semestre de 1995, em um kit de desenvolvimento gratuito, do qual era possvel fazer o download pelo Web site da empresa. A possibilidade dos programas Java, chamados applets, poderem ser executados como parte das pginas Web contribuiu para atrair centenas de milhares de desenvolvedores uma vez que a Internet (World Wide Web) estava desenvolvendo-se rapidamente. O Java foi projetado para ser mais fcil de aprender do que C++ e mais difcil de abusar do que C. uma linguagem orientada a objetos, segura e independente de plataforma, podendo ser executado sem modificaes em diferentes sistemas operacionais. Os programas Java so compilados para um formato chamado bytecode, que executado por qualquer sistema operacional, software ou dispositivo com um interpretador Java instalado. A Programao Orientada a Objetos (P.O.O) um tcnica de desenvolvimento de software em que um programa percebido como um grupo de objetos que trabalham juntos. Os objetos so criados como modelos, chamados classes, e contem os dados (atributos) e as instrues (mtodos) necessrias para a utizao desses dados. A falta de ponteiros e a presena de gerenciamento automtico de memria so dois dos elementos-chave para a segurana de Java. Outro a forma como os programas Java executados em pginas Web so limitados a um subconjunto da linguagem, para evitar que um cdigo malicioso prejudique o computador de um usurio. Os recursos da linguagem que poderiam facilmente ser empregados para fins prejudiciais como a capacidade de gravar dados em um disco e excluir arquivos no podem ser executados por um programa quando ele executado pelo interpretador Java de um browser na Internet.

2. HistricoA contribuio mais importante da revoluo do microprocessador foi possibilitar o desenvolvimento de computadores pessoais, que hoje somam mais de um bilho em todo o mundo. Os computadores pessoais tm afetado profundamente a vida das pessoas e o modo das organizaes realizarem e gerir os seus negcios. Reconhecendo isso, a Sun Microsystems, em 1991, financiou um projeto de pesquisa com o codinome Green, no intuito de desenvolver uma linguagem para ser usada no desenvolvimento de programas para aparelhos eletrnicos como codificadores de TV a cabo, video cassetes e televiso. James Gosling, chefe da equipe de desenvolvimento da linguagem, chamou a primeira verso desenvolvida por eles de Oak . Como j exitia uma linguagem com esse nome no foi possvel adot-lo. O nome surgiu quando um grupo de pesquisadores da Sun visitavam uma loja de caf local e o nome Java foi sugerido, pois nos EUA, grande parte do caf consumido proveniete da Ilha de Java. O projeto Green encontrou algumas dificuldades no seu comeo. Nos primeiros anos da dcada de 90 o mercado para dispositivos eletrnicos inteligentes no se desenvolveu to rapidamente como a Sun tinha previsto. O projeto corria o perigo de ser cancelado. Por pura sorte, a Internet (World Wide Web) explodiu em popularidade em 1993, e as pessoas viram o potencial de usar Java para adicionar contedo dinmico, como interatividade e animaes, as pginas da web. Isto deu vida nova para o projeto. A Sun anunciou o Java formalmente na Sun World, uma conferncia da indstria de informtica em maio de 1995. Java ganhou a ateno da comunidade de negcios por causa do interesse fenomenal na Internet. Ela, agora, usada para desenvolver aplicativos corporativos de larga escala, para melhorar a funcionalidade de servidores web (os computadores que fornecem o contedo que vemos em nosso site browsers), para fornecer aplicativos para dispositivos de consumo (por exemplo, telefones celulares, pagers e assistentes pessoais digitais) e para muitos outros dispositivos.

Fig 1 Genealogia das linguagens de alto nvel mais comuns.

3. Java uma implementao Compilada e InterpretadaEm uma linguagem de programao como C e Pascal, temos o seguinte quadro quando vamos compilar um programa.

Cdigo fonte em C ou Pascal

compila

Cdigo binrio para um determinador SO

O cdigo fonte compilado para uma plataforma e sistema operacional especficos. Muitas vezes, o prprio cdigo fonte desenvolvido visando uma nica plataforma! Esse cdigo executvel (binrio) resultante ser executado pelo sistema operacional e, por esse motivo, ele deve saber conversar com o sistema operacional em questo. Isto , temos um cdigo executvel para cada sistema operacional. necessrio compilar uma vez para Windows, outra para o Linux, outra para Mac, etc... Como foi dito anteriormente, na maioria das vezes, a sua aplicao se utiliza das bibliotecas do sistema operacional, como, por exemplo, a de interface grfica para desenhar as 'telinhas'. A biblioteca de interface grfica do Windows e bem diferente das do Linux; resultado? Voc precisa reescrever o mesmo pedao da aplicao para diferentes sistemas operacionais, ja que eles nao so compatveis.

3.1 A Mquina Virtual Java JVMO Java utiliza-se do conceito de mquina virtual, onde existe uma camada extra entre o sistema operacional e a aplicaco, responsvel por traduzir o que sua aplicaco deseja fazer para as respectivas chamadas do SO no qual ela esta rodando no momento: Dessa forma, a maneira a qual voc abre uma janela no Linux ou no Windows a mesma, assim, voc ganha independncia de sistema operacional. Ou, melhor ainda, independncia de plataforma em geral: nao preciso se preocupar em qual sistema operacional sua aplicao esta rodando, nem em que tipo de mquina, configuraes etc. Repare que uma maquina virtual um conceito bem mais amplo que o de um interpretador. Como o proprio nome diz, uma mquina virtual como um computador de mentira: ela tem tudo que um computador

tem. Em outras palavras, ela responsvel por gerenciar memria, gerenciar threads, a pilha de execuo, etc. Sua aplicao roda sem nenhum envolvimento com o sistema operacional! Sempre conversando apenas com a Java Virtual Machine (JVM). Essa caracterstica interessante Pois faz com que tudo passe pela JVM, assim, ela pode tirar mtricas, decidir onde e melhor alocar a memria, entre outros. Uma JVM isola a aplicao totalmente do sistema operacional. Se uma JVM termina abruptamente, s as aplicaes que estavam rodando nela iro terminar, isso no afetara outras JVMs que estejam rodando no mesmo computador, nem afetara o sistema operacional. Essa camada de isolamento tambem interessante quando pensamos em um servidor que no pode se sujeitar a rodar cdigo que possa a vir a interferir na boa execuo de outras aplicaes.

Fig 2 - Esquema da plataforma JavaPara tudo isso precisamos de um bytecode. Bytecode e o termo dado ao codigo binrio gerado pelo compilador Java (pois existem menos de 256 cdigos de operao dessa linguagem, e cada opcode gasta um byte, dando origem ao nome bytecode). O compilador Java gera esse bytecode que, diferente das linguagens sem maquina virtual, vai servir para diferentes sistemas operacionais, ja que ele vai ser traduzido pela mquina virtual. Write once, run anywhere (Escreva uma vez, rode em qualquer lugar0 - Esse o slogan que a Sun usa para o Java, j que voc no precisa reescrever parte da sua aplicao toda vez que quiser mudar de sistema operacional. Muitas pessoas criticam ou criam piadas em cima desse slogan, por acharem que nem sempre uma aplicao Java pode rodar em duas plataformas diferentes sem problemas. Outro ponto importante que quando falamos de Java Virtual Machine estamos falando de uma especificao. Ela diz como o bytecode deve ser interpretado pela JVM. Quando fazemos o download no site da Sun, o que vem junto a Sun JVM. Em outras palavras, existem outras JVMs disponveis, como a Jrockit da BEA, entre outras.

Isto outro ponto interessante para as empresas. Caso elas no estejam gostando de algum detalhe da JVM da Sun, ou prefiram trabalhar com outra empresa pagando por suporte, elas podem trocar de JVM tendo a garantia absoluta que todo o sistema continuar funcionando, tendo em vista que ela certificada pela Sun, precisando aceitar o mesmo bytecode. Voc nem precisa recompilar nenhuma de suas classes. Alem de independncia de hardware e sistema operacional, voce tem a independncia de fornecedor graas a idia da JVM ser uma especificao e no um software.

3.2 Hotspots e JITHotspot a tecnologia que a JVM utiliza para detectar pontos quentes da sua aplicao, cdigo que executado muito, provavelmente dentro de um ou mais loops. Quando a JVM julgar necessria, ela vai compilar aquele cdigo para instrues nativas da plataforma, tendo em vista que isso vai provavelmente melhorar a performance da sua aplicao. Esse compilador o JIT: Just inTime Compiler, o compilador que aparece bem na hora que voc precisa. Voc pode pensar ento: porque a JVM no compila tudo antes de executar a aplicao? que teoricamente compilar dinamicamente, a medida do necessrio, pode gerar uma performance melhor. O motivo e simples: imagine um executvel gerado pelo VisualBasic, pelo gcc ou pelo Delphi, ele estatico. Ele j foi otimizado baseado em heuristicas, o compilador pode ter tomado uma deciso no to boa. J a JVM, por estar compilando dinamicamente durante a execuo, pode perceber que um determinado cdigo no est com performance adequada, e otimizar mais um pouco aquele trecho, ou ainda mudar a estratgia de otimizao. por esse motivo que as JVMs mais recentes (como a do Mustang, Java 6), em alguns casos, chega a ganhar mais em performance que em muitos casos de codigos C compilados com o GCC 3.x, se rodados durante um certo tempo.

4. Java e a Orientao ao ObjetoQuando temos um problema e queremos resolv-lo usando um computador, necessariamente temos que fazer um programa. Este nada mais do que uma srie de instrues que indicam ao computador como proceder em determinadas situaes. Assim, o grande desafio do programador estabelecer a associao entre o modelo que o computador usa e o modelo que o problema lhe apresenta. Isso geralmente leva o programador a modelar o problema apresentado para o modelo utilizado em alguma linguagem. Se a linguagem escolhida for LISP, o problema ser traduzido como listas encadeadas. Se for Prolog, o problema ser uma cadeia de decises. Assim, a representao da soluo para o problema caracterstica da linguagem usada, tornando a escrita difcil. A orientao a objetos tenta solucionar esse problema. A orientao a objetos, em geral, o suficiente para no impor um modelo de linguagem ao programador, permitindo a ele escolher uma estratgia, representando os aspectos do problema em objetos. Assim, quando se "l" um programa orientado a objeto, podemos ver no apenas a soluo, mas tambm a descrio do problema em termos do prprio problema. O programador consegue "quebrar" o grande problema em pequenas partes que juntas fornecem a soluo. Olhando sua volta possvel perceber muitos exemplos de objetos do mundo real: seu cachorro, sua mesa, sua televiso, sua bicicleta. Esses objetos tem duas caractersticas bsicas, que so o estado e o comportamento. Por exemplo, os cachorros tem nome, cor, raa (estados) e eles balanam o rabo, comem, e latem (comportamento). Uma bicicleta tem 18 marchas, duas rodas, banco (estado) e elas brecam, aceleram e mudam de marcha (comportamento). De maneira geral, definimos objetos como um conjunto de variveis e mtodos, que representam seus estados e comportamentos.

4.1 Objetos, Atributos e MtodosVamos comear com uma analogia simples para ajudar voc a entender POO. Vamos supor que voc quer dirigir um carro e torn-lo mais rpido, pressionando para baixo o seu pedal do acelerador. O que deve acontecer antes que voc possa fazer isso? Bem, antes que voc possa dirigir um carro, algum tem para projet-lo. Um carro geralmente comea como desenhos de engenharia. Estes desenhos de engenharia incluem a concepo de um pedal de acelerador para fazer o carro ir mais rpido. O pedal "esconde" a partir do driver os

mecanismos complexos que realmente fazem, o carro ir mais rpido, assim como o pedal de freio "oculta" os mecanismos que retardam o carro e o volante "oculta" os mecanismos que tornam o carro. Isso permite que as pessoas com pouco ou nenhum conhecimento de como funcionam os motores ou outra parte qualquer de dirigir um carro com facilidade. Agora vamos usar o nosso exemplo do carro para introduzir os conceitos fundamentais da programao desta seo. Executar uma tarefa em um programa exige um mtodo. O mtodo descreve os mecanismos que realmente executam suas tarefas. O mtodo esconde do usurio as tarefas complexas que ele executa, como o pedal do acelerador do carro esconde do motorista o complexo mecanismos de fazer o carro ir mais rpido. Em Java, comeamos criando uma unidade de programa chamada classe principal. Em uma classe, voc fornece um ou mais mtodos que so projetados para executar tarefas da classe. Por exemplo, uma classe que representa uma conta bancria poderia conter um mtodo para depositar dinheiro numa conta, outro para retirar dinheiro de uma conta e um terceiro para saber o que o saldo atual. Assim como voc no pode dirigir um desenho de carro, voc no pode "conduzir" uma classe. Assim como algum tem que construir um carro a partir de desenhos de engenharia antes que voc possa realmente dirigir um carro, voc deve criar um objeto de uma classe antes de poder comear um programa para executar as tarefas da classe descreve como fazer. Essa a razo de Java ser conhecido como uma linguagem de programao orientada ao objeto. Quando voc dirige um carro, pressionando o seu pedal do acelerador envia uma mensagem para o carro para realizar uma tarefa, isto , fazer o carro ir mais rpido. Da mesma forma, voc envia mensagens para cada objeto, isto conhecido como uma chamada de mtodo e informa um mtodo do objeto para executar sua tarefa. At o momento, ns usamos a analogia do carro para introduzir classes, objetos e mtodos. Alm dos recursos de um carro, um carro tambm tem muitos atributos, tais como sua cor, o nmero das portas, a quantidade de gasolina em seu tanque, a sua velocidade actual e as sua kilometragem total (isto , sua leitura do hodmetro). Como as capacidades do carro, esses atributos so representados como parte de um design do carro em diagramas de engenharia. Enquanto voc dirige um carro, estes atributos esto sempre associados com o carro. Cada carro mantm seus prprios atributos. Por exemplo, cada carro sabe quanto gasolina est em seu prprio tanque, mas no sabe o quanto h nos tanques de outros carros. Da mesma forma, um objeto tem atributos que so realizadas com o objeto como ele usado em um programa. Esses atributos so

especificados como parte da classe do objeto. Por exemplo, uma conta bancria objeto tem um atributo saldo que representa a quantidade de dinheiro na conta. Cada objeto conta bancria sabe o saldo na conta que ela representa, mas no os saldos de outras contas no banco. Os atributos so especificados pelas variveis de instncia da classe.

4.2. HeranaEste captulo continua a nossa discusso sobre programao orientada a objetos (OOP), introduzindouma de suas principais caractersticas de herana, que uma forma de reutilizao de software em que uma nova classe criada, absorvendo os membros de uma classe existente embelezando-os com recursos novos ou modificados. Com a herana, os programadores puideram economizar tempo durante desenvolvimento do programa atravs da reutilizao comprovada e depurado software de alta qualidade. Isso tambm aumenta a probabilidade de que o sistema ser implementado de forma eficaz. Ao criar uma classe, ao invs de declarar completamente novos membros, poder designar que a nova classe deve herdar os membros de uma classe existente. A classe existente chamada de superclasse, e a nova classe subclasse. (A linguagem de programao C + + refere-se a superclasse como a classe base ea subclasse como a classe derivada.) Cada subclasse pode tornar-se a superclasse para as subclasses futuro. A subclasse normalmente adiciona seus prprios campos e mtodos. Assim, uma subclasse mais especfica do que a sua superclasse e representa um grupo mais especializado de objetos. Normalmente, a subclasse apresenta o comportamento de sua superclasse e comportamentos adicionais que so especficos para a subclasse. Novas classes podem herdar de classes em bibliotecas de classe. As organizaes desenvolvem suas prprias bibliotecas de classe e pode tirar vantagem dos outros disponveis no mundo inteiro. Algum dia, a maioria novo software provavelmente ser construdo a partir de componentes reutilizveis padronizados, assim como automveis e hardware de computador so construdas hoje em dia. Isso ir facilitara o desenvolvimento mais poderoso, abundante e econmico de software. 4.2.1 Polimorfismo Continuamos o nosso estudo de programao orientada a objetos, explicando e demonstrando polimorfismo com hierarquias de herana. Polimorfismo nos permite "programar no geral, "ao invs de programar no caso especfico." Em particular,

polimorfismo nos permite escrever programas que objetos de processo que compartilham a mesma superclasse em uma classe hierarquia, como se eles todos fossem os objetos da superclasse, o que pode simplificar a programao. Com o polimorfismo, ns podemos projetar e implementar sistemas que so facilmente extensveis-novas classes podem ser adicionados com pouca ou nenhuma modificao s parcelas geral o programa, contanto que as novas classes fazem parte da hierarquia de herana que o programa processos genericamente. As nicas partes de um programa que deve ser alterado para acomodar novas classes so aqueles que exigem um conhecimento directo das novas classes que o programador acrescenta hierarquia. Por exemplo, se estender Animal classe para criar classe Tortoise (que podem responder a uma mensagem de movimento por meio da indexao de uma polegada), preciso escrever apenas a classe de tartaruga e parte da simulao que instancia um objeto Tortoise. As partes do processo de simulao que cada animal genericamente pode permanecer o mesmo.

4.2.2 InterfacesInterfaces so particularmente teis para a atribuio de funcionalidade comum para classes possivelmente relacionadas. Isto permite que objetos de classes independentes sejam processados polimorficamente- objetos de classes que implementam a mesma interface podem responder aos convites do mesmo mtodo. Interfaces permitem criar capacidades polimrficas semelhantes aos possveis com a herana. Interfaces definem e padronizam as formas pelas quais as coisas como as pessoas e os sistemas podem interagir uns com os outros. Por exemplo, os controles de um rdio servem como uma interface entre usurios e os componentes internos de um rdio. Os controles permitem aos usurios executar apenas um conjunto limitado de operaes (por exemplo, mudar a estao, o ajuste do volume, escolher entre AM e FM) e rdios diferentes podem implementar os controles em diferentes formas (por exemplo, utilizando botes, mostradores, comandos de voz). A interface que especifica operaes de rdio deve permitir aos usurios executar, mas no especifica como as operaes so executadas. Da mesma forma, a interface entre um motorista e um carro com uma transmisso manual inclui o volante, as marchas, o pedal da embreagem, o pedal do acelerador e do pedal de freio. Esta mesma interface pode ser encontrada em quase todos os carros de transmisso manual, permitindo algum que sabe dirigir um carro particular de transmisso manual de conduzir apenas qualquer carro de

transmisso manual.Os componetes de cada carro pode ser diferente, mas o seu objectivo geral a mesma para permitir que as pessoas conduzam o carro. Uma interface Java descreve um conjunto de mtodos que podem ser chamado em um objeto, para dizer o objeto para executar alguma tarefa ou o regresso de alguma parte da informao. ma interface normalmente utilizada quando diferentes (isto , no relacionada) classes precisam compartilhar mtodos comuns e constantes. Isto permite que objetos de classes independentes para serem processados polimorficamente-objetos de classes que implementam a mesma interface pode responder mesmo chamadas de mtodo. Voc pode criar uma interface que descreve a funcionalidade desejada, em seguida, implemetar essa interface em qualquer classe que exigem essa funcionalidade.

5. ConclusoOs projetistas do Java fizeram bem em aparar os recursos excessivos e ou inseguros do C++possibilitando o desenvolvvimnto de uma linguagem extremamente segura.A adio de concorrncia, as bibbliotecas de classes para applets, interfaces graficas, acesso a BD e a redes permitiu um aumento no escopo das aplicacoes que podem escritas com Java. Outro ponto bastante positivo o seu hibridismo na implementacao, sendo parte compilada e parte interpretada, permitindo a portabilidade tornando-a multiplataforma. Mas isso tem um custo, e que no inicio de seu denvovimento foi bastante alto. Sendo interpretada na sua etapa final, junto ao usuario, o Java era at dez vezes mais lento que um mesmo programa compilado em C. Atualmente melhoramentos significativos foram feitos tanto no codificador de bytecodes quanto na Maquina Virtual Java possibilitando que os programas dessa linguagem estejam no mesmo nvel de uma linguagem C++. Outro fator de ganho de desempenho o desenvolvimento cada vez maior do desempenho do hardware, com procesadores de 4 ou mais ncleos e etc. Atualmente o Java amplamente usado para programar pginas da Internet (World Wide Web) atravs de applets pequenos que programas que quando chamados por uma pagina html, so descarregados pelo servidor no computador do usrio e imendiatamente interpretada e exceutada. Esse recurso, que implementa interatividade na Internet foi o que impulsionou o Java para ser uma das linguagens mais usadas atualmente. O Java, desde o incio de seu desenvolvimento teve como prioridade a segurana e por isso as applets, apesar de serem programas que rodam no compuatdor do usurio, tem toda uma rigidez de regras que no permitem que um desenvolvedor consiga atravs desse cdigo Java dominar uma mquina ou deter acesso aos discos ou copair dados digitados. Um fato curioso no desenvolvimento do Java que a utilizacao primria da linguagem que seria para desenvolver programas para equipamentos eletrnicos inteligentes nunca foi implementado.

Position Programming 2010 May 2009 1 2 3 4 5 6 7 8 9 2 1 3 4 5 7 6 9 11 C Java C++ PHP (Visual) Basic C# Python Perl Delphi Delta in Position Language

Ratings May 2010 18.186% 17.957% 10.378% 9.073% 5.656% 4.779% 4.097% 3.286% 2.566%

Delta May 2009 +2.06% -1.58% -0.69% -0.85% -2.97% +0.51% -1.45% -0.24% +0.24% A A A A A A A A A Status

10

39

Objective-C

2.363%

+2.23%

A

11 12 13 14 15 16 17

10 8 12 13 14 22 16

Ruby JavaScript PL/SQL SAS Pascal Lisp/Scheme/Clojure ABAP

2.094% 2.084% 0.859% 0.732% 0.728% 0.651% 0.650%

-0.60% -1.46% -0.24% -0.07% -0.05% +0.19% -0.02%

A A A A A-B B

18

-

Go

0.640%

+0.64%

A-

19 20

18 20

MATLAB Lua

0.612% 0.493%

+0.09% +0.01%

B B

Fig 3. Ranking de utilizao de Linguagens de Programao Maio 2010

Referncias BibliogrficasDEITEL, H. M. Como Programar em Java, 6 Ed. - Deitel & Associates, ESCOLA TCNICA DE BRASLIA Apostila de Java e Programao Orientada ao Objeto, SEBESTA, Robert W. Conceitos de Linguagens de Programao 5 Ed. So Paulo 2002. Bookman OLIVEIRA, Leila Barros Cardoso (Org). Manual para apresentao de Monografias, Dissertaes e Tese da UCB. 2. ed. Braslia, 2004. Universia. THE TIOBE PROGRAMMING COMMUNITY INDEX http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html UNIVERSIDADE FEDERAL DO PARAN - Biblioteca Central . Normas para Apresentao de Trabalhos, 1996. Curitiba. Editora UFPR