Você está na página 1de 34

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; • Modularização;
• Amarrações; • Polimorfismo;
• Valores e tipos de dados; • Exceções;
• Variáveis e constantes; • Concorrência;
• Expressões e comandos; • 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


Comparação entre C, C++ e Java
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 OO

Evolutibilidade Não Parcial Sim


Reusabilidade Parcial Sim Sim
Integração Sim Sim Parcial
Custo Depende da Depende da Depende da
ferramenta ferramenta ferramenta

Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 8


Comparação entre C, C++ e Java
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 geral.
Não
Java, contudo, não oferece recursos para
Eficiência Sim Sim Parcial
controlar diretamente o hardware, obrigando
Portabilidade o programador a Não
Não usar métodos nativos.
Sim
Método de Estruturado Estruturado e OO
projeto OO

Evolutibilidade Não Parcial Sim


Reusabilidade Parcial Sim Sim
Integração Sim Sim Parcial
Custo Depende da Depende da Depende da
ferramenta ferramenta ferramenta

Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 9


Comparação entre C, C++ e Java
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 Sim
estimuladoras Simem programação
de erros Parcial(ex.:
Portabilidade desvio
Não incondicionalNãoirrestrito, aritmética
Sim de
ponteiros, etc.). Java centraliza certas
Método de Estruturado Estruturado
operações para e
evitar problemas OO
(ex.:
projeto OO
verificação de índices de vetor, coleta de lixo,
Evolutibilidade Não etc.)
Parcial Sim
Reusabilidade Parcial Sim Sim
Integração Sim Sim Parcial
Custo Depende da Depende da Depende da
ferramenta ferramenta ferramenta

Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 10


Comparação entre C, C++ e Java
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 Não
aprender que C++, Não
nenhuma das LPsSim atende
Método de ao critério. C exige
Estruturado uso massivo
Estruturado e de ponteiros,
OO
projeto que não é um conceito OO trivial. Java apresenta
muitos conceitos, nem sempre ortogonais.
Evolutibilidade Não
Em especial asParcial Sim
versões mais recentes
Reusabilidade adicionaram bastante
Parcial Sim complexidadeSim (ex.:
tipos genéricos, closures, etc.).
Integração Sim Sim Parcial
Custo Depende da Depende da Depende da
ferramenta ferramenta ferramenta

Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 11


Comparação entre C, C++ e Java
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 Estruturado
muito experientes. e
Neste caso, OO um
C permite
projeto controle mais fino e éOOportanto mais eficiente.
Evolutibilidade C++
Não vai na mesma linha. Java assume
Parcial Sim o
controle de diversos aspectos, adicionando
Reusabilidade Parcial
mecanismos Sim
de verificação, Simlixo,
coleta de
Integração Sim etc. que diminuem
Sim a eficiência.
Parcial
Custo Depende da Depende da Depende da
ferramenta ferramenta ferramenta

Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 12


Comparação entre C, C++ e Java
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
ANSI, é comum compiladores diferentes
Evolutibilidade Não Parcial Sim
terem características diferentes. Java, por
Reusabilidade outro
Parciallado, tem a portabilidade
Sim comoSimuma
Integração Sim
característica Sim
fundamental daParcial
LP.

Custo Depende da Depende da Depende da


ferramenta ferramenta ferramenta

Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 13


Comparação entre C, C++ e Java
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 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 vezSim
mais o paradigma OO vem sendo
Sim adotado
Parcial
em projetos de sistemas de informação.
Custo Depende da Depende da Depende da
ferramenta ferramenta ferramenta

Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 14


Comparação entre C, C++ e Java
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 OO

Evolutibilidade Não Parcial Sim


Reusabilidade C Parcial
possui características Sim que permitem Sim
código
Integração ilegível
Sim e difícil de manter. Sim C++ melhora
Parcialesse
aspecto quando a orientação a objetos é
Custo Depende da Depende da Depende da
usada
ferramenta (estímulo ao
ferramenta encapsulamento e
ferramenta
abstração). Java só admite programação OO e
ainda oferece estímulo para construção de
Outubro 2014
código bem documentado (ex.: JavaDoc). 15
Linguagens de Programação - Avaliação de Linguagens
Comparação entre C, C++ e Java
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, tipos e
Parcial
Portabilidade variáveis
Não distribuídas
Nãoem bibliotecas.Sim
C++ e
Java oferecem o conceito de classes e
Método de Estruturado Estruturado de
possuem mecanismo 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 Depende da Depende da Depende da
ferramenta ferramenta ferramenta

Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 16


Comparação entre C, C++ e Java
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
C e C++ podemEstruturado e
invocar código OO
compilado por
projeto OO
qualquer LP. Java tem que recorrer ao
Evolutibilidade mecanismo
Não JNI (Java Native Interface),
Parcial Sim que
integra com C/C++ apenas.
Reusabilidade Parcial Sim Sim
Integração Sim Sim Parcial
Custo Depende da Depende da Depende da
ferramenta ferramenta ferramenta

Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 17


Comparação entre C, C++ e Java
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
pertence à Oracle, porém é liberada
Evolutibilidade Não Parcial Sim
gratuitamente. Existem inúmeras ferramentas
Reusabilidade gratuitas e pagas. Sim
Parcial Depende da escolha
Sim da
Integração Sim
equipe de desenvolvimento.
Sim Parcial
Custo Depende da Depende da Depende da
ferramenta ferramenta ferramenta

Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 18


Comparação entre C, C++ e Java
Critérios C C++ Java
específicos
Escopo Sim Sim Sim
Expressões e Sim Sim Sim
comandos
Tipos primitivos Sim Sim Sim
e compostos
Gerenciamento Programador Programador Sistema
de memória
Persistência dos Biblioteca de Biblioteca de JDBC, biblioteca
dados funções classes e de classes,
funções serialização
Passagem de Lista variável e Lista variável, Lista variável,
parâmetros por valor default, por por valor e por
valor e por cópia de
referência referência

Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 19


Comparação entre C, C++ e Java
Critérios C C++ Java
específicos
Escopo Sim Sim Sim
Expressões e As Sim
três LPs requerem Sim Sim de
a definição explícita
comandos
entidades, associando-as a um escopo de
Tipos primitivos visibilidade. Há Sim
Sim pequenas diferenças.
Sim
e compostos
Gerenciamento Programador Programador Sistema
de memória
Persistência dos Biblioteca de Biblioteca de JDBC, biblioteca
dados funções classes e de classes,
funções serialização
Passagem de Lista variável e Lista variável, Lista variável,
parâmetros por valor default, por por valor e por
valor e por cópia de
referência referência

Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 20


Comparação entre C, C++ e Java
Critérios C C++ Java
específicos
Escopo Sim Sim Sim
Expressões e Sim Sim Sim
comandos
Tipos primitivos Todas
Sim oferecem uma
Sim ampla variedade
Sim de
e compostos expressões e comandos.
Gerenciamento Programador Programador Sistema
de memória
Persistência dos Biblioteca de Biblioteca de JDBC, biblioteca
dados funções classes e de classes,
funções serialização
Passagem de Lista variável e Lista variável, Lista variável,
parâmetros por valor default, por por valor e por
valor e por cópia de
referência referência

Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 21


Comparação entre C, C++ e Java
Critérios C C++ Java
específicos
Escopo Sim Sim Sim
Expressões e Sim Sim Sim
comandos
Tipos Sim Sim Sim
primitivos e
compostos Todas oferecem ampla variedade de tipos
Gerenciamento Programador
primitivos (mas Programador Sistema e
C não oferece booleano)
de memória compostos (mas nenhuma oferece conjunto
Persistência dos potência).
Biblioteca deRecentemente, Java 8
Biblioteca de incluiu
JDBC, o tipo
biblioteca
dados função na linguagem
funções classes e (vide closures).
de classes,
funções serialização
Passagem de Lista variável e Lista variável, Lista variável,
parâmetros por valor default, por por valor e por
valor e por cópia de
referência referência
Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 22
Comparação entre C, C++ e Java
Critérios C C++ Java
específicos
Escopo Sim Sim Sim
Expressões e Sim Sim Sim
comandos
Tipos primitivos Sim Sim Sim
e compostos
Gerenciamento Programador Programador Sistema
de memória
Persistência dos Biblioteca de
C/C++ deixam aBiblioteca
cargo dodeprogramador.
JDBC, biblioteca
Java
dados funções
utilizaclasses
coletore de lixo. de classes,
funções serialização
Passagem de Lista variável e Lista variável, Lista variável,
parâmetros por valor default, por por valor e por
valor e por cópia de
referência referência

Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 23


Comparação entre C, C++ e Java
Critérios C C++ Java
específicos
Escopo Sim Sim Sim
Expressões e Sim Sim Sim
comandos C/C++ oferecem funções de I/O, mas deixam
Tipos primitivos
persistência
Sim
a cargo
Sim
do programador.
Sim
Não
e compostos existe padrão para interface com BD. Java
possui serialização e padronizou interface com
Gerenciamento Programador
BD no JDBC, alémProgramador Sistema
de ter operações de I/O.
de memória
Persistência Biblioteca de Biblioteca de JDBC,
dos dados funções classes e biblioteca de
funções classes,
serialização
Passagem de Lista variável e Lista variável, Lista variável,
parâmetros por valor default, por por valor e por
valor e por cópia de
referência referência
Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 24
Comparação entre C, C++ e Java
Critérios C C++ Java
específicos
Escopo Sim Sim Sim
Expressões e Sim Sim Sim
comandos
Tipos primitivos Sim Sim Sim
e compostos
Gerenciamento Programador Programador Sistema
de memória C usa apenas passagem por valor, obrigando o
uso de ponteiros em diversas ocasiões. C++
Persistência dos Biblioteca de Biblioteca de JDBC, biblioteca
dados oferece
funções o maior leque de
classes eopções. Java
de incluiu
classes,
varargs na versão 5. serialização
funções
Passagem de Lista variável e Lista variável, Lista variável,
parâmetros por valor default, por por valor e por
valor e por cópia de
referência referência

Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 25


Comparação entre C, C++ e Java
Critérios C C++ Java
específicos
Encapsulamento Parcial Sim Sim
e proteção
Sistema de tipos Não Parcial Sim

Verificação de Estática Estática / Estática /


tipos Dinâmica Dinâmica
Polimorfismo Coerção e Todos Todos
sobrecarga
Exceções Não Parcial Sim

Concorrência Não (biblioteca Não (biblioteca Sim


de funções) de funções)

Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 26


Comparação entre C, C++ e Java
Critérios C C++ Java
específicos
Encapsulamento Parcial Sim Sim
e proteção
Sistema de tipos C oferece
Não apenas encapsulamento
Parcial de dados.
Sim
Versões recentes permitem ocultamento com
Verificação de declaração
Estática (.h) &Estática
definição
/ (.c). Java e C++
Estática /
tipos oferecem mecanismo de classes eDinâmica
Dinâmica pacotes.
Polimorfismo Coerção e Todos Todos
sobrecarga
Exceções Não Parcial Sim

Concorrência Não (biblioteca Não (biblioteca Sim


de funções) de funções)

Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 27


Comparação entre C, C++ e Java
Critérios C C++ Java
específicos
Encapsulamento Parcial Sim Sim
e proteção
Sistema de Não Parcial Sim
tipos
Verificação de Em C, diversos Estática
Estática mecanismos
/ (ex.: uniões
Estática /
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
herda isso,
sobrecarga mas possui sistema de tipos mais
rigoroso se usado em sua forma OO. Java
Exceções Não um sistema Parcial
possui de tipos bastante Sim
rigoroso.

Concorrência Não (biblioteca Não (biblioteca Sim


de funções) de funções)

Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 28


Comparação entre C, C++ e Java
Critérios C C++ Java
específicos
Encapsulamento Parcial Sim Sim
e proteção
Sistema de tipos Não Parcial Sim

Verificação de Estática Estática / Estática /


tipos Dinâmica 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 Nãoamarração tardia,
(ex.: Parcial verificação de
Sim
índice
de vetor).

Concorrência Não (biblioteca Não (biblioteca Sim


de funções) de funções)

Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 29


Comparação entre C, C++ e Java
Critérios C C++ Java
específicos
Encapsulamento Parcial Sim Sim
e proteção
Sistema de tipos Não Parcial Sim

Verificação de Estática Estática / Estática /


tipos Dinâmica Dinâmica
Polimorfismo Coerção e Todos Todos
sobrecarga
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 Java
Não não permite
(biblioteca Não sobrescrita
(biblioteca de operadores.
Sim
de funções) de funções)

Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 30


Comparação entre C, C++ e Java
Critérios C C++ Java
específicos
Encapsulamento Parcial Sim Sim
e proteção
Sistema de tipos Não Parcial Sim

Verificação de Estática Estática / Estática /


tipos C não oferece. C++ oferece, mas Dinâmica
Dinâmica não obriga
seu uso. Java oferece um sistema bastante
Polimorfismo Coerção e Todos Todos
rigoroso
sobrecarga de tratamento de exceções.
Exceções Não Parcial Sim

Concorrência Não (biblioteca Não (biblioteca Sim


de funções) de funções)

Outubro 2014 Linguagens de Programação - Avaliação de Linguagens 31


Comparação entre C, C++ e Java
Critérios C C++ Java
específicos
Encapsulamento Parcial Sim Sim
e proteção
Sistema de tipos Não Parcial Sim

Verificação de Estática Estática / Estática /


tipos Dinâmica Dinâmica
Polimorfismo Coerção e Todos Todos
sobrecarga
Java oferece recursos nativos para exclusão
Exceções Não (synchronized)
mútua Parcial Sim em
e oferece threads
sua API básica.

Concorrência Não (biblioteca Não (biblioteca Sim


de funções) de funções)

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