Buscar

lista-de-exercicios-cap1-robert-w-sebesta-plp

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 10 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 10 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 10 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Lista de exercícios Cap 1 - PLP - Robert W. Sebesta
1. Por que é útil para um programador ter alguma experiência no projeto de linguagens, mesmo 
que ele nunca projete uma linguagem de programação? 
R: Alguns dos critérios para aprender paradigmas de linguagens de programação: 
• Capacidade aumentada para expressar ideias: As linguagens de programação usadas podem 
impor restrições no que diz respeito a abstração de idéias, estruturas de controle e de dados, 
logo o conhecimento mais amplo em linguagens faz com o programador não apresente tanta 
dificuldade na elaboração das idéias de construção do software. 
• Embasamento para escolher linguagens adequadas: linguagens são como ferramentas, logo 
devem ser escolhidas de acordo com a necessidade do projeto vigente.
• Habilidade aumentada para aprender novas linguagens: Quando se aprende os conceitos dos 
paradigmas por traz de uma linguagem, fica muito mais fácil entender linguagens que utilizem 
aquele paradigma. 
• Melhor entendimento da importância da implementação: os conceitos de linguagens de 
programação podem levar a uma pessoa a ter um maior domínio de uma determinada 
linguagem de programação e por sua vez da implementação dela e de como usar seus recursos 
da melhor maneira possível.
• Melhor uso de linguagens já conhecidas e consolidadas: os conceitos de linguagens de 
programação podem levar a uma pessoa a saber mais sobre uma linguagem que ela já utilize. 
• Avanço geral da computação: Uma determinada linguagem pode acabar sendo melhor que 
outra, mas não apresentar muita notoriedade. Em alguns casos uma determinada linguagem 
pode ser baseada em uma mais antiga, trazendo consigo aspectos antigos e novos.
2. Como o conhecimento de linguagens de programação pode beneficiar toda a comunidade da 
computação?
R: Uma linguagem de programação poderá X poderá ganhar notoriedade em face uma linguagem 
de programação Y com base em possíveis “falhas” da X. Ou seja, a comunidade poderá ganhar 
novas linguagens que substituem aquelas que são tidas como “ruins” ou até mesmo criar novas 
para atingir objetivos específicos (suponha que Y é uma linguagem boa, mas não possui recursos 
web, uma nova linguagem W poderá ser construída com base em Y e mais outros elementos para 
preencher a lacuna de linguagem para web). Em suma, a comunidade pode sempre verificar os 
pontos fortes e fracos numa linguagem, criando outras melhores, tomando como base sempre os 
pontos fortes dela (e seu paradigma) e melhorando o que falta.


3. Que linguagem de programação tem dominado a computação científica nos últimos 50 anos?
R: Fortran tem sido muito utilizada no ramo da computação científica, tendo sofrido diversas 
atualizações durante os anos. 


4. Que linguagem de programação tem dominado as aplicações de negócios nos últimos 50 anos?
R: COBOL, uma vez que é considerado com uma excelente linguagem geradora de relatórios. 


5. Que linguagem de programação tem dominado a Inteligência Artificial nos últimos 50 anos?
R: Lisp, uma vez que a linguagem utiliza a notação lambda e também trabalha extensivamente 
com listas e outras estruturas elementares tanto utilizadas em aplicações de inteligência. 


6. Em que linguagem o UNIX é escrito?
R: O sistema Unix foi escrito em linguagem C, em meados de 1970. Denis Ritchie foi o idealizador 
desta linguagem e graças ao sistema Unix ela obteve uma grande fama. Atualmente C é muito 
utilizado em sistemas embarcados. 


7. Qual é a desvantagem de ter muitas características em uma linguagem?
R: Uma linguagem que contenha muitos recursos tenderá a consumir muito processamento ou 
espaço em memória.


8. Como a sobrecarga de operador definida pelo usuário pode prejudicar a legibilidade de um 
programa?
R: Uma sobrecarga de operadores consistente e bem definida poderá deixar o código 
relativamente simples de ser escrito e entendido, mas se for feita de qualquer maneira poderá ter 
consequências desagradáveis. Vamos supor o caso do operador de adição “+”. Se ele for 
permitido para a soma de valores inteiros e flutuantes, isso gerará uma facilidade de compreensão 
e escrita no código, trazendo até certa simplicidade. No entanto se algum usuário tiver a 
possibilidade de usá - lo para quaisquer outras operações, poderá acarretar no não entendimento 
do código por parte de outro desenvolvedor, deixando - o confuso. Se pegarmos por exemplo o 
operador “++”, utilizado pelo C/C++ como operador de incremento de uma unidade 
(principalmente me laços for) e sobrecarregarmos ele para qualquer outra coisa, um outro 
programador C ou C++ poderá não entender o código ao vê - lo sendo usado de uma forma não 
convencional.


9. Cite um exemplo da falta de ortogonalidade no projeto da linguagem C.
R: C apresenta basicamente dois tipos de dados estruturados: vetores e registros (structs). Os 
registros podem ser retornados por funções, no entanto, vetores não podem. C utiliza void para 
indicar a “não existência” de um elemento (ex: uma função tida como void não retorna nenhum 
valor). Neste contexto, uma estrutura pode conter quaisquer tipos de dados, exceto o void ou uma 
estrutura de mesmo tipo. O mesmo ocorre com vetores: eles podem te quaisquer tipos, menos o 
tipo void. Ao utilizar passagem de valores para dentro de uma função ou procedimento, C utiliza a 
técnica de passagem por valor (ou seja, ele passa uma cópia dos dados para a função), no 
entanto, ao passar um vetor, o mesmo é passado como referencia. 


10. Qual linguagem usou a ortogonalidade como um critério de projeto primário?
R: Assembly utilizado pelas mainframes da IBM, principalmente se comparado com os 
minicomputadores VAX.


11. Que sentença de controle primitiva é usada para construir sentenças de controle mais 
complicadas em linguagens que não as têm?
R: Você pode usar vetores e ponteiros para construir sentenças muito mais complexas, como por 
exemplo listas encadeadas, árvores e outros. No caso você poderá utilizar a ideia de vetores e 
ponteiros associados a algum tipo de dado primitivo, como o int, criando assim uma estrutura de 
dados como uma lista que armazena valores inteiros.
12. Que construção de uma linguagem de programação fornece abstração de processos? 
R: A abstração é algo tido como importante pois permite a facilidade de escrita de uma linguagem. 
Um exemplo de abstração pode ser encontrado na construção de uma função (subprograma), a 
fim de resolver algum problema específico nele. Se não fosse possível ter essa abstração, o 
código dessa função teria que ser replicado nos diversos pontos do programa onde ele fosse 
utilizado. 
13. O que significa para um programa ser confiável?
R: Um programa é tido como confiável quando está de acordo com suas especificações em todas 
as condições. Além disso existem basicamente dois pontos que levam um programa ser tido como 
confiável: 
• Verificação de tipos: Um programa executa testes para detectar erros de tipo, tanto em tempo de 
compilação, quanto em tempo de execução.
• Tratamento de exceções: Um programa tem a habilidade de identificar e tratar erros, tomando 
medidas corretivas quando uma falha é encontrada ou uma exceção ocorre.


14. Por que verificar os tipos dos parâmetros de um subprograma é importante?
R: quando a linguagem ou o ambiente em si é incapaz de realizar uma verificação de tipos de 
parâmetros passados a uma função, simplesmente deixando passar qualquer tipo, você poderá 
ter resultados inconsistentes. Por exemplo, se uma função tem em seu cabeçalho (definição da 
função) um parâmetro do tipo int e é passado a ela um tipo float, poderão haver problemas com 
relação aos cálculos feitos para se manter a representação de tal valor. Por exemplo, um int não 
possui representação da parte fracionária, o range de um int tende a ser muito menor que o de um 
float, o que gera um calculo de parte decimal muito defasado e sem nexo. Por fim, se o ambiente 
ou o compilador não é capaz de emitir nem um warning informando tal problema, a depuração 
torna - se praticamenteimpossível.


15. O que são apelidos?
R: Apelidos são espécies de identificadores, geralmente utilizados quando se é possível ter um ou 
manis nomes definidos para acessar a mesma célula de memória. Um apelido por exemplo, pode 
ser definido quando dois ponteiros estão apontando para a mesma variassem.


16. O que é o tratamento de exceções?
R: O tratamento de exceções é a habilidade de um programa de interceptar erros em tempo de 
execução e contorna - los.


17. Por que a legibilidade é importante para a facilidade de escrita?
R: A legibilidade é um dos conceitos mais importantes na hora de se avaliar uma linguagem de 
programação, pois ela compreende justamente a facilidade com que um programa pode ser 
entendido. Durante muito tempo, principalmente antes da década de 70, as linguagens de 
programação estavam mais próximas de “instruções de máquina” que do usuário em si, o que 
tornava a tarefa de construção de softwares algo muito mais complexo de ser feito e 
principalmente aprendido. Após os anos 70 e principalmente após do surgimento da idéias de ciclo 
de vida do software, as linguagens começaram a ter um nível de abstração maior, tornando - se 
mais fáceis de serem escritas, lidas e entendidas. Se uma linguagem é fácil de ser lida e 
entendida, supostamente isso implica que ela é tem um alto nível de abstração, além de ser fácil 
de ser escrita.


18. Como o custo de compiladores para uma linguagem está relacionado ao projeto dela? 
R: Dependendo de como é o projeto da linguagem, o compilador poderá ter que um grande 
número de checagens ou não antes de terminar o processo de compilação. Se a quantidade de 
checagens for muita, então ele poderá acabar tornando-se ineficiente. 
19. Qual tem sido a influência mais forte no projeto de linguagens de programação nos últimos 50 
anos?
R: Arquitetura de computadores, principalmente no que diz respeito a arquitetura de Von 
Neumann.


20. Qual é o nome da categoria de linguagens de programação cuja estrutura é ditada pela 
arquitetura de computadores de von Neumann? 
R: São as linguagens classificadas como Imperativas. Linguagens desse tipo descrevem o 
programa em termos de seus estados, definindo ações que modifiquem tal estado.
21. Que duas deficiências das linguagens de programação foram descobertas como um resultado 
da pesquisa em desenvolvimento de software dos anos 1970?
R: Primeiramente, antes dos anos 1970, as estruturas condicionais usavam muito “goto”, o que 
em muitos casos gerava problemas de legibilidade no código. Um outro problema foi a verificação 
de tipos primitivos.


22. Quais são os três recursos fundamentais de uma linguagem orientada a objetos? 
R: Encapsulamento, herança e polimorfismo.
23. Qual foi a primeira linguagem a oferecer suporte aos três recursos fundamentais da 
programação orientada a objetos? 
R: Smaltalk 
24. Dê um exemplo de dois critérios de projeto de linguagens que estão em conflito direto um com 
o outro.
R: Legibilidade e facilidade de escrita. 


25. Quais são os três métodos gerais de implementar uma linguagem de programação? 
R: compilação, interpretação pura e sistemas híbridos.
26. Qual produz uma execução de programas mais rápida, um compilador ou um interpretador 
puro? 
R: Geralmente os programas compilados tendem a consumir menos tempo de execução. O 
interpretador puro terá que, em tempo de execução, ler as instruções, verifica - las e convertê-las 
a algo que maquina entenda. Já os sistemas híbridos possuem a facilidade de carregar somente 
módulos que são necessários naquele instante (just in time), o que pode reduzir 
consideravelmente o seu custo em relação ao tempo de execução.
27. Que papel a tabela de símbolos tem em um compilador?
R: A tabela de símbolos serve como uma base de dados para o processo de compilação. O 
conteúdo primário na tabela de símbolos são informações de tipo e atributos de cada um dos 
nomes definidos pelo usuário no programa. Essa informação é colocada na tabela pelos 
analisadores léxico e sintático e é usada pelo analisador semântico e pelo gerador de código. 


28. O que faz um ligador?
R: O ligador (ou linker) é um programa de sistema que tem por objetivo coletar programas de 
sistemas e ligá - los aos programas de usuário, criando assim o módulo de carga (também 
conhecido como imagem executável).


29. Por que o gargalo de von Neumann é importante?
R: A “máxima” por trás da arquitetura de Von Neumann é que “a velocidade de conexão entre a 
memória e o processador é o que define a velocidade do computador, isso porque as instruções 
podem ser executadas com mais freqüência do que movidas da memória para o processador.” 
Essa característica é conhecida como “Gargalo de Von Neumann” e é o fator responsável pelas 
pesquisas em computação paralela. A computação paralela por sua vez é uma forma de 
computação onde os vários cálculos que o processador realiza são quebrados em problemas 
menores (cálculos menores) e divididos para serem realizados ao mesmo tempo (ou seja, de 
forma paralela). 


30. Quais são as vantagens de implementar uma linguagem com um interpretador puro? 
R: No modo de interpretação puro, o interpretador executa o código escrito de forma direta, sem a 
necessidade de um processo de compilação ou criação de um sistema intermediário (como o 
bytecode do Java). A medida que o programa vai sendo lido, ele vai sendo executado. Quando 
uma execução termina e o programa é chamado novamente, um novo processo de interpretação 
é realizado. As vantagens desse modelo consistem em: 
• Correções e alterações podem ser realizadas de forma muito mais rápida
• Não há dispêndio do tempo de compilação. 
• Tende a consumir menos memória
Conjunto de Problemas 
1.Você acredita que nossa capacidade de abstração é influenciada por nosso domínio de 
linguagens? Defenda sua opinião. 
R: Em tese, sim. Acredito que a capacidade do programador de conseguir observar um problema 
e abstraí-lo de tal maneira que ele possa enxergar seus módulos, funções, objetos e outros 
elementos é algo que está a parte de qualquer linguagem de programação estando pautada 
puramente na lógica do programador. No entanto, ao codificar a solução, tal poderá ser 
diretamente atingida pela linguagem e por seu paradigma, influenciando em muito o resultado. Por 
exemplo: suponha que um programador queira criar um jogo e para isso opta por usar C. Pelo fato 
de C não dar suporte ao paradigma de OO (Orientação a Objetos), tal programador acabará tendo 
que passar por certos “problemas” que em linguagens de programação com suporte a OO ele não 
teria.
2.Que argumentos você pode dar a favor da ideia de uma única linguagem para todos os 
domínios de programação? 
R: A única vantagem nessa abordagem está na facilidade de conseguir “fazer tudo” utilizando uma 
única linguagem de programação. O programador deverá aprender somente esta linguagem, sua 
plataforma e ambiente de programação.
3.Java usa um símbolo de fechamento de chaves para marcar o término de todas as sentenças 
compostas. Quais são os argumentos a favor e contra essa decisão de projeto?
R: No projeto foi determinado que o símbolo “{“ definiria a abertura de um bloco, enquanto que o 
“}” definiria o fechamento de bloco. Em tese isso tende a deixar a linguagem mais “arrumada”, pois 
permite que quem lê o código saiba quais instruções estão associadas entre si e seus respectivos 
escopos. No entanto, por justamente permitir que seja utilizado “{ }”, um programador poderá 
simplesmente ignorar a indentação do código, deixando - o mais confuso de ser lido e entendido, 
afetando em legibilidade. 
4. Muitas linguagens distinguem entre letras minúsculas e maiúsculas em nomes definidos pelo 
usuário. Quais são as vantagens e desvantagens dessa decisão de projeto? 
R: O uso de caixa baixa e alta na definição dos identificadores pode ser usada para deixar o 
código mais fácil e legível, principalmente quando se utiliza nomes compostos, além de identificar 
se algo faz parte de alguma classe,interface ou biblioteca. Por exemplo, vamos supor os 
seguintes identificadores: “UIView” e “SKSpriteNode”. O “UI” do “UIView" serve para identificar que 
ele faz parte do pacote “UIKit”, responsável por interfaces de usuário; já o “SK" significa que ele 
faz parte do “SpriteKit”, biblioteca responsável por gerenciar os elementos básicos relacionados a 
jogos, como sprites, sons, e animações. Um outro uso de caixa alta seria relacionado ao nome de 
classes e objetos, como por exemplo, cachorro = new Cachorro(). Em suma, linguagens que 
permitem case sensitive, fazem isso visando ampliar a quantidade de identificadores que podem 
ser usados, padronizar o código e facilitar a leitura. 
Um ponto negativo fica com relação as linguagens que não requerem definição de tipo na 
declaração da variável, como por exemplo o Python, onde “varInteiro = 10” é diferente de 
“varinteiro = 10”, 
5. Explique os diferentes aspectos do custo de uma linguagem de programação. 
R: Existem vários pontos a serem levantados na hora de avaliar o custo de uma linguagem de 
programação, a saber:
• Treinamento de pessoal: Uma linguagem de programação requer de treinamento para a sua 
utilização. 
• Escrita de programas: Isso está relacionado a facilidade de escrita da linguagem, a qual 
depende da proximidade com o propósito da aplicação em particular. Ao criar uma linguagem 
de alto nível, seus esforços estão direcionados a criação de software de maneira menos 
custosa.
• Custo de compilação de programas.
• Custo de execução: Dependendo do propósito e de como uma linguagem foi arquitetada, a 
mesma poderá realizar verificações durante o seu tempo de execução, o que elevará o seu 
tempo de execução, mas em contra partida poderá impedir falhas.
• Implementação da linguagem e disponibilidade de compiladores: Uma linguagem chegará 
mais rápido ao público (e poderá ter uma fácil aceitação) se você ao terminar a de concebe-la, 
liberar o compilador dela de forma gratuita, fazendo assim com que várias pessoas possam 
testar tal linguagem e verificar o seu poderio.
• Confiabilidade baixa: se uma linguagem de programação falhar em um ambiente crítico, os 
resultados podem ser catastróficos.
• Manutenção de programas: Isso inclui correção e implementação de novas funcionalidades 
em programas. Se uma linguagem tem uma legibilidade ruim, então haverão problemas ao se 
dar continuidade na vida do software que foi desenvolvido. 
6.Descreva alguns trade‐offs de projeto entre a eficiência e a segurança em alguma linguagem 
que você conheça. 
R: Pegando o exemplo da linguagem Java, ela por exemplo faz uma verificação por tipo de dados 
(e referencias) que fazem parte de um vetor, o que aumenta a segurança, mas ao mesmo tempo 
diminui a sua eficiência. Ainda sobre vetores, o java sempre faz uma verificação sobre a 
quantidade de elementos dentro de um vetor, novamente provendo uma segurança maior em 
relação às falhas de segmentação que poderiam ocorrer, mas tal verificação torna a execução do 
programa mais lenta. Em suma, a linguagem tende a realizar uma série de pequenas verificações 
em relação a vetores, tipos de variáveis e instancias, além de verificar o uso de memória, o que 
acaba gerando uma maior segurança a despeito do programa, mas ao custo de uma certa 
lentidão na execução, principalmente se comparado com outras linguagens, como o C++ por 
exemplo.
7.Quais recursos principais uma linguagem de programação perfeita deveria incluir, em sua 
opinião? 
R: Na minha opinião, poderiam haver alguns fatores que ajudariam, tais como suporte a 
multimídia e principalmente suporte nativo a criação de GUI. Em muitos casos, para você criar 
uma interface gráfica, você tem que recorrer a bibliotecas e frameworks de terceiros. O mesmo 
ocorre com relação a sistemas multimídia. O problema de se implementar tal recurso é o custo de 
compilação (ou interpretação). Um outro problema é justamente o fato da abstração por parte da 
plataforma.
8.A primeira linguagem de programação de alto nível que você aprendeu era implementada com 
um interpretador puro, um sistema de implementação híbrido ou um compilador? (Você não 
necessariamente saberá isso sem pesquisar). 
R: A primeira linguagem de alto nível que aprendi é considerada de alto nível e compilada 
(linguagem C). Seguido de C veio o C++ e o Java, sendo a última implementada através de 
sistema híbrido.
9.Descreva as vantagens e desvantagens de alguns ambientes de programação que você já 
tenha usado. 
R: O Netbeans tem uma vantagem em relação ao Eclipse pelo fato de já conter por padrão um 
form builder (ferramenta para construir GUI arrastando e configurando componentes), mesmo na 
versão mais simples e destinada somente ao Java. A principal desvantagem do ambiente é seu 
alto consumo de memória e processador quando executado. 
Já relacionado ao ambiente de programação para iOS, é o debuger do Xcode, onde nele você tem 
uma completa visualização de todos os componentes(podem ser elementos visuais ou objetos 
criados) e suas relações, consumo de memória, energia, processador e rede em tempo real. A 
grande desvantagem do Xcode é sua integração com o git, simplista demais e muito limitada 
(praticamente inexistente).
10.Como sentenças de declaração de tipos para variáveis simples afetam a legibilidade de uma 
linguagem, considerando que algumas não precisam de tais declarações? 
R: A declaração do tipo da variável ajuda o programador a saber o tipo da variável, evitando erros 
em relação a tipos incompatíveis. 

11.Escreva uma avaliação de alguma linguagem de programação que você conheça, usando os 
critérios descritos neste capítulo. 
R: Pegando o Java como exemplo e considerando os principais pontos: 
• Legibilidade e facilidade de escrita: a linguagem Java herda muitas das características das 
sintaxes de C e C++, o que a torna simples de ler e escrever, principalmente para pessoas já 
habituadas no C ou C++. Um coisa que talvez confunda os programadores no início são os 
wrapers dos tipos primitivos (para basicamente todo tipo primitivo há uma classe relacionada, 
exemplo: tipo int -> Integer (classe); tipo char -> Character (classe)).
• Confiabilidade: Java tem um formalismo muito forte no que diz respeito as suas especificações, 
e também possui um forte sistema de captura e contorno de falhas (error exceptions). 
• Custo: Nos mais diferentes aspectos, podemos pontuar: 
• Treinamento: Pela dimensão do Java, a curva de aprendizagem torna - se muito grande.
• Escrita de programas: Java possui um “apelo" desktop/web (principalmente web), o que o 
torna uma linguagem muito boa para tal propósito. Um lado ruim dele é tentar usá-lo para 
aplicações que envolvam um certo controle de hardware ou SO, onde ele não apresenta 
pontos fortes e acaba por limitar seu uso.
• Compilar programas: Java está atrelado as características da compilação usada em 
sistemas híbridos.
• Executar programas: A linguagem tende a fazer uma série de verificações de tipo durante o 
seu tempo de execução, o que pode torná - la um pouco “lerda”. Uma novidade 
implementada nos últimos anos foi o Just in Time, o que permite a linguagem carregar 
somente alguns módulos necessários durante a execução, coisa que não era feita 
antigamente e gerava como consequência uma execução lerda e um alto consumo de 
memória. 
• Manter programas: Java é uma linguagem relativamente fácil de se manter programas e 
fazer manutenção, ainda mais pelo seu “formalismo” puramente focado em OO. Mesmo com 
os inúmeros frameworks, uma pessoa com conhecimentos mínimos na utilização deles 
poderá dar manutenção em códigos sem maiores dores de cabeça. 
• Confiabilidade baixa a custos altos: Sistemas relativamente críticos (sistemas com muitos 
acessos, para ser mais exato) usam Java pela sua robustez (exemplo: sistemas utilizados 
em tribunais de justiça, bancos, servidores web, etc).
12.Algumas linguagens de programação – por exemplo, Pascal – têm usado o ponto e vírgula 
para separar sentenças, enquanto Javaos utiliza para terminar sentenças. Qual desses usos, em 
sua opinião, é mais natural e menos provável de resultar em erros de sintaxe? Justifique sua 
resposta. 
R: Ao meu ver isso está relacionado com qual linguagem a pessoa estudou primeiro. Cada 
linguagem pode usar uma determinada forma para indicar final da instrução, como por exemplo, o 
C/C++/Java onde o “;” é usado para indicar o termino de uma sentença e o Python não utiliza 
nenhum caractere (no caso talvez ele uso o /n para indicar o termino da sentença). Se uma 
pessoa começar estudando Pascal e ir para uma linguagem nova, como o C, terá que se habituar 
a essa nova sintaxe, sendo possível que hajam erros no início por parte do programador. Após o 
advento do C e com muitas linguagens usando a base da sintaxe dela, é menos provável uma 
pessoa ter dificuldades de aprender e assimilar uma linguagem de programação mais recente.

Outros materiais