2. ▪ GAVIOLI, Alan. Notas de aula da disciplina de Linguagem de programação
estruturada. 2020.
▪ VICTORINE,Viviane Mizrahi,Treinamento em Linguagem C – Módulo 1 e Módulo
2, Makron Books, 1990
▪ VICTORINE,Viviane Mizrahi,Treinamento em Linguagem C, 2ª Ed., Makron Books,
2008.
▪ SCHILDT, Herbert. C Completo e total. 3ª edição revista e atualizada. São Paulo:
Makron Books, 1996.
6. TÓPICOS
▪ Definição de algoritmos e programação
▪ Linguagens de programação
▪ Breve histórico
▪ Primeiras linguagens
▪ Linguagens numéricas
▪ Linguagens de negócio
▪ Linguagens para inteligência artificial
▪ Níveis de abstração
▪ Linguagens de sistema
▪ Tipos de tradução: montagem x compilação x
interpretação
▪ Paradigmas de programação
8. ▪ Um algoritmo é uma sequência de passos a ser executada para se chegar a um
objeto, no caso, a solução de um problema proposto.
▪ Para que a descrição do algoritmo seja aplicável,tem de ser feita usando um protocolo
linguístico que o executor reconheça. Este protocolo é chamado linguagem de
programação.
9. ▪ Programação pode ser definida como o ato de descrever um algoritmo que resolva
um problema proposto de forma aplicável.
10. ▪ Como utilizamos computadores para realizar a execução do programa, a
linguagem de programação precisa ser reconhecida pelo computador que
realizará aquela tarefa específica.
▪ Essencialmente computadores reconhecem apenas uma linguagem específica,
formada por instruções relacionadas a microinstruções registradas no micro
programa do processador. Esta linguagem é chamada linguagem ou código de
máquina e é extremamente incompreensível
▪ No entanto é preciso que o programa esteja em linguagem de máquina para que o
computador possa executá-lo, o que é um problema e tanto.
11. ▪ A forma usada para solucionar a questão é relativamente simples: a criação de
«tradutores» que permitam que o programa seja escrito em linguagens mais
inteligíveis para então ser «traduzido» para a linguagem de máquina. Há alguns
tipos diferentes de tradução, como montagem, compilação, interpretação e
interpilação
▪ O uso de tradutores permite que a linguagem usada para a programação
apresente um certo nível de abstração da forma como a máquina funciona.
▪ Linguagens que se aproximam muito do funcionamento da máquina são chamadas de
baixo nível, já linguagens que se afastam do funcionamento são chamados de alto nível.
12. ▪ Por exemplo, a linguagem Assembly possui uma instrução para cada instrução de
máquina, sendo assim uma linguagem de baixo nível.
▪ Isso traz dois inconvenientes: (1) é preciso entender como cada processador funciona
para a criação do programa e (2) o programa se torna pouco portável, sendo necessário
reescrevê-lo para cada tipo de diferente de processador.
▪ Por outro lado, traz uma grande vantagem: como não há uma «tradução» propriamente
dita, apenas uma conversão de símbolos (tokens), a execução do programa se torna
extremamente eficiente.
13. ▪ Essa agilidade ocorre porque toda tradução semântica gera verborragia, ou seja,
excesso de comandos para fazer coisas simples.
▪ Quanto maior a diferença entre a linguagem original e a de destino, maior a
probabilidade de verborragia, mas não necessariamente.
15. ▪ Linguagens de programação tem apresentado uma contínua evolução desde o seu
surgimento, datado da década de 1950.
▪ 1950:FORTRAN e LISP
▪ 1970:ADA, Pascal, Prolog e SmallTalk
▪ 1980:C++
▪ Entre 1960 e 1970 novas linguagens foram oferecidas para o desenvolvimento de
projetos de software.
▪ O Departamento de Defesa americano, durante o desenvolvimento usando ADA (1970) já
tinha verificado mais de 500 linguagens relacionadas.
16. ▪ O estudo das primeiras linguagens
de programação compreende
linguagens desenvolvidas entre os
anos 50 e 70, usualmente. Destaca-
se:
▪ Linguagens numéricas
▪ Linguagens de negócios
▪ Linguagens para inteligência artificial
▪ Linguagens de sistema
17. ▪ Tecnologia relacionada a computação já teve inicio antes da 2a Grande Guerra
entre as décadas de 30 e 40.
▪ Eram máquinas designadas para resolver problemas numéricos e conhecidas como
calculadoras eletrônicas.
▪ Destinavam-se exclusivamente para cálculo numérico.
▪ No começo dos anos 50, a notação simbólica começou a surgir.
▪ Liderados por Grace Hoper e John Backus teve-se o desenvolvimento de uma linguagem
de máquina executável designada para compilar operações aritméticas simples.
▪ O grande avanço na verdade ocorreu de 1955 a 1957 quando Backus liderou uma
equipe para o desenvolvimento do Fortran, acrônimo de FORmula TRANslator.
▪ Objetivo inicial também era orientado para cálculos numéricos, mas já incluía estruturas
de controle com o uso de expressões condicionais, usando da entrada e saída de dados.
18. ▪ FORTRAN teve tanto sucesso que
mudou o conceito de programação
até então substituindo muitas
linguagens.
▪ Diferentes revisões para o FORTRAN:
▪ FORTRAN
▪ FORTRAN II (1958)
▪ FORTRAN IV (alguns anos depois)
▪ FORTRAN 66
▪ FORTRAN 77
▪ FORTRAN 90
19. ▪ Devido ao sucesso do FORTRAN e receio da dominação da indústria pela IBM a
Sociedade Alemã de Matemática Aplicada (GAMM) organizou um comitê para
desenvolver uma linguagem universal.
▪ ALGOrithmic Language (Algol) ou Algol 58 (Algol 60).
▪ Algol tinha diferentes objetivos:
▪ A notação deveria ser próxima a lógica matemática
▪ Deveria ser útil para a descrição de algoritmos
▪ Programas em Algol deveriam ser compiláveis em linguagem de máquina
▪ Algol não deveria ser vinculado a uma arquitetura de computador específica.
20. ▪ Para permitir essa independência, nenhuma entrada ou saída estava incluída na
linguagem; procedimentos especiais poderiam ser escritos para essas operações.
▪ Para garantir a independência de algum hardware em específico, cada implementação
poderia ser incompatível com outro.
▪ Algol nunca atingiu sucesso comercial nos EUA
▪ Algum sucesso na Europa
▪ O que leva uma linguagem a ter sucesso ou não?
▪ No entanto causou influência no cenário.
▪ Exemplo: desenvolvimento de um técnica que permitia avaliação de expressões
matemáticas sem parênteses, usando um processo de avaliação baseado em pilhas.
21. ▪ Nesse momento a historia começa a
divergir
▪ Através dos conceitos herdados
começou-se novos paradigmas:
▪ Classes C++ e posteriormente C (1980)
▪ Pascal (1968 – 1970)
22. ▪ Processamento de dados foi desde cedo uma aplicação de domínio depois dos
cálculos numéricos.
▪ Em 1955 tem se a linguagem FLOWMATIC, com o objetivo de desenvolver aplicações de
negócio usando uma espécie de formulários.
▪ Em 1959 o Departamento de Defesa americano trabalhava para desenvolver uma
linguagem melhorada.
▪ Após muitas divergências, foi publicada em 1960,a COmmon Business Oriented
Language – COBOL.
▪ Cobol foi revisado em 1961 e 1962,padronizada em 1968 e revisada novamente em 1974
e 1984.
23. ▪ Este campo teve início em meados de 1950 com a Rand Corporation através da
IPL (Linguagem de Processamento de Informações)
▪ IPL-V foi concebida, amplamente usada, mas extremamente limitada a um design de
baixo nível.
▪ O maior avanço no setor ocorreu quando John McCarthy (MIT) desenvolveu LISP
(LIst PRocessing) para o IBM 704.
▪ LISP 1.5 tornou-se a linguagem padrão por muitos anos.
▪ Evolução continuada.
▪ LISP foi designada como uma linguagem funcional de processamento de listas (list-
processing)
▪ O problema usual para LISP envolvia pesquisas.
24. ▪ Jogos foram um bom teste para a linguagem LISP, onde desenvolvia-se uma arvore
de possibilidades e então o usuário poderia navegar pela melhor possibilidade ou
estratégia.
▪ Um paradigma alternativo foi o processamento de strings envolvendo a
transformação de texto para um outro formato qualquer.
▪ Tradução automática, onde símbolos são substituídos por outros é uma aplicação natural.
(COMIT)
▪ LISP foi designada com um propósito mais geral.
▪ PROLOG despontava como uma linguagem com objetivo específico para o controle de
estruturas e implementação de estratégias mas baseado nos conceitos de matemática
lógica.
25. ▪ Devido a necessidade de eficiência, o uso da linguagem assembly permaneceu
por muito tempo, mesmo com a utilização de linguagens de alto nível
▪ Muitos sistemas de programação (CPL/BCPL) foram desenvolvidos, mas nunca
amplamente usados.
▪ A linguagem C, mudou tudo isso.
▪ Com o desenvolvimento de um ambiente competitivo em UNIX com quase que a
totalidade escrita em C durante os anos 70, linguagens alto-nível tem mostrado ser
efetivas neste ambiente, assim como em outros.
27. ▪ Quando definimos nível de abstração, entramos numa questão delicada, pois há
um tremendo mal entendido sobre o que seja uma linguagem de alto nível.
▪ A linguagem C é uma linguagem de alto nível, pois abstrai do funcionamento da
máquina, se aproximando da linguagem matemática.
▪ Linguagens de alto nível
▪ C, C++, Delphi, Pascal, JAVA,...
▪ Facilitam a comunicação dos seres humanos com a máquina, sendo linguagens
mais próximas dos humanos.
▪ Devem ser convertidas em linguagem de máquina para serem executadas → tradução
28. ▪ Há muitas variações de como a tradução de uma linguagem de mais alto nível para
a linguagem de máquina é feita.
▪ Montagem
▪ Compilação
▪ Interpretação
▪ Dentre outros..
Fonte: https://medium.com/young-coder/the-difference-between-compiled-and-
interpreted-languages-d54f66aa71f0
29.
30. ▪ A mais simples é a montagem, que é quando cada instrução da linguagem de mais
alto nível é traduzida diretamente para uma instrução da linguagem de máquina. O
programa que faz esta montagem é chamado montador.
▪ Ex.: Assembly.
31. ▪ Um pouco mais complicada é a
compilação:a partir do programa em
linguagem de mais alto nível é gerado um
programa de mais baixo nível equivalente,
que é montado, gerando o código objeto
(programa em código de máquina).Ex.: C.
▪ Na compilação há em geral mais de um
programa trabalhando,basicamente o
compilador, que gera um objeto que faz
chamadas a procedimentos que não
possui,e o linkeditor,que liga ao objeto
outros objetos,chamados bibliotecas,que
possuem os procedimentos necessários,
gerando o objeto final ou código de
máquina.
33. ▪ Outra alternativa é a interpretação.
Há um programa chamado
interpretador que funciona como se
fosse uma máquina virtual, com suas
próprias instruções, e o programa é
feito usando tais instruções.
35. Compilação:
▪ Execução mais rápida
▪ Ciclo edição/teste mais lento
▪ Programa completo de alto nível é
primeiro convertido para a
linguagem de máquina para então
ser executado. Ex. C, Pascal.
Interpretação:
▪ Independência de plataforma
▪ Permite maior dinamismo
▪ Depois de cada instrução de alto
nível ser examinada e decodificada,
ela é executada imediatamente. Ex.
Haskell.
37. ▪ A principal parte da programação é a manipulação de
dados: armazenamento, leitura e alteração. Para
armazenamento e leitura usamos posições de memória e
registradores do processador.
▪ Em linguagens de mais baixo nível, usamos os próprios
endereços de memória e o nomes do registrador, mas em
linguagens de nível mais alto, usamos variáveis, que são
«apelidos» para tais endereços e nomes.
▪ Também é necessário saber que quantidade de memória cada
dado ocupa e como ele deve se comporta.
▪ Isso é chamado tipagem.
39. ▪ Definição: forma como o programador enxerga a solução do problema.Tem mais a
haver com a estruturação.
▪ Em outras palavras, paradigma é a metodologia de solução.
▪ Inicialmente os programadores não se preocupavam com paradigma algum. Os
programas eram simples sequências de procedimentos.
▪ Hoje em dia chamamos isso de programação sequencial e exclui automaticamente todos
os demais paradigmas.
▪ Mais tarde foi desenvolvido o paradigma procedimental e a programação estruturada.
40. ▪ Programação estruturada é baseada na estruturação do código. A idéia é que o
programa seja divido em pequenos procedimentos estruturados, chamados
subrotinas ou funções.
▪ O programa é desenvolvido a partir das funções mais abstratas e terminando pelas mais
específicas (desenvolvimento top-down).
▪ Deu origem à modularização e à programação procedimental.
41. ▪ Erroneamente chamada programação procedural (procedural é procedimental em
inglês), programação procedimental é a programação baseada em procedimentos.
▪ O conceito é usado normalmente em oposição a programação funcional e às vezes se
confunde com programação estruturada ou com programação imperativa.
42. ▪ Na orientação a objetos o programa não se baseia em procedimentos, mas na
relação entre objetos.
▪ Objetos são representações de «coisas» que executam funções (chamadas
métodos). Estas «coisas» são quase microuniversos independentes.
▪ Da interação entre os objetos resulta a solução do problema proposto. Por exemplo, uma
porta é um objeto que, através de sua interação com o portal, a tranca e a chave permite
que determinadas pessoas entram e saiam enquanto outras não.
▪ Problemas em conceituação: os evangelizadores da desinformação pregam que a
orientação a objetos exclui outros paradigmas e que seja o paradigma definitivo,
no entanto não é possível usar orientação a objetos sem programação estruturada,
ou seja, o código precisa estar estruturado para ser orientado a objetos.
43. ▪ A orientação a eventos pressupõe a orientação a objetos, pois implica em criar
objetos que reajam a determinados eventos.
▪ Geralmente é criado loop principal que intercepta os eventos, repassando-os para
os objetos registrados. Algumas linguagens (ou módulos) oferecem uma
implementação pronta do loop principal.