Baixe o app para aproveitar ainda mais
Prévia do material em texto
LINGUAGENS DE PROGRAMAÇÃO Propriedades Desejáveis Prof. Saulo C. Campos Objetivo das linguagens de programação • Etapas do desenvolvimento de software (segundo PRESSMAN, 1997) • Especificação de requisitos • Projeto do software • Implementação • Validação • Manutenção Propriedades desejáveis em LPs • Legibilidade • Redigibilidade • Confiabilidade • Eficiência • Ortogonalidade • Facilidade de aprendizado • Reusabilidade • Modificabilidade • Portabilidade Legibilidade • Esta propriedade diz respeito à facilidade para ler e entender um programa. Legibilidade • Programação macarrônica • LP que não possuem fluxo de controle e não obedecem a padrões regulares deixam o entendimento do programa confusão e difícil. • Ex.: FORTRAN e o comando goto. Legibilidade • Mesmo operador com diversos significados semânticos. • LP que utilizam o mesmo operador para denotar diversos significados também oferece problemas de legibilidade. • O que o trecho de código fonte em C, abaixo, faz: *p = (*p)*q Legibilidade •Efeitos colaterais • Há também LPs que possuem efeitos “colaterais” na execução de comandos que também causam problemas de legibilidade. • Ex.: A operação x++ e ++x da linguagem C. Legibilidade • Problemas com efeito “colateral” não são ocasionados apenas pela característica de uma LP, mas também pela forma de escrita do programador. • Ex.: Uso de variáveis globais e expressões sem coesão. Legibilidade • Efeitos colaterais int x = 1; void main() { int y; y = retornaCinco (); y = y + x; } Legibilidade • Efeitos colaterais int x = 1; int retornaCinco() { x = x + 3; return 5; } void main() { int y; y = retornaCinco (); y = y + x; } Legibilidade • Operadores de marcação de blocos de comando como “begin” – “end”, da linguagem pascal, ou “{” – “}”, da linguagem C, podem causar dificuldades na interpretação do início e do final de blocos com expressões de comparação e repetição aninhados. Legibilidade • O que fazem os códigos abaixo? if (x>1) if (x==2) x=3; else x=4; if (x>1) if (x==2) x=3; else x=4; if (x>1) if (x==2) x=3; else x=4; Legibilidade • Solução adotada por outras linguagens Legibilidade • As questões de legibilidade de programas não depende somente de características da LP utilizada, mas também da forma de escrita de cada programador. Redigibilidade • Esta relacionada a facilidade e rapidez com que é possível escrever programas (códigos). • Também esta relacionada a capacidade de permitir ao programador se concentrar nos algoritmos centrais (principais), sem se preocupar com algoritmos auxiliares não relevantes para solução direta do problema. • Essa característica é umas da que mais diferencia as linguagens de baixo nível das linguagens de alto nível. Redigibilidade • LPs que não suportam tipos de dados complexos têm menos redigibilidade. • A redigibilidade de programas podem conflitar com a legibilidade. • A linguagem C permite comandos com alto grau de complexidade, elevando a redigibilidade, porém a identificação da funcionalidade pode se tornar difícil e obscura. Redigibilidade • Declaração de vetor (array) • Pascal V: array [0..9] of integer; • C int V[10]; • Qual mais fácil de escrever? Qual mais fácil de ler? Redigibilidade int equals(char *q, char *p) { for(;*q==*p && *q!=‘\0’; q++,p++); return *q==‘\0’ && *p==‘\0’?1:0; } Confiabilidade • Esta propriedade refere-se aos mecanismos que as LPs oferecem para criação de programas confiáveis. • Verificação de manipulação de tipos. • Verificação de posição de vetores. • Verificação de identificadores não declarados. • Semântica de funções e comandos bem definida e verificada. • Suporte a blocos de tratamento de erros e eventos inesperados. Confiabilidade • Verificação e manipulação de tipos (semântica) • Verifica existência de erros de tipagem boolean u = true; int v = 0; while (u && v < 9) { v = u + 2; if (v == 6) u = false; } Confiabilidade • Tratamento de exceções • Utilização de blocos try, catch e finally try { System.out.println(a[i]); } catch (IndexOutofBoundsException) { System.out.println(“Erro de Indexação”); } Confiabilidade • Verificação de posição de elementos de vetores • Tempo de projeto ou Tempo de execução • O que acontece com o código abaixo? int V[10]; for (int i=0; i<=10; i++) V[i]=i*2; Eficiência • Característica das LP que diz respeito a capacidade de uso otimizado dos recursos de máquina e tempo de execução de instruções Eficiência • A eficiência é fator crucial para escolha de linguagem em determinados projetos. • Projetos de aplicações em tempo real, normalmente demandam rápida execução e grande uso da memória principal. Assim deve-se optar por uma LP que minimize o tempo de execução e acesso a dispositivos E/S e que otimizem o uso da memória. Eficiência • Em JAVA todos os índices de vetores são verificados antes do seu efetivo acesso, devido ao seu mecanismo de tratamento de exceção. Já na linguagem C isso não é feito. • Este fator implica que uma instrução em C seja executada mais rapidamente que uma instrução em JAVA. Porém há um conflito com a “confiabilidade”. Eficiência • Atualmente, “quase” toda a linguagem que é compilada possui um otimizador interno para geração de códigos em linguagem de máquina mais eficientes. Aprendizado • Diz respeito a facilidade de aprendizado da LP. • Certas LPs possuem uma curva de aprendizagem mais acentuadas que outras. • Muitas vezes é fator determinante para escolha em um projeto. Aprendizado • Linguagens que possuem: • Muitas características, • Múltiplas maneiras de realizar a mesma coisa, • Muitos comandos e expressões com “efeitos colaterais” Tornam o aprendizado mais difícil. • De quantas maneiras diferentes é possível incrementar o valor de uma variável na linguagem C? E na linguagem Pascal?: Ortogonalidade • Esta propriedade refere-se à capacidade de uma LP em permitir que o programador utilize e combine seus conceitos básicos da LP, sem que estas combinações gerem efeitos anômalos. • Além disso, esta combinação de conceitos deve ser realizada de maneira prática e fácil. Ortogonalidade • Esta característica é importante porque dessa forma o programador pode prever, com segurança, o funcionamento de expressão ou trecho de código-fonte desenvolvido. • Também permite ao programador desenvolver soluções para seus problemas sem esforço demasiado. Ortogonalidade • Uma LP com um conjunto relativamente pequeno de construções primitivas, e que podem ser combinadas, gerando um número também relativamente pequeno de maneiras para construir as estruturas de dados, operações controle e expressões tendem a ser mais ortogonais. Ortogonalidade • Exemplo de falta de ortogonalidade (java): int x, y = 2, z = 3;byte a, b = 2, c = 3; x = y + z; a = b + c; • Exemplo de falta de ortogonalidade (Pascal): • Funções não podem retornar vetores; • Todos blocos são delimitados por “begin” e “end”, exceto comando “repeat”; Ortogonalidade • Excesso de ortogonalidade pode causar dificuldades no desenvolvimento. • Ex.: ALGOL double a=1.33; int b=1; a=a+b; b=a+b; Ortogonalidade • Qual a relação entre a ortogonalidade e a redigibilidade? • E com a facilidade de aprendizado? Reusabilidade • Possibilidade de utilização de um mesmo código em diversas aplicações diferentes. • Reusabilidade NÃO é copiar e colar! Reusabilidade • A reusabilidade aumenta a produtividade do desenvolvimento de softwares. • A LP pode incentivar a criação de códigos reutilizáveis, mas sempre depende do programador buscar tal propriedade. • Exemplos de incentivos a reusabilidade: • Utilização de funções parametrizadas • Construção de bibliotecas • Utilização de classes coesas Modificabilidade • Essa propriedade diz respeito aos mecanismos oferecidos pelas LPs para facilitar as mudanças em um código fonte. Modificabilidade • As mudanças sempre ocorrem em detrimento de novos requisitos ou para correção de falhas. • Tais mudanças não devem gerar trabalho excessivo e nem acarretar alterações em outras partes do programa. Modificabilidade • Mecanismos que proporcionam modificabilidade: • Utilização de constantes; • Utilização de funções e sub-rotinas; • Utilização de tipos abstratos de dados; • Separação entre interface e implementação; • Paradigma Orientado a Objetos. Modificabilidade • Qual a relação entre a modificabilidade e a reusabilidade? Portabilidade • Um programa escrito em um LP deve funcionar da mesma maneira, correta e eficiente, independente da ferramenta utilizada para produzi-lo ou da arquitetura computacional (hardware e sistema operacional) utilizada inicialmente. Portabilidade • A portabilidade permite que um programa: • Rode sem restrição de sistema operacional. • Rode sem restrição de hardware. • Possa ser alterado em qualquer ferramenta. • Não precise ser compilado, reescrito ou adaptado para mudança de ambientes computacionais. Portabilidade • A portabilidade pode confrontar com outras propriedades desejáveis, como a eficiência ou ortogonalidade. • Uma LP pode abrir mão da completa portabilidade em detrimento de um aumento de eficiência.
Compartilhar