Critérios de Avaliação das Linguagens de Programação Marcelo Marinho (marinho.mlm@gmail.com) 1
Introdução ANTES HOJE Aplicações extremamente simples; Apenas um programador; Processo de desenvolvimento de SW simples. HOJE Aplicaçõ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ção Legibilidade Capacidade de Escrita Confiabilidade Custo Outros Critérios Estudo de Linguagens de Programação - Prof. Marcelo Marinho
Legibilidade Facilidade 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
Legibilidade Caracterí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 - Simplicidade Linguagem 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 - Simplicidade Multiplicidade 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 + 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 - Ortogonalidade Um 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 - Ortogonalidade A falta de ortogonalidade acarreta exceções às regras da linguagem. A ortogonalidade está relacionada à simplicidade Quanto 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 - Ortogonalidade Falta 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. exemplos Estudo de Linguagens de Programação - Prof. Marcelo Marinho
Legibilidade - Ortogonalidade Muita ortogonalidade também pode causar problema Algol 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 Controle Uso de comandos goto Um 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 Controle Em 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 Dados Tipos 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 - Estruturas Estruturas 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 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 - Sintaxe Formas Identificadoras Restringir o tamanho dos identificadores prejudica a legibilidade. FORTRAN 77: máximo de 6 caracteres para identificadores Nome_Empregado Tamanho_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 - Sintaxe Palavras Especiais A 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 - Sintaxe Palavras 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 - Sintaxe Forma e significado A 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 Escrita Medida 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 Escrita Caracterí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 - Simplicidade Número muito grande de componentes de construções Alguns programadores podem não estar familiarizados com todos Uso inadequado de alguns recursos Desuso de recursos mais eficientes e elegantes que outros Uso acidental de recursos desconhecidos provocando resultados inesperados Estudo de Linguagens de Programação - Prof. Marcelo Marinho
Capacidade de Escrita - Ortogonalidade Muita 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ção Abstração significa definir e usar estruturas ou operações complexas, ignorando os detalhes de construção. Abstração de processos Capacidade 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ção Abstraçã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 - Expressividade Expressividade 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
Confiabilidade Considera-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 Tipos Tratamento de Exceções Aliasing Legibilidade e Capacidade de Escrita Estudo de Linguagens de Programação - Prof. Marcelo Marinho
Confiabilidade - Verificação de Tipos Testar 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ções Capacidade 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 - Aliasing Define 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 Escrita Programas difíceis de ler são difíceis de escrever e de modificar Estudo de Linguagens de Programação - Prof. Marcelo Marinho
Características que contribuem para o custo: Treinamento de Programadores Escrita de Programas Compilação de Programas Execução de Programas Sistema de Implementação da Linguagem Confiabilidade Manutenção de Programas Estudo de Linguagens de Programação - Prof. Marcelo Marinho
Custo Treinamento de programadores Escrita de programas na linguagem 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
Custo Execução de programas Sistema de implementação da Linguagem Função da qualidade do código produzido Equilíbrio entre o custo de compilação e o custo de execução Sistema de implementação da Linguagem Funçã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
Custo Confiabilidade Manutenção Função das falhas causadas pela ausência de elementos que garantam a corretude do programa Manutenção Funçã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ção Portabilidade 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 diversas Projetistas da linguagem Elegância e capacidade de atrair uso generalizado Implementadores da linguagem Dificuldades de implementar as construções e recursos da linguagem Usuários da linguagem Capacidade de escrita e legibilidade Estudo de Linguagens de Programação - Prof. Marcelo Marinho