Ir para conteúdo
Fórum Script Brasil
  • 0

linguagens de Programação


viciado

Pergunta

A seguir estão relatadas uma questão proposta em uma prova de linguagens de programação e a resposta dada por um aluno:

Questão:

a) Maior legibilidade implica em maior manutenibilidade;

B) Maior redigibilidade implica em maior confiabilidade

Resposta:

a) "quanto maior for a legibilidade de uma linguagem, mais fácil será entendê-la e seguir a sua lógica, com isso é possível detectar erros ou alterações a serem feitas, facilitando assim a manutenção."

B)"quanto maior for a regibilidade de um programa, mais expressivo ele será, tornando-se assim mais confiável, não conduzindo o programador a desvios que atrapalhem a solução do problema."

Critique a resposta em termos de incorreções. Se a questão valia 2 pontos, quanto o aluno merecia ?

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Critique a resposta em termos de incorreções. Se a questão valia 2 pontos, quanto o aluno merecia ?

merecia 1 .... veja o porque com um exemplo abaixo da linguagem Python

Propriedades Desejáveis em uma Linguagem de Programação

 Legibilidade

 Regibilidade

 Confiabilidade

 Eficiência

 Facilidade de aprendizado

 Ortogonalidade

 Reusabilidade

 Modificabilidade

 Portabilidade

MAT052 – Ficha da linguagem Python

1.Critérios usados

Legibilidade

Regidibilidade

Confiabilidade

Custo

2.Dados da Linguagem

2.1. Nome: Python

2.2. Paradigma: Estruturada, Orientada a objetos, ainda que suporte outros paradigmas, como a programação funcional.

2.3. Áreas de Aplicação: Foi inicialmente criado para ensino de programação de computadores, mas sem que isso o tornasse uma linguagem limitada ou com poucos recursos. Hoje é usada em diversas áreas, como servidores de aplicação e computação gráfica. Está disponível como linguagem script em aplicações como OpenOffice (Python UNO Bridge) e pode ser utilizado em Stored Procedures no banco de dados PostgreSQL (PL/Python).

3.Histórico

Criador: Guido van Rossum

O desenvolvimento do Python começou em 1990, no CWI (Instituto de Matemática e Ciência da Computação), em Amsterdã, na Holanda, por Guido Van Rossum, e foi depois continuado pela Python Software Foundation (PSF).

Python é, em vários aspectos, semelhante a outras linguagens interpretadas como Tcl, Perl, Scheme e Ruby.

4.Especificação

Aspectos Léxicos:

O interpretador Python interpreta sentenças recebidas de algum dispositivo de entrada (console ou arquivo), Esta entrada é lida pelo analisador léxico que divide o código recebido em tokens, repassando-o para o parser que interpreta o programa.

Os blocos de comandos são separados pela identação.

Os comentários são feitos com o caractere #.

Usa-se o caractere : no fim das estruturas de controle.

O Python é totalmente definido utilizando a tabela ASCII de 7 bits.

BNF: Usa uma gramática modificada do BFN (http://www.python.org/doc/2.2.3/ref/notation.html

5.Variáveis

1.Nomes

a) Qual o comprimento máximo de um nome?

Não é limitado

Melhora a legibilidade, podendo assim ser usada palavras bastante mnemônicas.

B) Quais os caracteres especiais válidos em nomes?

Além de letras e dígitos, apenas o underscore (_) é permitido.

Notação:

identifier ::= (letter|"_") (letter | digit | "_")*

c) Há distinção entre maiúsculas e minúsculas?

Sim. É case sensitive

Pode piorar a legibilidade, porque “soma” seria diferente de “Soma” mesmo assim têm o mesmo significado.

d) As palavras-chave são reservadas?

São.

Melhora a regidibilidade e confiabilidade, melhorando os índices de erro.

e) Como é feita a amarração de endereço a uma variável?

Não há declaração de variáveis. A amarração é feita na atribuição.

Isso a torna dinamicamente tipada. Melhora a regidibilidade e flexibilidade, mas diminui a confiabilidade e legibilidade.

2. Como é feita a amarração de tipo a uma variável

Não há declaração de variáveis. A amarração é feita na execução.

3. Como é feita a amarração de valor a uma variável

Não há declaração de variáveis. A amarração é feita na execução.

4. Quais os tipos das variáveis da linguagem segundo o seu tempo de vida?

Global, local e built-in.

6.Há constantes com nome na linguagem?

Não.

7.Há mecanismos para a inicialização de variáveis?

Ela se inicializa na declaração.

6. Tipos de dados

1. Quais os tipos de dados primitivos da linguagem?

Em Python há alguns tipos numéricos pré-definidos: inteiros (int), números de ponto flutuante (float), booleanos (bool) e complexos (complex).

Também tem lista, tupla, string e dicionario.

2. Seqüências

a)O tipo é primitivo ou não?

É primitivo

b)Cadeias possuem comprimento estático ou dinâmico?

Possuem tipos estáticos e dinamicos.

Immutable sequences

Strings

Unicode

Tuples

Mutable sequences

Lists

3. Mapeamento finito

a) Quais os tipos permitidos para índices?

Inteiros e nomes.

Melhora a regibilidade, legibilidade e flexibilidade. Tornado os elementos da lista mnemônicos.

B) Quando é feita a amarração de valores aos limites do array?

Em Python usa-se listas e tuplas que são feitas amarrações em tempo de execução.

c) Quando é feita a alocação do array?

Em tempo de execução.

d) Quantas dimensões são permitidas?

Em Python não é explicito arrays multidimensionais, mas pode ser usado lista de listas e tuplas de tuplas, causando o mesmo efeito.

e) Pode-se inicializar um array?

Sim.

f) São permitidos slices?

Sim. Inclusive pode-se usar indicies negativos para percorrer de trás para frente.

Melhora a regidibilidade, mas piora a legibilidade e confiabilidade, já que algum erro não esperado pode ocorrer se acontecer de acidentalmente o indicie 1 for trocado por -1 por exemplo.

4. Produto cartesiano

5. União

Não foi verificado nenhum tipo parecido com “Union” em Python.

a) Há verificação de tipos?

No momento da execução.

6. Conjunto potência

a) Qual o número máximo de elementos do tipo base?

-

7. Recursão

Em Python existe recursão, mas ela é limitada para um certo numero de execuções. Ela pode ser modificada durante a execução do programa.

File "", line 2, in recursiva

(98 repetitions omitted)

File "", line 2, in recursiva

RuntimeError: Maximum recursion depth exceeded

8.Ponteiros

Em Python não há ponteiros. Todos os elementos são objetos, e passados por referência. O tempo de vida seria a contagem de referencias, que é incrementada na alocação de um objeto e decrementada na desalocação de um objeto ou uma cópia.

Quando a contagem chega em 0 o coletor de lixo entra em ação.

9. Ordinais

Não há enumerados nem subrange em Python.

10. Qual a regra de compatibilidade de tipos?

11. Como é feita a verificação de tipos?

Em tempo de execução

12. A linguagem é fortemente tipada?

Sim.

Python é dinamicamente tipada (tipos de variáveis, retornos de funções e parâmetros são identificados pelo interpretador) embora fortemente tipada (Os valores e objetos têm tipos bem definidos e não sofrem coerções como em linguagem C ou Perl).

13. Como é feita a conversão de tipos?

Explicitamente através de funções.

Aumenta a legibilidade e confiabilidade (os erros inesperados diminuem), mas diminui a regidibilidade.

7. Estruturas de Controle (nível de comando)

1. Existe mecanismo para definir um comando composto?

2. Comando de seleção

a)Qual a forma e o tipo da expressão que controla a seleção?

Em http://docs.python.org/ref/grammar.txt pôde ser achado em BNF

if_stmt ::=

"if" expression ":" suite

( "elif" expression ":" suite )*

["else" ":" suite]

B) O que pode ser selecionado? (um comando, sequência de comandos ou comando composto)

c) É possível selecionar um único segmento de código ou a escolha deve ser feita entre dois segmentos?

3. Comando de seleção múltipla

a) Qual a forma e o tipo da expressão que controla a seleção?

B) O que pode ser selecionado? (um comando, sequência de comandos ou comando composto)

c) A construção deve ser encapsulada?

d) Como tratar de valores não representados pelos seletores?

e) Os segmentos selecionáveis devem ou não possuir um desvio implícito para o final da seleção?

4. Comando de repetição

a) Como controlar a iteração?

Com condições lógicas.

B) Em que local o mecanismo de controle deve aparecer no loop?

No começo do mecanismo.

5. Laços controlados por contador

a) Qual o tipo e o escopo da variável do laço?

Pode-se usar uma lista ou a função range que simularia o contador. A variável continua existindo normalmente após a execução.

B) Qual o valor da variável do laço após o final da execução?

É o calor da variável ao final do laço.

c) Podem as variáveis do laço serem modificadas e, caso seja possível, isto afetará o controle do laço?

Sim e afetaria.

Isso diminui a confiabilidade, erros não esperados podem ocorrer sem ser percebido pelo programador.

d) É permitido desviar para dentro do laço?

Não.

Melhora a confiabilidade e regidibilidade, o programa ficar mais estruturado, sem desvios.

e) O teste é feito no topo ou no final do laço?

Topo.

f) As variáveis do laço são avaliadas apenas uma vez ou a cada iteração?

Uma vez.

6. Laços controlados por expressão lógica

a) O controle deve ser pré-teste ou pós-teste?

Pré-teste.

B) Este tipo de laço deve ser ou não um tipo especial de laço com contador?

Não.

c) É permitido desviar para dentro do laço?

Não.

7. Laços com controle definido pelo usuário

a) O mecanismo de controle é condicional ou não?

Sim

B) O mecanismo pode aparecer em um outro tipo de laço com controle?

c) Pode haver uma saída de laços aninhados ou apenas de um laço?

Pode haver laços aninhados.

8. Iteradores

9. Desvios incondicionais

8. Estruturas de Controle (nível de unidade)

1. Blocos

2. Subprogramas

a) Como são alocadas as variáveis locais?

Em tempo de execução

B) Quais os mecanismos de passagem de parâmetros?

Por referência.

c) Há verificação de tipos entre os parâmetros?

Não

d) Há subprogramas genéricos?

3. Tratadores de exceções

1. Como e onde é especificado um tratador?

Usando o try, except.

2. Como eventos são amarrados a um tratador?

3. Como são especificadas exceções definidas pelo usuário?

4. Como desabilitar exceções, se necessário?

5. Exceções embutidas podem ser explicitamente levantadas?

4. Unidades simétricas

1. Os comandos de controle para co-rotinas pertencem à linguagem ou não?

2. Como é encerrada a execução de co-rotinas?

3. Co-rotinas são criadas estática ou dinamicamente?

5. Unidades concorrentes

1. Como prover sincronização para competição?

2. Como prover sincronização para cooperação?

3. Os processos são criados estática ou dinamicamente?

9. Tipos Abstratos de Dados

Referências

http://www.wikipedia.org http://www.python.org http://docs.python.org/ref/ref.html

http://docs.python.org/ref/grammar.txt

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...