Você está na página 1de 11

Universidade Veiga de Almeida

Algoritmos e Linguagem I

Aula 1
Conteúdo:
1. Apresentação da disciplina
2. Contextualização e definições:
2.1. Algoritmos
2.2. Programas
2.3. Linguagens de programação
2.4. Sintaxe e semântica
2.5. Desenvolvimento de programas

1. Apresentação da disciplina
Apresentação do professor
a. Formação acadêmica
b. Experiência acadêmica
c. Experiência profissional
Apresentação dos alunos
a. Identificar familiaridade com a disciplina
b. Verificar conhecimento de algoritmos e lógica
c. Identificar experiência com programação e linguagens
Apresentação do plano de aula e bibliografia
a. Anexo “Plano de Aula”
Apresentação dos critérios de avaliação
a. Freqüência: obrigatória, mínimo de 75%
b. Aproveitamento: provas e trabalhos

1o GQ = Prova 1 + Trabalho 1
2o GQ = Prova 2 + Trabalho 2
Valores: 0,0 – 10,0
Pesos: Provas* = 70% / Trabalhos** = 30%

M = (1o GQ + 2o GQ) / 2
M ≥ 7,0 ⇒ Aprovado
3.0 ≤ M < 7,0 ⇒ Exame final
M < 3,0 ⇒ Reprovado

MF = (F + M) / 2
M ≥ 5,0 ⇒ Aprovado
M < 5,0 ⇒ Reprovado

* Em nenhuma das provas haverá segunda chamada


** Trabalhos entregues após as datas de entregas serão desconsiderados

Aula 1 - Prof. Cláudio Marques - Pág. 1


Universidade Veiga de Almeida
Algoritmos e Linguagem I

2. Contextualização

O computador, diferentemente de outras máquinas, é uma máquina de propósito geral, isto é, serve a
diversas finalidades. Por exemplo, um microondas, por mais que possa ser "programado", só serve para
esquentar, descongelar e assar alimentos. Já um computador, pode sevir tanto de tela de artista, como
máquina de calcular, prancha de um arquiteto, entre outras. Para tal, é necessário que sejam introduzidas
dentro dele diretrizes bem específicas, para que sirva a propósitos diferentes. Estas diretrizes são, na
verdade, uma seqüência de instruções, que quando executadas produzem um efeito desejado. A esta
seqüência de instruções sob uma ordem prescrita, dá-se o nome de algoritmo.

Pode-se dizer então, que o computador é um processador de algoritmos.

O uso de algoritmos é quase tão antigo quanto a matemática. Com o passar do tempo, entretanto, ele foi
bastante esquecido pela matemática. Com o advento das máquinas de calcular e mais tarde os
computadores, o uso de algoritmos ressurgiu com grande vigor, como uma forma de indicar o caminho para
a solução dos mais variados problemas.

Algoritmo não é a solução do problema, pois, se assim fosse, cada problema teria um único algoritmo.

Algoritmo é o caminho para a solução de um problema, e em geral, os caminhos que levam a uma solução
são muitos.

Ao longo dos anos surgiram muitas formas de representar os algoritmos, alguns utilizando linguagens
semelhantes às linguagens de programação e outras utilizando formas gráficas.

O aprendizado de algoritmos não se consegue a não ser através de muitos exercícios.

2.1. Algoritmos

A automação é o processo em que uma tarefa deixa de ser desempenhada pelo homem e passa a ser
realizada por máquinas, sejam estas dispositivos mecânicos (como as máquinas industriais), eletrônicos
(como os computadores), ou de natureza mista (como os robôs).

Para que a automação de uma tarefa seja bem-sucedida é necessário que a máquina que passará a realizá-la
seja capaz de desempenhar cada uma das etapas constituintes do processo a ser automatizado com
eficiência, de modo a garantir a repetibilidade do mesmo. Assim, é necessário que seja especificado com
clareza e exatidão o que deve ser realizado em cada uma das fases do processo a ser automatizado, bem
como a seqüência em que estas fases devem ser realizadas.

À especificação da seqüência ordenada de passos que deve ser seguida para a realização de uma tarefa,
garantindo a sua repetibilidade, dá-se o nome de algoritmo.

Embora esta definição de algoritmo seja correta, podemos definir algoritmo, de maneira informal e
completa como:

“Algoritmo é um conjunto finito de regras, bem definidas, para a solução de um problema em um tempo
finito e com um número finito de passos.”

Informalmente, um algoritmo é qualquer procedimento computacional bem definido que toma algum valor
ou conjunto de valores como entrada e produz algum valor ou conjunto de valores como saída.

Aula 1 - Prof. Cláudio Marques - Pág. 2


Universidade Veiga de Almeida
Algoritmos e Linguagem I
Um algoritmo deve sempre possuir pelo menos um resultado, normalmente chamado de saída, e satisfazer a
propriedade da efetividade, isto é, todas as operações especificadas no algoritmo devem ser suficientemente
básicas para que possam ser executadas de maneira exata e num tempo finito.

Na prática não é importante ter-se apenas um algoritmo, mas sim, um bom algoritmo. O mais importante de
um algoritmo é a sua correção, isto é, se ele resolve realmente o problema proposto e o faz exatamente.

Para se ter um algoritmo, é necessário:

1. Que se tenha um número finito de passos


2. Que cada passo esteja precisamente definido, sem possíveis ambigüidades
3. Que existam zero ou mais entradas tomadas de conjuntos bem definidos
4. Que existam uma ou mais saídas
5. Que exista uma condição de fim sempre atingida para quaisquer entradas e num tempo finito.

Para que um computador possa desempenhar uma tarefa é necessário que esta seja detalhada passo a passo,
numa forma compreensível pela máquina, utilizando aquilo que se chama de programa. Neste sentido, um
programa de computador nada mais é que um algoritmo escrito numa forma compreensível pelo
computador.

2.2. Programas

Os programas de computador nada mais são do que algoritmos escritos em uma linguagem de computador
(Pascal, C, Cobol, Fortran, Delphi, Java, entre outras) e que são interpretados e executados por um
computador.

2.3. Linguagens de programação

Linguagens de programação são usadas para descrever algoritmos; isto é, seqüências de passos que levam à
solução de um problema. Uma linguagem de programação precisa suportar a definição de açõ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 seqüenciados 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.

2.3.1. Classificação

As linguagens de programação podem ser agrupadas em dois grandes grupos: linguagens de baixo
nível e linguagens de alto nível.

As linguagens de baixo nível são restritas a linguagem de máquina e tem uma forte relação entre as
operações implementadas pela linguagem e as operações implementadas pelo hardware.

As linguagens de alto nível por outro lado, aproximam-se das linguagens utilizadas por humanos para
expressar problemas e algoritmos. Cada declaração numa linguagem de alto nível equivale a várias
declarações numa linguagem de baixo nível.

A vantagem principal das linguagens de alto nível é a abstração. Isto é o processo em que as
propriedades essenciais requeridas para a solução do problema são extraídas enquanto esconde os
detalhes da implementação da solução adotada pelo programador. Com o nível de abstração

Aula 1 - Prof. Cláudio Marques - Pág. 3


Universidade Veiga de Almeida
Algoritmos e Linguagem I
aumentado, o programador pode concentrar-se mais na solução do problema ao invés de preocupar-se
como o hardware vai tratar do problema.

Linguagens de Baixo Nível

Estas linguagens são ditas de baixo nível porque existe um baixo nível de comunicação (entendimento)
entre os programas escritos e o ser humano. Realmente, os programas escritos neste tipo de linguagem
são difíceis de serem feitos e entendidos.

A principal característica destas linguagens é a proximidade com a linguagem de máquina, que


implica, apesar das dificuldades, em uma maior rapidez de execução dos programas.

Exemplos de linguagem de baixo nível:

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. O sistema binário é usado tanto para a representação dos dados quanto das operações
(instruçõ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.

As instruções de linguagem de máquina são representadas por códigos que correspondem a números
binários cuja extensão pode variar de 8 a 64 bits. Dependendo da operação considerada, o código de
uma instrução pode simbolizar a operação a ser executada e os dados envolvidos na operação.

Exemplo de Programa:

01001001110101110110
100100100100001101111

Por uma questão de custo de hardware, as operações representadas pelas instruções de linguagem de
máquina são bastante elementares, como por exemplo, a transferência de dados entre memória e
registro da CPU, a adição de dois valores, o teste de igualdade entre dois valores, etc...

A linguagem de máquina é impraticável para escrita ou leitura. É inviável escrever ou ler um programa
codificado na forma de uma string de bits.

Linguagem Hexadecimal

Para simplificar a compreensão e a programação de computadores, num primeiro tempo foi adotada a
notação hexadecimal para representar programas em linguagem de máquina, onde a seqüência de bits é
representada por números hexadecimais.

A linguagem hexadecimal é, portanto, apenas uma simplificação de notação da linguagem de máquina.


Apesar disto, a programação e leitura usando a linguagem hexadecimal continua impraticável.

Linguagem Assembly

Embora seja a linguagem diretamente executável pelos processadores, a programação de aplicações


diretamente em linguagem de máquina é impraticável, mesmo representada na notação hexadecimal.
Por esta razão, a linguagem de máquina de cada processador é acompanhada de uma versão “legível”
da linguagem de máquina que é a chamada linguagem simbólica Assembly. Simbólica pois esta
linguagem não é composta de números binários ou hexadecimais como nas duas linguagens anteriores.
A linguagem Assembly é na realidade uma versão legível da linguagem de máquina. Ela utiliza

Aula 1 - Prof. Cláudio Marques - Pág. 4


Universidade Veiga de Almeida
Algoritmos e Linguagem I
palavras abreviadas, chamadas de mnemônicos, indicando a operação a ser realizada pelo processador.
Abaixo são apresentados dois exemplos de instruções Assembly:

• MOV R1, R2 – nesta instrução identifica-se o mnemônico MOV (abreviação de MOVE) e


dois registradores como parâmetros: R1 e R2. Quando o processador executa esta instrução,
ele comanda o movimento do conteúdo de R2 para R1 (equivalente à instrução Pascal
R1:=R2, sendo R1 e R2 equivalente a duas variáveis);
• ADD R1, R2 – nesta instrução identifica-se o mnemônico ADD (abreviação de ADDITION)
e dois registradores como parâmetros: R1 e R2. Quando o processador executa esta instrução,
ele comanda a adição do conteúdo de R1 ao conteúdo de R2 e o resultado é armazenado em
R1 (equivalente à instrução Pascal R1:=R1+R2).

Escolhendo nomes descritivos para as variáveis do programa, e usando mnemônicos para representar
códigos de operação, a linguagem assembly facilitou significativamente 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 se obter 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.

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.

Aula 1 - Prof. Cláudio Marques - Pág. 5


Universidade Veiga de Almeida
Algoritmos e Linguagem I
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, esta independência de máquina não é 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 registrador e as células de
memória de uma máquina limitam o tamanho máximo dos inteiros que nela podem ser
convenientemente manipulados. Disso resulta o fato de que, em diferentes máquinas, uma “mesma”
linguagem pode apresentar diferentes características, ou dialetos.

Conseqüentemente, em geral é necessário fazer ao menos pequenas modificações no programa antes de


movê-lo de uma máquina para outra.

A causa deste problema de portabilidade é, em alguns casos, a falta de concordância em relação à


correta composição da definição de uma linguagem em particular. Para auxiliar nesta questão, o
American National Standards Institute (ANSI) e a International Organization for Standardization (ISO)
adotaram e publicaram padrões para muitas das linguagens mais populares. Em outros casos, surgiram
padrões informais, devido à popularidade de um dialeto de uma linguagem e ao desejo, por parte de
alguns autores de compiladores, de oferecerem produtos compatíveis.

Linguagens de Alto Nível Comparadas com Linguagens de Baixo Nível

As linguagens de alto nível podem oferecer muito mais vantagens que as linguagens de baixo nível. A
principal motivação para o uso de linguagens de alto nível é que os problemas podem ser solucionados
muito mais rapidamente e com muito mais facilidade, pois apresenta um considerável numero de tipos
de dados definidos, além das facilidades da programação estruturada.

Os programas em linguagem de alto nível são muito mais fáceis de serem desenvolvidos, entendidos e
depurados por diversas razões:

• Elas são mais prováveis de serem auto-documentadas.


• A estrutura do programa pode ser desenvolvida para refletir a estrutura do problema original.
• Nomes significativos podem ser escolhidos para variáveis e subprogramas.
• A solução do problema não necessita ser obscurecida pelo nível de detalhes necessários em
um programa em linguagem de baixo nível.
• O programa em linguagem de alto nível é normalmente fácil de seguir e entender cada passo
da execução.

Aula 1 - Prof. Cláudio Marques - Pág. 6


Universidade Veiga de Almeida
Algoritmos e Linguagem I
• O compilador, nas linguagens de alto nível, normalmente provê facilidades para a depuração,
como visualização dos valores das variáveis, dos registradores e da pilha. Além disso, o
compilador pode incluir instruções na geração de código para detectar erros em tempo de
execução, como overflow numéricos e violação de limites de vetores e matrizes.
• A utilização de linguagens de baixo nível é indicada para funções que precisam implementar
instruções de máquina específicas que não são suportadas por linguagens de alto nível,
embora a grande maioria das linguagens de alto nível apresentem uma biblioteca que permite
implementar instruções de baixo nível diretamente em seus programas.
• A grande eficiência e o reduzido tamanho dos programas desenvolvidos em linguagens de
baixo nível são as principais vantagens dessas linguagens.
2.3.2. Categorização

As principais categorias de linguagem de programação são:

• Imperativas – baseadas em variáveis e instruções organizadas (Pascal, C, Clipper, etc).


• Funcionais – sem instruções de atribuição e sem iterações. A computação é feita aplicando-se
funções a determinados parâmetros (Lisp).
• Lógicas – baseadas em regras. As instruções não precisam estar ordenadas de acordo com a
execução (Prolog).
• Orientadas a Objetos – utilizam instruções como nas linguagens imperativas. Encapsula
processos e dados (Object Pascal, C++, Java, etc).

Obs: as linguagens de marcação (markup) como o HTML, não são linguagens de programação, pois
elas não especificam computações, elas apenas descrevem a aparência de documentos.

2.3.3. Histórico

Existem centenas de linguagens de programação, desenvolvidas desde o início da computação. Essas


linguagens foram agrupadas de acordo com suas e características e época em que foram desenvolvidas
em 4 gerações:

Linguagens de primeira geração

A primeira geração de linguagens remonta aos dias da codificação em linguagem de máquina, surgidas
com o início da computação na década de 50, especificamente de 1950 a 1962. A Linguagem de
máquina e Assembly representam esta primeira geração das linguagens de programação.

Essas linguagens totalmente dependentes da máquina exibem o mais baixo nível de abstração que uma
linguagem pode ser representada.

Essas linguagens somente devem ser usadas quando as linguagens de mais alto nível não satisfizerem
as necessidades ou não forem suportadas.

Linguagens de Segunda Geração

A segunda geração de linguagens de programação foi desenvolvida de 1962 a 1974 e serviu de base
para o desenvolvimento das modernas linguagens de programação.

As características marcantes das linguagens de segunda geração foram o amplo uso com grande
familiaridade e aceitação no mercado e a grande quantidade de bibliotecas de software, permitiram a
programação multiusuário, sistemas de execução em tempo real e desenvolvimento de gerenciadores
de base de dados.

Aula 1 - Prof. Cláudio Marques - Pág. 7


Universidade Veiga de Almeida
Algoritmos e Linguagem I
As linguagens Fortran, Cobol, Algol e algumas extensões como Basic, foram os representantes dessa
segunda geração.

Fortran é uma linguagem ainda muito utilizada na área de engenharia e pela comunidade científica.
Cobol é uma linguagem que foi aceita e ainda continua em uso para aplicações comerciais. Algol foi o
precursor de muitas linguagens de terceira geração, por oferecer ricamente estruturas de controle e
tipos de dados. Basic foi uma linguagem originalmente criada para o aprendizado e teve seu uso
bastante reduzido já na década de 70.

Linguagens de Terceira Geração

As linguagens de terceira geração, também chamadas de linguagens de programação modernas ou


estruturadas, são caracterizadas pela grande capacidade procedural e estrutural de seus dados e foram
desenvolvidas de 1974 a 1986.

As linguagens de terceira geração tiveram como principais características a possibilidade de criar


sistemas distribuídos, incorporar recursos mais inteligentes, e exigir um hardware menos robusto.
Podem ser divididas em duas grandes categorias: linguagens de propósito gerais e linguagens
especializadas.

As linguagens de propósito gerais foram desenvolvidas baseadas principalmente na linguagem Algol e


servem para uma infinidade de aplicações envolvendo desde a área científica, até a área comercial. As
linguagens C, Pascal, PL/1 e Modula-2 são as principais linguagens desta categoria, sendo que as duas
primeiras continuam bastante usadas atualmente.

As linguagens especializadas são caracterizadas pela forma sintática não usual com que foram
desenvolvidas para uma aplicação distinta. Centenas de linguagens especializadas estão em uso
atualmente. Dentre as linguagens que encontram aplicações na área de engenharia de software
podemos destacar a linguagem Lisp desenvolvida especialmente para manipular símbolos e listas,
Prolog desenvolvida para tratar e representar conhecimentos, Smalltalk criada para representar os
dados em forma de objetos, sendo a primeira a ser puramente orientada a objetos, APL desenvolvida
para manipular vetores, e a linguagem Forth desenvolvida para desenvolver softwares para
microprocessadores.

Linguagens de quarta geração

A quarta geração das linguagens de programação foi desenvolvida a partir de 1986 e teve como
características principais a geração de sistemas especialistas, o desenvolvimento de inteligência
artificial e a possibilidade de execução dos programas em paralelo.

No decorrer da história temos percebido uma evolução para uma abstração maior na geração de
programas, usando linguagens de mais alto nível.

A primeira geração de linguagens de programação trabalhava com um reduzido conjunto de instruções


em nível de máquina. A segunda e terceira geração de linguagens de programação foram desenvolvidas
num nível que representam os programas computacionais, distinta e independentemente da arquitetura
do processador, mas com completa descrição detalhada dos procedimentos algorítmicos do programa.
Com o passar do tempo, as linguagens de quarta geração foram desenvolvidas com um nível de
abstração ainda mais alto.

As linguagens de quarta geração, conhecidas também como linguagens artificiais contém uma sintaxe
distinta para representação de estruturas de controle e dos dados. Essas linguagens por combinarem
características procedurais e não procedurais, representam estas estruturas com um alto nível de
abstração, eliminando a necessidade de especificar algoritmicamente esses detalhes.

Aula 1 - Prof. Cláudio Marques - Pág. 8


Universidade Veiga de Almeida
Algoritmos e Linguagem I
As linguagens de quarta geração podem ser classificadas em três categorias: linguagens de consulta,
geradoras de programas e outras linguagens (4GL).

As linguagens de consulta foram desenvolvidas para manipular bases de dados, permitindo o


gerenciamento de um grande número de informações armazenados em arquivos.

As linguagens geradoras de programas representam uma sofisticada classe das linguagens 4GL.
Permitem ao usuário ou programador criar facilmente programas complexos em linguagens de terceira
geração, utilizando bem menos declarações e comandos. Estas linguagens possuem um nível bem mais
alto que as de terceira geração.

Enquadradas como outras linguagens de quarta geração temos as linguagens usadas em sistemas de
apoio à decisão, linguagens utilizadas para modelagem de sistemas, linguagens de prototipação, e
linguagens de especificação formal que produzem código de máquina.

Linguagens desenvolvidas

No decorrer da história da computação centenas de linguagens foram desenvolvidas. Já em 1972 havia


mais de 200 linguagens desenvolvidas, sendo que a maioria era para objetivos específicos ou
acadêmicos, sendo que dessas apenas 12 podem ser consideradas como importantes e significativas.

Novas direções das linguagens de programação

As novas direções das linguagens de programação, especialmente das linguagens de quarta geração é a
sua aplicação com metodologias orientadas a objetos. Essas linguagens são baseadas nos conceitos de
objetos, que agrupam comandos de programação com dados em objetos que podem ser usados o tempo
todo durante a execução do programa, o que é muito útil em ambientes de execução paralela.

Outra tendência dos ambientes de desenvolvimento de programas é fornecer além das linguagens de
programação, um ambiente de geração automática de código, onde o programador especifica através de
ferramentas visuais as características do programa e a ferramenta se encarrega de gerar a codificação
na linguagem específica.

Estas ferramentas são muito difundidas na programação para Windows, e são também chamados de
RAD (Desenvolvimento Rápido de Aplicativos).

A nova geração das linguagens de programação, que já é chamada por muitas pessoas de quinta
geração, é baseada em métodos de consulta e utilizam comandos escritos em linguagens naturais,
permitindo uma fácil comunicação com o computador.

2.4. Sintaxe e Semântica

Toda linguagem tem sintaxe e semântica:

A sintaxe de uma linguagem de programação se refere à forma do programa, como as expressões,


comandos e declarações são concatenados para formar programas. Ela define a seqüência de caracteres que
podem produzir um programa. Assim, esta definição requer uma declaração de um conjunto de caracteres
que podem ser usados em um programa válido, junto com um conjunto de regras que apresentam os
caminhos possíveis em que estes caracteres podem ser agrupados.

A semântica de uma linguagem de programação se refere ao significado dos programas e comandos, como
eles se comportam quando são executados em um computador. A especificação semântica de uma

Aula 1 - Prof. Cláudio Marques - Pág. 9


Universidade Veiga de Almeida
Algoritmos e Linguagem I
linguagem de programação é uma tarefa muito mais árdua que a definição sintática, embora sejam usados
métodos formais para esta atividade.

A sintaxe da linguagem influencia como os programas são escritos pelo programador, lidos por outros
programadores e analisado pelo computador. A semântica da linguagem determina como o programa é
composto pelo programador, entendido por outros programadores e interpretado pelo computador. A
sintaxe é importante, pois é necessário que um programa esteja com os comandos corretamente escritos,
mas a semântica é mais importante ainda, pois não basta ter um programa sem erros de sintaxe, mas com os
comandos combinados de maneira correta.

2.5. Desenvolvimento de programas

Apesar de muito convenientes para o ser humano, os programas elaborados em linguagem de alto nível não
são executáveis pela máquina. Os programas produzidos por estas linguagens deverão sofrer um processo
de tradução em que serão convertidas as instruções criadas em linguagem de alto nível para os respectivos
códigos de operação em linguagem de máquina.

A tarefa de tradução de programas será apropriadamente feita por outros programas denominados
genericamente de Programas Tradutores. Vale dizer que cada linguagem de programação possui um
tradutor próprio.

Serão apresentadas a seguir as principais etapas de geração de um programa.

2.5.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.

2.5.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 como os Montadores (ou Assemblers que, como o nome indica, são orientados para
traduzir programas escritos na linguagem Assembly) e os Compiladores, construídos para gerar o
código de programas originalmente escritos em linguagens de alto nível como Pascal, C, Fortran e
outras. O código gerado por estas ferramentas é representado segundo o sistema de numeração binária
e é denominado código objeto.

O código objeto é o código produzido pelo compilador. Ele se trata de uma forma intermediária similar
à linguagem de máquina do computador. O código objeto, apesar de estar representado em binário, não
é auto-contido, ou seja, não é executável diretamente pelos processadores. A principal razão disto é

Aula 1 - Prof. Cláudio Marques - Pág. 10


Universidade Veiga de Almeida
Algoritmos e Linguagem I
que o código objeto é caracterizado normalmente por referências a partes de programa que não estão
necessariamente definidas no mesmo arquivo que gerou o aquele arquivo objeto. Estas outras partes do
código do programa podem ter sido geradas a partir de outros arquivos de código fonte concebidos
pelo mesmo programador ou existirem sob a forma de arquivos de bibliotecas de sub-rotinas.

Existem dois tipos de tradutores:

Compiladores - São programas que traduzem outros programas escritos em linguagem de alto nível,
para linguagem de máquina.

Linguagem de Linguagem de
Tradutor
alto nível máquina

Programa Programa
Compilador
fonte objeto

Ao término do processo de compilação obteremos um novo programa, análogo ao programa original,


mas escrito em linguagem de máquina, chamado programa objeto. Pode existir ainda para alguns
compiladores uma fase neste processo de tradução, chamada de linkage (ligação) em que são feitas
ligações entre os códigos de operação gerados pelo compilador e as rotinas e execução das mesmas.

Exemplos de Compiladores: COBOL, FORTRAN, PASCAL, C.

Interpretadores: - São programas que traduzem e executam outros programas, escritos em linguagem
de alto nível, linha por linha. Como os interpretadores são responsáveis também pela execução dos
programas, eles deverão sempre estar presentes na memória da máquina junto com o programa a ser
utilizado.

Linguagem de
Tradutor Execução
alto nível

Programa
Interpretador Execução
fonte

Aula 1 - Prof. Cláudio Marques - Pág. 11

Você também pode gostar