Post on 07-Apr-2016
Critérios de Avaliação das Linguagens de Programação
Marcelo Marinho
(marinho.mlm@gmail.com)
IntroduçãoANTESAplicações extremamente simples;Apenas um programador;Processo de desenvolvimento de SW simples.
HOJEAplicações complexas e sofisticadas;Equipes (“teams”) de programadores;Processo de desenvolvimento de SW
disciplinado;Sistemas confiáveis.
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
Introdução
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
Critérios de Avaliação das Linguagens de ProgramaçãoLegibilidadeCapacidade de EscritaConfiabilidadeCustoOutros Critérios
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
LegibilidadeFacilidade de leitura e entendimento de
programas escritos em uma determinada linguagem.
Quanto maior a legibilidade de programas, mais fácil é a manipulação dos mesmos para correção, extensão e melhoramento (manutenção)
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
LegibilidadeCaracterísticas que contribuem para
legibilidade: Simplicidade Ortogonalidade Instruções de Controle Tipos e Estruturas de Dados Sintaxe Efeito Colateral
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
Legibilidade - SimplicidadeLinguagem com grande número de
componentes básicos é mais difícil de ser aprendida do que uma com poucos desses componentes. Programadores acabam ignorando
componentes de linguagens complexas.
Legibilidade é afetada quando programadores se defrontam com programas que usam componentes que foram ignorados.
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
Legibilidade - SimplicidadeMultiplicidade de formas com um mesmo
significado Em C:
count = count + 1; count++;count += 1; ++count;
Sobrecarga de operadores: único símbolo tem mais de um significado Em C: + Para somar números inteiros como para ponto-flutuante. * para multiplicação de números quanto para operações de
manipulação de ponteiros
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
Legibilidade - OrtogonalidadeUm conjunto relativamente pequeno de construções
primitivas pode ser combinado em um número relativamente pequeno de maneiras para construir as estruturas de controle e de dados da linguagem.
Qualquer possível combinação de primitivas é legal e tem significado.
Exemplo: Suponha uma linguagem com quatro tipos de dados (int,
float, double, char) e dois operadores de tipos (ponteiros e arrays).Ponteiros devem ser capazes de apontar para qualquer tipo de variável ou estrutura de dados.
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
Legibilidade - OrtogonalidadeA falta de ortogonalidade acarreta
exceções às regras da linguagem.A ortogonalidade está relacionada à
simplicidadeQuanto mais ortogonal, menos exceções às
regras da linguagem.
Linguagem mais fácil de ser aprendida, lida e entendida.
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
Legibilidade - OrtogonalidadeFalta de ortogonalidade de C:Registros (estruturas) podem ser
retornados de funções, mas matrizes não;Um membro de uma estrutura pode ser de
qualquer tipo, menos void ou uma estrutura de mesmo tipo;
Elemento de array pode ser de qualquer tipo, exceto void ou uma função;
Parâmetros são passados por valor, exceto arrays que são passados por referência.
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
Legibilidade - OrtogonalidadeMuita ortogonalidade também pode
causar problemaAlgol 68
Um condicional pode aparecer do lado esquerdo de uma atribuição juntamente com outras instruções, contanto que o resultado seja uma localização de memória
if (i=4)
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
Legibilidade - Ortogonalidade
A simplicidade da linguagem é o resultado da combinação de um número pequeno de primitivas e o uso limitado do conceito de ortogonalidade.
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
Legibilidade - Instruções de ControleUso de comandos gotoUm programa que pode ser lido de cima para
baixo é mais fácil de entender do que um programa que obriga o leitor a dar saltos para seguir o fluxo da execução.
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
Legibilidade - Instruções de ControleEm algumas linguagens, goto é necessário:
Para facilitar a legibilidade, programas com goto:Devem preceder seus alvos, exceto quando usados
em laços;Seus alvos devem estar próximos;Seu número deve ser limitado;
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
Legibilidade - Tipos de DadosTipos de dados facilitam a identificação
do uso de variáveis e dos domínios de valores que podem representar.
Por exemplo, em C não existem tipos booleanos, ao contrário do Pascal:Em C:
ocorreu_erro_de_leitura = 1;Em Pascal:
ocorreu_erro_de_leitura := true;
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
Legibilidade - EstruturasEstruturas fornecem métodos para
representar valores relacionados de uma forma mais legível, do que por exemplo usando coleções de arrays separados.
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
Informações de um conjunto de funcionários de uma empresa. Em C pode-se fazer o seguinte:
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
Legibilidade - SintaxeFormas IdentificadorasRestringir o tamanho dos identificadores
prejudica a legibilidade.FORTRAN 77: máximo de 6 caracteres para
identificadoresNome_EmpregadoTamanho_Maximo
Basic (ANSI, 1978): identificador com 1 letra ou 1 letra seguida de um dígito:
A1 b3 z9
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
Legibilidade - SintaxePalavras EspeciaisA maneira como as palavras especiais (begin,
end, for, while) são usadas influencia a legibilidade. Pascal: begin-end para formar blocos de
comandos C: { } para formar blocos de comandos FORTRAN 90 e ADA:• end if para agrupar comandos associados ao if• end loop para agrupar comandos associados a
um loop
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
Legibilidade - SintaxePalavras Especiais Outro ponto importante é a limitação do
uso de palavras reservadas para a criação de identificadores.
FORTRAN 90: DO, END, INTEGER e REAL podem ser nomes de variáveis.• REAL REAL;
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
Legibilidade - SintaxeForma e significadoA forma de uma declaração deve pelo menos
parcialmente indicar seu propósito e significado, melhorando a legibilidade.
Em C, static tem dois significados diferentes:Caso 1: Dentro de uma função, uma variável
static é criada em tempo de compilação.Caso 2: Fora de funções, em um módulo
(arquivo), uma variável static é uma variável global a todas as funções de um módulo.
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
Capacidade de EscritaMedida da facilidade para criar programas
destinado a um domínio de problema escolhido.A maioria das características que afetam
legibilidade também afetam a capacidade de escrita Escrever um programa exige uma releitura
freqüente do que já foi escrito.Domínio dos problemas influência no julgamento
da capacidade de escrita de uma linguagem COBOL para produção de relatórios comerciais
XAPL ideal para manipular matrizes.
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
Capacidade de EscritaCaracterísticas que contribuem para
capacidade de escrita:
Simplicidade e Ortogonalidade
Suporte para Abstração
Expressividade
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
Capacidade de Escrita - SimplicidadeNúmero muito grande de componentes
de construçõesAlguns programadores podem não estar
familiarizados com todosUso inadequado de alguns recursosDesuso de recursos mais eficientes e
elegantes que outrosUso acidental de recursos desconhecidos
provocando resultados inesperados
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
Capacidade de Escrita - OrtogonalidadeMuita ortogonalidade pode resultar em Uma vez que quase todas as
combinações primitivas são legais, o compilador não consegue descobrir erros no código.
Em C: if (i = 4)
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
Capacidade de Escrita - Suporte a AbstraçãoAbstração significa definir e usar
estruturas ou operações complexas, ignorando os detalhes de construção.
Abstração de processosCapacidade de agrupar código que
implementa um algoritmo em um ponto do programa, sem a necessidade de replicá-lo onde for necessário (funções ou procedimentos)
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
Capacidade de Escrita - Suporte a AbstraçãoAbstração de dados Árvores binárias podem ser implementadas em
C++ e Java usando uma abstração na forma de uma classe.
Nota: Em orientação a objetos, um objeto é uma
abstração tanto para dados (atributos, conhecimento de um objeto) quanto para processos (métodos que implementam mensagens, são as responsabilidades de um objeto).
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
Capacidade de Escrita - ExpressividadeExpressividade refere-se à facilidade de
expressar computações em uma linguagem
Em C: cont++ é mais conveniente e breve que cont = cont + 1
Em Pascal e C: for é mais conveniente para laços de contagem que while
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
ConfiabilidadeConsidera-se um programa confiável
quando executa o que foi atribuído de modo esperado, sobre quaisquer condições.
Características que contribuem para a confiabilidade:Verificação de TiposTratamento de ExceçõesAliasingLegibilidade e Capacidade de Escrita
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
Confiabilidade - Verificação de TiposTestar se existem erros de tipo em um programa
em tempo de compilação ou de execução. C original: não era fortemente tipado Uma chamada a uma função que exige um tipo float de
entrada pode aceitar um tipo int Pascal, Ada e Java: fazem a verificação da faixa de
subscrito de uma variável array em tempo de execução.
Em C:
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
Confiabilidade - Tratamento de ExceçõesCapacidade de interceptar erros em tempo
de execução, pôr em prática medidas corretivas e prosseguir EIFFEL, Object Pascal, Ada, C++, Java e C# incluem
capacidade de manipular exceções Em JAVA:
try{ System.out.println(a[i]);}catch (IndexOutofBoundsException) { System.out.println(“Errode Indexação”);}
Pascal, C e Fortran não possuem essa capacidade
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
Confiabilidade - AliasingDefine nomes distintos para referenciar a uma mesma área de memória.
Recurso perigoso.Em C:Uniões e ponteiros.
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
Confiabilidade - Legibilidade e Capacidade de EscritaProgramas difíceis de ler são difíceis de escrever e de modificar
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
CustoCaracterísticas que contribuem para o custo:Treinamento de ProgramadoresEscrita de ProgramasCompilação de ProgramasExecução de ProgramasSistema de Implementação da LinguagemConfiabilidadeManutenção de Programas
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
CustoTreinamento de programadores
Função da simplicidade, ortogonalidade e da experiência do programador
Escrita de programas na linguagem Função da capacidade de escrita em relação ao domínio do
problema abordado
Compilação de programas Função do tempo de espera pela compilação (na 1ºversão
de ADA os custos eram muito altos)
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
CustoExecução de programasFunção da qualidade do código produzidoEquilíbrio entre o custo de compilação e o
custo de execuçãoSistema de implementação da
LinguagemFunção do preço das ferramentas de
implementação (compiladores/interpretadores) e de sua disponibilidade para muitas plataformas
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
CustoConfiabilidadeFunção das falhas causadas pela ausência de
elementos que garantam a corretude do programa
ManutençãoFunção, principalmente, da legibilidade da
linguagem Equivale a 2 ou 4 vezes o custo de
desenvolvimento
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
Outros Critérios de AvaliaçãoPortabilidade Facilidade de mudança dos programas de uma
plataforma para outra Padronização é fundamental – Java.
Generalidade Aplicabilidade a uma ampla faixa de utilizações
Boa Definição Perfeição e precisão do documento que define a
Linguagem de Programação
Estudo de Linguagens de Programação - Prof. Marcelo Marinho
Critérios de Avaliação da Linguagem Os critérios são pesados
diferentemente a partir de perspectivas diversasProjetistas da linguagem Elegância e capacidade de atrair uso generalizado
Implementadores da linguagem Dificuldades de implementar as construções e
recursos da linguagemUsuários da linguagem Capacidade de escrita e legibilidade
Estudo de Linguagens de Programação - Prof. Marcelo Marinho