Linguagens de Programação 10 Avaliação de Linguagens Vítor E. Silva Souza (vitorsouza@inf.ufes.br) http://www.inf.ufes.br/ ~ vitorsouza Departamento de Informática Centro Tecnológico Universidade Federal do Espírito Santo Este obra foi licenciada sob uma Licença Creative Commons Atribuição 3.0 Não Adaptada.
Conteúdo do curso Introdução; Amarrações; Valores e tipos de dados; Variáveis e constantes; Expressões e comandos; Modularização; Polimorfismo; Exceções; Concorrência; Avaliação de linguagens. Estes slides foram baseados em: Slides do prof. Flávio M. Varejão; Livro Linguagens de Programação Conceitos e Técnicas (Varejão); Livro Linguagens de Programação Princípios e Paradigmas, 2a edição (Tucker & Noonan). Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 2
Linguagens de programação Fundamentais para o profissional de computação; Envolvida em diversas etapas do processo de software: Viabilidade de um projeto; Estimativa de tempo e custo; Definição do paradigma de desenvolvimento; etc. Conhecimento dos conceitos teóricos: Maior habilidade para resolver problemas; Mais facilidade para aprender novas LPs; Maior capacidade de escolher a LP para um projeto. Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 3
Critérios de comparação Dificuldade para definir: Inúmeras possibilidades; Granularidade; Dependência do contexto; Opiniões divergentes; Etc. Isso se aplica mesmo a essa aula (visão do professor sobre o assunto) e ao capítulo do livro do Flávio (visão do autor sobre o assunto)! Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 4
Alguns critérios gerais Aplicabilidade; Confiabilidade; Facilidade de aprendizado; Eficiência; Portabilidade; Suporte ao método de projeto; Evolutibilidade; Reusabilidade; Integração com outros softwares; Custo. Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 5
Alguns critérios específicos Escopo; Expressões e comandos; Tipos primitivos e compostos; Gerenciamento de memória; Persistência de dados; Passagem de parâmetros; Encapsulamento e proteção; Sistema de tipos; Verificação de tipos; Polimorfismo; Exceções; Concorrência. Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 6
Comparações entre LPs Dificuldade para realizar; Não existe uma LP melhor que outra: Depende do contexto de uso; Depende do critério avaliado; Comparações refletem visão do autor. Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 7
Critérios gerais C C++ Java Aplicabilidade Sim Sim Parcial Confiabilidade Não Não Sim Aprendizado Não Não Não Eficiência Sim Sim Parcial Portabilidade Não Não Sim Método de projeto Estruturado Estruturado e OO OO Evolutibilidade Não Parcial Sim Reusabilidade Parcial Sim Sim Integração Sim Sim Parcial Custo Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 8
Critérios gerais C C++ Java Aplicabilidade Sim Sim Parcial Confiabilidade Não Não Sim Aprendizado C Não e C++ são linguagens Não de propósito Não geral. Eficiência Java, contudo, não oferece recursos para Sim Sim Parcial controlar diretamente o hardware, obrigando Portabilidade Não o programador a Não usar métodos nativos. Sim Método de projeto Estruturado Estruturado e OO Evolutibilidade Não Parcial Sim Reusabilidade Parcial Sim Sim Integração Sim Sim Parcial OO Custo Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 9
Critérios gerais C C++ Java Aplicabilidade Sim Sim Parcial Confiabilidade Não Não Sim Aprendizado Não Não Não C e C++ possuem inúmeras características Eficiência estimuladoras Sim de erros Simem programação Parcial (ex.: Portabilidade desvio Não incondicional Não irrestrito, aritmética Sim de ponteiros, etc.). Java centraliza certas Método de Estruturado operações para Estruturado evitar problemas e (ex.: OO projeto OO verificação de índices de vetor, coleta de lixo, Evolutibilidade Não Parcial etc.) Sim Reusabilidade Parcial Sim Sim Integração Sim Sim Parcial Custo Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 10
Critérios gerais C C++ Java Aplicabilidade Sim Sim Parcial Confiabilidade Não Não Sim Aprendizado Não Não! Não Eficiência Sim Sim Parcial Embora C e Java sejam mais fáceis de Portabilidade aprender Não que C++, Não nenhuma das LPs Simatende Método de Estruturado ao critério. C exige Estruturado uso massivo e de ponteiros, OO projeto que não é um conceito OO trivial. Java apresenta Evolutibilidade muitos conceitos, nem sempre ortogonais. Não Em especial as Parcial versões mais recentes Sim Reusabilidade Parcial adicionaram bastante Sim complexidade Sim(ex.: Integração tipos genéricos, closures, etc.). Sim Sim Parcial Custo Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 11
Critérios gerais C C++ Java Aplicabilidade Sim Sim Parcial Confiabilidade Não Não Sim Aprendizado Não Não Não Eficiência Sim Sim Parcial Portabilidade Não Não Sim O critério toma como base programadores Método de Estruturado muito experientes. Estruturado Neste caso, e C permite OO um projeto controle mais fino e é OOportanto mais eficiente. Evolutibilidade C++ Não vai na mesma Parcial linha. Java assume Sim o controle de diversos aspectos, adicionando Reusabilidade mecanismos Parcial de verificação, Sim coleta de Simlixo, Integração Sim etc. que diminuem Sim a eficiência. Parcial Custo Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 12
Critérios gerais C C++ Java Aplicabilidade Sim Sim Parcial Confiabilidade Não Não Sim Aprendizado Não Não Não Eficiência Sim Sim Parcial Portabilidade Não Não Sim Método de Estruturado Estruturado e OO projeto Embora C e C++ sejam OO padronizadas pela Evolutibilidade ANSI, é comum compiladores diferentes Não Parcial Sim terem características diferentes. Java, por Reusabilidade outro Parciallado, tem a portabilidade Sim como Simuma Integração característica fundamental da LP. Sim Sim Parcial Custo Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 13
Critérios gerais C C++ Java Aplicabilidade Sim Sim Parcial Confiabilidade Não Não Sim Aprendizado Não Não Não Eficiência Sim Sim Parcial Portabilidade Não Não Sim Método de projeto Estruturado Estruturado e OO OO Evolutibilidade Não Parcial Sim Esse critério depende da escolha do Reusabilidade Parcial Sim Sim paradigma adotado no projeto. Contudo, cada Integração vez Sim mais o paradigma SimOO vem sendo Parcial adotado Custo em projetos de sistemas de informação. Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 14
Critérios gerais C C++ Java Aplicabilidade Sim Sim Parcial Confiabilidade Não Não Sim Aprendizado Não Não Não Eficiência Sim Sim Parcial Portabilidade Não Não Sim Método de projeto Estruturado Estruturado e OO OO Evolutibilidade Não Parcial Sim Reusabilidade C Parcial possui características Sim que permitem Simcódigo Integração ilegível Sim e difícil de manter. Sim C++ melhora Parcialesse aspecto quando a orientação a objetos é Custo usada (estímulo ao encapsulamento e abstração). Java só admite programação OO e ainda oferece estímulo para construção de código bem documentado (ex.: JavaDoc). Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 15
Critérios gerais C C++ Java Aplicabilidade Sim Sim Parcial Confiabilidade Não Não Sim Aprendizado Não Não Não Eficiência C Sim oferece apenas reuso Sim de funções, Parcial tipos e Portabilidade variáveis Não distribuídas Nãoem bibliotecas. Sim C++ e Java oferecem o conceito de classes e Método de Estruturado possuem mecanismo Estruturado de e pacotes. OOO projeto OO polimorfismo universal também auxilia na Evolutibilidade criação Não de código Parcial reutilizável e frameworks. Sim Reusabilidade Parcial Sim Sim Integração Sim Sim Parcial Custo Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 16
Critérios gerais C C++ Java Aplicabilidade Sim Sim Parcial Confiabilidade Não Não Sim Aprendizado Não Não Não Eficiência Sim Sim Parcial Portabilidade Não Não Sim Método de Estruturado Estruturado e OO C e C++ podem invocar código compilado por projeto OO qualquer LP. Java tem que recorrer ao Evolutibilidade mecanismo Não JNI (Java Parcial Native Interface), Sim que integra com C/C++ apenas. Reusabilidade Parcial Sim Sim Integração Sim Sim Parcial Custo Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 17
Critérios gerais C C++ Java Aplicabilidade Sim Sim Parcial Confiabilidade Não Não Sim Aprendizado Não Não Não Eficiência Sim Sim Parcial Portabilidade Não Não Sim Método de Estruturado Estruturado e OO projeto C e C++ são de OO domínio público. Java Evolutibilidade pertence à Oracle, porém é liberada Não Parcial Sim gratuitamente. Existem inúmeras s Reusabilidade Parcial gratuitas e pagas. Sim escolha Sim da Integração Sim equipe de desenvolvimento. Sim Parcial Custo Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 18
Critérios específicos C C++ Java Escopo Sim Sim Sim Expressões e comandos Sim Sim Sim Tipos primitivos e compostos Gerenciamento de memória Sim Sim Sim Programador Programador Sistema Persistência dos dados Biblioteca de funções Biblioteca de classes e funções JDBC, biblioteca de classes, serialização Passagem de parâmetros Lista variável e por valor Lista variável, default, por valor e por referência Lista variável, por valor e por cópia de referência Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 19
Critérios específicos C C++ Java Escopo Sim Sim Sim Expressões e comandos Tipos primitivos e compostos As Sim três LPs requerem Sim a definição explícita Sim de entidades, associando-as a um escopo de Sim visibilidade. Há Sim pequenas diferenças. Sim Gerenciamento de memória Programador Programador Sistema Persistência dos dados Biblioteca de funções Biblioteca de classes e funções JDBC, biblioteca de classes, serialização Passagem de parâmetros Lista variável e por valor Lista variável, default, por valor e por referência Lista variável, por valor e por cópia de referência Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 20
Critérios específicos C C++ Java Escopo Sim Sim Sim Expressões e comandos Tipos primitivos e compostos Sim Sim Sim Todas Sim oferecem uma Sim ampla variedade Sim de expressões e comandos. Gerenciamento de memória Programador Programador Sistema Persistência dos dados Biblioteca de funções Biblioteca de classes e funções JDBC, biblioteca de classes, serialização Passagem de parâmetros Lista variável e por valor Lista variável, default, por valor e por referência Lista variável, por valor e por cópia de referência Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 21
Critérios específicos C C++ Java Escopo Sim Sim Sim Expressões e comandos Sim Sim Sim Tipos primitivos e compostos Gerenciamento de memória Persistência dos dados Sim Sim Sim Todas oferecem ampla variedade de tipos Programador primitivos (mas Programador C não oferece booleano) Sistema e compostos (mas nenhuma oferece conjunto Biblioteca potência). de Recentemente, Biblioteca de Java 8 JDBC, incluiu biblioteca o tipo funções função na linguagem classes e (vide closures). de classes, funções serialização Passagem de parâmetros Lista variável e por valor Lista variável, default, por valor e por referência Lista variável, por valor e por cópia de referência Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 22
Critérios específicos C C++ Java Escopo Sim Sim Sim Expressões e comandos Sim Sim Sim Tipos primitivos e compostos Gerenciamento de memória Persistência dos dados Sim Sim Sim Programador Programador Sistema Biblioteca C/C++ deixam a Biblioteca cargo do de programador. JDBC, biblioteca Java funções classes e de classes, utiliza coletor de lixo. funções serialização Passagem de parâmetros Lista variável e por valor Lista variável, default, por valor e por referência Lista variável, por valor e por cópia de referência Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 23
Critérios específicos C C++ Java Escopo Sim Sim Sim Expressões e comandos Tipos primitivos e compostos Gerenciamento de memória Persistência dos dados Passagem de parâmetros Sim Sim Sim C/C++ oferecem funções de I/O, mas deixam persistência a cargo do programador. Não Sim Sim Sim existe padrão para interface com BD. Java possui serialização e padronizou interface com Programador BD no JDBC, além Programador de ter operações Sistema de I/O. Biblioteca de funções Lista variável e por valor Biblioteca de classes e funções Lista variável, default, por valor e por referência JDBC, biblioteca de classes, serialização Lista variável, por valor e por cópia de referência Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 24
Critérios específicos C C++ Java Escopo Sim Sim Sim Expressões e comandos Sim Sim Sim Tipos primitivos e compostos Gerenciamento de memória Persistência dos dados Sim Sim Sim Programador Programador Sistema C usa apenas passagem por valor, obrigando o uso de ponteiros em diversas ocasiões. C++ Biblioteca de Biblioteca de JDBC, biblioteca oferece funçõeso maior leque classes de e opções. de Java classes, incluiu varargs funções na versão 5. serialização Passagem de parâmetros Lista variável e por valor Lista variável, default, por valor e por referência Lista variável, por valor e por cópia de referência Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 25
Critérios específicos Encapsulamento e proteção C C++ Java Parcial Sim Sim Sistema de tipos Não Parcial Sim Verificação de tipos Polimorfismo Estática Estática / Dinâmica Coerção e sobrecarga Todos Estática / Dinâmica Todos Exceções Não Parcial Sim Concorrência Não (biblioteca de funções) Não (biblioteca de funções) Sim Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 26
Critérios específicos C C++ Java Encapsulamento e proteção Parcial Sim Sim Sistema de tipos C oferece Não apenas encapsulamento Parcial de Simdados. Versões recentes permitem ocultamento com Verificação de declaração Estática (.h) & Estática definição / (.c). Java Estática e C++ / tipos oferecem mecanismo Dinâmica de classes e Dinâmica pacotes. Polimorfismo Coerção e sobrecarga Todos Todos Exceções Não Parcial Sim Concorrência Não (biblioteca de funções) Não (biblioteca de funções) Sim Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 27
Critérios específicos Encapsulamento e proteção C C++ Java Parcial Sim Sim Sistema de tipos Não Parcial Sim Verificação de Estática Em C, diversos Estática mecanismos / (ex.: Estática uniões / tipos livres, coerções Dinâmica e aritmética de ponteiros) Dinâmica permitem violação do sistema de tipos. C++ Polimorfismo Coerção e Todos Todos sobrecarga herda isso, mas possui sistema de tipos mais rigoroso se usado em sua forma OO. Java Exceções possui Não um sistema Parcial de tipos bastante Sim rigoroso. Concorrência Não (biblioteca de funções) Não (biblioteca de funções) Sim Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 28
Critérios específicos Encapsulamento e proteção C C++ Java Parcial Sim Sim Sistema de tipos Não Parcial Sim Verificação de tipos Estática Estática / Dinâmica Estática / Dinâmica Polimorfismo Coerção e Todos Todos Todas as verificações de C são estáticas. C++ sobrecarga e Java fazem algumas verificações dinâmicas Exceções (ex.: Nãoamarração tardia, Parcialverificação de Simíndice de vetor). Concorrência Não (biblioteca de funções) Não (biblioteca de funções) Sim Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 29
Critérios específicos Encapsulamento e proteção C C++ Java Parcial Sim Sim Sistema de tipos Não Parcial Sim Verificação de tipos Polimorfismo Estática Estática / Dinâmica Coerção e sobrecarga Todos Estática / Dinâmica Todos Exceções Não Parcial Sim C não possui polimorfismo paramétrico ou de inclusão. C++ e Java possuem todos, porém Concorrência Não Java (biblioteca não permite Não sobrescrita (biblioteca de operadores. Sim de funções) de funções) Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 30
Critérios específicos Encapsulamento e proteção C C++ Java Parcial Sim Sim Sistema de tipos Não Parcial Sim Verificação de tipos Polimorfismo Estática Estática / Estática / C não oferece. C++ Dinâmica oferece, mas Dinâmica não obriga seu uso. Java oferece um sistema bastante Coerção e Todos Todos sobrecarga rigoroso de tratamento de exceções. Exceções Não Parcial Sim Concorrência Não (biblioteca de funções) Não (biblioteca de funções) Sim Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 31
Critérios específicos Encapsulamento e proteção C C++ Java Parcial Sim Sim Sistema de tipos Não Parcial Sim Verificação de tipos Estática Estática / Dinâmica Estática / Dinâmica Polimorfismo Coerção e Todos Todos sobrecarga Java oferece recursos nativos para exclusão Exceções mútua Não (synchronized) Parcial e oferece threads Sim em sua API básica. Concorrência Não (biblioteca de funções) Não (biblioteca de funções) Sim Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 32
Procure saber Vários autores já fizeram comparações entre LPs; Procure saber: Algumas referências no livro do Flávio; Google Scholar, ACM DL, IEEE Xplorer, SpringerLink, etc. Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 33
http://nemo.inf.ufes.br/ Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 34