Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Introdução linguagens, Notas de estudo de Engenharia Elétrica

Linguagens de programação

Tipologia: Notas de estudo

2011

Compartilhado em 26/08/2011

guilherme-tel-dias-da-silva-4
guilherme-tel-dias-da-silva-4 🇧🇷

5

(4)

9 documentos

1 / 16

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Capítulo 4Capítulo 4
Linguagens de Programação
4.0 Índice
4.1 Programação de Computadores 2
4.2 Níveis de Linguagens de Programação 2
4.2.1 Linguagem de Máquina 2
4.2.2 Linguagem Hexadecimal 3
4.2.3 Linguagem Assembly 3
4.2.4 Linguagem de Alto Nível 5
4.2.5 Linguagens estruturadas 6
4.3 Execução de Programas 6
4.4 Desenvolvimento de Programas 8
4.4.1 Geração do código fonte (codificação) 8
4.4.2 Tradução do Código Fonte (código objeto) 8
4.4.3 Editores de ligação 12
4.4.4 Depuradores ou debuggers 13
4.5 Paradigmas de programação 13
4.5.1 Programação não-estruturada 13
4.5.2 Programação Procedural 13
4.5.3 Programação Modular 14
4.5.4 Programação Orientada a Objetos 14
4.5.5 Linguagens de programação e seus paradigmas 14
4.6 Linguagens Interpretadas 14
4.6.1 Compilador Versus Interpretador 15
4.6.2 Máquina Virtual 15
4.6.3 Java 15
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff

Pré-visualização parcial do texto

Baixe Introdução linguagens e outras Notas de estudo em PDF para Engenharia Elétrica, somente na Docsity!

Linguagens de Programação

  • Capítulo 4Capítulo
    • 4.1 Programação de Computadores 4.0 Índice
    • 4.2 Níveis de Linguagens de Programação
      • 4.2.1 Linguagem de Máquina
      • 4.2.2 Linguagem Hexadecimal
      • 4.2.3 Linguagem Assembly
      • 4.2.4 Linguagem de Alto Nível
      • 4.2.5 Linguagens estruturadas
    • 4.3 Execução de Programas
    • 4.4 Desenvolvimento de Programas
      • 4.4.1 Geração do código fonte (codificação)
      • 4.4.2 Tradução do Código Fonte (código objeto)
      • 4.4.3 Editores de ligação
      • 4.4.4 Depuradores ou debuggers
    • 4.5 Paradigmas de programação
      • 4.5.1 Programação não-estruturada
      • 4.5.2 Programação Procedural
      • 4.5.3 Programação Modular
      • 4.5.4 Programação Orientada a Objetos
      • 4.5.5 Linguagens de programação e seus paradigmas
    • 4.6 Linguagens Interpretadas
      • 4.6.1 Compilador Versus Interpretador
      • 4.6.2 Máquina Virtual
      • 4.6.3 Java

4.1 Programação de Computadores

Embora o equipamento básico para a realização das tarefas associadas à Ciência da Computação seja, evidentemente, o Computador, nós utilizaremos, ao longo deste curso, o conceito de Sistema Computacional, pelo seu significado mais abrangente, tanto quanto ao tipo de hardware envolvido quanto pela sua extensão aos demais componentes envolvidos nas atividades computacionais, particularmente os programas, métodos, regras e documentação.

Um Sistema Computacional pode ser visto como uma associação entre dois conceitos cada vez mais utilizados na terminologia de informática:

n o hardware , que está associado à parte física do sistema (os circuitos e dispositivos) que suporta o processamento da informação; n o software , que corresponde ao conjunto de programas responsáveis pela pilotagem do sistema para a execução das tarefas consideradas. No que diz respeito a esta segunda classe de componentes, pode-se estabelecer uma classificação segundo o tipo de serviço por ele realizado. Assim, tem-se as seguintes definições:

n o software de sistema (ou sistema operacional ) capaz de oferecer ao usuário, ou a outros softwares, facilidades de acesso aos recursos do computador, seja através de comandos, seja através de serviços especiais ativados a nível de um programa. O sistema operacional administra os arquivos, controla periféricos e executa utilitários. n o software utilitário , que podem ser programas desenvolvidos por especialistas ou mesmo por usuários experimentados que tem por objetivo facilitar a realização de determinadas atividades correntes no uso dos computadores (detecção e eliminação de vírus, programas de comunicação em redes de computadores, compressão de arquivos, etc...); n o software aplicativo , que são os programas desenvolvidos ou adquiridos pelos usuários para algum fim específico, seja ele de natureza profissional, educacional ou mesmo de lazer (jogos). Informalmente, uma linguagem de programação pode ser definida como sendo um conjunto limitado de instruções (vocabulário), associado a um conjunto de regras (sintaxe) que define como as instruções podem ser associadas, ou seja, como se pode compor os programas para a resolução de um determinado problema.

Ao longo dos anos, foram desenvolvidas (e continuam sendo) uma grande quantidade de linguagens de programação, algumas de uso mais geral e outras concebidas para áreas de aplicação específicas.

4.2 Níveis de Linguagens de Programação

As linguagens de programação podem ser classificadas em níveis de linguagens, sendo que os níveis mais baixos são mais próximas da linguagem interpretada pelo processador e mais distante das linguagens naturais.

4.2.1 Linguagem de Máquina

Lembrando que o computador corresponde basicamente a um conjunto de circuitos, a sua operação é controlada através de programas escritos numa forma bastante primitiva, baseada no sistema binário de numeração tanto para a representação dos dados quanto das operações. A esta forma de representação dos programas, é dado o nome de linguagem de máquina , em razão de ser a forma compreendida e executada pelo hardware do sistema.

a leitura de seqüências de instrução de máquina. Como exemplo, supomos a operação de dois números inteiros: A:=B+C. Esta operação, em um PC, em notação hexadecimal ficaria: A1000203060202A30402. Se associarmos o nome B à posição de memória 200h, C à posição 202h e A à posição 204h, usando a técnica mnemônica, a mesma rotina poderá ser expressa da seguinte forma:

MOV AX,B ; registro AX recebe o valor de memória contida na variável B ADD AX,C ; AX recebe a soma de AX (valor de B) com o valor de C MOV A,AX ; variável A recebe valor de AX

A maioria concorda que a segunda forma, embora ainda incompleta, é melhor que a primeira para representar a rotina. Apesar de oferecer uma representação mais próxima do que o programador está acostumado a manipular, a linguagem Assembly apresenta certas dificuldades para a realização dos programas, tais como a necessidade de definição de um conjunto relativamente grande de instruções para a realização de tarefas que seriam relativamente simples (se representadas através de outras linguagens) e a exigência do conhecimento de detalhes do hardware do sistema (arquitetura interna do processador, endereços e modos de operação de dispositivos de hardware, etc...).

Por outro lado, a utilização da linguagem Assembly proporciona um maior controle sobre os recursos do computador, permitindo também obter-se bons resultados em termos de otimização de código

Como a linguagem Assembly é apenas uma versão legível da linguagem de máquina, a passagem de um programa escrito em Assembly para a linguagem de máquina é quase sempre direta, não envolvendo muito processamento. Esta passagem de um programa Assembly para linguagem de máquina é chamada de Montagem, e o programa que realiza esta operação é chamado de montador ( Assembler ).

A linguagem Assembly é orientada para máquina (ou melhor, para processador), é necessário conhecer a estrutura do processador para poder programar em Assembly. A linguagem Assembly utiliza instruções de baixo nível que operam com registros e memórias diretamente. Assim ela é muito orientada às instruções que são diretamente executadas pelo processador. Na seqüência da evolução das linguagens de programação, procurou-se aproximar mais a linguagem de programação à linguagem natural que utilizamos no dia-a-dia: surgiram então as linguagens de alto nível, tipo Pascal, C, C++, etc.

Vantagens e Desvantagens da Linguagem Assembly

Mas se nós temos as linguagens de alto nível para quê precisamos utilizar a linguagem Assembly? Para responder esta pergunta é necessário conhecer as vantagens e desvantagens da linguagem Assembly e a sua utilização.

Desvantagens com relação as linguagens de alto nível:

n A linguagem Assembly apresenta um número muito reduzido de instruções, do tipo operações de movimentação de dados em memória, para registros e para memórias, e operações lógicas e aritméticas bem simples. Estas instruções são de baixa expressividade, isto é, elas são de baixo nível. O programador deve programar num nível de detalhamento muito maior para fazer a mesma coisa que em um programa escrito em linguagem de alto nível. n Como o programador utiliza diretamente os recursos do processador e memória, ele deve conhecer muito bem a máquina onde ele está programando. n Um programa escrito em linguagem Assembly não é muito legível, por isso ele deve ser muito bem documentado. n Um programa Assembly não é muito portável. Ela é portável apenas dentro de uma família de processadores. Por exemplo, diferente de um programa C, ele não pode ser executado em PCs e estações de trabalho. n Devido a sua baixa expressividade, ilegibilidade e exigência do conhecimento sobre a máquina faz a programação Assembly ter um custo de desenvolvimento

maior, requerendo um maior número de homens/hora comparado com a programação utilizando linguagens de alto nível. Apesar das desvantagens acima citadas, a utilização da linguagem Assembly tem algumas vantagens que são listados abaixo:

n Ela permite o acesso direto ao programa de máquina. Utilizando uma linguagem de alto nível, não tem-se o controle do código de máquina gerado pelo compilador (alguns compiladores permite a otimização de tamanho e de velocidade do programa). Devido a este acesso, o programador pode gerar um programa mais compacto e eficiente que o código gerado pelo compilador. Um programa escrito em linguagem Assembly pode ser 0 ou 300 % menor e mais rápido que um programa compilado. n Além disso, esta linguagem permite o controle total do hardware, por exemplo, permitindo a programação de portas seriais e paralela de um PC.

Aplicações da Linguagem Assembly

A linguagem Assembly é utilizada em vários tipos de aplicações:

n Controle de processos com resposta em tempo real , devido a possibilidade de gerar programas mais eficientes. Neste tipo de aplicação, geralmente o processador deve executar um conjunto de instruções em um tempo limitado. Por exemplo, a cada 10 milisegundos o processador deve ler um dado, processá-lo e emitir um resultado. n Comunicação e transferência de dados , devido a possibilidade de acessar diretamente o hardware, a linguagem Assembly é utilizada para a implementação de programas de comunicação ou transferência de dados. n Otimização de subtarefas da programação de alto nível , um programa não precisa somente ser escrito em linguagem Assembly ou linguagem de alto nível. Nós podemos ter programas de alto nível com subtarefas escritas em linguagem Assembly. Sendo assim, nós podemos otimizar partes de programas, no caso de tarefas tempo-real ou para a programação do hardware do computador.

4.2.4 Linguagem de Alto Nível

As linguagens de alto nível são assim denominadas por apresentarem uma sintaxe mais próxima da linguagem natural, fazendo uso de palavras reservadas extraídas do vocabulário corrente (como READ, WRITE, TYPE, etc...) e permitirem a manipulação dos dados nas mais diversas formas (números inteiros, reais, vetores, listas, etc...); enquanto a linguagem Assembly trabalha com bits, bytes, palavras, armazenados em memória.

As linguagens de alto nível ou de segunda geração surgiram entre o final da década de 50 e início dos anos 60. Linguagens como Fortran, Cobol, Algol e Basic, com todas as deficiências que se pode apontar atualmente, foram linguagens que marcaram presença no desenvolvimento de programas, sendo que algumas delas têm resistido ao tempo e às críticas, como por exemplo Fortran que ainda é visto como uma linguagem de implementação para muitas aplicações de engenharia. Cobol é um outro exemplo de linguagem bastante utilizada no desenvolvimento de aplicações comerciais.

Em comparação com a linguagem Assembly, a passagem de um programa escrito em linguagem de alto nível para o programa em linguagem de máquina é bem mais complexa. Para esta passagem são utilizados compiladores e linkadores.

Com o desenvolvimento das linguagens de alto nível, o objetivo da independência de máquina foi amplamente alcançada. Dado que os comandos das linguagens de alto nível não referenciam os atributos de uma dada máquina, eles podem ser facilmente compilados tanto em uma máquina como em outra. Assim, um programa escrito em linguagem de alto nível poderia, teoricamente, ser usado em qualquer máquina, bastando escolher o compilador correspondente.

Em realidade, no entanto, provou não ser tão simples. Quando um compilador é projetado, certas restrições impostas pela máquina subjacente são, em última instância, refletidas como características da linguagem a ser traduzida. Por exemplo, o tamanho do

Figura 3. Carga e execução do programa FORMAT.COM

O sistema operacional é responsável pela leitura do arquivo FORMAT.COM e a execução. O MS-DOS é um exemplo de sistema operacional. O WINDOWS também pode ser considerado uma espécie de sistema operacional. Uma das várias funções do sistema operacional é permanecer o tempo todo ativo na memória principal, esperando que o usuário comande a execução de algum programa. Portanto, quando se usa um comando como "FORMAT A:", o que ocorrer na verdade é o seguinte:

n Inicialmente o sistema operacional checa se você fornece algum comando. n Você digita o comando "FORMAT A:". n O sistema operacional procura no disco o arquivo FORMAT.COM e carrega-o na memória RAM. n O sistema operacional momentaneamente transfere o controle da CPU para o programa FORMAT.COM, que a essa altura já está carregado na memória principal. n A CPU executa o programa FORMAT.COM n Ao terminar a execução do FORMAT.COM, o sistema operacional volta a ter o controle da CPU. Fica então aguardando que você envie um novo comando.

Podemos entender então que nenhum programa chega até a memória por mágica, e sim, através do controle feito pelo sistema operacional. Alguém mais observador pode então ficar com a seguinte dúvida: "Se é o sistema operacional quem lê para a memória principal todos os programas a serem executados, como é então que o próprio sistema operacional chegou nesta memória?". No instante em que ligamos o computador, a memória principal não contém programa algum. Nesse instante, o sistema operacional está armazenado no disco (normalmente no disco rígido, no caso dos PC’s), e precisa ser carregado na memória. Quem faz a carga do sistema operacional para a memória é um programa chamado BIOS, que fica gravado em memória ROM. Lembre-se que a memória ROM não perde seus dados quando o computador é desligado. Portanto, no instante em que ligamos o computador, o BIOS já está na memória, e é imediatamente processado pela CPU. O processamento do BIOS começa com uma contagem de memória, seguido de alguns testes rápidos no hardware, e finalmente a leitura do sistema operacional do disco para a memória principal. Esse processo, ou seja, a carga do sistema operacional na memória RAM, é chamado de BOOT. A Figura 4 mostra o processo de BOOT para a carga do sistema operacional DOS:

  1. No instante em que o computador é ligado, o sistema operacional está armazenado em disco, a RAM está "vazia", e a CPU executa o BIOS.
  2. Mostra o instante em que termina a operação de BOOT. O sistema operacional já está carregado na memória e já está sendo executado pela CPU.
  1. Mostra o que ocorre imediatamente antes da execução do programa FORMAT.COM. O sistema operacional recebe um comando do usuário para que leia o arquivo FORMAT.COM do disco para a memória RAM.
  2. O programa FORMAT.COM está sendo executado pela CPU.

Figura 4. BOOT e carga de um programa

4.4 Desenvolvimento de Programas

O desenvolvimento de programas é associado ao uso de ferramentas ou ambientes de desenvolvimento que acompanham o programador desde a etapa de codificação propriamente dita até a geração e teste do código executável. Serão apresentadas a seguir as principais etapas de geração de um programa, além das ferramentas utilizadas. Mais adiante serão apresentadas metodologias mais completas que definem os passos para o desenvolvimento de programas. Esta área da informática é chamada de engenharia de software.

4.4.1 Geração do código fonte (codificação)

A codificação é a escrita, utilizando uma linguagem de programação, das instruções que o computador deve realizar para alcançar um resultado. Para a realização desta tarefa são utilizados os chamados editores. Os editores são a primeira ferramenta à qual o programador recorre na etapa de codificação, pois é através dela que será gerado o arquivo (ou o conjunto de arquivos) que vai conter o código-fonte do programa a ser desenvolvido.

Apesar de que é possível utilizar qualquer editor de linha (como por exemplo o EDIT do DOS) para gerar o arquivo de programa, alguns ambientes oferecem ferramentas de edição mais poderosas (orientadas à sintaxe ou de coloração de sintaxe). Alguns ambientes mais recentes oferecem a possibilidade de projeto de interfaces gráficas e gerenciadores de eventos, com geração automatizada do código-fonte.

4.4.2 Tradução do Código Fonte (código objeto)

Independente da linguagem utilizada e da arquitetura do sistema computacional, o código-fonte não é executável diretamente pelo processador. Ele permite apenas que o programador consiga definir o programa em uma forma legível aos humanos. Para que se possa obter o programa executável, é necessário que o código-fonte seja traduzido para o código de máquina do processador que compõe a arquitetura do sistema. Felizmente, isto é realizado de forma automática graças à existência de ferramentas

complexa, qualquer Termo já construído, seguido de um símbolo * ou /, seguido de uma Expressão.

Term Expressão

Expressão:

Term

/

Expressão

Termo:

Variável

Figura 6. Diagrama de sintaxe descrevendo a estrutura de uma expressão algébrica simples

Pode-se representar, de forma gráfica, a maneira pela qual uma cadeia adere à sintaxe descrita por um conjunto de diagramas de sintaxe, através de uma árvore sintática, como ilustrado na Figura 7, que apresenta uma árvore sintática para a cadeia x+y*z com base no diagrama da figura acima. Note-se que a raiz da árvore é o não-terminal Expressão, e que cada nível mostra a maneira como os não-terminais daquele nível vão sendo decompostos, até que finalmente sejam obtidos os símbolos da própria cadeia analisada.

Expressão

Termo +

x

Expressão

Termo *

y

Expressão

Termo

z

Termo

Figura 7. Árvore sintática da cadeia x+y*z

O processo de análise sintática de um programa consiste, essencialmente, em construir uma árvore de sintaxe para o programa-fonte. Por isso, as regras de sintaxe que descrevem a estrutura gramatical de um programa não devem propiciar que duas ou mais árvores de sintaxe distintas possam ser construídas para a mesma cadeia, dado que isto levaria a ambigüidades no analisador sintático. Esta falha pode ser bastante sutil. Com efeito, a própria regra da Figura 8 contém esse defeito, pois aceita as duas árvores de sintaxe mostradas na figura para o único comando seguinte:

If B1 then if B2 then S1 else S

Comando

if (^) Expressão then booleana

Comando else Comando

if Expressão then booleana

Comando

B

S

B

S

Comando

if (^) Expressão then booleana

Comando

if Expressão then else Comando booleana

Comando

B

S B

S

Figura 8. Duas árvores de sintaxe distintas para o comando if B1 then B2 then S1 else S

Note-se que as duas interpretação são significativamente diferentes. A primeira implica que o comando S2 será executado se B1 for falso, enquanto a segunda implica que S só será executado se B1 for verdadeiro e B2, falso.

As definições de sintaxe para linguagens formais de programação são projetadas para evitar tais ambigüidades. Em muitas linguagens, evita-se tais problemas usando chaves, ou então Begin-End. Em particular, escreveríamos:

If B1 then Begin if B2 then S End else S e

If B1 then Begin if B2 then S else S End;

para distinguir as duas possibilidades.

À medida que um analisador sintático recebe átomos do analisador léxico, ele vai analisando os comandos e ignorando os comentários. As informações extraídas das declarações são tabeladas em uma estrutura conhecida como tabela de símbolos. Dessa forma, a tabela de símbolos guarda informações sobre as variáveis declaradas, os tipos

Código Fonte

Código Fonte

Código Fonte

Código Fonte

Código Objeto

Código Objeto

Código Objeto

Código Objeto

Biblioteca Programa executável

Figura 9. Desenvolvimento de um programa

4.4.4 Depuradores ou debuggers

Os debuggers são assim chamados devido à sua função essencial que é de auxiliar o programador a eliminar (ou reduzir) a quantidade de “bugs” (erros) de execução no seu programa. Eles executam o programa gerado através de uma interface apropriada que possibilita uma análise efetiva do código do programa graças à:

n execução passo-a-passo (ou instrução por instrução) de partes do programa; n visualização do “estado” do programa através das variáveis e eventualmente dos conteúdos dos registros internos do processador; n alteração em tempo de execução de conteúdos de memória ou de variáveis ou de instruções do programa; n etc...

4.5 Paradigmas de programação

Do Assembly às linguagens mais sofisticadas de inteligência artificial, a programação evoluiu para técnicas de programação de mais em mais transparentes frente à máquina, numa tentativa de prover uma maior modularidade e um crescimento em desempenho e expressividade.

Existem vários paradigmas de programação, que são estilos utilizados pelos programadores para conceber um programa. A evolução das linguagens de programação pode ser apresentada a partir da forma como os paradigmas de programação evoluíram desde a programação não estruturada à programação orientada a objetos. A seguir serão apresentados alguns destes paradigmas de programação.

4.5.1 Programação não-estruturada

Usualmente, pessoas aprendem a programação escrevendo programas pequenos e simples, consistindo apenas de um programa principal. Aqui “programa principal” significa uma seqüência de comandos ou declarações que modificam dados que são acessível a todos os pontos do programa. Esta técnica de programação tem várias desvantagens no caso de programas grandes. Por exemplo, se a mesma seqüência é necessária em localizações diferentes ela deve ser copiada. Isto leva a idéia de extrair estas seqüências, nomear elas e oferecer uma técnica para chamar e retornar destes procedimentos.

4.5.2 Programação Procedural

Aqui um programa pode ser visto como uma seqüência de chamadas de procedimentos. Um exemplo de procedimento clássico é o cálculo de uma raiz quadrada. Uma chamada

de procedimento é usada para invocar o procedimento, podendo ser passado alguns parâmetros (por exemplo, o número cuja raiz quadrada deve ser calculada). Após a seqüência ser executada, o controle retorna justo após o ponto de chamada do procedimento. Introduzindo parâmetros tão bem quanto procedimentos de procedimentos (sub-procedimentos), programas podem ser escritos mais em mais estruturados e livres de erro. Por exemplo, se um procedimento é correto, toda vez que ele é usado ele produz um resultado correto. Conseqüentemente, no caso de erros você pode direcionar sua busca àqueles lugares que não são livres de erros.

4.5.3 Programação Modular

No passar dos anos, a ênfase no projeto de programas passou do projeto de procedimentos para a organização dos dados, surgindo a programação modular. Nela, procedimentos relacionados e dados que eles utilizam são agrupados em módulos separados. Por exemplo, todas as funções de manipulação de uma pilha (empilhar, desempilhar, etc.) e a pilha em si podem ser agrupadas em um módulo. Um programa portanto não consiste mais de apenas uma parte única. Ele é agora composto de várias pequenas partes que interagem através de chamadas de procedimento. Cada módulo tem seus próprios dados. Isto permite que cada módulo gerencie um estado interno que é modificado por chamadas a procedimentos deste módulo.

4.5.4 Programação Orientada a Objetos

Em contraste com as outras técnicas apresentadas, nós agora temos uma malha de objetos que interagem, cada um mantendo seu próprio estado. A essência da programação orientada a objetos consiste em tratar os dados e os procedimentos que atuam sobre os dados como um único objeto – uma entidade independente com uma identidade e certas características próprias. Este paradigma de programação será o objeto de estudo deste curso.

Uma abordagem orientada a objetos identifica as palavras-chaves no problema. Estas palavras-chaves são descritas então em um diagrama e setas são desenhadas entre estas palavras-chaves para definir uma hierarquia interna. As palavras-chaves serão os objetos na implementação e a hierarquia define a relação entre estes objetos. O termo objeto é usado aqui para descrever uma estrutura bem definida, contendo todas as informações sobre certa entidade: dados e funções para manipular os dados.

Os objetos introduzem uma maneira diferente de conceber, de programar, de analisar e de manter as aplicações. Após um longo período de maturação em laboratórios de pesquisa, as linguagens à objetos começam a invadir os domínios profissionais. É possível hoje em dia dizer que não se trata de um modo, mas de um processo de mutação. O principal argumento desses novos produtos inclui as facilidade de reutilização de código e em conseqüência ganhos de produtividade são alcançados. A reusabilidade depende em muito da modularidade dos programas.

4.5.5 Linguagens de programação e seus paradigmas

Uma linguagem de programação fornece o suporte a um estilo ou paradigma de programação se ela fornece funcionalidades que a tornam conveniente para usar determinado estilo. Uma linguagem não suporta uma técnica se é necessário esforços excepcionais ou destreza para escrever tal programa: ela meramente habilita a técnica a ser usada. Por exemplo, você pode escrever programas estruturados em Fortran e programas orientados a objetos em C, mas isto é desnecessariamente difícil de fazer porque estas linguagens não suportam diretamente estas técnicas. É de responsabilidade do programador aplicar certa técnica de programação.

4.6 Linguagens Interpretadas

As etapas de desenvolvimento anteriores consideram que o uso de linguagens de programação compiladas, ou seja, aquelas que produzirão um programa na forma da

Existem várias implementações de JVM’s para diversos sistemas operacionais, incluindo UNIX, Macintosh OS e Windows. Além disso, o bytecode pode ser convertido diretamente em instruções de linguagem de máquina, usando o compilador JIT (Just-In- time Compiler).

Java é uma linguagem de programação de propósito geral com um número de características que fazer ela muito interessante para ser usada na World Wide Web. Aplicações Java menores, chamadas applets, podem ser baixadas de um servidor Web e executar no seu navegador por um navegador compatível com o Java, tal como o Netscape Navigator ou o Microsoft Internet Explorer.

Figura 10. Criação e Execução de uma aplicação Java