Sie sind auf Seite 1von 10

JAVA - Estrutura de Linguagem

A estrutura da linguagem JAVA

Aqui descrevo a linguagem de programação Java sob o


escopo oferecido pela disciplina de Estrutura de
Linguagens de Programação.

Lnguagem de programação Java; Estrutura de linguagens;

Contents

• Histórico e Aplicabilidade
• Modelo da Linguagem de Programação
• Modelo de Execução
• Avaliação da Linguagem
• Tipos de dados
• Ambientes de Nomes
• Tratamento de Exceções
• Programação Concorrente

more

Share Print Favorite


Histórico e Aplicabilidade

A linguagem de programação Java está modelada sobre o paradigma da Orientação a


Objetos e foi desenvolvida na década de 90 na Sun Microsystems por James Gosling.

Quando Java foi desenvolvida o objetivo era trazer o que seria tendência do mundo
digital, uma linguagem que desse suporte para novos aparelhos resultantes da
convergência de aparelhos comuns entre si. Acreditava-se que em breve haveria a
integração dos computadores com os equipamentos e eletrodomésticos comumente
usados pelas pessoas no seu dia-a-dia.

Para demonstrar a aplicabilidade do projeto criaram um software de demonstração


chamado MovieWood que tinha a funcionalidade de controlar televisões e vídeo por
demanda. Mas era muito cedo para que o vídeo por demanda bem como as empresas de
TV a cabo pudessem viabilizar o negócio. Hoje esta idéia é realidade em programas
interativos e também na televisão digital. Permitir ao telespectador interagir com a
emissora e com a programação em uma grande rede cabos, era algo muito visionário e
estava muito longe do que as empresas de TV a cabo tinham capacidade de entender e
comprar. Por isto se diz que esta foi uma “idéia certa, na época errada”.

Por sorte surgiu a internet que se popularizou rapidamente, formando uma grande rede
interativa. Ambiente ideal para se aplicar as idéias que o Oak trazia. Assim não era mais
necessário construir a infra-estrutura para a rede. O Oak então foi adaptado para a
Internet e em janeiro 1995 foi lançada uma nova versão rebatizada para Java.

A tecnologia Java tinha sido projetada para se mover por meio das redes de dispositivos
heterogêneos, redes como a Internet. Neste momento as aplicações poderiam ser
executadas dentro dos browsers nos Applets Java e tudo seria disponibilizado pela
Internet instantaneamente. Através dos applets podem-se incluir programas complexos
no âmbito de uma página web. Foi o estático HTML dos browsers que promoveu a
rápida disseminação da dinâmica tecnologia Java. Daí a utilização da linguagem se
propagou rapidamente, grandes fornecedores de tecnologia, como a IBM anunciaram
suporte para a tecnologia Java.

Em 2003 Java atingiu a marca de 4 milhões de desenvolvedores em todo mundo. Hoje


Java é uma referência no mercado de desenvolvimento de software. Java tornou-se
popular pelo seu uso na Internet e hoje possui seu ambiente de execução presente em
web browsers, mainframes, SOs, celulares, palmtops e cartões inteligentes, entre outros.

Modelo da Linguagem de Programação

Java é uma linguagem Imperativa, isto é, uma linguagem baseada diretamente na


arquitetura de von Neumann. E mais especificamente está construída sob o paradigma
da Programação Orientada a Objetos que trás consigo uma série de conceitos tais como:

• CLASSE E OBJETO
• ENCAPSULAMENTO E ABSTRAÇÃO
• HERANÇA DE CLASSE
• MÉTODOS, MÉTODO CONSTRUTOR, SOBRECARGA E
POLIMORFISMO.
• ASSOCIAÇÃO E COMPOSIÇÃO

A correta aplicação de tais técnicas traz benefícios para o programador que passa a
trabalhar com um maior nível de abstração, modularização e reutilização.

Em um projeto orientado a objetos tem-se como meta identificar o melhor conjunto de


objetos para descrever um sistema de software. O funcionamento deste sistema se dá
através do relacionamento e troca de mensagens entre estes objetos.

Na programação orientada a objetos, implementa-se um conjunto de classes que


definem os objetos presentes no sistema de software. Cada classe determina o
comportamento (definidos nos métodos) e estados possíveis (atributos) de seus objetos,
assim como o relacionamento com outros objetos.

Ao utilizar Java obtemos as seguintes vantagens e características:

• Portabilidade - Independência de plataforma - "write once run anywhere";


• Recursos de Rede - Possui extensa biblioteca de rotinas que facilitam a
cooperação com protocolos TCP/IP, como HTTP e FTP;
• Segurança - Pode executar programas via rede com restrições de execução;
• Sintaxe similar a Linguagem C/C++.
• Facilidades de Internacionalização - Suporta nativamente caracteres Unicode;
• Simplicidade na especificação, tanto da linguagem como do "ambiente" de
execução (JVM);
• É distribuída com um vasto conjunto de bibliotecas (ou APIs);
• Possui facilidades para criação de programas distribuídos e multitarefa
(múltiplas linhas de execução num mesmo programa);
• Desalocação de memória automática por processo de coletor de lixo (garbage
collector);
• Carga Dinâmica de Código - Programas em Java são formados por uma
coleção de classes armazenadas independentemente e que podem ser carregadas
no momento de utilização.

Modelo de Execução

Java constitui-se basicamente de uma linguagem de programação e um


programa para execução chamado de máquina virtual ou virtual machine
(JVM). Quando programa-se em Java usa-se a linguagem de programação Java e um
ambiente de desenvolvimento Java para gerar um software que será executado em um
ambiente de distribuição.

Java é multiplataforma. Quando um programa Java é compilado um código


intermediário é gerado, chamado de bytecode. Este bytecode é interpretado
pelas máquinas virtuais java (JVMs) para a maioria dos sistemas operacionais.
A máquina virtual é a responsável por criar um ambiente multiplataforma, ou
seja, se alguém construir um sistema operacional novo, basta criar uma
máquina virtual java que traduza os bytecodes para código nativo e pronto!
Todas as aplicações java estarão rodando sem problemas.

Entre outras funções, a máquina virtual java também é responsável por


carregar de forma segura todas as classes do programa, verificar se os
bytecodes aderem a especificação JVM e se eles não violam a integridade e a
segurança do sistema.

A figura 1.1 mostra como acontece a compilação e a execução de um


programa Java. De um código Java, que está em um arquivo. java, o
compilador javac gera o bytecode: um arquivo. class. Após isso uma máquina
virtual java executa o bytecode e roda o programa.

Figura 1.1: Compilador e Interpretador Java

Como existe um programa traduzindo um código a cada execução do sistema, poderia-


se dizer que Java sempre será mais lenta que as linguagens que geram código nativo do
sistema operacional como Delphi, VB ou C++. Isso era fato até 1996 quando a Sun
criou o compilador Just-in-time (JIT) que analisa e retira códigos desnecessários
aumentando consideravelmente a velocidade da execução. Atualmente o Java é mais
rápido que o próprio C em vários aspectos.

Avaliação da Linguagem

Ao se estudar a forma de avaliação das linguagens de programação segundo


sua estrutura, obtemos um conhecimento que nos ajuda a compreender e
utilizar qualquer linguagem. Agregamos uma maior capacidade de expressar
idéias: Reduzimos as limitações do desenvolvimento de software; Obtemos
maior facilidade para comparar diferentes LP’s e definir qual a mais apropriada
para uma determinada aplicação; Maior capacidade para aprender novas LP’s;
Entendemos melhor a importância da implementação; e aumentamos nossa
capacidade de projetar novas LP’s.

Legibilidade

Pode ser definida como a forma pela qual é escrito o código do programa que possibilita
a facilidade de leitura e compreensão do mesmo, e tornou-se um importante parâmetro
de qualidade de programas e linguagens de programação. (SEBESTA, 2003).
Java oferece recursos que auxiliam na legibilidade que vão desde elementos externos
como um avançado sistema de documentação, o JavaDoc até a padronização de nomes
de métodos, atributos e classes. A utilização de padrões de projeto também facilita
bastante o entendimento de códigos. Graças a esta padronização a etapa de manutenção
no ciclo de vida do software se torna menos custosa. O tempo para o seu entendimento é
reduzido nos distanciarmos do conceito de “estado da arte”, no sentido de o código
depender do humor do programador.

Simplicidade

Para que uma linguagem tenha uma simplicidade global, é necessário que ela seja de
fácil leitura e compreensão, ou seja, a legibilidade do programa, como um fator bem
marcante é de que os comandos sejam simples, e sejam fáceis de serem manipulados.
(SEBESTA, 2003).

Java oferece interessantes recursos que favorecem sua legibilidade. Seu esqueleto é uma
derivação de C e C++. Apesar disso está é uma linguagem “viva”, que é constantemente
incrementada pela comunidade. Este fato tem seu grande lado positivo que é a idéia de
que a cada dia surgirem novos recursos, novas formas de se realizar uma determinada
tarefa de forma mais prática ou mais eficiente. Porém defasa sua simplicidade, uma vez
que surgem novos “dialetos” de programação.

Ortogonalidade

Em termos de linguagem de programação, ortogonalidade significa que as instruções


primitivas, ou seja, básicas da linguagem, podem ser combinadas, de forma a construir
estruturas de controle e estrutura de dados de uma linguagem, mas, principalmente, que,
toda combinação de estruturas permitidas por ela é válida e significativa. (SEBESTA,
2003).

Java possui uma forte tipagem o que diminui um pouco sua ortogonalidade, porém
fornece recurso de conversão de tipos.

Se não houvesse a conversão, o código a baixo não poderia ser executado:

...

int x=0; double b = 0; float z = 0;

x = (int) (b + z);

...

Expressividade
Expressividade pode se referir diferente a características. Por exemplo, na Linguagem
Java utilizar cont++ é mais elegante do que se usar cont = cont + 1, como em Delphi é
melhor usar inc(cont) do que cont := cont + 1. A inclusão da instrução for em uma
linguagem de programação torna mais fácil à escrita de laços de contagem do que com o
uso de while, por exemplo.

Confiabilidade

Um programa é confiável quando ele funciona conforme suas especificações sem


nenhum tipo de anormalidade. Os sub-tópicos a seguir informam como uma linguagem
pode influenciar na confiabilidade do programa por ela gerada. (GERBER, 2000).

Para se obter uma grande confiabilidade é interessante que a linguagem ofereça suporte
as seguintes capacidades:

• Verificação de Tipos
• Manipulação de Exceções
• Legibilidade e Capacidade de Escrita

Java é uma linguagem robustas e amadurecida que transmite confiabilidade ao


desenvolvedor. Tipagem forte de dados e tratamento de exceções são feitos de maneira
eficiente.

Portabilidade

A portabilidade trata da facilidade de transferência de um programa, entre


plataformas distintas.

O software desenvolvido em Java pode ser executado em qualquer


equipamento que possua um interpretador Java instalado. Como a Linguagem
Java é interpretada, indica que cada equipamento que pretende utilizá-la deve
ter um interpretador instalado. Várias plataformas distintas podem ser
utilizadas, como qualquer versão do Windows, superior ou igual ao Windows
95, Linux, Solaris, MAC/OS entre outros.

Tipos de dados

Java herdou os tipos primitivos de C e C++. Para melhor deslumbrar a


segurança e desempenho de desenvolvimento não foram herdados alguns
recursos como, por exemplo, a utilização de ponteiros. Java permite que o
programador defina os seus tipos de objetos, através da construção de Classes
e definição de estruturas de tipos.
A POO com Java permite que sejam construídas classes abstratas que
possibilitam uma aproximação ainda melhor do mundo real, melhor
modularização e reutilização de código. Realiza a verificação de tipos
dinamicamente, apontando erros de incompatibilidade tanto para tipos
primitivos quanto para tipos definidos pelo usuário. Durante a detecção
dinâmica pode lançar uma exceção que deverá ser tratada através do
mecanismo de tratamento de exceções. Porém permite funções com
parametrização não checada.

Ambientes de Nomes

Java não possui “limites” quanto à definição do nome de variáveis e métodos. Esta
questão pode ajudar ao desenvolvedor melhorar a legibilidade do código. Assim como
em C, cada bloco é agrupado pelo par de chaves { }. Em relação a outras linguagens o
recurso de abre e fecha chaves não é uma excelente solução em termos de
expressividade de seu significado.

Java permite a criação de variáveis e objetos de escopo. Na instanciação de um objeto


definem-se duas partes:

TipoX objeto = new TipoY();

Onde TipoX pode ser igual a TipoY ou ser uma superclasse de qualquer nível de TipoY.
TipoY é o objeto “verdadeiro” na memória e TipoX é o nome associado a este objeto, é
através dele que acessamos o TipoY instanciado.

Tratamento de Exceções

Java permite a definição de tratadores de exceções associados a blocos de


comandos, de modo que exceções de uma mesma classe possam ser tratadas
diferentemente, dependendo do comando ou trecho de programa onde venham
a ocorrer. Esses tratadores de exceções são definidos através de estruturas try
/ catch, de acordo com a seguinte sintaxe: -> estrutura-try-catch

try {
<procedimentos-normais>

catch ( <classe-de-exceção> <nome-de-parametro> ){

<procedimentos-de-exceção>

finally {

<procedimentos-finais>

}
O primeiro bloco, logo após a palavra chave try, delimita os procedimentos para os
quais o tratamento de exceções definido nessa estrutura será aplicado. A cláusula catch
define um tratador para uma classe de exceções especificada. Uma estrutura try / catch
pode conter diversos tratadores, para diferentes classes de exceções. Um bloco catch
definido para uma classe genérica, como Exception ou RuntimeException por exemplo,
pode tratar tanto as exceções daquela classe como de suas subclasses. A busca do
tratador para uma dada exceção se processa na ordem em que os blocos catch aparecem
na estrutura, sendo selecionado o primeiro catch cuja classe abranja aquela exceção. Por
esse motivo, havendo mais de um bloco catch para um mesmo bloco try eles devem
estar ordenados do mais específico para o mais genérico. A cláusula opcional finally
define procedimentos a serem executados incondicionalmente quando os procedimentos
da estrutura try / catch são terminados, independentemente da ocorrência de alguma
exceção. O fluxo de controle para tratamento das exceções de Java implementa o
chamado modelo de terminação. Resumindo: Quando uma exceção é lançada o bloco de
procedimentos (try) que está sendo executado é interrompido e o processamento é
desviado para a rotina de tratamento apropriada para aquela classe de exceção (catch).
Ao final dessa rotina de tratamento é executado o bloco finally, se houver.

Programação Concorrente

Threads, também chamados de processos leves, permitem múltiplas atividades


dentro de um único processo;

• Um mesmo processo pode conter múltiplas threads que parecem executar ao


mesmo tempo;
• Java é a primeira linguagem de programação a incluir o conceito de threads na
própria linguagem.
Em Java as unidades concorrentes são objetos que possuem um método chamado run. O
código deste método pode estar em execução concorrente com outros métodos run ou
com o método main. Podemos definir que uma classe cujos objetos possam ter métodos
concorrentes de duas maneiras:

• Definindo uma subclasse da classe Thread;


• Fazendo uso da interface Runnable;

class Tarefa1 extends Thread {

public void run() {

for(int i=0; i<1000; i++)

System.out.println(“Usando herança”);

class Tarefa2 implements Runnable {

public void run() {

for(int i=0; i<1000; i++)

System.out.println(“Usando Runnable”);

Prioridades:

• Quando uma thread é criada tem prioridade igual a da thread que a


criou;
• Quando criada pelo método main ela terá prioridade igual a
NORM_PRIORITY(5);
• Outras duas constantes de prioridade são definidas MAX_PRIORITY(10)
e MIN_PRIORITY(1);
• Outras prioridades podem ser definidas através do método setPriority(int
newPriority), onde newPriority deve ter um valor entre 1 e 10;

Das könnte Ihnen auch gefallen