quinta-feira, 24 de abril de 2008

Equipe 5 ; Linguagens de programação

Histórico dos Computadores quanto as Gerações de Linguagens de Programação

Alanna dos Santos¹, Cristiele Pimentel¹, Eduardo Godinho¹, Gabriela Miranda¹, Maiara Batista¹, Ozeneide Castro¹



¹Universidade Federal do Pará – Campus Universitário de Santarém – Faculdade de Bacharelado em Sistemas de Informação

Av. Marechal Rondon – 68.030-800 – Santarém, PA – Brasil



Resumo Uma linguagem de programação é um método padronizado para expressar instruções para um sistema computacional. É um conjunto de regras sintáticas e semânticas usadas para definir um conjunto de instruções para um programa de computador. Uma linguagem permite que um programador especifique precisamente sobre quais dados um computador vai atuar, como estes dados serão armazenados ou transmitidos e quais ações devem ser tomadas sob várias circunstâncias. Este artigo define as gerações de linguagens mais aceitas e comenta as características de cada uma delas.












1. Introdução

Uma linguagem de programação é um conjunto finito de símbolos com os quais se transformam algoritmos em programas de computador executáveis. É dela que o programador se utiliza para transformar o projeto de um sistema ou programa em algo palpável.

A informática evoluiu muito rapidamente e as velocidades de processamento dobraram em períodos cada vez mais curtos. Para se ter uma noção disso, basta observar que entre os modelos de computador mais antigos, os espaçamentos entre uma novidade e outra eram de dezenas de anos, sendo que hoje não chega a durar nem um mês. Cada setor do mercado sente diferentemente suas necessidades e conseqüentemente adapta da melhor maneira as funcionalidades que o computador pode trazer.

Nesse contexto as linguagens de programação acompanharam a evolução dos computadores e, por sua própria natureza, elas são criadas e mudam muito rapidamente. Um relatório escrito no começo de 1995 listava a existência de 2350 diferentes linguagens. Consideremos que desde a utilização da Linguagem de Máquina, Primeira Geração de Linguagem de Programação, até a referida data de listagem, um número considerável de estruturas foi desenvolvida.

Apesar dessa abundância com relação às linguagens, é notável que, nos últimos anos, a sobreposição dos conceitos comuns é muito grande, é fácil perceber que há pouquíssima evolução em termos de estruturas e conceitos. A evolução dos conceitos e modelos de programação teve efeito direto na re-estruturação das linguagens de programação. Isto se reflete basicamente na distribuição topológica dos dados e códigos na memória do computador. Poderemos perceber que a tendência evolutiva das linguagens tem sido aglutinar código ao redor de pequenas regiões de dados na memória dos computadores Este é o princípio básico de implementação das linguagens orientadas a objeto (conceito que será especificado adiante).

Serão abordados neste artigo conceitos de Linguagem de Baixo e Alto Nível e os principais elementos, as características e particularidades das Quatro Gerações de Linguagens de Programação (alguns autores se referem até a uma Quinta Geração).

Assim, qual será o caminho evolucionário que as novas linguagens seguirão? Obviamente, as necessidades atuais em termos de programação não permanecerão constantes. Objetiva-se embasar futuros programadores que através do conhecimento da evolução das linguagens tenham sensibilidade de perceber quais são as reais necessidades, a melhor forma de desenvolver seu trabalho utilizando-se das melhores ferramentas e incentivar o desenvolvimento das mesmas.

2. Gerações de Linguagens de Programação

2.1. Primeira Geração

Com os primeiros computadores surgia a única maneira possível de entrada de dados: as linguagens de baixo nível, ou de Primeira Geração. É constituída inteiramente de números, o que torna praticamente impossível entendê-la diretamente. Cada CPU tem seu conjunto único de linguagem de baixo nível, ou linguagem de máquina, definido pelo fabricante do chip.

Os programas de computador eram conjuntos de instruções de máquina, escritas, em geral, em código binário (linguagem de máquina), que eram colocadas na memória do computador. Após isso, era disparado o início do mesmo e o computador se encarregava de gerar resultados. Dessa forma, o uso de um computador estava restrito a umas poucas pessoas que conseguiam montar esses verdadeiros hieróglifos modernos e, ao mesmo tempo, até por causa disso, tinham uma baixa produtividade.

Esse tipo primitivo de linguagem de programação apresentava muitas desvantagens já que era grande a probabilidade de erro em todos os estágios do processo de programação, mesmo sendo com algoritmos simples resultavam em longos programas, o que dificultava o processo de validação e detecção de erros e o cálculo de endereços de memória deveria ser feito manualmente, com um árduo trabalho e uma grande probabilidade de erros. Por exemplo, a instrução “some 1 + 1” deveria ser representada como: 10100100.

Com toda a imprecisão, nada conveniente para a produtividade necessária dos programas em um computador, que a quantidade enorme de 0’s e 1’s trazia, tornou-se necessário que uma nova forma de programação fosse utilizada. Surgindo então, a Segunda Geração de Linguagens.

2.2. Segunda Geração

A segunda geração é representada pela linguagem de montagem ou assembly, que é uma notação legível por humanos para o código de máquina que uma arquitetura de computador específica usa. A linguagem de máquina torna-se legível pela substituição dos valores em binários por símbolos chamados mnemônicos, ou seja, enquanto um computador sabe o que a instrução-máquina IA-21 (10110000 01100001) faz, para os programadores é mais fácil recordar a representação equivalente em instruções mnemônicas (MOV AL, 61h), por exemplo.

Cada arquitetura de computador tem a sua própria linguagem de máquina e, portanto, sua própria linguagem de montagem. Essas linguagens de montagem diferem no número e tipo de operações que suportam. Também têm diferentes tamanhos e números de registros, e diferentes representações dos tipos de dados armazenados. Enquanto todos os computadores de utilização genérica são capazes de desempenhar essencialmente as mesmas funções, o modo como o fazem é diferente.

Nos primórdios da programação todos os programas eram escritos nessa linguagem. Hoje, a linguagem assembly, é utilizada quando a velocidade de execução ou o tamanho do programa executável gerado são essenciais. Atualmente a maioria dos programas é escrita em linguagens de alto nível (comentaremos mais adiante) devido à facilidade de criação e manutenção dos programas. Todos os programas escritos nessas linguagens são convertidos para a linguagem de máquina para serem executados pelo processador. A conversão da linguagem assembly para a linguagem de máquina se chama montagem, e é feita por um programa chamado montador (ou assembler).


ORG 100
LDAA # $10
END

Essa linguagem é também classificada como linguagem de segunda geração, e, assim como a linguagem de máquina, é considerada uma linguagem de baixo nível.

Exemplo de linhas de programação em assembly



2.3. Terceira Geração

A seguir, surgiu o que, na época, chamavam de linguagens de programação de alto nível e seus correspondentes compiladores. As linguagens eram chamadas assim, pois, no entendimento da época, a forma de construção de soluções assemelhava-se à linguagem humana. Os compiladores eram programas que se encarregavam de converter programas escritos nessas linguagens, para programas escritos em linguagem de máquina. Com o surgimento das Linguagens de Programação e os Compiladores, surgem os programas-fontes, escritos numa linguagem de programação e, portanto, compreensíveis, para quem conhece essa linguagem e os programas executáveis.

Dentro das linguagens desse tipo que atingiram um grande sucesso, encontram-se o FORTRAN, nas aplicações técnicocientíficas e o COBOL, nas aplicações administrativo-financeiras. O surgimento dessas linguagens permitiu que o campo de ação dos computadores se expandisse significativamente, embora continuasse restrito às grandes corporações públicas ou privadas. Foi nesta época que surgiram, nas empresas e nas grandes corporações que utilizavam os computadores nas suas atividades, os CPDs (Centros de Processamento de Dados). Neste local, se fixavam os computadores e o pessoal envolvido com eles, desde os operadores, passando pelos programadores e analistas. Os cursos de computação inexistiam nessa época. Desta forma, pode-se concluir que o uso de computadores era totalmente centralizado; os usuários eram treinados para usar os novos sistemas elaborados desde os CPDs e raramente podiam influir significativamente no seu modelo.

Os comandos dessa geração, na sua maioria em inglês, têm sintaxe semelhante à do idioma escrito e introduzem as estruturas de controle (se.. então, para... faça). Também são chamadas de linguagens procedurais por dividirem a estrutura do programa em pedaços, chamados procedimentos.


Exemplo de programa escrito em linguagem de alto nível





2.4. Quarta Geração

Encontram-se nessa geração linguagens independentes da arquitetura do computador. Sendo assim, à princípio, um programa escrito em uma linguagem de alto nível, pode ser migrado de uma máquina a outra sem nenhum tipo de problema. Estas linguagens permitem ao programador se esquecer completamente do funcionamento interno da máquina/s para a que está desenhando o programa. Somente necessitam de um tradutor que entenda o código fonte como as características da máquina.

Atualmente reinam as linguagens de Quarta Geração, orientadas a objetos, nova forma de programação que têm por objetivo a reutilização de código: um programa principal enxuto chama os objetos, pequenos trechos de código reutilizável, espécie de evolução dos procedimentos. Alguns exemplos deste tipo incluem o Java e as linguagens do .NET (C#, ASP.NET, etc.)

Um outro conceito que também vem ganhando força nos últimos anos é o de tipos dinâmicos, determinados em tempo de execução, versus o conceito de tipos estáticos, determinados em tempo de compilação. Muitas das linguagens atuais (PHP, Python, Perl) optaram por tipos dinâmicos para ganhar flexibilidade e produtividade. Existem também linguagens de script, que não apresentam todas as estruturas de controle presentes em uma linguagem de programação convencional e, por isso, geralmente são mais “leves”, ou seja, mais rápidas.

Alguns autores referem-se ainda a uma Quinta Geração: as linguagens orientadas à inteligência artificial. Estas linguagens ainda estão pouco desenvolvidas. De uma forma geral, ao decorrer do tempo observaram-se os seguintes aspectos:

  • crescimento da capacidade dos computadores e complexidade dos programas

  • linguagens foram ficando cada vez mais independentes do hardware

  • necessidade de linguagens mais fáceis de usar e oferecendo um maior nível de abstração

  • aumento do custo de programação e diminuição do custo dos computadores

  • surgimento de novos conceitos e tecnologias



Ordem cronológica das linguagens de programação




Como será fácil compreender, um dos principais objetivos das linguagens de programação é permitir que os programadores possuam uma maior produtividade, criando condições para que estes transmitam mais facilmente e rapidamente as suas intenções à máquina. À medida que caminhamos, o universo programático sofreu diversas metamorfoses, onde muitas linguagens inadequadas à nova realidade computacional deixaram de existir cedendo lugar a novas formas de comunicação neste eterno diálogo homem/máquina.

3. Referências

FERRAZ, Ronaldo. A Evolução das Linguagens de Programação. Disponível em: <http://logbr.reflectivesurface.com/2003/03/26/evolucao-das-linguagens-de-programacao/> Acesso em: 22 abr. 2008

VINICIUS, Marcus. Linguagem de Programação. Disponível em: <http://www.vemconcursos.com/opiniao/index.phtml?page_sub=5&page_id=440> Acesso em: 22 abr. 2008

LANGA, Sara. Tipos de Linguagem de Programação. Disponível em: < http://www.criarweb.com/artigos/685.php> Acesso em: 22 de abr. 2008

BRPROFILE. A evolução do Software: Desde os primeiros comandos até o surgimento do software livre. Disponível em: <http://guia.mercadolivre.com.br/evoluco-software-desde-primeiros-comandos-ate-surgimento-livre-16975-VGP> Acesso em: 22 abr. 2008

Recife Java Team. Evolução das Linguagens de Programação. Disponível em : <http://www.dimap.ufrn.br/~jorge/textos/java/JavaBook1996/aula1/evolucao.htm> Acesso em: 22 abr. 2008




Nenhum comentário: