Buscar

Critérios de Avaliação

Prévia do material em texto

Paradigmas de Linguagens 
de Programação
Aula 2 – Conceitos Iniciais - Continuação
Prof. Paulo Henrique
paulo.epifanio@estacio.br
Critérios de Avaliação – Capacidade de Escrita
• Medida de quão facilmente uma linguagem pode ser usada.
• O que afeta a legibilidade, afeta a capacidade de escrita.
• Comparar a capacidade de escrita no domínio da aplicação para a 
qual a linguagem foi projetada.
• Exemplo: Não comparar a capacidade de escrita de Java num problema que 
pode ser resolvido por programação estruturada.
• O que influencia a capacidade de escrita: 
• Simplicidade e Ortogonalidade
• Expressividade
Confiabilidade
• Um programa é confiável se ele se comportar conforme o 
especificado em qualquer situação.
• VERIFICAÇÃO DE TIPOS
• Testar se há erro de tipo em tempo de compilação, ou em tempo de 
execução.
• Verificar em tempo de compilação é mais desejável.
• Quando mais cedo detectar, menos custoso será corrigir.
• C não verifica se os tipos em chamada de funções coincidem com os 
declarados no corpo de funções.
Confiabilidade
• TRATAMENTO DE EXCEÇÕES
• Capacidade de interceptar erros em tempo de execução, pôr em prática medidas 
corretivas, e seguir na execução do programa.
• APELIDOS (ALIASES)
• Dois ou mais métodos, ou nomes, distintos que referenciam a mesma posição de 
memória. Ponteiros em C.
• LEGIBILIDADE (READABILITY) E CAPACIDADE DE ESCRITA (WRITABILITY)
• Uma linguagem que não suporta maneiras naturais de expressar os algoritmos usará, 
necessariamente, abordagens não-naturais. Assim, a legibilidade será reduzida.
• A legibilidade afeta a confiabilidade tanto na escrita quanto na manutenção.
Custo
• Treinamento dos programadores para usar a linguagem
• Escrita de programas na linguagem
• Compilação programas na linguagem
• Execução dos programas
• Sistema de implementação da linguagem:
• Existência de compiladores free
• Confiabilidade
• Confiabilidade baixa leva a altos custos
• Manutenção dos programas
Desenvolvimento' 
do Programa
Sabendo que esses são funções da 
capacidade de escrita e da 
legibilidade.
Custo
Outros critérios de avaliação
Portabilidade
• Quão facilmente um programa pode ser movido de uma 
implementação para outra
Generalidade
• Seu uso em uma gama de aplicações
Boa definição (Well-definedness)
• A precisão e a completeza da definição oficial da linguagem
Influências sobre o projeto da linguagem
• Arquitetura do Computador
• Linguagens são desenvolvidas com base na arquitetura mais usada, 
conhecida como arquitetura von Neumann
• Metodologias de programação
• Novas metodologias de desenvolvimento de software (exemplo, 
desenvolvimento orientado a objetos) levam a novos paradigmas de 
programação, e novas linguagens de programação
• As Linguagens Imperativas são as dominantes, motivadas 
por computadores von Neumann
• Dados e programas armazenados na memória
• Memória separada da CPU
• Instruções e dados trafegam da memória para a CPU
• Variáveis, instruções de atribuição (piping) e forma iterativa de repetição 
são os recursos centrais dessas linguagens.
Influência da arquitetura de computador
A arquitetura von Neumann
Influências sobre as metodologias de programação
• Década de 1950 e início da década de 1960
• aplicações simples; preocupações com a eficiência da máquina
• Final da década de 1960
• a eficiência das pessoas se tornou um ponto importante;
• legibilidade, melhores estruturas de controle
• Programação estruturada
• Projeto top-down e refinamento passo-a-passo
• Final da década de 1970
• orientado para processo
• orientada a dados
• Abstração de dados
• Meados da década de 1980
• programação orientada a objetos
• Abstração de dados + herança + polimorfismo
Categorias de Linguagens
Imperativa
• Características centrais: variáveis, estruturas de atribuição e iteração
• Exemplos: C, Pascal
Funcional
• Principal maneira de computar é através da aplicação de funções 
para os parâmetros fornecidos
• Exemplos: LISP, Scheme
Lógica
• Baseado em regras (regras são especificadas sem ordem pré-
determinada)
• Exemplo: Prolog
Categorias de Linguagens
• Orientada a objetos
• Abstração de dados, herança
• Exemplos: Java, C++
• Marcação (Markup)
• Não especificam computação, são usadas para definir o layout de 
informação em documentos Web
• Exemplos: XHTML, XML
Trade-offs no projeto da linguagem
• Confiabilidade versus Custo de Execução
• Critérios conflitantes
• Exemplo: Java requer que todas as referências a vetores sejam checadas para 
garantir que os índices estejam dentro dos limites, mas isso aumenta o custo 
de execução
• Readability versus writability
• Critérios conflitantes
• Exemplo: APL provê muitos operadores poderosos (e uma grande quantidade 
de novos símbolos), permitindo que computações complexas sejam escritas 
em programas compactos, porém isso dificulta a leitura
• Writability (flexibility) versus reliability
• - Critérios conflitantes
• - Exemplo: ponteiros em C++ são poderosos e muito flexíveis
Interface de computadores disposta em camadas
Métodos de Implementação
• Compilação
• Programas são traduzidos para linguagem de máquina
• Interpretação pura
• Programas são interpretados por outro programa conhecido 
como interpretador
• Sistemas de Implementação Híbridos
• Um meio-termo entre compiladores e interpretadores puros
Compilação
Traduz programas em alto-nível (linguagem fonte) em código de máquina (linguagem 
de máquina). Tradução lenta, execução rápida.
Fases:
• Análise léxica
• Converte caracteres de um programa fonte em unidades léxicas
• Análise sintática
• Transforma unidades léxicas em parse trees, as quais representam a estrutura 
sintática do programa
• Análise semântica
• Gera código intermediário
• Geração de código
• Código de máquina é gerado
Gargalo de Von Neumann
• Velocidade de conexão entre a memória do computador e seu 
processador determina a velocidade de um computador
• As instruções geralmente são executadas mais rapidamente do 
que podem ser transferidas
• Conhecido como o gargalo de von Neumann; esse é o fator 
limitante primário da velocidade dos computadores
Interpretação Pura
• Sem tradução
• ■ Fácil implementação de programas (erros de execução 
podem ser facilmente e rapidamente mostrados)
• ■ Execução lenta (de 10 a 100 vezes mais lenta do que 
programas compilados)
• ■ Geralmente requer mais espaço
• ■ Cada vez mais raro em linguagens de alto-nível
• ■ Embora não seja uma linguagem simples, JavaScript é 
puramente interpretado
Interpretação
Pura
Sistemas Híbridos
• ■ Um meio-termo entre compilador e interpretador puro
• ■ Um programa em uma linguagem de alto-nível é traduzido
para uma linguagem intermediária que permite fácil
interpretação
• ■ Mais rápido do que interpretação pura
• ■ Exemplos
• - Programas em Perl são parcialmente compilados para detectar erros antes da interpretação
• - Implementações iniciais de Java eram híbridas
• • A forma intermediária, byte code, provinha portabilidade para qualquer máquina que tivesse o 
interpretador de byte code e um sistema de run-time (juntos, esses são chamados de Java 
Virtual Machine)
Implementação 
Híbrida
Pré-Processadores
• Macros instruções são normalmente usadas para especificar 
que um código de outro arquivo deve ser incluído
• ■ Um pré-processador processa um programa imediatamente 
antes do programa ser compilado, expandindo as macros
• ■ Um exemplo: pré-processador C
• - expande #include, #define, entre outras
• Uma coleção de ferramentas usadas no desenvolvimento de software
• UNIX - Um sistema operacional e um conjunto de ferramentas
• Atualmente, normalmente usada através de uma GUI (exemplos: CDE, KDE ou 
GNOME) que rodam em cima do UNIX
• Borland Jbuilder
• Um ambiente integrado de desenvolvimento para Java
• Microsoft Visual Studio.NET
• Um grande e complexo ambiente
• Usado para programar C#, Visual BASIC.NET, Jscript, J# ou C++
Ambientes de ProgramaçãoResumo
• O estudo de linguagens de programação é válido por uma série de motivos:
• - Aumenta nossa capacidade de usar diferentes construções para escrever programas
• - Nos habilita a escolher linguagens de forma mais inteligente
• - Nos ajuda a aprender novas linguagens mais facilmente
• Os critérios mais importantes para a avaliação de linguagens:
• - Readability, writability, reliability e cost
• As principais influências no projeto de uma linguagem têm sido a arquitetura da 
máquina e as metodologias de projeto de software
• Os principais métodos para implementar linguagens são:
• - compilação, interpretação pura e implementação híbrida

Continue navegando