OFICINA DA PESQUISA PROGRAMAÇÃO APLICADA À CIÊNCIA DA COMPUTAÇÃO



Documentos relacionados
LINGUAGENS E PARADIGMAS DE PROGRAMAÇÃO. Ciência da Computação IFSC Lages. Prof. Wilson Castello Branco Neto

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO

AULA 1: PARADIGMAS DE PROGRAMAÇÃO

Curso Técnico em Redes

Introdução. Hardware X Software. Corpo Humano Parte Física. Capacidade de utilizar o corpo em atividades especificas explorando seus componentes

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP)

Paradigmas de Linguagens de Programação. Aspectos Preliminares

1. NÍVEL CONVENCIONAL DE MÁQUINA

Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO

FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES

O modelo do computador

Orientação a Objetos

Introdução à Programação de Computadores

Introdução às Linguagens de Programação

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar


Processos e Threads (partes I e II)

Entendendo como funciona o NAT

1.1. Organização de um Sistema Computacional

Introdução à Engenharia de Computação

Figura 01 Kernel de um Sistema Operacional

Fundamentos de Sistemas Operacionais

Fonte (livro-texto): Conceitos de Linguagens de Programação, 4ed. Robert W. Sebesta

O que é um programa? Programa é uma lista de instruções que descrevem uma tarefa a ser realizada pelo computador.

Capacidade = 512 x 300 x x 2 x 5 = ,72 GB

Sistemas Operacionais

5 Mecanismo de seleção de componentes

MC-102 Aula 01. Instituto de Computação Unicamp

3. O NIVEL DA LINGUAGEM DE MONTAGEM

Introdução a Informática. Prof.: Roberto Franciscatto

Organização e Arquitetura de Computadores I. de Computadores

Notas da Aula 15 - Fundamentos de Sistemas Operacionais

Engenharia de Software

Softwares de Sistemas e de Aplicação

Sistemas Operacionais

Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO)

Introdução. Introdução. Introdução. Organização Estruturada de Computadores. Introdução. Máquinas Multiníveis

Lógica de Programação

Desenvolvendo Websites com PHP

Dadas a base e a altura de um triangulo, determinar sua área.

4 Estrutura do Sistema Operacional Kernel

Capítulo 3. Avaliação de Desempenho. 3.1 Definição de Desempenho

1. CAPÍTULO COMPUTADORES

Paradigmas de Linguagens de Programação

TÉCNICAS DE PROGRAMAÇÃO

11/3/2009. Software. Sistemas de Informação. Software. Software. A Construção de um programa de computador. A Construção de um programa de computador

Sistemas Operacionais. Prof. M.Sc. Sérgio Teixeira. Aula 05 Estrutura e arquitetura do SO Parte 1. Cursos de Computação

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

ENGENHARIA DE SOFTWARE DESENVOLVIMENTO EM CAMADAS

O Hardware e o Software do Computador

Montagem e Manutenção. Luís Guilherme A. Pontes

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

Computadores de Programação (MAB353)

Informática. Prof. Macêdo Firmino. Macêdo Firmino (IFRN) Informática Setembro de / 25

Figura 1 - O computador

Tecnologia da Informação. Visão Geral sobre Informática

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES

28/9/2010. Paralelismo no nível de instruções Processadores superescalares

Everson Scherrer Borges João Paulo de Brito Gonçalves

A Linguagem Algorítmica Estrutura de Repetição. Ex. 2

Arquiteturas RISC. (Reduced Instructions Set Computers)

LÓGICA DE PROGRAMAÇÃO

Sistemas de Informações Gerenciais

Lição 1 Introdução à programação de computadores

Computador Digital Circuitos de um computador (Hardware)

Introdução aos Computadores

MÓDULO 11 ELEMENTOS QUE FAZEM PARTE DO PROJETO DO SISTEMA

Programação de Computadores III

DIFERENÇAS ENTRE HUB, SWITCH E ROOTER

Computadores XXI: Busca e execução Final

A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá.

Organização de Computadores Software

Introdução à Arquitetura de Computadores. Renan Manola Introdução ao Computador 2010/01

COMPILADORES E INTERPRETADORES

Resolução de problemas e desenvolvimento de algoritmos

Requisitos de Software

Unidade 13: Paralelismo:

AUTOMAÇÃO DE ESCRITÓRIOS ADE

ALP Algoritmos e Programação. . Linguagens para Computadores

IFPE. Disciplina: Sistemas Operacionais. Prof. Anderson Luiz Moreira

Aula 26: Arquiteturas RISC vs. CISC

ALGORITMOS. Supervisão: Prof. Dr.º Denivaldo Lopes

Organização e Arquitetura de Computadores I

CURSO DE PROGRAMAÇÃO EM JAVA

LINGUAGEM C UMA INTRODUÇÃO

3. Arquitetura Básica do Computador

ARQUITETURA DE COMPUTADORES

FUNDAMENTOS DE HARDWARE COMO FUNCIONA UM PC? Professor Carlos Muniz

Sistema de Computação

SISTEMAS OPERACIONAIS. Maquinas Virtuais e Emuladores

SISTEMAS OPERACIONAIS

Software Básico (INF1018)

Algoritmos não se aprendem: Copiando algoritmos Estudando algoritmos Algoritmos só se aprendem: Construindo algoritmos Testando algoritmos

AUTOR: DAVID DE MIRANDA RODRIGUES CONTATO: CURSO FIC DE PROGRAMADOR WEB VERSÃO: 1.0

agility made possible

Entrar neste site/arquivo e estudar esse aplicativo Prof. Ricardo César de Carvalho

Curso: Técnico de Informática Disciplina: Redes de Computadores. 1- Apresentação Binária

PARANÁ GOVERNO DO ESTADO

Transcrição:

OFICINA DA PESQUISA PROGRAMAÇÃO APLICADA À CIÊNCIA DA COMPUTAÇÃO Prof. Msc. Carlos José Giudice dos Santos carlos@oficinadapesquisa.com.br www.oficinadapesquisa.com.br

APLICABILIDADE E CRITÉRIOS DE AVALIAÇÃO DE LINGUAGENS DE PROGRAMAÇÃO

Aplicabilidade das Linguagens de Programação [1] Assim como a máquina a vapor foi inventada para substituir a força humana em trabalhos físicos, o computador foi inventado para auxiliar o esforço humano em trabalhos mentais que exigiam lógica e longos cálculos repetitivos. Os primeiros computadores eletromecânicos e eletrônicos eram máquinas caríssimas e usadas principalmente para a pesquisa e desenvolvimento de produtos e serviços com fins militares. As primeiras linguagens de programação eram praticamente inexistentes, ou seja, programava-se computadores por meio da ligação ou modificação de circuitos lógicos elétricos e/ou eletrônicos.

Aplicabilidade das Linguagens de Programação [2] A evolução da eletrônica trouxe quatro conquistas importantes: permitiu que os computadores ficassem cada vez menores, mais rápidos, mais confiáveis e principalmente mais baratos. Hoje os computadores estão presentes em todas as atividades humanas, controlando desde estações espaciais, usinas de energia, sistemas de produção fabril até motores de carros, geladeiras e fornos de micro-ondas. Esta grande quantidade de aplicações diferentes e nas mais diversas áreas criou uma necessidade de se desenvolver linguagens de programação com muitos objetivos diferentes de acordo com a aplicabilidade.

Aplicabilidade das Linguagens de Programação [3] É preciso fazer uma distinção entre linguagens de programação de baixo nível e de alto nível. As linguagens de baixo nível são orientadas para as máquinas e necessitam de um conhecimento profundo da arquitetura do computador para a criação de programas. São exemplos de linguagem de baixo nível: Plankalkül (Z3), ECS (Eniac Code System) e o Assembly. As linguagens de alto nível são orientadas para as pessoas e não exigem praticamente nenhum conhecimento da arquitetura do computador para se criar programas. São exemplos de linguagens de alto nível: Fortran, Cobol, Pascal, C, C#, SQL, VB, Java, etc.

Aplicabilidade das Linguagens de Programação [4] As principais áreas de aplicação das linguagens de programação de computadores hoje, os chamados domínios de programação são: 1. Aplicações científicas; 2. Aplicações comerciais; 3. Sistemas embarcados; 4. Aplicações industriais; 5. Inteligência artificial; 6. Programação para a Web; 7. Programação de sistemas (operacionais).

Aplicações Científicas [01] Os primeiros computadores digitais foram inventados na época da Segunda Guerra com o objetivo de auxiliar a pesquisa científica, especialmente aquela relacionada ao desenvolvimento de armas. De acordo com Sebesta (2011), as aplicações científicas possuem estrutura de dados relativamente simples, mas necessitam de suporte para cálculos matemáticos em ponto flutuante. Ainda de acordo com esse mesmo autor, as estruturas de dados mais utilizadas em pesquisas e/ou aplicações científicas são vetores e matrizes; as estruturas de controle são laços de contagem e seleção.

Aplicações Científicas [02] A primeira linguagem de programação utilizada em aplicações científicas foi a Assembly. Como veremos mais tarde, é uma linguagem muito rápida e eficaz, mas exige conhecimento profundo da arquitetura do computador (processador, memória, barramentos e dispositivos de entrada e saída). A primeira linguagem de programação de alto nível para aplicações científicas foi o Fortran. O Algol 60 foi desenvolvido como uma linguagem para utilização científica e também em outras áreas (uso geral). Entretanto, nenhuma linguagem inventada depois consegue bater o Fortran em termos de eficiência, razão pela qual ele ainda é utilizado até hoje.

Aplicações Comerciais O primeiro computador comercial do mundo foi o UNIVAC (década de 1950). Para utilizar este computador criou-se uma linguagem de programação para aplicações comerciais denominada FLOW-MATIC. Esta linguagem foi a base mais tarde para a criação da linguagem COBOL, que é utilizada até hoje. Esta linguagem é utilizada para manipulação e criação de dados usados em transações comerciais. É interessante notar que o SQL não concorre com o COBOL. O COBOL é uma linguagem procedural (permite obter uma resposta). O SQL não é procedural (permite apenas escolher as características da resposta).

Sistemas Embarcadas Se você já andou de carro, navio ou avião, ou se já programou um forno de micro-ondas, ou ainda, se já utilizou uma impressora, você já fez uso de sistemas embarcados. Sistemas embarcados são dispositivos ou circuitos eletrônicos que podem ser programados para executar uma função ou monitorar processos. Geralmente os sistemas embarcados são encontrados sob a forma de firmware (conjunto de instruções programas diretamente em um dispositivo eletrônico), que são escritos em linguagem Assembly ou linguagem de máquina.

Aplicações Industriais Hoje é muito comum que os processos industriais utilizem automação. Um robô que faz soldas durante o processo de fabricação de um carro funciona graças à sua programação, que é um sistema embarcado. Entretanto, quando eu tenho vários robôs e outros máquinas em vários processos de produção industrial, é necessário haver um tipo de controle para criar, coordenar e automatizar os diversos processos. Os sistemas de automação e controle geralmente utilizam um CLP (Controlador Lógico Programável) e uma linguagem de máquina denominada Ladder.

IA (Inteligência Artificial) [01] Sebesta (2011) define IA como uma grande área de aplicações computacionais que possui como principal característica o uso de computações simbólicas em vez de computações numéricas. O mesmo autor registra que este tipo de programação requer muita flexibilidade quando se compara com outros domínios de programação, como por exemplo, a habilidade de criar e executar segmentos de código durante a execução. A IA é definida como um sistema que exibe ou replica comportamentos inteligentes. A IA faz uso de um SBC (Sistema Baseado em Conhecimento).

IA (Inteligência Artificial) [02] Na literatura é comum encontrarmos o termo IA associado aos chamados (SE) Sistemas Especialistas. Os SE s são um caso específico dos SBC s. Os SE s são definidos como sistemas que solucionam problemas resolvidos apenas por pessoas especialistas. Um sistema convencional é baseado em um algoritmo que emite um resultado correto após cálculos numéricos processados de maneira repetitiva. Um SE é baseado em uma busca heurística (baseada em símbolos que representam um comportamento) e trabalha com problemas que não possuem uma solução convencional (uma resposta correta).

IA (Inteligência Artificial) [03] Os sistemas convencionais utilizam algoritmos de cálculos numéricos, com processos repetitivos manipulando grandes bases de dados. Os SE s utilizam análise heurística, com processos de inferência manipulando grandes bases de conhecimentos. A principal linguagem de programação utilizada em IA é a LISP, criada em 1959. Sebesta (2011) destaca que até hoje os SE s são programados em LISP ou em uma de suas parentes próximas. O mesmo autor destaca que recentemente muitas aplicações de IA estão sendo escritas em C.Scheme e em Prolog.

IA (Inteligência Artificial) [04] Carvalho (2006) justifica o uso da IA para capturar as habilidades de especialistas humanos porque eles são raros, caros, imprevisíveis, emocionais, ocupados e mortais. Os especialistas artificiais são consistentes, disponíveis, relativamente baratos e permanentes. Existem muitas questões éticas relacionadas com a IA que estão sendo discutidas hoje. A maioria desta questões éticas seguem duas linhas, a saber: 1. Até que ponto um ser com inteligência artificial tem consciência? 2. Até que ponto a inteligência artificial é potencialmente perigosa para a raça humana?

Programação para a Web A internet (World Wide Web) existe graças a uma razoável quantidade de linguagens de programação e uma grande quantidade de linguagens de marcação, sendo estas últimas padronizadas pelo W3C (World Wide Web Consortium). A linguagem de uso geral mais utilizada na Internet e em dispositivos móveis é a linguagem Java. Existem linguagens de scripting, que, tecnicamente falando, são bibliotecas prontas de códigos de linguagem que podem ser usados para a apresentação de conteúdos dinâmicos, como o Javascript. Alguns autores preferem chamar as linguagens de scripting de ferramentas.

Programação de sistemas operacionais [01] Como sabemos (ou deveríamos saber), um sistema operacional (SO) é um conjunto de aplicativos que fazem a intermediação entre a máquina e os programas que nós usamos. Basicamente um SO possui um núcleo (kernel) com uma interface com recursos de baixo nível (BIOS) e aplicativos de sistema. Trata-se do conjunto de aplicativos mais importante, porque nenhum hardware operado por usuários comuns funciona sem um SO. Além disso, um SO funciona todo o tempo. Na categoria de sistemas operacionais podemos incluir os protocolos de rede.

Programação de sistemas operacionais [02] Linus Torvalds, criador do kernel do SO Linux afirmou certa vez que a criação de um SO é uma boa oportunidade para você brincar de Deus, pois você cria um universo (sistema) cujas regras são determinadas por você. A linguagem de programação mais utilizada para se criar SO s no início da computação foi o Assembly. Nas décadas de 1960 e 1970, os grandes fabricantes de computadores (os mainframes), tais como a IBM, a DEC e a Burroughs desenvolveram linguagens de alto nível orientadas à máquina para poder desenvolver os seus SO s. Nasceram assim a PL/1 (IBM), a Bliss (DEC) e o Algol estendido (Burroughs).

Programação de sistemas operacionais [03] A grande vantagem de se escrever um SO em uma linguagem de alto nível é a portabilidade, ou seja, a capacidade de um SO ser instalado em máquinas com diferentes arquiteturas. O Unix foi quase todo escrito em C (algumas poucas partes em Assembly). Embora a linguagem C esteja mais próxima do inglês do que do Assembly, ela é considerada por muitos autores como uma linguagem de baixo nível. O Linux, o MAC OS e o Android são exemplos de SO que tem como origem o Unix. Alguns programadores consideram o C como uma linguagem perigosa.

Critérios de avaliação de linguagens Não existe um consenso entre cientistas da computação sobre as características desejáveis em uma linguagem de programação. Entretanto, para fins de avaliação, Sebesta (2011, p. 26) destaca que os critérios seguintes são considerados importantes por grande parte dos acadêmicos da área: 1. Legibilidade; 2. Facilidade de escrita; 3. Confiabilidade; 4. Custo.

1. Critério da Legibilidade [01] A facilidade de se ler e entender um programa de computador se traduz em um critério chamado de legibilidade. Antes de 1970, a principal característica positiva para se avaliar linguagens de programação eram a eficiência do código de máquina - programas pequenos, rápidos, orientados para a máquina.. Após a introdução do conceito de ciclo de vida de software, a manutenção do software passou a ser a parte mais importante deste ciclo, principalmente por causa do custo. O foco de orientação das linguagens passou a ser as pessoas e não mais as máquinas.

1. Critério da Legibilidade [02] Dentro do critério de legibilidade, existem algumas características que são particularmente importantes, a saber: Simplicidade geral Ortogonalidade Tipos de dados Projeto da sintaxe Os conceitos relacionados com estas características serão comentados a seguir.

1. Critério da Legibilidade [03] Em relação à simplicidade geral, uma linguagem simples é aquela que possui poucas construções básicas. Uma linguagem com muitas construções básicas torna-se difícil de aprender, porque a maioria dos programadores vai se concentrar em aprender alguns poucos recursos, ignorando outros que podem ser mais conhecidos por outros programadores. Assim, ocorre um problema de legibilidade quando um leitor acostumado com determinadas construções da linguagem se depara com construções não conhecidas por ele.

1. Critério da Legibilidade [04] Sebesta (2011) nos chama a atenção para o fato de que a multiplicidade de recursos é um grande complicador para a característica da legibilidade. A multiplicidade de recursos ocorre quando existe uma linguagem mais de uma maneira de realizar a mesma operação. O mesmo autor exemplifica este caso usando a linguagem Java, mostrando como incrementar uma variável de quatro modos diferentes: 1. count = count +1 3. count++ 2. count +=1 4. ++count

1. Critério da Legibilidade [05] Quando uma linguagem é simples demais, isto pode acarretar problemas de legibilidade. Neste sentido, Sebesta (2011) chama a atenção para um problema chamado sobrecarga de operadores. Utilizar o símbolo de + para fazer tanto a adição de variáveis isoladas quanto de variáveis do tipo vetor pode causar confusão para quem está lendo o programa. A simplicidade dos programas feitos em Assembly é extrema, mas quem já tentou determinar o que faz um determinado trecho do código nesta linguagem pode atestar que a legibilidade desta linguagem não é o seu forte.

1. Critério da Legibilidade [06] Em linguagem de programação, ortogonalidade significa que um conjunto relativamente pequeno de construções primitivas podem ser combinadas em um número pequeno de maneiras para construir as estruturas de controle e de dados de uma linguagem. Na prática, uma linguagem ortogonal seria mais fácil de aprender e teria menos exceções. Cada exceção é uma construção que precisa ser aprendida para ser evitada. O conceito de ortogonalidade vem do conceito matemático de ortogonal, em que vetores ortogonais são independentes uns dos outros.

1. Critério da Legibilidade [07] Em programação, quanto mais ortogonal for o projeto de uma linguagem, menor será o número de exceções às regras de linguagem. Isto significa um maior grau de regularidade no projeto, e esta característica torna uma linguagem mais fácil de aprender, ler e entender. Neste sentido, a linguagem C tem pouca ortogonalidade, sendo por este motivo, mais difícil de aprender, ler e entender que o Pascal, por exemplo. Entretanto, o excesso de ortogonalidade também é prejudicial, pois ela vai necessitar de muitos tipos primitivos, resultando em uma explosão de combinações.

1. Critério da Legibilidade [08] Resumindo... a ortogonalidade tem uma relação estreita com a independência. Por exemplo, se uma linguagem permite que uma instrução de programa utilize apenas registradores como operandos, podemos dizer que o projeto desta linguagem não é ortogonal ou seja é um projeto mais engessado, restrito e com menor facilidade de escrita (do código). O ideal seria permitir operar tanto com registradores quanto com endereços de memória. Excesso de ortogonalidade também é prejudicial, porque uma ampla liberdade de combinações pode permitir uma grande quantidade de construções complexas, e muita complexidade é desnecessário.

1. Critério da Legibilidade [09] Os tipos de dados também influenciam a legibilidade de um programa. De acordo com Sebesta (2011), a legibilidade de um programa fica facilitada quando existem tipos e estruturas de dados adequados às situações que enfrentamos ao escrever um programa. O exemplo que o autor utiliza é o uso de um tipo de variável numérica como Flag (por exemplo, Timeout = 1) em uma linha de código porque a linguagem não dispõe de um tipo de variável booleano (por exemplo, Timeout = true). Nesse caso, a linha de código com o tipo booleano é muito clara (legível), enquanto que uma linha de código como tipo numérico vai requerer análise para se saber do que trata esta linha de código.

1. Critério da Legibilidade [10] A última característica que afeta a legibilidade é o projeto da sintaxe. Sintaxe em uma linguagem de programação é um conjunto de regras que estabelece como serão apresentadas suas estruturas básicas (palavras). O formato dos identificadores (variáveis, constantes, etc) é essencial para a legibilidade. Quanto menor o tamanho do identificador, menor a legibilidade. Por exemplo, na linguagem interpretada BASIC, as variáveis podiam ter apenas uma letra, ou no máximo, uma letra e um número. Esta restrição por si só já é um problema devido ao reduzido nomes de variáveis possíveis. Outro problema seria a legibilidade. Em um programa em que tenho que manipular as variáveis Nome do cliente e Nome do fornecedor, em BASIC poderia ser N1 e N2.

1. Critério da Legibilidade [11] As variáveis N1 e N2 não nos diz muita coisa, e isso prejudica a legibilidade. Já uma linguagem em que as variáveis poderiam ser, por exemplo, Nome_Cliente e Nome_Fornecedor, não restariam dúvidas sobre o que significa estas variáveis. Outro problema de projeto de sintaxe diz respeito às palavras especiais. Se eu tenho um bloco de instruções que começa com um if e termina com um end, e um loop de repetição que começa com um while e também termina com um end, posso ter dificuldades para saber a que bloco do programa cada end está se referindo. Linguagens que possuem palavras específicas tais como um end if ou end loop melhoram a legibilidade.

2. Facilidade de escrita [01] Na visão de Sebesta (2011), a maioria das características que afetam a legibilidade também afetam, por motivos óbvios, a facilidade de escrita. Entretanto, a principal característica que afeta a facilidade de escrita é o domínio de programação. Em outras palavras, algumas linguagens foram desenvolvidas especialmente para um domínio específico. Exemplificando, não dá para comparar a facilidade de escrita do VB (Visual Basic) com o C quando o domínio de programação requer comandos para tratamento da interface gráfica com o usuário.

2. Facilidade de escrita [02] De maneira análoga, se o domínio de programação for a escrita de códigos para um sistema operacional, não dá para comparar o C com o VB, uma vez que o C foi uma linguagem projetada especialmente para escrever sistemas operacionais. Conforme visto anteriormente, assim como a simplicidade e a ortogonalidade afetam a legibilidade, também irão afetar a facilidade de escrita. Uma linguagem com um grande número de construções primitivas, além de mais difícil de aprender, pode levar um programador inexperiente a utilizar um comando errado com resultados inesperados.

2. Facilidade de escrita [03] Assim, a simplicidade ajuda na facilidade de escrita, desde que o número menor de construções primitivas (comandos) possa ser combinado de maneira eficiente e independente para criar novas construções, ou seja, o princípio da ortogonalidade. Outra característica das linguagens de programação que facilita a escrita é o suporte à abstração. Esta característica pode afetar tanto processos como dados. Um exemplo de suporte à abstração de processos ocorre quando um mesmo trecho de código é utilizado várias vezes ao longo de um programa.

2. Facilidade de escrita [04] Se eu tenho um trecho de programa que verifica se a entrada de dados pelo teclado é constituída apenas por números, e esse trecho é utilizado diversas vezes ao longo do programa, uma boa medida que facilitaria a escrita seria transformar esse trecho de programa em um subprograma. Desse modo, sempre que fosse necessário verificar se a entrada do teclado é numérica, bastaria chamar um subprograma. Esta técnica permite que a escrita do programa seja um trabalho menos tedioso, além de tornar mais simples e menor o número de linhas de código a serem escritas.

2. Facilidade de escrita [05] O suporte à abstração pode também afetar os tipos de dados. Por exemplo, algumas linguagens não suportam o uso de ponteiros, que são variáveis dinâmicas que armazenam um endereço de memória, e não um valor. Os ponteiros facilitam a escrita de programas que utilizam listas encadeadas, por exemplo, justamente pela facilidade de alocação dinâmica de memória. Sem esse suporte à abstração de dados, a criação de uma lista encadeada necessitaria de alocar espaço para cada uma das variáveis que compõem a lista.

2. Facilidade de escrita [05] A última característica que afeta a facilidade de escrita é a expressividade. Basicamente, esta característica pode ser descrita como a capacidade de uma linguagem em ter operadores poderosos que permitam fazer muitos cálculos em programas muito pequenos. Um exemplo que ilustra a expressividade de uma linguagem ocorre na linguagem C. A notação do comando count++ é muito mais expressiva e menor que a construção count = count + 1. Isto facilita a escrita deste tipo de construção nesta linguagem.

3. Confiabilidade [01] A confiabilidade é mais um critério usado para avaliação de linguagens de programação. Uma linguagem é considerada confiável quando o código de programa gerado por ela se comporta de acordo com as especificações em todas as condições de uso (SEBESTA, 2011). Quatro características afetam a confiabilidade, a saber: 1) Verificação de tipos; 2) Tratamento de exceções; 3) Utilização de apelidos; 4) Legibilidade e facilidade de escrita.

3. Confiabilidade [02] Para que uma linguagem de programação seja considerada confiável, é necessário que exista a verificação de tipos, tanto em tempo de compilação quanto em tempo de execução. Inúmeros erros de programas podem acontecer se uma linguagem não executar testes para verificar tipos. Por exemplo, atribuir um número real (de ponto flutuante) a uma variável descrita como um inteiro é um exemplo de erro que pode acontecer quando não existe a verificação de tipos. O ideal é que a verificação de tipos ocorra em tempo de compilação e em tempo de execução.

3. Confiabilidade [03] Entretanto, como a verificação de tipos em tempo de execução é mais cara, é imprescindível que pelo menos aconteça essa verificação em tempo de compilação. Outra característica que influencia na confiabilidade é o tratamento de exceções. Esta característica é descrita por Sebesta (2011) como a habilidade de interceptar erros em tempo de execução, tomar medidas corretivas e continuar a sua execução. É óbvio que um programa que não faça tratamento de exceções é pouco confiável, porque qualquer problema ou condição fora do normal fará com que este termine a sua execução antes do tempo.

3. Confiabilidade [04] Uma outra característica que afeta a confiabilidade é a utilização de apelidos. Este recurso de utilização de apelidos permite que variáveis com nomes diferentes acessem a mesma posição de memória. Geralmente as linguagens que possuem pouca flexibilidade na abstração de dados utilizam este recurso. Entretanto, este é um recurso perigoso, especialmente em linguagens que utilizam ponteiros. Resumindo, podemos dizer então que a utilização de apelidos afeta de maneira negativa a confiabilidade, ou seja, diminui a confiabilidade de uma linguagem.

3. Confiabilidade [05] A última característica que afeta a confiabilidade é, mais uma vez, a legibilidade e a facilidade de escrita. Em termos gerais, quanto mais fácil for escrever um programa, maiores serão as chances do programa estar correto (mais confiável). A legibilidade é importante também, tanto na fase de escrita como, principalmente, na fase de manutenção do programa durante seu ciclo de vida. Neste sentido, Sebesta (2011) destaca que programas difíceis de ler são também difíceis de escrever e de modificar.

4. Custo [01] O último critério de avaliação de linguagens de programação é o custo. De acordo com Sebesta (2011), o custo total de utilização de uma linguagem depende principalmente de seis fatores: 1. Custo de treinamento dos programadores: Este custo está diretamente relacionado com a simplicidade e a ortogonalidade. Como regra geral, podemos pensar que quanto mais poderosa é uma linguagem, maior será a dificuldade de aprendê-la, e consequentemente, maior será o custo de treinamento dos programadores.

4. Custo [02] 2. Custo de escrever programas: Este custo está diretamente relacionado com a facilidade de escrita. O objetivo e desejo de se desenvolver linguagens de alto nível está relacionado principalmente com a diminuição do custo de se escrever programas em determinada linguagem. 3. Custo de compilar programas: Como veremos mais adiante, compilar um programa significa traduzir um programa escrito em uma linguagem de alto nível para a linguagem de máquina. O problema é que alguns compiladores são muito caros. Geralmente, com o desenvolvimento de novas gerações de um mesmo compilador, este custo vai diminuindo.

4. Custo [03] 4. Custo de executar programas: Este custo está diretamente relacionado com o projeto da linguagem. Um exemplo dado por Sebesta (2011) que ilustra este tipo de custo é a execução de um código que faça a verificação de tipos durante o tempo de execução, o que acarretará em uma execução lenta. Por este motivo, durante o projeto das linguagens atuais, muita atenção é dada ao projeto do compilador, no sentido em que este crie um código otimizado, resultando em um compromisso entre o tamanho do código criado e a velocidade de execução do programa.

4. Custo [04] 5. Custo de implementação da linguagem: Se a implementação de uma linguagem após o seu projeto necessitar de um sistema de compilação / interpretação caro, ou necessitar que seus programas sejam executados em plataformas caras (hardwares poderosos), esta será uma característica que influenciará muito na divulgação da linguagem. Na visão se Sebesta (2011), um dos motivos da rápida aceitação da linguagem Java foi o fato de ter sistemas de compilação / interpretação gratuitos logo após a disponibilização de seu projeto ao público.

4. Custo [05] 6. Custo de confiabilidade: Se um programa tiver baixa confiabilidade e travar durante a sua execução em um sistema crítico (por exemplo, sistemas de controle de usinas, sistemas de controle de aeronaves, aparelhos médicos, etc), isto resultará em um custo proibitivo. Mesmo em sistemas não críticos, falhas recorrentes de programas de baixa confiabilidade podem apresentar custos altos ao longo do tempo.

Outros critérios de avaliação de linguagens Além dos critérios já destacados, Sebesta (2011) destaca mais dois critérios: a portabilidade e a generalidade. A portabilidade representa a facilidade que um programa tem em ser implementado em múltiplas plataformas de hardware. Isso exige principalmente um esforço de padronização da linguagem. A generalidade representa a facilidade de uma linguagem de se adaptar a várias gamas de aplicações diferentes. Isso vai exigir que a linguagem seja bastante completa e bem definida (padronizada).

BIBLIOGRAFIA CONSULTADA CARVALHO, Cedric Luiz de. Sistemas especialistas: inteligência artificial. Instituto de Informática UFG. 2006. Disponível em: <http://www.portal.inf.ufg.br/ ~cedric/ia/grad/ai-aula11-istemas%20especialistas.pdf>. Acesso em: 18 ago. 2015. FORBELLONE, André Luiz Villar. Lógica de programação: a construção de algoritmos e estruturas de dados. 3.ed. São Paulo: Pearson Prentice Hall, 2005. SEBESTA, Robert. W. Conceitos de linguagens de programação. 9. ed. Porto Alegre: Bookman, 2011.