P2 Flashcards

1
Q

Expressões

A

Meios fundamentais de especificar computações em uma linguagem de programação

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Determina o formato das expressões

A

Sintaxe

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Determina a maneira como as expressões são avaliadas

A

Semântica

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Fatores que definem a avaliação de uma expressão (4)

A

Ordem dos operadores (regras de precedência e associatividade)
Ordem dos operandos
Tipo dos operandos
Coerção

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Duas ações realizadas pela execução de uma expressão

A

Avaliar os operandos
Executar a operação indicada

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Expressões são compostas de _____________, ___________ e ____________.

A

Operandos
Operadores
Parênteses

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Notação infixa

A

Operador entre os operandos
A + B

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Notação pré-fixada e notação pós-fixada

A

Operador antes dos operandos
+ A B
Operador depois dos operandos
A++

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Definem a ordem de avaliação quando diferentes operadores são encontrados em uma expressão

A

Regras de precedência

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Na maioria das linguagens, os operadores booleanos têm a mesma precedência?

A

Sim

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Regras que avaliam uma expressão quando todos os operadores têm a mesma precedência

A

Regras de associatividade

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

expressões são avaliadas da esquerda para a direita

A

Associatividade à esquerda
(binários - exceto atribuição)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

expressões são avaliadas da direita para a esquerda

A

Associatividade à direita
(unários e atribuição)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

operadores não podem ocorrer na sequência sem uso de parênteses para indicar a ordem

tipo de associatividade

A

não associativo
Ada: **(potência)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

operadores relacionais

A

exprimem relação entre operandos
==, !=, >, <…

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

operadores que não podem ocorrer em sequência

A

operadores relacionais
incremento e decremento (lings baseadas em C)
(a++)++
5++ //erro: não pode incrementar uma constante literal

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Operações associativas permitem aos compiladores…

A

… reordenas as operações para otimizar a validação da expressão.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Caso em que mesmo números inteiros podem não ser totalmente associativos

não é possível executar as operações em qualquer ordem

A

A + B + C + D
* Imagine que A e C são inteiros positivos absolutamente grandes e B e D sejam inteiros negativos absolutamente grandes:
* A + B não causa overflow, mas A + C pode causar.
* Para esses valores, essa expressão não é associativa porque não é possível executar as operações em qualquer ordem

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

A ordem de avaliação dos operandos é irrelevante se…

A

… nenhum operando tiver efeitos colaterais (função modificando variável externa)
A + func(A) //ordem de avaliação faz diferença

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Um programa tem ________________ se quaisquer duas expressões nesse programa que têm o mesmo valor puderem ser substituídas uma pela outra em qualquer lugar sem afetar o resultado.

A

transparência referencial
(afetada pelos efeitos colaterais)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

result1 = (func(a) + b) / (func(a) – b);
temp = func(a);
result2 = (temp + b) / (temp – b);

nesse exemplo, em que caso não há transparência referencial?

A

quando func(a) modifica o valor de b (efeito colateral)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

Sobrecarga de operadores

A

Quando alguns operadores podem ser usados para mais de um propósito
ex: (+) adição e concatenação
“Uso múltiplo de um operador”

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

Vantagem e desvantagem da sobrecarga de operadores

A

Pode melhorar a legibilidade e facilidade de escrita (se usada com bom senso)
Pode comprometer seriamente a legibilidade e confiabilidade dos programas (se usada indiscriminadamente)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

avaliação na qual o resultado é determinado sem avaliar todos os operandos e/ou operadores

A

avaliação curto-circuito
ex: x && y
se x é falso, não precisa avaliar o y pq o resultado final vai ser falso

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Q

Qual propriedade impede a ocorrência de erro de extrapolação de índice no exemplo abaixo?

while ( (i < matriz.length) && (matriz[i] != key) )
i++;

A

Avaliação curto-circuito

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
26
Q

(a > b) || ((b++) / 3)

em que contexto um programa contendo o exemplo acima falharia?

A

Caso o programa dependa do incremento (b++) e o operador (||) aplica avalição curto-circuito
(b só será incrementado se (a > b) == False)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
27
Q

linguagens funcionais não possuem esta operação:

A

atribuição

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
28
Q

base para linguagens imperativas e OO:

A

atribuição

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
29
Q
  • Presente em todas as linguagens imperativas e orientadas a objetos;
  • Utiliza apenas uma variável do lado esquerdo.
A

Atribuição simples (a = 5;)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
30
Q

– Presente na linguagem Perl. Por exemplo:
($flag ? $count1 : $count2) = 0;
– É equivalente a:
if ($flag) { $count1 = 0; } else { $count2 = 0; }

A

Atribuição condicional

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
31
Q

Realiza uma operação sobre uma variável e atribui o resultado a essa variável

A

Operador de atribuição composto (x+=5;)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
32
Q

– Operadores que são atribuições abreviadas
– Aparecem em versões pré-fixadas e pós-fixadas

A

Operadores de atribuição unários

z = x++; //pós-fixado equivalente a z = x; x = x + 1;
z = ++x; //pré-fixado equivalente a x = x + 1; z = x;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
33
Q

while ((ch = getChar()) != EOF) { … }

a = b = c = 0;

são exemplos de?

A

atribuição como expressão

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
34
Q

Quando as atribuições como expressão podem resultar em erros indetectáveis?

A

Nas linguagens C e C++, pois as expressões condicionais são baseadas em números e não em booleanos
Ex: (x=y) ao invés de (x==y) // o compilador não acusa erro

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
35
Q

a sentença de atribuição produz um resultado, que pode ser usado como operador em outras operações

A

Atribuição como expressão

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
36
Q

Sentenças de atribuição de múltiplos alvos e fontes

A

Atribuições de lista

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
37
Q

first, second, third = 20, 40, 60;
é exemplo de?

A

atribuição de lista

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
38
Q

As ______________ são realizadas pela avaliação de expressões e atribuição dos valores resultantes a variáveis.

A

computações

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
39
Q

Dois tipos de instruções de controle

A

Seleção e iteração

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
40
Q

permitem selecionar entre caminhos alternativos do fluxo de execução do programa (tipo de instrução de controle)

A

seleção

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
41
Q

provoca a execução repetida de um conjunto de sentenças (tipo de instrução de controle)

A

iteração

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
42
Q

O que são sentenças de controle?

A

Sentenças com instruções de controle

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
43
Q

O que é uma estrutura de controle

A

Sentença de controle + coleção de sentenças cuja execução ela controla

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
44
Q

Instrução que realiza um salto para um local específico no programa identificado por um rótulo

A

Salto incondicional
ex: goto

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
45
Q

Fornecem meios para escolher entre dois ou mais caminhos de execução em um programa

A

Sentenças de seleção

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
46
Q

Quais são as duas categorias de sentenças de seleção?

A

Sentenças de seleção de dois caminhos
Sentenças de seleção múltipla

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
47
Q

Em Sentenças de Seleção de Dois Caminhos, é especificada entre parênteses se nenhum marcador sintático for usado para introduzir a cláusula então

A

Expressão de controle

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
48
Q

Usados para compor as sentenças compostas

em sentenças de seleção

A

Delimitadores de blocos (chaves ou palavras reservadas)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
49
Q

Em caso de seletores aninhados, na maioria das linguagens o else pertence a qual if?

A

ao if anterior mais próximo

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
50
Q

Permitem a seleção de uma dentre qualquer número de grupo de sentenças

A

Sentenças de Seleção Múltiplas

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
51
Q

Representa um desvio explícito em sentenças de seleção múltiplas

A

Sentença opcional break

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
52
Q

Sentença opcional break

A

Representa um desvio explícito em sentenças de seleção múltiplas

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
53
Q

Sentenças de Iteração fazem com que conjunto de ____________ seja executado zero ou mais vezes.

A

sentenças

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
54
Q

Todas as linguagens de programação fornecem alguma forma de repetir segmentos de código?

A

Sim

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
55
Q

Quais são as duas categorias de sentenças de iteração?

A

Sentenças de iteração lógicas
Sentenças de iteração com contador

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
56
Q

Sentenças de iteração lógicas

A

O controle do laço é baseado em uma expressão booleana

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
57
Q

O projeto de sentenças de iteração lógicas é mais simples que o de laços com contador?

A

Sim

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
58
Q

laços com pré-teste e laços com pós-teste

A

while
do-while

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
59
Q

Variável que armazena o valor da contagem em laços com contador

A

Variável de laço

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
60
Q

Quais são os parâmetros dos laços com contador?

A

Valor inicial da variável do laço
Valor final da variável do laço
Tamanho do passo (o quanto os valores da variável do laço mudam a cada iteração)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
61
Q

O quanto os valores da variável do laço mudam a cada iteração

A

tamanho do passo

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
62
Q

Em vez de usar um contador ou uma expressão booleana, esses laços são controlados por uma estrutura de dados (matrizes ou listas)

A

Iteração Baseada em Estruturas de Dados (for each)

63
Q

situação que tem origem em um erro que ocorrer em um programa em um momento não determinado

A

exceção

64
Q

processamento especial que pode ser requerido quando uma exceção é detectada

A

tratamento de exceção

65
Q

tratamento de exceção

A

processamento especial que pode ser requerido quando uma exceção é detectada

66
Q

tratador de exceção

A

unidade de código que realiza o tratamento de exceção

67
Q

quando uma exceção é levantada (raised) – ou lançada (thrown)?

A

quando seu evento associado ocorre

68
Q

Quais são as 4 formas que uma exceção pode ser tratada?

A
  1. Por um tratador cujo código está dentro da própria unidade de código em que a exceção foi detectada (try catch)
  2. Por um tratador na unidade que chamou o subprograma que lançou a exceção (throws no cabeçalho do método)
  3. Enviando ao subprograma um rótulo para o qual a execução do programa é transferida caso ocorra uma exceção (tipo um goto?)
  4. O tratador é definido como um subprograma separado, que é passado como parâmetro para o subprograma chamado
69
Q

Normalmente, é usado para liberar recursos que eventualmente possam ter sido alocados durante o processamento do bloco try e que devem ser liberados.

A

Bloco finally

70
Q

O bloco finally, quando presente, sempre é executado, independentemente de uma
exceção ter sido lançada ou não dentro do try?

A

Sim

71
Q

O finally não é executado se houver um return nos blocos try ou catch (V ou F)

A

Falso

72
Q

Exceções criadas pelo programador só podem ser lançadas de maneira explícita (V ou F)

A

Verdadeiro

73
Q

unidade (ou bloco) de código que agrupa uma ou mais sentenças, é identificado por um nome e pode ser reutilizado em diferentes locais em um programa

A

subprograma

74
Q

A unidade de programa chamadora é suspensa durante a execução do subprograma chamado, no que isso implica?

A

implica na existência de um subprograma em execução em um dado momento

75
Q

Quais são os 3 tipos de subprograma?

A

Procedimentos, funções e corrotinas

76
Q

– São coleções de sentenças que definem computações parametrizadas;
– Definem novas sentenças;

A

procedimentos

77
Q

– São semanticamente modeladas como funções matemáticas;
– Retornam um resultado, mesmo que seja vazio;
– Podem criar operadores não fornecidos pela linguagem.

A

funções

78
Q

– Não possuem um relacionamento mestre-escravo com o subprograma chamador
– Pode ter múltiplos pontos de entrada, controlados por ela mesma
– Possui variáveis locais estáticas que mantém o seu estado entre uma chamada e outra
– A cada chamada, ela continua a sua execução a partir do ponto onde parou na última vez que foi chamada

A

corrotina

79
Q

– Especifica o tipo de unidade sintática;
– Define o tipo de dado do subprograma;
– Indica o nome do subprograma;
– Especifica uma lista de parâmetros.

A

Cabeçalho de um subprograma

80
Q

Cabeçalho de um subprograma sem a presença do corpo

A

Assinatura ou protótipo

81
Q

Subprograma sobrescrito

A

Possui o mesmo cabeçalho que outro subprograma na superclasse

82
Q

Subprograma sobrecarregado

A

Possui o mesmo nome que outro subprograma na mesma unidade de código

83
Q

Possui o mesmo cabeçalho que outro subprograma na superclasse

A

Subprograma sobrescrito

84
Q

Possui o mesmo nome que outro subprograma na mesma unidade e código

A

Subprograma sobrecarregado

85
Q

estrutura que armazena as informações necessárias para a chamada e execução do subprograma

A

registro de ativação

86
Q

Quando um subprograma é chamado, uma instância do seu registro de ativação é armazenada na…

A

pilha de tempo de execução do programa

87
Q

Ponteiro para a instrução na qual o subprograma foi chamado

A

endereço de retorno

88
Q

ponteiro para a instância do registro de ativação do subprograma chamador

A

ligação dinâmica

89
Q

Endereço de retorno
Parâmetros
Variáveis
Ligação dinâmica

coloque na ordem da estrutura de um registro de ativação

A

Variáveis
Parâmetros
Ligação dinâmica
Endereço de retorno

90
Q

Todo programa possui um ____________, que aponta para o registro de ativação do subprograma ativo.

A

ponteiro de ambiente (PE)

91
Q

Nem todo programa possui um ponteiro de ambiente (V ou F)

A

Falso

92
Q

Quando um subprograma é chamado, o PE do chamador é armazenado no campo ____________ do subprograma chamado.

A

Ligação Dinâmica

93
Q

Quais operações acontecem quando um subprograma é chamado?

A
  • é salvo o estado de execução da unidade anterior
  • os parâmetros de entrada são avaliador e passados, e tb é passado o endereço de retorno
  • transfere o controle pro subprograma chamado
  • o compilador cria um código que faz alocação e liberação implícita das variáveis locais
94
Q

Quais as 3 maneiras de um subprograma acessar dados externos?

A

Acesso direto a variáveis não locais
Acesso direto a atributos da própria classe
Passagem de parâmetros (mais confiável)

95
Q

parâmetros definidos no cabeçalho do subprograma

A

parâmetros formais

96
Q

parâmetros formais

A

parâmetros definidos no cabeçalho do subprograma

97
Q

Parâmetros definidos na chamada do subprograma

A

parâmetros reais

98
Q

alternativa a parâmetros posicionais

A

parâmetros nominais

99
Q

O nome do parâmetro real é explicitamente vinculado ao nome do parâmetro formal

A

parâmetros nominais

100
Q

usado quando nenhum parâmetro real é passado na chamada ao subprograma

A

valor padrâo

101
Q

Quais são os 5 métodos de passagem de parâmetros?

A

passagem por valor
passagem por referência
passagem por resultado
passagem por valor-resultado
passagem por nome

102
Q

O valor do parâmetro real é copiado para o parâmetro formal correspondente no início da execução do subprograma

A

passagem por valor

103
Q

A variável que é o parâmetro formal é independente da variável que é o parâmetro real

A

passagem por valor

104
Q

Vantagem e desvantagem da passagem por valor

A

Acesso local mais eficiente
Alocação de mais um espaço de memória

105
Q

Diga se é implementação de modo de entrada, saída ou entrada e saída pra cada método de passagem de parâmetro

A

por valor - entrada
por referência - entrada e saída
por resultado - saída
por valor-resultado - entrada e saída
por nome - entrada e saída

106
Q

O endereço do parâmetro real é copiado como valor para o parâmetro formal correspondente no início da execução do subprograma

A

passagem por referência

107
Q

vantagens e desvantagens da passagem por referência

A

Economia de espaço e facilidade de manipulação de parâmetros estruturados
acesso mais lento (por ser indireto) e efeitos colaterais

108
Q

o valor do parâmetro formal é copiado para o parâmetro real correspondente ao final da execução do subprograma

A

passagem por resultado
(na prática, algumas linguagens usam referências, então o valor é alterado simultaneamente)

109
Q

Na passagem por resultado, a variável que é o parâmetro formal é independente da variável que é o parâmetro real?

A

Sim

110
Q

Na passagem por resultado, é obrigatório definir um valor para o parâmetro dentro do subprograma (V ou F)

A

Verdadeiro

111
Q

O valor do parâmetro real é copiado para o parâmetro formal correspondente no início da execução do subprograma e o valor do parâmetro formal é copiado para o parâmetro real correspondente ao final da execução do subprograma

A

passagem por valor-resultado

112
Q

O nome dos parâmetros reais são substituídos textualmente pelos valores dos parâmetros formais

A

passagem por nome

113
Q

O parâmetro formal só recebe o valor ou endereço do parâmetro real quando o parâmetro formal recebe uma atribuição ou é usado

A

passagem por nome

114
Q

desvantagens da passagem por nome

A

bem mais lento e pode confundir o leitor do código

115
Q

A automação dessa atividade é um dos elementos chave das linguagens funcionais e lógicas

A

gerenciamento em tempo de execução da memória heap

116
Q

área que armazena os dados cujo formato e tamanho são conhecidos antes da execução do programa

A

área estática
(instruções do programa e variáveis estáticas)

117
Q

gerencia a execução dos subprogramas, armazenando seus registros de ativação

A

pilha de tempo de execução

118
Q

área da memória do programa usada para armazenar valores alocados e estruturados dinamicamente enquanto o programa está sendo executado

A

heap

119
Q

algumas linguagens utilizam algoritmos de _________ para gerenciar a memória heap, de modo que o espaço disponível seja utilizado de forma eficiente

A

coleta de lixo

120
Q

palavra de memória da heap

A

representa um endereço que pode ser alocado

121
Q

Quais os três estados que uma palavra de memória pode assumir?

A

não usada: não alocada pelo programa
não definida: alocada, mas ainda sem valor
com valor: alocada e com valor

122
Q

palavra não alocada pelo programa

A

não usada

123
Q

palavra alocada sem valor atribuído

A

não definida

124
Q

palavra alocada e com valor armazenado

A

com valor

125
Q

Qual estado de palavra não ocorre em linguagens que inicializam automaticamente variáveis de tipos primitivos e objetos com construtores quando alocados?

A

estado não definido

126
Q

Quando uma ou mais palavras contínuas são alocadas

A

bloco de memória

127
Q

A alocação retorna o endereço da última palavra do bloco de memória (V ou F)

A

Falso (primeira palavra)

128
Q

Quando ocorre um estouro (overflow) da heap?

A

quando não existe um bloco contíguo de palavras grande o suficiente para satisfazer a alocação

129
Q

qualquer bloco na heap que não possa ser acessado pelo programa

A

lixo

130
Q

lixo (variável perdida)

A

qualquer bloco na heap que não possa ser acessado pelo programa

131
Q

Coleta de lixo

A

qualquer estratégia para a recuperação de blocos de memória heap para uso posterior do programa

132
Q

Por que as linguagens OO demandam um gerenciamento da heap mais efetivo?

A

Porque os objetos tendem a ser muito maiores que as variáveis de tipos escalares, de modo que largar objetos perdidos na heap é muito mais problemático

133
Q

Vantagens do coletor de lixo

A
  • Os programas não têm bugs de ponteiros perdidos
  • Os programas não sofrem deterioração gradual e travamentos causados pelo enchimento da memória — possuem estabilidade de longa duração
  • Evita necessidade de código pra gerenciamento de memória dentro dos programas — código menor e mais limpo, legível e rápido de desenvolver e depurar
  • A limpeza é realizada por uma thread separada, engatilhada em momentos de pouca atividade e quando a memória está cheia
  • Pode tornar os programas mais rápidos (quando é necessário remover muitos itens da memória de uma vez)
134
Q

Desvantagens do coletor de lixo

A
  • O programador não tem controle do gerenciamento da memória
  • O programa precisa ser interrompido para que seja executada a thread do coletor de lixo
  • Nem sempre é óbvio quando o coleto é acionado, então o programa pode pausar inesperadamente
  • O tempo de ação do coletor não é limitado (geralmente é rápido, mas isso não fica garantido)
  • Podem manter algum objeto na memória que um desalocador explícito não manteria
135
Q

Quais as duas abordagens que um algoritmo de coleta de lixo pode seguir?

A

Contagem de referências
Rastreamento

136
Q

nos algoritmos de coleta de lixo que aplicam essa abordagem, cada objeto alocado na memória heap possui um contador que indica o número de ponteiros que apontam para ele. Um objeto com contador igual a zero é considerado lixo e pode ser apagado

A

contagem de referências

137
Q

os algoritmos que aplicam essa abordagem de coleta de lixo realizam uma varredura a partir de todas variáveis estáticas ou dinâmicas da pilha que apontam para um objeto na heap. Essas variáveis (ponteiros ou referências) compõem o conjunto-raiz. Um objeto que não pode ser alcançado a partir do conjunto-raiz é considerado lixo e pode ser apagado

A

rastreamento

138
Q

quando são formados grafos de conectividade?

A

quando campos (atributos) de um obj apontam pra outros objetos

139
Q

em caso de grafos de conectividade, quais objetos não podem e quais podem ser coletados?

A

todos os objetos alcançáveis a partir do conjunto-raiz
objetos inalcançáveis

140
Q

Vantagem da contagem de referência

A

ocorre dinamicamente, então o custo de execução é distribuído ao longo do programa

141
Q

desvantagens da contagem de referência

A
  1. mais memória pra armazenar os contadores
  2. listas circulares
142
Q

marcar-varrer é um algoritmo para qual abordagem?

A

rastreamento

143
Q

Como funciona o marcar-varrer?

A

Cada objeto contém um bit de marca (BM), conteúdo e ponteiro pro próximo objeto
Cada objeto alcançável a partir de um ponteiro na pilha: BM = 1
Varrer: percorre toda a heap, tornando livres os objetos não marcados e desmarcando os anteriormente marcados (BM = 0)

144
Q

Vantagens do marcar-varrer

A

recupera todo o lixo da heap e só é chamado quando ela está cheia

145
Q

Desvantagens do marcar-varrer

A

a execução do algoritmo de coleta interrompe o programa
percorre os objetos alcançáveis a partir dos ponteiros existentes na pilha, e em seguida percorre toda a heap

146
Q

Por que, para o compilador, um laço com contador é mais complexo que um laço condicional?

A

Porque um laço com contador demanda a criação e a manipulação automática de variáveis internas não acessíveis pelo programador. Essas variáveis armazenam o valor inicial, final, atual e o tamanho do passo do contador. Por sua vez, um laço condicional não necessita dessas variáveis internas e as iterações são controladas puramente por uma expressão condicional. Portanto, um laço com contador demanda mais memória e maior processamento.
(O laço for do C aparenta ser um laço com contador, mas na verdade não é, pois suas interações são controladas por uma expressão condicional e o contador e o tamanho do passo podem ser acessados e modificados pelo programador ao longo das interações.)

147
Q

Quais as desvantagens do goto?

A

Pode originar erros que só podem ser detectados em tempo de execução
Compromete fortemente a legibilidade — o fluxo do programa deixa de seguir uma ordem sequencial

148
Q

Qual problema ocorre com linguagens em que as cláusulas das estruturas de seleção de dois caminhos podem ser formadas por sentenças tanto simples quanto compostas?

A

Quando correm if’s aninhados, a sintaxe sozinha não consegue determinar para qual deles um else irá pertencer. Para resolver isso, é necessária uma regra semântica que determine, por exemplo, que o else “sempre pertence ao if anterior mais próximo”.

149
Q

Qual a diferença entre os laços com contador do Pascal e do C?

A

O for do pascal é um laço com contador e, por isso, não permite que o valor da variável i seja alterado. É permitida apenas a leitura. O for do C é um laço condicional, sendo possível manipular todas as variáveis do laço livremente, mesmo que isso afete o número de iterações.

150
Q

O que é uma exceção? O que é um tratador de exceção?

A

Uma exceção é um evento causado de uma situação errônea que, se não for tradada, provoca uma interrupção abrupta na execução do programa. A gravidade de uma exceção depende da sua natureza. Tratador de exceção é o trecho de código que é acionado em resposta ao lançamento de uma determinada exceção, com o objetivo de corrigi-la ou, pelo menos, amenizá-la.

151
Q

Explique como funciona o algoritmo de coleta de lixo Coleta de Cópias.

A

Esse algoritmo segue o estilo de marcar-varrer, mas com apenas uma passagem. Ele divide o espaço da memória heap em duas áreas, origem e destino, sendo que o primeiro é utilizado para armazenar as variáveis/objetos e o segundo representa uma zona morta. Todos as variáveis/objetos dinâmicas da heap são alocadas um após o outro a partir do início da origem. Isso significa que o espaço de memória livre é sempre o próximo endereço após o último ocupado, o que elimina a necessidade de manter uma lista de espaços livres. Quando a área de origem enche, ou seja, o ponteiro do próximo livre aponta o final da origem, a varredura da coleta de lixo tem início. Ela percorre todo o espaço de origem e copia para a área de destino somente as variáveis/objetos alcançáveis a partir do conjunto raiz. Em seguida, o ponteiro de endereço livre passa a apontar para o próximo endereço após o último ocupado no destino e o espaço de destino se torna o espaço de origem e vice-versa. Portanto, todos as variáveis/objetos não alcançáveis que não foram copiados para o espaço o novo espaço de origem passam a ser considerados como liberados.

152
Q

Por que o uso de valores padrão para parâmetros e a coerção podem complicar a sobrecarga de subprogramas?

A

Porque demandam a inclusão de regras semânticas na linguagem para permitir a diferenciação dos subprogramas sobrecarregados em uma chamada. Por exemplo, no código 1, a valor padrão gera uma ambiguidade na chamada ao subprograma sub1. Será executada o subprograma com uma entrada ou o que possui duas, com y assumindo o valor padrão? A mesma situação ocorre no código 2, desta vez provocada por uma possível coerção do tipo int para float. Será executado o subprograma com o parâmetro do tipo int ou o que possui a entrada do tipo float? Normalmente, as linguagens possuem uma regra semântica que prioriza a opção mais estrita, que, em ambos os exemplos, é o primeiro subprograma.

153
Q

Vantagens e desvantagens da coleta de cópias

A

V: mais rápido q o marcar-varrer quando a qtd de objetos ativos é muito menor que metade da área da heap
D:* Reduz o tamanho da heap pela metade
* É mais lento que o marcar-varrer quando a qtd de objetos ativos é próxima da metade da heap
* A execução também gera um custo que interrompe o programa até ser finalizada.

154
Q

Diferença entre parâmetros nominais e passagem por nome

A

O parâmetro nominal é a alternativa ao parâmetro posicional, em que o nome do parâmetro real deve ser explicitamente vinculado ao nome do parâmetro formal.
A passagem por nome é a substituição textual do nome do parâmetro real pelo valor do parâmetro formal.