Buscar

Prova CLP-convertido

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 8 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 8 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

Prévia do material em texto

Prova CLP 
Cap 1- 
1.1 - Razões para estudar LP’s: 
• Maior capacidade para desenvolver soluções computacionais. 
• Maior habilidade ao usar um LP. 
• Maior facilidade para aprender outras LP’s. 
• Maior capacidade de escolher a LP apropriada para a resolução de um 
problema vigente. 
1.2 - O Papel das Linguagens de Programação no Processo 
de Desenvolvimento de Software: 
• Especificação de requisitos: 
 Discussão sobre, em que ambiente o SW atuará; Quais serão as maneiras de 
interação com o usuário; e estudo de viabilidade de custos. 
 
• Projeto de SW: 
Definição dos módulos e a hierarquia do sistema. 
 
• Implementação: 
Onde ocorre a programação dos módulos definidos no projeto de SW. 
 
• Validação: 
Fase de teste das especificações do sistema. Dividida em: 
1. Teste de módulo: 
Testes “isolados”. Verifica se o módulo em questão está fazendo o que 
deveria corretamente. 
2. Teste de Integração: 
Teste mais amplo. Verifica se os módulos estão interagindo 
corretamente. 
3. Teste do Sistema: 
Teste completo das funcionalidades do SW. 
 
• Manutenção: 
Onde ocorrem, correções de eventuais erros descobertos após a liberação do 
Sw, ou a adição de novas funcionalidades ao SW. 
1.3 Propriedades Desejáveis em uma Linguagem de 
Programação: 
• Legibilidade: 
Envolve a facilidade p/ ler e entender um programa. Exemplos negativos de 
legibilidade, podemos citar o uso de “go to”(Desvios incondicionais) em C. Já 
exemplos positivos temos o uso de “{“ e “}” para definição de blocos de 
códigos, também presentes no C. 
 
• Redigibilidade: 
Envolve a facilidade de escrever algoritmos em uma determinada linguagem 
considerando suas ferramentas. Um exemplo negativo de redigibilidade está 
presente no Visual Basic que não permite a declaração de várias variáveis de 
um mesmo tipo em uma única linha, diferentemente do C++, que permite. 
 
• Eficiência: 
De acordo com as demandas por recursos de um tipo de aplicação, certas LPs 
são mais recomendadas, e outras não devem ser usadas. Aplicação de 
automação em tempo real, por exemplo, normalmente requerem o uso de LPs 
que minimizem o tempo de execução e de acesso aos dispositivos periféricos, 
bem como o consumo de especo de memória. Por exemplo, PASCAL, JAVA, 
VISUAL BASIC impõe que os índices de vetores sejam verificados em todos os 
acessos durante a execução dos programas. Isso implica necessidade de fazer 
um teste antes de qualquer acesso aos vetores. Por outro lado, como o C não 
faz esse tipo, o código gerado será mais veloz. 
 
• Confiabilidade: 
Está relacionado com os mecanismos fornecidos pela LP para evitar erros e 
consequentemente aumentar a confiabilidade. Um exemplo positivo, é 
encontrado em linguagens como JAVA e Python que possuem mecanismos para 
tratamento de exceções (caso um evento indesejado ocorra). Um exemplo 
negativo está presente na linguagem C que não faz a verificação de índices ao 
acessar um vetor. 
 
• Facilidade de Aprendizado: 
Se uma linguagem possui diferentes formas de fazer a mesma coisa, isso 
aumenta a sua redigibilidade, mas diminui a facilidade de aprendizado, já que o 
programador iniciante deverá se preocupar em conhecer as diferentes formas 
de fazer a mesma coisa. Um exemplo negativo está presente em C++. A 
atribuição a variáveis pode ser feita de 4 formas diferentes: var += 1; var = var 
+ 1; var++; ++var. 
 
• Ortogonalidade: 
Diz respeito a capacidade da LP permitir ao programador combinar seus 
conceitos básicos sem que se produzam efeito anômalos nessa combinação. 
Assim uma LP é tão mais ortogonal quanto menor for o numero de exceções 
aos sues padrões regulares. Um exemplo negativo está presente em PASCAL 
que não permite retornar vetores em funções. 
 
• Modificabilidade: 
Refere-se às facilidades oferecidas pela LP para possibilitar ao programador 
alterar o programa em função de novos requisitos, sem que tais modificações 
impliquem mudanças em outras partes do programa. Um exemplo positivo é o 
uso de constantes simbólicas que permitem alterar o valor apenas uma vez e 
todas as aparições que façam referencia aquele valor, também serão alterados. 
Aumentando também a produtividade do programador. 
• Portabilidade: 
É altamente desejável que programas escritos em uma LP se comportem da 
mesma maneira independentes da ferramenta utilizada para traduzi-los para a 
linguagem de máquina ou da arquitetura computacional (hardware ou sistema 
operacional) sobre a qual estão sendo executados. Como exemplo a linguagem 
JAVA é executada por modo híbrido, compilada e depois interpretada pela 
máquina virtual Java, isso possibilita portabilidade para execução em SO. O 
.NET também possui essa característica. 
1.4 Especificação de LPs: 
Considere a=b;. O léxico da LP estabelece que ‘a’, ’ =’, ‘b’ e ‘; ‘ fazem parte do 
vocabulário da LP. A sintaxe da LP indica que a sentença formada pelo 
identificador ‘a’, o símbolo ‘=’, o identificador ‘b’ e o símbolo ‘;’ designa um 
comando válido de atribuição. A semântica da LP indica que este comando 
deve ser executado de modo a substituir o valor de ‘a’ pelo valor atual de b. 
 
1.5 Métodos de Implementação de LPs: 
• Compilado: 
Efetua a tradução direta do código fonte para o código de máquina. Um ponto 
positivo é que o método é considerado mais eficiente, já que as verificações já 
foram realizadas na tradução do código. E um negativo, é a portabilidade já que 
o código traduzido não pode ser executado em diferentes arquiteturas. 
 
• Interpretado: 
Efetua a tradução de uma instrução p/ código de máquina apenas no momento 
de execução da instrução, ou seja, esse processo é considerado um único. E 
isso faz com que esse método seja considerado menos eficiente. Junto a isso, o 
espaço de memória ocupado é maior já que, o código fonte a tabela de 
símbolos da LP e o interpretador devem estar na memória. Um ponto positivo é 
a depuração, visto que as referencias entre o código fonte e o a tradução são 
mantidas. 
 
• Híbrido: 
É considerado “o melhor dos dois mundos” já que as vantagens dos dois 
métodos são exploradas. Nesse método primeiramente o código é traduzido 
para um código intermediário, onde as verificações de erros já foram feitas, 
economizando tempo no momento da execução. Este código intermediário é 
portável e para executá-lo basta ter o interpretador da arquitetura em que o 
código será executado. 
 
1.6 Paradigmas de Programação: 
• Paradigma Imperativo: 
O modelo imperativo é o mais antigo e está ligado ao funcionamento dos 
computadores, ou seja, na execução sequencial de comandos e 
armazenamento de dados alteráveis. Isso se relaciona com os conceitos de 
linguagem de máquina. Os três pilares do modelo são, variáveis, atribuições e 
sequência. As variáveis são endereços de memória que possuem um valor, esse 
valor pode ser alterado através de comandos de atribuição e os comandos são 
executados em uma sequência lógica. Dentro desta sequência encontram-se 
laços de repetição, funções e desvios condicionais e incondicionais. Alguns 
exemplos de linguagens fazem uso desse modelo são, Assembly, C, Pascal, 
COBOL e ALGOL. Como vantagens, podemos citar a eficiência e a tipagem fraca, 
já como desvantagens, podemos apontar a difícil legibilidade e a descrição em 
como fazer e não o que fazer. 
• Paradigma Estruturado: 
O modelo estruturado surgiu com a finalidade de suprir algumas necessidades e 
pôr fim em alguns problemas. Com o tempo, percebeu-se que o modelo 
imperativo, devido seus desvios condicionais e incondicionais, que 
determinavam o fluxo de execução do programa, e seus comandos rígidos, 
geravam erros excessivos, e diminuíam a produtividade. Então, a programação 
estruturada surgiu. Esse paradigma baseia-se na ideia de melhoramentos 
sucessivos de código, além disso, organiza o fluxo de execução estimulando 
apenas o uso de desvios condicionais, fazendo com que o código seja 
organizado em blocos. Alguns exemplosde linguagens que utilizam desse 
paradigma são, C, Pascal e Basic. Entre as vantagens, pode-se citar a fácil 
legibilidade e compreensão da organização estrutural. As desvantagens são que 
os dados ficam separados das funções, fazendo com que uma única alteração 
na estrutura dos dados gere um efeito dominó de alteração em todas as 
funções, dessa forma, são gerados sistemas difíceis de serem mantidos. 
• Paradigma Orientado a Objetos: 
O modelo orientado a objetos pode ser considerado uma evolução do 
paradigma estruturado, e traz consigo conceitos que ajudam na agilidade e 
confiabilidade de desenvolvimento. Enquanto o modelo estruturado se 
preocupa em abstrair a sequência de execução dos comandos, o orientado 
preocupa-se em abstrair os dados, e para isso faz uso das classes, que detém 
uma estrutura de dados e um agrupamento de operações que são executadas 
através dos métodos. Objetos que são instancias de classes, e outros pilares, 
são os conceitos de herança e 
polimorfismo. A herança se traduz em compartilhamento de atributos, 
métodos e outros membros entre as classes. E o polimorfismo é a capacidade 
de duas ou mais classes derivadas de uma mesma superclasse, fazerem 
chamadas a um método com a mesma assinatura/identificação, porém com 
comportamentos distintos. Exemplos de linguagens que fazem uso desse 
modelo são, C++, Java, Python e Ruby. Como vantagens o modelo orientado 
possui todas as qualidades do paradigma imperativo e entre outras, pode-se 
citar a reutilização de módulos conforme sua independência. Entre 
desvantagens tem-se a dificuldade de muitos programadores em compreender 
a forma “orientada” de pensar, fazendo com que o seu uso não predomine 
sobre a maioria. 
• Paradigma Concorrente: 
O paradigma concorrente tem sido usado cada vez mais e é caracterizado pela 
execução simultânea de processos que, como o nome sugere, concorrem por 
recursos. Esses processos podem ser executados por uma única unidade de 
processamento ou mais, em paralelo. No segundo caso, o centro de 
processamento pode estar localizado em uma única máquina, ou dividido em 
várias. As linguagens que fazem uso do paradigma concorrente são, Ada, C, C++ 
e Java. Dentre as vantagens tem-se a divisão de trabalho e aumento de 
desempenho em uma tarefa importante. Como desvantagens, pode-se citar a 
dificuldade em tratamento de threads (processos leves) e a sincronização, para 
que um processo não seja interferido por outro. 
• Paradigma Declarativo: 
O paradigma declarativo relaciona-se com a forma abstrata de se realizar uma 
tarefa, ou seja, o programador não precisa se preocupar como o computador 
vai implementar aquela tarefa, e se essa é a melhor forma. Portanto, esse 
modelo é antagônico ao paradigma imperativo, já que o imperativo se 
concentra em como o computador deve realizar uma instrução. Em programas 
de linguagens declarativas não existem atribuições a variáveis, já que variáveis 
declarativas são incógnitas. Os interpretadores e compiladores de linguagens 
que fazem uso desse modelo, gerenciam a memória, tornado visível para o 
programador a necessidade de alocação e desalocação. Representando 
linguagens declarativas estão, HTML, SQL e Prolog. Dentre as vantagens tem-se 
a objetividade e agilidade. E nas desvantagens nota-se a difícil legibilidade. 
• Paradigma Funcional: 
O paradigma funcional tem como objetivo definir uma função que dê a 
resposta correta para um determinado problema. As linguagens funcionais, 
como o nome sugere, trabalham apenas sobre funções, as quais recebem uma 
lista de valores e retornam um valor de resposta. Programas funcionais são 
chamadas à funções que normalmente fazem chamadas a outras funções, a fim 
de gerar uma resposta coerente para o problema. Uma característica 
fortemente presente nesse modelo é a chamada recursiva de funções. 
Exemplos de linguagens funcionais são, Haskell, Lisp e Scheme. Dentre as 
vantagens estão presentes a sintaxe e semântica simples. Já nas desvantagens, 
percebe-se a baixa eficiência e a quantidade reduzida de usuários. 
• Paradigma Lógico: 
O paradigma lógico trabalha com dedução automática e para isso faz uso da 
lógica de predicados onde um predicado define a relação entre fatos ou 
variáveis. Quando uma questão é formulada um mecanismo de inferência tenta 
deduzir novos fatos a partir dos já existentes e dessa forma verificar se a 
questão é verdadeira ou não. Exemplos de linguagens lógicas são, Prolog e 
Mercury. Dentre as vantagens estão a não preocupação de como fazer, e sim, o 
que fazer e a resolução de problemas específicos de forma um pouco mais 
simples, por exemplo, no aprendizado de uma IA. Entre as desvantagens, têm-
se os problemas de eficiência e variáveis sem tipos. 
 
Cap 4- 
Variáveis: 
 São uma abstração das células de memória. Fazem referencia a um endereço 
de memória. Possuem algumas características, tais como, nome, endereço, tipo, valor, 
tempo de vida e escopo de visibilidade. 
• Nome: 
Escolhido pelo programador e obedece a regra de formação dos identificadores 
da linguagem. 
• Endereço: 
Posição de memória da primeira célula ocupada pela variável. 
• Tipo: 
É o conjunto de valores que a variável pode assumir. 
• Valor: 
É o conteúdo da variável. É compatível com seu tipo. 
• Tempo de vida: 
Duração da existência de uma variável. Exemplo, variáveis globais possuem 
tempo de vida igual ao tempo de execução do programa. Já variáveis locais 
existem apenas durante a execução de seu bloco. 
• Escopo de visibilidade: 
Parte do programa onde a variável pode ser referenciada. 
Variáveis compostas: 
 Variáveis cujo tipo é composto. Pode ser inicializada ou atualizada de forma 
completa ou seletiva. Um exemplo pode ser dado em C com o struct onde podemos 
inicializar todos os valores ou apenas um. 
Constantes: 
Valores que não serão modificados ao longo do programa.

Continue navegando