quinta-feira, 23 de setembro de 2010

Finalizando sobre JVM


Devido as características vistas anteriormente (e outras que não foram citadas neste artigo), a linguagem Java tem sido cada vez mais utilizada. O fato de se tratar de uma linguagem multi-plataforma, permite o desenvolvido de aplicativos e soluções para os mais diversos fins. E um dos grandes responsáveis por isso são as JVMs. Até mesmo você pode desenvolver uma JVM para um dispositivo qualquer, desde que tenha conhecimentos sólidos para isso. Sim, pois construir uma JVM não é fácil. Ela envolve uma série de conceitos complexos, como instruções equivalentes a de processadores, controle de acesso à memória, registradores, etc. Isso pode até parecer estranho, mas é necessário entender que as JVMs atuam, de fato, como uma máquina.
Mesmo que você não seja um desenvolvedor em Java, é interessante ter uma JVM em seu computador. Certamente você usará algum programa que usa recursos da linguagem Java. Portanto, procure pela JVM desenvolvida para seu sistema operacional no site da Sun e bom proveito!

JVM e a questão da segurança

A linguagem Java, desde sua criação, sempre considerou com seriedade a questão da segurança. Por isso, é praticamente impossível criar programas em Java para fins maliciosos. Quando um programa em Java é executado, seu bytecode precisa passar pelos requisitos de segurança presentes na JVM, que impede a execução se o código tiver alguma irregularidade. Assim, se, por exemplo, no programa houver instruções para acessar áreas restritas da memória ou acessar recursos de hardware, a JVM não aprovará o código.
Outras linguagens, como C, são executadas diretamente pelo sistema operacional. Com isso, é possível criar programas que acessem recursos críticos do sistema. No caso da linguagem Java, a JVM atua como uma espécie de intermediária entre o programa e o sistema. Sendo assim, até mesmo o acesso a recursos de entrada e saída só é feito por meio da JVM.

Como a JVM funciona


Quando você faz um programa em Java e o compila, se tudo estiver certo, o compilador gerará bytecodes desse programa. Bytecode é uma espécie de codificação que traduz tudo o que foi escrito no programa para um formato que a JVM entenda e seja capaz de executar. Assim, se você fizer um programa em Java no Linux, ele será capaz de rodar no Windows ou em qualquer outro sistema operacional que tenha JVM. Isso ocorre porque não existe bytecodes diferentes, isto é, os bytecodes dos programas em Java compilados no Windows são constituídos da mesma forma que bytecodes gerados se a compilação fosse feita em Mac OS, por exemplo. De certo que, podem haver algumas diferenças, que dependem da implementação da JVM e claro, do compilador.
Quando um código em Java é compilado, um arquivo com a extensão .class é gerado. Esse tipo de arquivo é o bytecode. Assim, quando o programa Infowester.java for compilado, um arquivo chamado Infowester.class deverá ser executado. A imagem a seguir ilustra esse processo:

Exemplos de utilização de JVM


  • Exemplo 1

Suponha que você desenvolveu um aplicativo para um telefone celular. Com poucas modificações, você poderá rodar esse mesmo aplicativo em um palmtop, como mostra a imagem abaixo:



  • Exemplo 2

Um fabricante de geladeiras constatou que é mais confiável controlar a temperatura desse eletrodoméstico por software. Assim, seus engenheiros criaram um programa para esse fim e ele foi feito em Java. Para executá-lo, eles criaram uma JVM para essa moderna geladeira.


  • Exemplo 3
Imagine agora que um fabricante de aparelhos de som desenvolveu um software em Java para permitir que um de seus produtos fosse compatível com músicas no formato MP3. Meses depois, a empresa lançou um outro aparelho e aproveitou esse mesmo recurso nele. Tudo isso, graças a JVM desenvolvida para os aparelhos.
Os exemplos acima deixam claro que praticamente todo dispositivo pode rodar aplicações em Java. Basta que ele tenha uma JVM. A implementação de uma JVM pode ser feita em hardware, como em chips, ou em software, como a JVM existente para o Linux.

O que é Máquina Virtual Java


Você já deve ter usado Java antes e não sabe. Por exemplo, em uma fila de banco, onde você fica jogando em seu telefone celular enquanto aguarda a sua vez. Os aplicativos feitos em Java estão presentes em uma infinidade de dispositivos, desde relógios até mainframes. Tudo isso graças a Máquina Virtual Java, que passaremos a chamar simplesmente de JVM a partir deste ponto.
A JVM é, em poucas palavras, um mecanismo que permite executar código em Java em qualquer plataforma. Segundo a definição da Sun, a principal responsável pela criação da linguagem Java, a JVM pode ser entendida como "uma máquina imaginária implementada via software ou hardware que executa instruções vindas de bytecodes".

Máquina Virtual Java (Java Virtual Machine)

 Introdução

Com a linguagem de programação Java, você pode, por exemplo, criar um aplicativo que rode tanto no Linux quanto no Windows. Mas a linguagem Java não se limita a esses sistemas operacionais. É possível desenvolver aplicações para uma infinidade de plataformas. Para isso, basta que elas tenham uma Java Virtual Machine (JVM) ou, em português, Máquina Virtual Java. Este artigo é voltado a iniciantes e explica o que esse mecanismo faz e o porquê de ser um componente tão essencial à linguagem Java.

quarta-feira, 22 de setembro de 2010

terça-feira, 21 de setembro de 2010

Biblioteca de classes .NET Framework

A Biblioteca de classes do .NET Framework é uma coleção de tipos reutilizáveis que se integram rigidamente com o Common Language Runtime. A biblioteca de classes é orientada a objetos, fornecendo tipos que seu próprio código gerenciado pode derivar. Isso não só torna os tipos do .NET Framework fáceis de usar, como também reduz o tempo associado ao aprendizado de novos recursos do .NET Framework. Além disso, componentes de terceiros podem se integrar totalmente com classes do .NET Framework.

Por exemplo, as classes da coleção .NET Framework implementam um conjunto de interfaces que você pode usar para desenvolver suas próprias coleções de classes. Sua coleção de classes será perfeitamente combinada com as classes do .NET Framework.

Common Language Runtime

O Common Language Runtime (Ambiente de tempo de execução de linguagem comum)  é uma aplicação similar a uma máquina virtual que se encarrega de providenciar a execução das aplicações para ela escritas.
O Common Language Runtime gerencia memória, execução de segmento, execução do código, verificação de segurança do código, compilação e outros serviços do sistema. Esses recursos são intrínsecos para o código gerenciado, que executa no Common Language Runtime.

Quanto à segurança, os componentes gerenciados são concedidos variando os graus da confiança, dependendo do número de fatores que incluem sua origem (como a Internet, rede corporativa ou computador local). Isso significa que um componente gerenciado pode ou não ser capaz de executar operações de acesso de arquivo, operações de registro de acesso ou outras funções confidenciais, mesmo se ele estiver sendo usado no mesmo aplicativo ativo.

O Runtime impõe segurança de acesso a código. Por exemplo, os usuários podem confiar que um executável, incorporado em uma página da Web, pode reproduzir uma animação na tela ou tocar uma música, mas não pode acessar seus dados pessoais, arquivos de sistema ou rede.
Além disso, o ambiente gerenciado do Runtime elimina muitos problemas comuns de software. Por exemplo, o Runtime automaticamente manipula o layout de objetos e gerencia referências a eles, liberando-os quando não estão sendo usados. Este gerenciamento automático de memória resolve os dois erros mais comuns de aplicativos: vazamentos e referências inválidas de memória.

O Runtime também acelera a produtividade do desenvolvedor. Por exemplo, os programadores podem escrever aplicativos em sua linguagem de desenvolvimento de preferência, mas aproveitar completamente o Runtime, a biblioteca de classes e componentes escritos em outras linguagens, por outros desenvolvedores.

Linguagens que suportam a plataforma .NET


Linguagens que suportam a plataforma .NET


n  APL
n  C#
n  COBOL
n  Component Pascal
n  Curriculum
n  Eiffel
n  Fortran
n  Haskell
n  Java
n  Jscript
n  Mercury
n  Oberon
n  Oz
n  Pascal
n  Perl
n  Python
n  RPG
n  Scheme
n  Smalltalk
n  Standard ML
n  Visual Basic .NET
n  Visual C++ .NET




O .NET Framework é um componente integral do Windows que oferece suporte à criação e execução da próxima geração de aplicativos e Serviços XML da Web. A plataforma .NET possibilita que os aplicativos baseados na web possam ser distribuídos para uma grande variedade de dispositivos (até telefones celulares) e para computadores de mesa. A plataforma permite que aplicativos criados em linguagens diferentes se comuniquem. O .NET Framework foi criado para atender os seguintes objetivos:

• Para fornecer um ambiente de programação orientada a objetos consistente, se o código objeto for armazenado e executado localmente, executado localmente mas distribuído pela Internet ou executado remotamente.

• Para fornecer um ambiente da execução de código que minimiza conflitos de implantação e versionamento de software.

• Para fornecer um ambiente da execução que promova a execução segura do código, incluindo o código criado por terceiros: desconhecidos ou semiconfiáveis.

• Para fornecer um ambiente de execução que elimina os problemas de desempenho dos ambientes interpretados ou com scripts.

• Para tornar a experiência do desenvolvedor consistente, através dos diversos tipos de aplicativos, como aplicativos baseados no Windows e aplicativos baseados na Web.

• Para criar todas as comunicações nas indústrias padrão, para garantir que códigos baseados no .NET Framework possam se integrar a qualquer outro código.

Primeiro sistema operacional em camadas:


THE é um sistema operacional desenvolvido por um time liderado por Edsger Dijkstra. Dijkstra nunca nomeou o sistema; "THE" é simplesmente a abreviação de "Technische Hogeschool Eindhoven", o nome em holandês da Universidade de Tecnologia de Eindhoven. O sistema THE é basicamente um sistema batch que suporta multitarefa; não foi desenvolvido para ser multiusuário.
Ele introduziu as primeiras formas de segmentação de memória baseada em software, livrando os programadores de serem forçados a usar localizações físicas na memória. Isso foi feito através de um compilador ALGOL modificado (a única linguagem suportada no sistema operacional) para gerar automaticamente chamadas às rotinas do sistema.
A arquitetura do THE é significativa devido ao seu uso de estruturas por camadas, no qual as camadas superiores dependem somente das camadas inferiores:
  • A camada 0 é responsável pelos aspectos de multiprogramação do sistema. Ela decide qual processo é alocado na CPU, lida com interrupções e realiza a troca de contexto para a mudança de processos.
  • A camada 1 é responsável pela alocação de memória para os processos.
  • A camada 2 é responsável pela comunicação entre processos e pela comunicação entre o sistema operacional e o interpretador de comandos. O sistema usa semáforos para sincronização.
  • A camada 3 gerencia toda a Entrada/Saída entre dispositivos conectados ao computador, o que inclui armazenar temporariamente as informações sendo comunicadas.
  • A camada 4 consiste dos programas do usuário. Existem cinco processos que lidam com a compilação, execução e interação dos programas.
  • A camada 5 tinha controle geral do sistema, chamada operador de sistema.
Vários sistemas operacionais seguintes usaram o conceito de camadas de alguma forma, como o Windows NT e o Mac OS X, ainda que com menos camadas.

Sistema em camadas


O estilo camadas organiza o sistema em camadas hierárquicas. Uma camada pode ser, livremente, definida como um conjunto de sub-sistemas com o mesmo grau de generalidade. Camadas mais altas são específicas da aplicação, camadas mais baixas são de propósito geral, ou seja, utilizadas por diferentes aplicações. Elas funcionam como servidoras para as camadas mais altas e como clientes para as camadas mais baixas. Tradicionalmente, as interações ocorrem somente entre camadas adjacentes.

Os sistemas em camadas possuem várias propriedades desejáveis: eles suportam o design baseado em níveis crescentes de abstração - isto permite implementadores dividirem um problema complexo em uma seqüência de passos incrementais; eles suportam mudanças - porque cada camada interage somente com suas camadas adjacentes, então mudanças em uma camada afetam no máximo duas outras camadas; eles suportam reuso – pois, diferentes implementações de uma mesma camada podem ser usadas, desde que elas possuam as mesmas interfaces para as camadas adjacentes; e a segurança pode ser suportada por camadas específicas para este serviço.

Porém, sistemas em camadas também possuem algumas desvantagens: nem todos os sistemas são facilmente estruturados em camadas; para os sistemas que podem ser estruturados em camadas a questão de performance é delicada, pois há um certo tempo e processamento desperdiçado na comunicação entre camadas; e falhas em uma camada pode tornar o sistema indisponível