Você está na página 1de 15

CAPITULO 1.

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO

A linguagem é imprescindível para o processo de comunicação. Duas pessoas que


se falam o fazem através de uma linguagem em comum, a linguagem natural. Da
mesma forma, duas máquinas trocam informação por uma linguagem, que neste
caso mais técnico e restrito, se chama protocolo. Do mesmo modo, um computador
armazena suas instruções em código de máquina.

Ao contrário dos seres humanos, as máquinas (dentre elas os computadores) são


projectados para executar tarefas bem determinadas a partir de determinadas
instruções. Um computador não é por si só uma máquina inteligente no sentido que
não pode aprender com a própria experiência para melhorar seu comportamento
futuro. Ao contrário, um computador é somente capaz de realizar estritamente as
tarefas que lhe forem delegadas e que façam parte do conjunto daquelas acções
que ele pode executar. Neste sentido, é necessário compreender que tipo de
instruções podem ser executadas pelos computadores para que possamos
programá-los — instruí-los com a sequência de acções necessárias para resolver
um determinado problema — de modo que realizem a tarefa do modo desejado,
portanto estas instruções são feitas através de programas.

Os programas são escritos em alguma linguagem de programação. Uma linguagem


de programação é a maneira de “conversarmos” com um computador.

Um programa é a definição de como os passos de um algoritmo serão


executados no computador.

Para que o computador execute um algoritmo, o mesmo deve ser escrito de uma
forma que o processador esteja apto a executá-lo. A linguagem de programação
entendida pelo computador é composta somente por números também conhecida
como linguagem de máquina, desta forma, seria um trabalho extremamente difícil
para o programador escrever algoritmos nesta linguagem, sendo assim, novas
linguagens de programação foram sendo desenvolvidas ao longo dos anos para
facilitar o processo de programação e escrita desses algoritmos.

As primeiras linguagens utilizadas no processo de desenvolvimento de software


foram às linguagens Assembly também conhecidas por linguagens de baixo nível
devido a sua proximidade com a linguagem de máquina. Com o passar dos anos as
linguagens não estruturadas foram ganhando espaço graças a sua semântica mais

1
genérica e principalmente por permitir a portabilidade nos sistemas desenvolvidos
com elas, porém, mesmo com todas essas vantagens existia a necessidade de
linguagens de mais alto nível e com vários outros recursos.

1.1. Conceitos de Linguagens de Programação

Como vimos anteriormente, para se implementar um algoritmo em um computador, é


necessário descrevê-lo de uma forma que o computador esteja apto a executá-lo.
Essa descrição é feita por intermédio de uma “linguagem de programação”. O
próprio conjunto de instruções de um processador pode ser entendido como uma
“linguagem de programação”.

Linguagens de programação são usadas para descrever algoritmos; isto é,


sequências de passos que levam à solução de um problema. Uma linguagem de
programação precisa suportar a definição de acções e prover meios para especificar
operações básicas de computação, além de permitir que os usuários especifiquem
como estes passos devem ser sequenciados para resolver um problema. Uma
linguagem de programação pode ser considerada como sendo uma notação que
pode ser usada para especificar algoritmos com precisão.

Uma linguagem de programação é uma notação formal para descrição de


algoritmos que serão executados por um computador.

Como todas as notações formais, uma linguagem de programação tem dois


componentes: Sintaxe e Semântica. A sintaxe consiste em um conjunto de regras
formais, que especificam a composição de programas a partir de letras, dígitos, e
outros símbolos.

Por exemplo, regras de sintaxe podem especificar que cada parêntese aberto em
uma expressão aritmética deve corresponder a um parênteses fechado, e que dois
comandos quaisquer devem ser separados por um ponto-e-vírgula. As regras de
semântica especificam o “significado” de qualquer programa, sintacticamente válido,
escrito na linguagem.

Pode-se ainda definir a linguagem de programação como sendo um método


padronizado para expressar instruções para um computador. Ou ainda como

2
um conjunto de regras sintácticas e semânticas usadas para definir um
programa de computador

Permite ao programador especificar precisamente em quais dados o computador


deve actuar, como estes dados serão armazenados ou transmitidos e quais acções
devem ser tomadas sob cada circunstância

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.

1.1. Geração das Linguagens de Programação

1ª Geração: linguagens em nível de máquina

Os primeiros computadores eram programados em linguagem de máquina, em


notação binária. Cada instrução de máquina é, em geral, formada por um código de
operação e um ou dois endereços de registadores ou de memória.

As linguagens de máquina permitem a comunicação directa com o computador em


termos de “bits”, registadores e operações de máquina bastante primitivas.

Um programa em linguagem de máquina nada mais é que uma sequência de zeros


e uns, a programação de um algoritmo complexo usando esse tipo de linguagem é
complexa, cansativa e fortemente sujeita a erros.

2ª Geração: linguagens de montagem (Assembly)

Esta geração compreende as linguagens simbólicas ou de montagem (Assembly),


projectadas para minimizar as dificuldades da programação em notação binária.

Códigos de operação e endereços binários foram substituídos por mnemónicos


(abreviações).

mov mul add label goto

3
Exemplo: tradução do IF para Assembly

Nas linguagens de montagem, a maioria das instruções são representações


simbólicas de instruções de máquina. O processamento de um programa em
linguagem simbólica requer tradução para linguagem de máquina antes de ser
executado.

Nesta geração os códigos de operação e endereços binários foram substituídos por


abreviações. Assim, a instrução de máquina (0010 0001 0110 1100) evoluiu para:
ADD R1, TOTAL

3ª Geração: linguagens orientadas ao usuário

As linguagens orientadas ao usuário surgiram na década de 60. Algumas delas são


orientadas à solução de problemas científicos, tais como FORTRAN, PASCAL e
ALGOL; outras, tal como COBOL, são usadas para aplicações comerciais.

Linguagens como PL/I e ADA contêm facilidades para ambos os tipos de


computações (científica e comercial).
Podem também ser classificadas em:

 Linguagens procedimentos também chamadas “procedurais” ou imperativas


 Linguagens declarativas

Nas linguagens procedimentais, um programa específica um procedimento, isto é,


uma sequência de passos a serem seguidos para solucionar um problema.

As instruções oferecidas por essas linguagens pertencem, em geral, a três classes:

 Instruções entrada/saída;
 Instruções de cálculos aritméticos ou lógicos

4
 Instruções de controlo de fluxo de execução (desvios condicionais,
incondicionais e processamento iterativo)
 Exemplos de linguagens orientadas ao usuário: BASIC, ALGOL, PL/I,
PASCAL, ADA, C, etc.

4ª Geração: linguagens orientadas à aplicação

As linguagens de 3ª geração foram projectadas para profissionais de processamento


de dados e não para usuários finais. Sendo assim, a depuração de programas
escritos nessas linguagens consome tempo, e a modificação de sistemas complexos
é relativamente difícil.

As linguagens de 4ª geração foram projectadas em resposta a esses problemas. Os


programas escritos em linguagens de 4ª geração necessitam de menor número de
linhas de código em relação aos programas correspondentes codificados em
linguagens de programação convencionais.

As linguagens de 4ª geração variam bastante no número de facilidades oferecidas


ao usuário. Algumas são, meramente, geradores de relatórios ou pacotes gráficos.
Outras são capazes de gerar aplicações completas.

Em geral, essas linguagens são projectadas para atender a classes específicas de


aplicações.

Principais objectivos das linguagens da 4ª geração:

 Facilitar a programação de computadores de tal maneira que usuários finais


possam resolver seus problemas;
 Apressar o processo de desenvolvimento de aplicações;

5
 Facilitar e reduzir o custo de manutenção de aplicações;
 Minimizar problemas de depuração;
 Gerar código sem erros a partir de requisitos de expressões de alto nível.

Exemplos de linguagens da 4ª geração:

LOTUS 1-2-3, SQL, SUPERCALC, VISICALC, DATATRIEVE, VHML, PHP.

5ª Geração: linguagens do conhecimento

São usadas principalmente na área de Inteligência Artificial. Desenvolvidas para


facilitar a representação do conhecimento que é essencial para a simulação de
comportamentos inteligentes.

O termo 5ª geração refere-se, especialmente, a sistemas que usam mecanismos


da área de inteligência artificial (IA), ou seja, sistemas especialistas,
processadores de língua natural e sistemas com bases de conhecimento.

Um sistema de 5ª geração armazena conhecimento complexo de modo que a


máquina pode obter inferências a partir da informação codificada.

1.2. Classificação das Linguagens de Programação

Cada linguagem de programação foi desenvolvida para solucionar determinado tipo


de problema e cumprir uma função determinada. Uma linguagem pode ser melhor
para execução de cálculos matemáticos complexos, com aplicações na área
científica; outra pode ser melhor para processar uma grande quantidade de dados
submetidos a operação simples, com aplicações na área financeira; e ainda outras
exigem uma interface elaborada e fácil interacção com o usuário.

No entanto as linguagens de programação podem ser classificadas segundo alguns


critérios, dentre os quais podemos citar:

1.2.1. Quanto ao grau de abstracção (NÍVEL)

Esta classificação leva em consideração a facilidade na escrita e a proximidade


desta linguagem com a linguagem humana.

6
Quanto mais “parecida” for a linguagem de programação com a linguagem humana,
mais alto é seu nível.

1. Linguagens de baixo nível

As linguagens de Baixo Nível são aquelas voltadas para a máquina, ou seja as que
são escritas utilizando as instruções do microprocessador do computador.

São mais poderosas no que diz respeito ao acesso aos recursos do hardware, são
bem mais rápidas, mas exigem um maior esforço de programação. Exemplo:
Assembly, C ANSI.

Vantagens: Programas são executados com maior velocidade de processamento.


Os programas ocupam menos espaço na memória.

Desvantagens: Em geral, programas em Assembly têm pouca portabilidade, isto é,


um código gerado para um tipo de processador não serve para outro.

Códigos Assembly não são estruturados, tornando a programação mais difícil.

2. Linguagens de Médio nível

São linguagens voltadas ao ser humano e a máquina, sendo uma mistura entre
as linguagens de Alto Nível e as de Baixo Nível.

Estas linguagens contêm comandos muito simples e outros muito complexos, o que
torna a sua programação “complicada”.

Ex: linguagem C

Pode-se acessar aos registos do sistema, trabalhar com endereços de memória -


características de linguagens de baixo nível - e ao mesmo tempo realizar operações
de alto nível (if...else; while; for).

7
Vantagens: Geralmente são linguagens mais poderosas, permitindo a criação de
diversos softwares, desde jogos a programas com qualidade profissional.

Desvantagens: Alguns comandos têm uma sintaxe muito difícil de compreender.

3. Linguagens de Alto nível

São linguagens voltadas para o ser humano. Em geral utilizam sintaxe mais
estruturada tornando o seu código mais fácil de entender e de editar programas.
Trata-se de linguagens independentes da arquitectura do computador.

São mais fáceis de se programar, e apresentam (geralmente) maior


portabilidade, permitindo fácil migração de um hardware para outro.

Exemplos: Java, C#, Object Pascal (Delphi), Visual Basic.

Estas linguagens permitem ao programador esquecer-se completamente do


funcionamento interno da máquina para que se está desenvolvendo o programa.
Somente necessita de um tradutor que entenda o código fonte como as
características da máquina.

Vantagens: Por serem compiladas ou interpretadas, têm maior portabilidade,


podendo ser executados em várias plataformas com pouquíssimas modificações.
Em geral, a programação torna-se mais fácil por causa do maior ou menor grau de
estruturação de suas linguagens.

Desvantagens: Em geral, as rotinas geradas (em linguagem de máquina) são mais


genéricas e, portanto, mais complexas e por isso são mais lentas e ocupam mais
memória.

Exemplo: conversão para baixo nível

8
1.2.2. Quanto ao paradigma de programação

Um paradigma de programação é um padrão de resolução de problemas que se


relaciona com um determinado género de programas e linguagens.

Esta classificação das linguagens de programação leva em consideração a forma


com que é elaborada a solução para o problema.

O paradigma determina o ponto de vista da realidade e como se actua sobre ela, os


quais são classificados quanto ao seu conceito de base, podendo ser: Imperativo,
funcional, lógico, orientado a objectos e estruturado. Cada qual determina uma
forma particular de abordar os problemas e de formular as respectivas soluções.

Além disso, uma linguagem de programação pode combinar dois ou mais


paradigmas para potencializar as análises e soluções. Deste modo, cabe ao
programador escolher o paradigma mais adequado para analisar e resolver cada
problema.

Cinco paradigmas de programação distintos e fundamentais evoluíram nas últimas


três décadas:

 Paradigma/Programação imperativo;
 Paradigma/Programação orientada a objectos;
 Paradigma/Programação funcional;
 Paradigma/Programação lógico;
 Paradigma/Programação estruturado.

1. Paradigma imperativo

A programação imperativa é fundamentada no modelo computacional clássico de


John Von Neumann. Para este paradigma, o programa contém uma série de
comandos para executar cálculos, atribuir valores à variáveis, obter entradas ou
produzir saídas.

9
Exemplos de linguagens de programação que baseiam-se no modelo imperativo:

 Ada;  Basic;  Pascal ;


 ALGOL;  C;  Python;
 Perl  Cobol;  Lua.
 Assembler;  Fortran;

Este paradigma também é denominado de procedural, por incluir subrotinas ou


procedimentos como mecanismo de estruturação.

Vantagens:

Eficiência (porque embute o modelo de Von Neumann); modelagem “natural ” de


aplicações do mundo real; paradigma dominante e bem estabelecido; e também
muito flexível.

Desvantagens:

Difícil legibilidade; as instruções são centradas no como e não no que.

2. Paradigma Orientada a Objecto

A programação orientada a objecto (POO) fornece um modelo no qual um programa


é uma colecção de objectos que interagem entre si, passando mensagens que
transformam seu estado.

A programação Orientada a Objectos é baseada na composição e interacção de


diversas unidades de softwares denominados objectos. O funcionamento de um
software orientado a objectos se dá através do relacionamento e troca de
mensagens entre esses objectos.

Esses objectos são classes, e nessas classes os comportamentos são chamados de


métodos e os estados possíveis da classe são chamados de atributos. Nos métodos
e nos atributos também são definidas as formas de relacionamento com outros
objectos.

Exemplos de linguagens de programação que baseiam-se no modelo orientado a


objectos:

 Small talk;  Python;  Ruby;

10
 C++;  C#;  Simula
 Object Pascal;  Oberon;
 Java;  Eiffel;

Vantagens: Esse paradigma possui todas as vantagens do paradigma imperativo


entre outras: a alteração de um módulo não incorre na modificação de outros
módulos; quanto mais um módulo for independente, maior a chance de poder ser
reutilizado em outra aplicação.

Desvantagens: Por exigir formas de pensar relativamente complexas, a


programação orientada a objectos até hoje ainda não é bem compreendida ou usada
pela maioria.

3. Paradigma Lógico

É quando a relação entre os diversos componentes do programa é estabelecida


mediante um conjunto de regras. Estabelece-se uma relação entre entradas e
saídas, entre os dados, e o sistema simplesmente “obedece” este conjunto de
regras, sem se preocupar com a sequência. Nesse paradigma programas são
relações entre Entrada/Saída. Possui estilo declarativo, como o paradigma funcional.
Inclui características imperativas, por questões de eficiência. Aplicações em
prototipagem em geral, sistemas especialistas, bancos de dados, etc.

Exemplos de linguagens de programação que baseiam-se no paradigma lógico:

 Popler;  Planner;  Oz;


 Conniver;  Prolog;  Frill.
 QLISP;  Mercury;

Vantagens: Possui a princípio todas as vantagens do paradigma funcional. E


permite concepção da aplicação em um alto nível de abstracção (através de
associações entre E/S).

Desvantagens: Variáveis de programa não possuem tipos, nem são de alta ordem.

4. Paradigma Funcional

11
É quando o programa dá ênfase à relação entre seus componentes mediante
funções específicas. Este paradigma trata a computação como uma avaliação de
funções matemáticas.

Este método enfatiza a aplicação de funções, as quais são tratadas como valores de
primeira importância, ou seja, funções podem ser parâmetros ou valores de entrada
para outras funções e podem ser os valores de retorno ou saída de uma função.

Sistemas são construídos através da definição, composição e definição de


funções.

Funcional: modelo computacional

Exemplos de linguagens de programação que baseiam-se no modelo funcional:

 Lambda (não implementado para computadores);


 LISP;
 Scheme (tentativa de simplificar e melhorar o LISP);
 ML (Criada em universidade);
 Miranda (também criada em universidade);
 Haskell.

Desvantagens: Na programação funcional parecem faltar diversas construções


frequentemente (embora incorrectamente) consideradas essenciais em linguagens
imperativas, como C.

Por exemplo, não há alocação explícita de memória nem de variáveis.

Vantagens: Devido ao processo automático de alocação de memória, então efeitos


colaterais no cálculo da função são eliminados. Sem estes efeitos, a linguagem
assegura que o resultado da função será o mesmo para um dado conjunto de

12
parâmetros não importando onde, ou quando, seja avaliada e é empregado em
computações independentes para execução paralela.

A recursividade em programação funcional pode assumir várias formas e é em geral


uma técnica mais poderosa que o uso de laços do paradigma imperativo.

5. Paradigma Estruturado

É quando o programa é escrito tendo em base o uso principalmente de estruturas:


Sequência, Decisão e Iteração (repetição).

Este paradigma preconiza que todos os programas possíveis podem ser reduzidos a
apenas três estruturas: sequência, decisão e iteração. Tendo, na prática, sido
transformada na Programação modular, a Programação estruturada orienta os
programadores para a criação de estruturas simples em seus programas, usando as
subrotinas e as funções. Foi a forma dominante na criação de software entre a
programação linear e a programação orientada por objectos.

Apesar de ter sido sucedida pela programação orientada por objectos, pode-se dizer
que a programação estruturada ainda é marcantemente influente, uma vez que
grande parte das pessoas ainda aprendem programação através dela.

Linguagens:

 C;
 Basic;
 Pascal;
 Cobol;

Vantagens: Os problemas podem ser quebrados em vários sub problemas, a boa


legibilidade e a boa compreensão da estrutura deste paradigma motivam os
programadores a iniciarem a programação pelo modelo estruturado.

Desvantagens:

 Os dados são separados das funções;


 Mudanças na estrutura dos dados acarreta alteração em todas as funções
relacionadas;

13
 Gera sistemas difíceis de serem mantidos.

1.2.3. Quanto a forma de execução

Esta classificação leva em consideração a forma com que as instruções serão


executadas.

1. Linguagem montada

É quando um programa (montador) simplesmente traduz as instruções escritas por


símbolos no programa fonte para códigos binários reconhecidos pelo processador.
Ex: Assembly.

2. Linguagem compilada

É quando um programa mais complexo (compilador) analisa as estruturas do


programa fonte, e gera trechos de programa em código binário reconhecíveis pelo
processador ou por outro programa executor.

O código fonte nessa linguagem é executado directamente pelo sistema operacional


ou pelo processador, após ser traduzido, através de um processo chamado
compilação, usando um programa de computador chamado compilador, para uma
linguagem de baixo nível, como linguagem de montagem ou código de máquina.

Teoricamente, qualquer linguagem pode ser compilada ou interpretada e, por causa


disso, há algumas linguagens que possuem ambas implementações.

Abaixo, segue-se algumas linguagens de programação que são tipicamente


compiladas:

• Ada • C++ • Common Lisp


• JOVIAL • Objective-C • Ubercode
• ALGOL • CLEO •D
• LabVIEW • Ocaml • Urq
• BASIC • COBOL • Delphi
• Lush • Pascal • Visual Basic
•C • Cobra • Eiffel
• ML • Sather • Visual Foxpro

14
• Fortran • Visual Prolog

3. Linguagem interpretada

É quando a linguagem do programa fonte é directamente interpretada por um


programa executor. Geralmente é um pouco mais lenta. O código fonte nessa
linguagem é executado por um programa de computador chamado interpretador,
que em seguida é executado pelo sistema operacional ou processador. Mesmo que
um código em uma linguagem passe pelo processo de compilação, a linguagem
pode ser considerada interpretada, se o programa resultante não for executado
directamente pelo sistema operacional ou processador.

Um exemplo disso é o Bytecode, que é um tipo de linguagem interpretada, que


passa pelo processo de compilação e, em seguida, é executado por uma máquina
virtual, cuja sintaxe é similar a código de máquina e, cada comando ocupa 1 byte.
Existem também, as linguagens de script, que são linguagens interpretadas,
executadas do interior de programas e/ou de outras linguagens de programação.

Teoricamente, qualquer linguagem pode ser compilada ou interpretada e, por causa


disso, há algumas linguagens que possuem ambas implementações.

Abaixo, segue-se algumas linguagens de programação que são tipicamente


interpretadas (que podem possuir implementações compiladas):

• ActionScript • PHP • F-Script


• JavaScript • CYBOL • Smalltalk
• APL • Python • Forth
• Lisp • DMDScript • Squeak
• ASP •R • Icon
• Logo • E4X • VBScript
• BASIC • Ruby • Inform
• Lua • ECMAScript • VisualAge
• Bistro •S •J
• MUMPS • Euphoria • VisualWorks
• C# • Scheme • Java
• Tcl

15

Você também pode gostar