Slide de Aula - Unidade II
Slide de Aula - Unidade II
Slide de Aula - Unidade II
Estudos Disciplinares
Linguagens de
Programação
Prof. Me. Marcelo Santos
Linguagens de nível muito alto (Very High-level Languages)
A sintaxe matemática é oferecida aos cientistas para fazer a programação em sua linguagem
científica. Ele também fornece um suporte fácil e correto para o desenvolvimento da
programação paralela.
Fonte:
https://www.dlr.de/sc/en/
desktopdefault.aspx/tabi
d-11647/20362_read-
47646/
Linguagens de nível muito alto (Very High-level Languages)
Fonte:
https://www.google.com/url?sa=i
&url=https%3A%2F%2Fbecode.
com.br%2Fprincipais-
linguagens-de-
programacao%2F&psig=AOvVa
w13zb-
0J0Aa8se9hfpobIdZ&ust=16203
97549258000&source=images&c
d=vfe&ved=0CAIQjRxqFwoTCK
COk7WhtfACFQAAAAAdAAAAA
BAD
Linguagens de nível muito alto (Very High-level Languages)
Essas linguagens são usadas quando os programas são muito longos, quando os aplicativos
são de baixo volume; quando há tantas modificações necessárias nos programas; quando os
aplicativos precisam de tantos cálculos além da entrada ou da saída, ou a realização de
cálculos de controle; quando o requisito de memória pelo aplicativo é muito grande; e quando
a compatibilidade é necessária com os aplicativos semelhantes.
Fonte:
https://becode.com.br/wp-
content/uploads/2017/04/Lin
guagens-Alto-vs-Baixo-
Nivel.png
Linguagens de nível superior (Higher level Languages)
A maioria das linguagens de quarta geração (4GLs – fourth generation languages) são
linguagens não procedurais.
Uma série de instruções são decididas pelas máquinas de computação que fornecerão os
resultados. Assim, as 4GLs têm ajudado a simplificar o processo de programação.
A 4GL é usada em seis áreas principais. Essas áreas incluem: entrada de dados; gestão de
dados; análise de dados; saída de dados (incluindo os relatórios); gráficos; interface
orientada ao usuário que inclui a utilização de janelas, telas pré-definidas etc.
Linguagens de nível superior (Higher level Languages)
Todas essas linguagens têm as suas próprias vantagens e desvantagens como qualquer
outra linguagem. Apenas o usuário pede as tarefas necessárias e o código de programação
correspondente é gerado, diretamente, a partir das especificações.
Interatividade
Selecione a linguagem que possui uma forte presença em Física Computacional e Química, em
áreas como: modelagem climática, dinâmica de fluidos e dinâmica molecular:
a) C.
b) C #.
c) MATLAB.
d) FORTRAN.
e) Visual Basic (VB).
Resposta
Selecione a linguagem que possui uma forte presença em Física Computacional e Química, em
áreas como: modelagem climática, dinâmica de fluidos e dinâmica molecular:
a) C.
b) C #.
c) MATLAB.
d) FORTRAN.
e) Visual Basic (VB).
Processo de Tradução
10010001111010101110010001110001000
Essas linguagens são mais voltadas para a compreensão humana e, portanto, tornam a
tarefa de programação muito mais fácil. No entanto, uma vez que, apenas, o computador
entende o código binário de baixo nível (muitas vezes chamado de código de máquina), deve
haver um processo de tradução para converter essas linguagens de alto nível em código
de máquina.
Esta tarefa, geralmente, é realizada por um compilador, que é um pacote de software que
traduz em alto nível.
Processo de Tradução
primeiroPrograma.cpp;
segundoPrograma.cpp.
Fonte:
https://www.google.com/url?sa=i&url=https
%3A%2F%2Fglossarioleonorpinheiro.word
press.com%2F2019%2F03%2F15%2Fc-
2%2F&psig=AOvVaw3znwkKxBay9Tpt-
bas8kre&ust=1620397696514000&source
=images&cd=vfe&ved=0CAIQjRxqFwoTCP
jS4PuhtfACFQAAAAAdAAAAABAD
Processo de Tradução
Quando esses programas são compilados, um novo arquivo (arquivo objeto) será criado com a
terminação *.obj:
primeiroPrograma.obj;
segundoPrograma.obj.
Processo de Tradução
Assim como o inglês, todas as linguagens de computador têm o seu próprio conjunto de
regras gramaticais que deve ser obedecido.
Em C ++, por exemplo, as instruções terminam com um ponto e vírgula. O seguinte trecho de
código indicaria um erro de sintaxe:
Como não há ponto e vírgula no final, o compilador indicaria um erro, que deveria ser corrigido
da seguinte forma:
A maioria dos programas não são, totalmente, completos por si próprios. Eles precisam de
outros módulos previamente escritos que realizem certas operações, como a entrada e a
saída de dados.
Nossos programas precisam desses anexos para funcionar. Esta é a função do processo de
vinculação. O vinculador irá anexar o código apropriado ao programa, a partir de uma
“biblioteca de software” de programas.
Exemplo:
primeiroPrograma.exe;
segundoPrograma.exe.
Processo de Tradução
Assim que tivermos o código executável o programa estará pronto para ser executado.
Esperançosamente, ele funcionará corretamente e tudo ficará bem; no entanto, nem sempre
é o caso. Durante o “tempo de execução”, podemos encontrar um segundo tipo de erro
chamado de erro de tempo de execução.
Este erro ocorre quando pedimos ao computador para fazer algo e ele, infelizmente, não
pode fazer.
Nesse caso, até podemos obter o código executável; entretanto, quando o programa tenta
executar o comando para dividir por 0, o programa irá parar com um erro de tempo de
execução.
Uma vez que executamos o nosso programa e não obtemos os erros de sintaxe e o tempo de
execução, podemos comemorar?
Sempre que pedimos ao computador para fazer algo, mas querendo fazer outra coisa, temos
um erro lógico. Deve haver instruções precisas e claras que geram nossas intenções para o
computador. O computador só faz o que pedimos.
Pedir para multiplicar por 3 quando queremos realizar uma soma é um exemplo de um
erro lógico.
Você também deve estar ciente de qual sistema operacional está sendo usado.
Processo:
Um processo é um programa em execução denominado de Programa;
Mas a conversão de um programa em processo envolve várias etapas. Além disso, depois
que o programa é convertido no processo, a memória deve ser alocada para esses
processos na memória principal e essas alocações de memória são tratadas pelo Sistema
Operacional, usando vários métodos e algoritmos;
Processo:
O código do objeto produzido após todas as etapas anteriores tem as seguintes seções:
1. Cabeçalho (Header);
1. Cabeçalho (Header):
Diz quais são as seções disponíveis no Código do Objeto e quais são os locais em que as
várias seções estão presentes na memória principal. É como se ele mantivesse um ponteiro
para as localizações de todas as seções.
Endereço relocável:
O endereço é relativo a 0, pois o local real onde o programa deve ser carregado não é
conhecido no tempo de compilação;
Endereço absoluto:
O endereço relocável é convertido em endereço absoluto
quando o programa é, finalmente, carregado na memória
principal, visto que o local exato onde o programa é carregado
seria conhecido.
Formação do processo a partir do programa
Também mantém o controle dos endereços de funções que são definidas por nós ou funções
que são padrão;
É o Linker que resolve todos os endereços não resolvidos na tabela de símbolos, obtendo a
ajuda de vários outros códigos de objeto onde as funções específicas seriam definidas.
O Linker é usado para encontrar as fontes para resolver os endereços. Inicialmente, irá olhar
para os mesmos diretórios a partir do programa; caso não for encontrado, irá para o diretório
especificado pelo compilador.
I. Primeira fase:
Aqui, ele encontra quais são os segmentos que estão
presentes e quais segmentos devem ser carregados;
1. Tabela de segmentos: é usada para encontrar os segmentos que devem ser carregados.
2. Tabela de símbolos: é usada para encontrar os símbolos que não estão resolvidos na
Tabela de símbolos e devem ser resolvidos.
Observação:
Alguns símbolos ainda não foram resolvidos intencionalmente, porque são comumente
usados pelo programa e, portanto, são mantidos, diretamente, na memória principal. Assim,
quando precisamos resolver pedimos, diretamente, o endereço presente na memória
principal, em vez de mantermos, repetidamente, o mesmo código.
Dessa forma, o Linker combina todo o código do objeto para produzir um único código,
onde todos os endereços seriam resolvidos (exceto, alguns que são, comumente,
usados). Portanto, as funções principais que o Linker executa são:
1. Relocação;
2. Resolução do símbolo.
Então, como um depurador sabe onde parar quando você pede para interromper na
entrada de alguma função?
Como ele consegue encontrar o que mostrar quando você pede o valor de uma variável?
As informações de depuração são geradas pelo compilador junto com o código de máquina.
Muitos desses formatos foram inventados ao longo dos anos para as diferentes plataformas
e arquivos executáveis.
A entrada de informações de depuração
DWARF utiliza uma série de entradas de informações de depuração para definir uma
representação de baixo nível de um programa de origem.
Uma variedade de necessidades pode ser atendida permitindo que uma única entrada de
informações de depuração “possua” um número arbitrário de outras entradas de depuração e
permitindo as mesmas informações de depuração, para serem uma das muitas pertencentes
à outra entrada de informações de depuração.
Isso torna possível descrever, por exemplo, a estrutura de bloco estático dentro de um
arquivo de origem, exibir os membros de uma estrutura, união ou classe, e declarações de
associação com os arquivos de origem ou arquivos de origem, com o compartilhamento
de objetos.
Interatividade
Um programa (chamado de Loader – carregador) deverá ser usado para carregar o código
executável na memória principal, para que o programa possa ser executado.
Library
Fonte:
https://userweb.cs.txstate.edu/~br02/cs1428/SupportFiles
/Programming/HighLevelLangProcessing.htm
Formação do processo a partir do programa
Em um nível, você aprenderá a programar, uma habilidade útil por si só. Em outro nível, você
usará a programação como um meio para um fim. À medida em que avançamos, esse fim se
tornará mais claro.
Primeiro, é muito mais fácil programar em uma linguagem de alto nível. Os programas
escritos em uma linguagem de alto nível demoram menos para serem escritos, são mais
curtos e fáceis de ler, e têm maior probabilidade de estarem corretos;
Linguagens de baixo nível são usadas, apenas, para alguns aplicativos especializados.
Dois tipos de programas processam linguagens de alto nível em linguagens de baixo nível:
intérpretes e compiladores. Um intérprete lê um programa de alto nível e o executa, o que
significa que ele faz o que o programa diz. Ele processa o programa aos poucos,
alternadamente lendo as linhas e realizando os cálculos.
Fonte:
https://www.open Source Output
Interpreter
bookproject.net/t code
hinkcs/python/en
glish2e/ch01.html
Formação do processo a partir do programa
Fonte: https://www.openbookproject.net/thinkcs/python/english2e/ch01.html
Formação do processo a partir do programa
Eles são primeiro compilados em uma linguagem de nível inferior, chamada de código de
byte e, então, interpretados por um programa chamado de máquina virtual.
Por exemplo, o Python utiliza ambos os processos, mas, devido à maneira como os
programadores interagem com ele, geralmente, é considerado uma linguagem interpretada.
Fonte:
https://cadernodelaborato
rio.com.br/wp-
content/uploads/2018/07/
python37.png
O que é um programa?
A programação é um processo complexo e por ser feita por seres humanos que, geralmente,
leva a erros. Por motivos caprichosos, os erros de programação são chamados de bugs, e o
processo de rastreá-los e corrigi-los é chamado de depuração.
Três tipos de erros podem ocorrer em um programa: erros de sintaxe, erros de tempo de
execução e erros de semântica. É útil distingui-los para localizá-los mais rapidamente:
Erros de sintaxe:
Normalmente, as linguagens de programação só podem
executar um programa se o programa estiver sintaticamente
correto; caso contrário, o processo falha e retorna uma
mensagem de erro;
Durante o início de sua carreira de programação, você, provavelmente, gastará muito tempo
rastreando os erros de sintaxe. No entanto, conforme você ganha experiência, cometerá
menos erros e os encontrará mais rápido.
Erros semânticos:
O terceiro tipo de erro é o erro semântico. Se houver um erro de semântica em seu programa,
ele será executado com sucesso, no sentido de que o computador não gerará nenhuma
mensagem de erro, mas não fará a coisa certa. Vai fazer outra coisa. Especificamente, ele
fará o que você disse para fazer;
O problema é que o programa que você escreveu não é o programa que você queria escrever.
O significado do programa (sua semântica) está errado. Identificar os erros
semânticos pode ser complicado, porque requer que você trabalhe retroativamente,
observando a saída do programa e tentando descobrir o que ele está fazendo.
O que é depuração?
Depuração experimental:
Uma das habilidades mais importantes que você irá adquirir é a depuração;
Embora possa ser frustrante, a depuração é uma das partes mais interessantes,
desafiadoras e intelectualmente ricas da programação;
De certa forma, a depuração é como um trabalho de detetive. Você é confrontado com pistas
e tem que inferir os processos e os eventos que levaram aos resultados que você vê.
O que é depuração?
Depuração experimental:
A depuração também é como uma ciência experimental. Depois de ter uma ideia do que está
errado, é necessário modificar o programa e tentar novamente. Se a hipótese estava correta,
então, você pode prever o resultado da modificação e dar um passo mais perto de um
programa de trabalho;
Por exemplo, o Linux é um kernel de sistema operacional que contém milhões de linhas de
código, mas começou como um programa simples que foi utilizado para explorar o chip
Intel 80386.
Texto:
https://upload.wikimedia.org/
wikipedia/commons/0/04/KL_
Intel_i386DX.jpg
Interatividade
Como é chamado o programa que utilizamos para combinar o código-objeto com qualquer
código pré-escrito (programas), usado a partir de bibliotecas disponíveis (por exemplo, a
biblioteca matemática contém um código para as funções matemáticas, frequentemente,
usadas) para criar um código executável, código que o computador pode executar?
a) Linker.
b) Compiler.
c) Loader.
d) Open.
e) Close.
Resposta
Como é chamado o programa que utilizamos para combinar o código-objeto com qualquer
código pré-escrito (programas), usado a partir de bibliotecas disponíveis (por exemplo, a
biblioteca matemática contém um código para as funções matemáticas, frequentemente,
usadas) para criar um código executável, código que o computador pode executar?
a) Linker.
b) Compiler.
c) Loader.
d) Open.
e) Close.
Referências
BENDERSKY, E. How debuggers work: part 3 – Debugging information. 2011. Disponível em:
https://eli.thegreenplace.net/2011/02/07/how-debuggers-work-part-3-debugging-
information#:~:text=Debugging%20information%20is%20generated%20by,stored%20alongsid
e%20the%20machine%20code. Acesso em: 06 mai. 2021.
ELKNER, J.; DOWNEY, A. B.; MEYERS, C. The way of the program. 2010. Disponível em:
https://www.openbookproject.net/thinkcs/python/english2e/ch01.html. Acesso em:
06 mai. 2021.
GEEKSFORGEEKS. Formation of Process from Program. 2020. Disponível em:
https://www.geeksforgeeks.org/formation-of-process-from-program/. Acesso em: 05 mai. 2021.
KAHANWAL, B. ABSTRACTION LEVEL TAXONOMY OF
PROGRAMMING LANGUAGE FRAMEWORKS. International
Journal of Programming Languages and Applications (IJPLA),
v. 3, n. 4, oct. 2013. Disponível em:
https://arxiv.org/ftp/arxiv/papers/1311/1311.3293.pdf. Acesso
em: 04 mai. 2021.
Referências