Please enable JavaScript.
Coggle requires JavaScript to display documents.
C005 - Linguagens de Programação e Compiladores (Introdução às linguagens…
C005 - Linguagens de Programação e Compiladores
Introdução às linguagens de programação e compiladores
Evolução das linguagens de programação
Os primeiros computadores eletrônicos apareceram na década de 40 e eram programados em linguagem de máquina por sequências de 0s e 1s. Nem é preciso dizer que esse tipo de programação era lento, cansativo e passível de erros.
A solução para criar formas de programação mais inteligíveis às pessoas a fim de melhorar o desempenho na criação de software foram as linguagens de alto nível
As primeiras linguagens de alto nível surgiram na década de 50
Fortran
COBOL
Lisp
Classificação quanto à geração
Primeira
São as linguagens de máquina
Segunda
São as linguagens de montagem, conhecidas como Assembly
Terceira
Linguagens de alto nível, procedimentais
Java
C++
Quarta
Linguagens de aplicações específicas
SQL
Quinta
Baseadas em lógicas matemáticas
Prolog
Razões para estudar linguagens de programação
Capacidade de resolver soluções computacionais para problemas
Maior habilidade em usar ou dominar uma linguagem de programação
Maior habilidade para escolhermos linguagens de programação apropriadas para casos específicos
Maior habilidade para aprender novas linguagens de programação
Maior capacidade para projetar novas linguagens de programação
Propriedades desejáveis das LP
Legibilidade
O que
Facilidade para ler e entender um programa
Melhorar a tarefa de manutenção dos programas
Fatores favoráveis
Simplicidade
Recursos para estruturação de dados e controle
Fatores que prejudicam
Uso extensivo de goto's, que permitem a programação não estruturada
Estrutura de dados não adequadas
Sobrecarga de operadores, usar o mesmo símbolo com significados diferentes
Redigibilidade
O que
Facilidade para escrever o programa, permitindo ao programador se concentrar nos algoritmos centrais, sem se preocupar com aspectos não relevantes
Fatores que favorecem
Simplicidade
Suporte para abstração de processos (subprograma) e dados (classes)
Fatores que prejudicam
Construções muito complexas
Falta de recurso para abstração
Muitas construções primitivas
Confiabilidade
O que
Um programa é confiável se ele se comportar de acordo com suas especificações sob todas as condições
Fatores que favorecem
Verificação de tipos, em tempo de compilação ou execução
Tratamento de exceções
Fatores que prejudicam
Permitir ações perigosas
Não verificar intervalos de índices de arrays, aritmética de ponteiros, compatibilidade de tipos
Recursos pobres para escritas dos programas
Eficiência
Está relacionada com o tempo de execução de um programa
Algumas aplicações exigem que a execução seja rápida
Em geral, fatores que melhoram a confiabilidade, abstração e legibilidade dos programas, diminuem a eficiência
Linguagens de programação que requerem verificação de tipos em tempo de execução são menos eficientes
Ortogonalidade
O que
Capacidade de uma linguagem de programação de permitir ao programador combinar seus conceitos básicos sem que se produzam efeitos anômalos nessa combinação
Quanto menor o número de exceções, maior a ortogonalidade
O programador consegue prever com segurança o comportamento de uma determinada combinação de conceitos
Fatores que favorecem
Número pequeno de construções primitivas que podem ser combinadas de forma regular
Fatores que prejudicam
Número alto de exceções às regras de linguagem
Operadores que não podem ser aplicados a qualquer tipo de operandos
Reusabilidade
Propriedade de utilizar o mesmo código para várias aplicações
Ligada a recursos de abstração da linguagem
Subprogramas com parâmetros, bibliotecas, classes, APIs
Quanto mais reusável for um código, maior será a produtividade de programação
Modificabilidade
O que
Facilidade de alterar o programa sem implicações em outras partes do programa
Fatores que favorecem
Uso de constantes simbólicas (final, const)
Separação entre interface gráfica e lógica de negócio
Tipos abstratos de dados
Portabilidade
O que
Propriedade dos programas escritos em uma linguagem de programação se comportarem da mesma maneira independente do compilador, sistema operacional ou hardware utilzado
Fatores que favorecem
Implementação híbrida (Java)
Padronização da especificação da linguagem desde o seu projeto (pode prejudicar o desempenho)
Paradigmas das linguagens de programação
É o conjunto de características que servem para categorizar um grupo de linguagens
Imperativo
Estruturado
Facilita a compreensão de programas, comparada à programação com código de máquina
Um programa é composto por blocos aninhados de comandos
Utiliza de três mecanismos básicos
Sequência
Seleção
Iteração
Pascal, C
Orientado a objetos
Paradigma visto como uma evolução do paradigma estruturado
Oferece conceitos que torna mais rápido e confiável o processo de desenvolvimento de software
Enfoque nas abstrações de dados, ao invés de enfoque no controle de execução dos programas
Classes são abstrações que definem uma estrutura de dados e Objetos são instâncias de classes
SMALLTALK, C++, JAVA
Concorrente
Oferece a possibilidade de vários processos executando simultaneamente concorrendo por recursos
Pode utilizar uma ou várias unidades de processamento
ADA, JAVA, C#
O que
Computação vista como um processo que realiza mudanças de estado
Especifica como um processamento deve ser feito para o computador
Variáveis podem possuir diferentes valores a cada momento
Declarativo
Funcional
Operam apenas sobre funções definidas, as quais recebem uma lista de valores e retornam um valor
Trabalha com composição de funções e chamada recursiva de funções
LISP, Haskell
Lógico
Faz uso da lógica matemática
Geralmente utilizam de uma base de conhecimento
Empregada em problemas que possam ser resolvidos por dedução ou inferência
Muito utilizada na área de inteligência artificial
PROLOG
Linguagens que especificam diretamente ao computador o que deve ser feito
O programador descreve o problema a ser resolvido e esta descrição é usada para encontrar uma ou mais soluções ao problema automaticamente
Multiparadigma
As vezes um só paradigma não é capaz de resolver todos os problemas
É uma linguagem que suporta mais de um paradigma de programação
Geralmente utilizam de frameworks para permitir o uso de diversos paradigmas de forma mais clara
SCALA, OZ
Linguagens de domínio específico
Compiladores e interpretadores
Aplicações da construção de compiladores
Objetivos
Discutir de forma breve conceitos e propriedades importantes sobre as linguagens de programação
Apresentar as diferentes formas de tradutores de linguagens de programação
Apresentar uma visão de alto nível da estrutura de um compilador típico