Desenvolvimento - Sistemas

Linguagem de Programação

Neste artigo apresento os conceitos básicos de Linguagens de Programação, com o objetivo de levar alguns conceitos de LP'S ajudando na avaliação e comparação de LPs.

por Renato Mattos



Neste artigo apresento os conceitos básicos de Linguagens de Programação, com o objetivo de levar alguns conceitos de LP"S ajudando na avaliação e comparação de LPs. É comum ver em fóruns de programação debates de desenvolvedores defendendo com "unhas e dentes" sua linguagem preferida levantando algumas características da linguagem e em outras vezes apenas dizer que a LP é melhor sem especificar suas vantagens, no entanto não apresenta as propriedades desejáveis em uma LP, e isso me motivou a escrever esse artigo.

Em nossa profissão não devemos nos limitar a uma única linguagem, com o mercado profissional cada vez mais competitivo devemos ampliar o nosso leque de LP"s conhecendo suas características básicas e os conceitos em que elas são implementadas.

As características mudam muito entre as LP"s e estaria relacionado, por exemplo, a sua sintaxe e recursos e isso muda a uma grande velocidade levando a um estudo constante por parte dos desenvolvedores. Já os conceitos ou metodologia demoram, mudam a uma velocidade bem menor, onde dada uma metodologia as LP"s implementam suas características. Como exemplo a programação: estruturada, orientada a eventos e orientada a objetos.

Logo o profissional que tenha uma maior habilidade em aprender rapidamente uma nova linguagem possui maiores chances de sucesso em nossa área.

Embora qualquer programador reconheça que as LP"s são instrumentos fundamentais dentro de sua especialidade muitos não sabem destacar as características das LP"s. É importante destacar os benefícios e um estudo aprofundado de LP"s para os desenvolvedores:

  • Maior capacidade de desenvolver programas. Uma maior compreensão sobre os conceitos de uma LP pode aumentar nossa habilidade em como pensar e resolver problemas.
  • Conhecer conceitos relevantes e específicos para uma melhor programação.
  • Habilidade ao usar um LP. O maior entendimento a respeito das funcionalidades e da implementação de uma LP possibilita ao programador construir programas melhores e mais eficientes.
  • Capacidade de escolher a LP mais adequada. Conhecer os recursos oferecidos por uma linguagem e saber como esses recursos são implementados podem determinar uma boa escolha da LP a ser usada em um projeto.

Propriedades desejáveis em uma LP

Legibilidade

Esta relacionada na facilidade de leitura dos códigos. Quanto mais fácil for conseguir ler o programa, mais fácil será entender o código e também descobrir erros na programação. Uma LP com baixa legibilidade torna o seu aprendizado mais difícil.

Alguns exemplos:

- Linguagens que usam Goto normalmente reduzem a legibilidade porque nesse tipo de programação, os programas possuem fluxo de controle e não obedecem a padrões regulares. Tornando difícil acompanhar e entender o que eles fazem.

- Uso de mesmo vocábulo da LP para denotar diferentes comportamentos dependendo do contexto é prejudicial à legibilidade e entendimento da LP

Ex:

  • VISUAL BASIC:
  • Uso do operador "=" com sinal de atribuição e comparação.
  • Chamada a funções e procedimentos com passagem de parâmetros. De acordo com o contexto é necessário o uso de "(".

  • C/C++:
  • Uso do "*" denota diversas coisas, como sinal multiplicador, passagem por referencia, declaração de ponteiros.

    - Efeitos colaterais também são prejudicais à legibilidade. Eles causam mudanças adicionais no estado do programa durante a avaliação de uma determinada expressão ou a execução de um comando ou subprograma.

    Ex: VISUAL BASIC:

  • A não necessidade de informa nos parâmetros de procedimentos e funções passagem por valor ou referência. Adotando como padrão passagem por referência podendo ocasionar efeito colateral indesejável.

    - Marcadores de blocos de comandos como o "Begin End" (Pascal e Delphi) e o "{ }" de C/C++ e JAVA, também podem causar confusões na leitura do programa quando existem vários comandos de repetição e seleção aninhados. Além disso, a não obrigatoriedade de usar um marcador específico para indicar onde o comando "if" do C se encerra possibilita a escrita de comando "ifs" aninhados difíceis de serem entendidos.

    - Algumas LP"s adotaram postura altamente questionáveis com relação a legibilidade. FORTRAM, por exemplo, permite que identificadores especiais como DO, END, INTEGER e REAL sejam também nomes de variáveis.

    Redigibilidade

    Esta relacionada na facilidade em escrever programas. A redigibilidade de programas pode conflitar com a legibilidade. C permite a redação de comandos complexos, mas que podem não identificar de maneira muito clara a sua funcionalidade.

    As LPs com tipos de dados limitados requerem o uso de estruturas complexas, o que acaba dificultando a redação de programas. A falta de declaração recursiva e ponteiro em Visual Basic acaba limitando o seu uso para implementar programas com uso de estruturas de árvores, listas e etc

    Outro ponto na falta de redigibilidade no Visual Basic esta relacionado na declaração de variáveis, onde não é possível declarar várias variáveis de mesmo tipo especificando o tipo somente uma vez.

    Ex: Dim i, j , soma as integer ( Nesta declaração somente a variável soma é do tipo integer, as demais i e j são variant, o que além de falta de redigibilidade também temos falta de legibilidade podendo ocasionar efeito colateral, onde i e j podem assumir qualquer tipo de valor). Confiabilidade

    Essa propriedade se relaciona os mecanismos fornecidos pela LP para incentivar a construção de programas confiáveis. LPs que requerem a declaração de dados permitem verificar automaticamente erros de tipos durante a compilação ou execução. LPs que possuem mecanismos para detectar eventos indesejáveis (Tratamentos de Erros) e especificar respostas adequadas a tais eventos permitem construção de programas mais confiáveis.

    Eficiência

    De acordo com as demandas por recursos de um tipo de aplicação, certas LPs são mais recomendadas, e outras não devem ser usadas. Aplicação de automação em tempo real, por exemplo, normalmente requerem o uso de LPs que minimizem o tempo de execução e de acesso aos dispositivos periféricos, bem como o consumo de especo de memória.

    Por exemplo, PASCAL, JAVA, VISUAL BASIC impõe que os índices de vetores sejam verificados em todos os acessos durante a execução dos programas. Isso implica necessidade de fazer um teste antes de qualquer acesso aos vetores. Por outro lado, como o C não faz esse tipo, o código gerado será mais veloz.

    Em contrapartida o fato de C não verificar os índices de vetores perde em confiabilidade na linguagem. Pode acarretar acesso a espaço de memória erradamente tornando a execução do programa imprevisível. É comum quem programa em C testar o programa com sucesso e ao desligar a máquina e testar novamente ocorrer erros. Isso devido à coincidência do acesso a memora erradamente ter o valor esperado. No entanto C é uma linguagem para desenvolvedores que "sabem" o que estão fazendo.

    O que lembra uma paródia, o que é melhor fazer um programa que controla o vôo de um avião em C ou Pascal? Em Pascal com a verificação dos índices, verificar acesso ilegal o programa gera erro e o avião cai, em C você não vai saber para onde o avião vai parar. Bem se eu for pegar o avião faço o programa em C, mas se não for pegar faço em Pascal, brincadeiras a parte o VISUAL BASIC permite você otimizar a eficiência desabilitando a verificação dos índices durante a execução o que torna a linguagem mais adaptável.

    Facilidade de aprendizado

    O programador deve ser capaz de aprender a linguagem com facilidade. LPs com muitas características e múltiplas maneiras de realizar a mesma funcionalidade tendem a ser mais difíceis de aprender. Além disso, outro aspecto negativo causado pelo excesso de características é o fato de levar os programadores a conhecerem apenas uma parte da linguagem, o que torna mais difícil a um programador entender o código produzido por outro.

    Ortogonalidade

    Diz respeito a capacidade da LP permitir ao programador combinar seus conceitos básicos sem que se produzam efeito anômalos nessa combinação. Assim uma LP é tão mais ortogonal quanto menor for o numero de exceções aos sues padrões regulares.

    LPs ortogonais são interessantes porque o programador pode prever, com segurança, o comportamento de uma determinada combinação de conceitos. Isso pode ser feito sem que se tenha de implementar teste para a averiguação do uso combinado de dois ou mais conceitos, ou mesmo buscar na especificação da LP se existe alguma restrição àquela combinação.

    A falta de ortogonalidade diminuiu o aprendizado da LP e pode estimular a ocorrência de erros de programação.

    Ex: A não necessidade de declaração de variáveis no Visual Basic (default tipo variant), não permitir declaração de várias variáveis de mesmo tipo na mesma linha (default por referência), permitir não especificar passagem de valor ou referência. Permitir não especificar o escopo de procedimentos e funções (default public).

    Reusabilidade

    A reusabilidade é a possibilidade de reutilização do mesmo código para diversas aplicações. Quanto mais reusável for um código, maior será a produtividade de programação, uma vez que, na construção de novos programas, bastará utilizar e, eventualmente, adaptar códigos escritos anteriormente sem que se faça necessário reconstruí-los. A grande maioria das LPs permite reuso de código através da modularização por meio das bibliotecas de subprogramas. Por exemplo, em Visual Basic, permite ao programador modularizar o seu código por módulos ou classes e ainda permite programação de dll e criação de componentes.

    Modificabilidade

    Refere-se às facilidades oferecidas pela LP para possibilitar ao programador alterar o programa em função de novos requisitos, sem que tais modificações impliquem mudanças em outras partes do programa. Exemplo de mecanismos que proporcionam boa modificabilidade são o uso de constantes simbólicas e a separação entre interface e implementação na construção de subprogramas e tipos de dados abstratos.

    Portabilidade

    É altamente desejável que programas escritos em uma LP se comportem da mesma maneira independentes da ferramenta utilizada para traduzi-los para a linguagem de máquina ou da arquitetura computacional (hardware ou sistema operacional) sobre a qual estão sendo executados.

    Dessa maneira, um mesmo programa ou biblioteca pode ser utilizado em vários ambientes e diferentes situações sem que seja necessário despender tempo de programação para reescrevê-los ou adaptá-los ao novo ambiente de tradução ou execução.

    Contudo, essa postura pode impor algumas restrições à implementação das linguagens em particular na busca por eficiência na execução dos programas. Como exemplo a linguagem JAVA é executada por modo híbrido compilada e depois interpretada pela máquina virtual Java, isso possibilita portabilidade para execução em SO. O .NET também possui essa característica.

    Conclusões

    Foram apresentadas as principais características das LPs, mas o estudo de LP é muito mais abrangente, no entanto é importante ter compreendido como cada uma das propriedades apresentadas pode influenciar o projeto, implementação e uso das LP"s. Ter uma boa noção sobre como as LPs podem ser especificadas e implementadas também contribui para a compreensão de diversos tópicos subseqüentes. Tais conceitos também ajudam no aprendizado de novas LPs.

    Dessa forma não existe a melhor ou pior LP, isso não depende somente da linguagem e sim para que tipo de projeto será aplicado.

  • Renato Mattos

    Renato Mattos - Diretor de Desenvolvimento Foco Sistemas.