Teste de Programação com Objectos
Licenciat. em Eng. Informática e de Computadores
Prof. responsável: Nuno Mamede
Teste Tipo
1º Semestre
Bom dia! Escreva já o seu número em todas as folhas da prova.
O teste está dividido em duas partes. A primeira parte tem a cotação máxima de 7,5 valores e contém
15 perguntas de resposta múltipla (cinco respostas possíveis), devendo assinalar na tabela da segunda
folha deste teste a resposta correcta (só há uma resposta correcta) para cada pergunta. Para efeitos
classificativos só se considerarão as respostas assinaladas nesta tabela.
Se se enganar, risque a resposta dada e escreva à frente a nova resposta. Se deixar duas respostas,
mesmo que uma delas seja a correcta considerar-se-á uma pergunta não respondida (ausência de
resposta).
A segunda parte tem a cotação máxima de 12,5 valores e contém 5 perguntas abertas, sendo
aconselhável limitar o tamanho das respostas ao espaço disponível. O teste tem a duração de 2 horas.
Durante esta prova não há esclarecimento de dúvidas. Se detectar algum erro, que tenha influência na
resolução de um exercício, assinale-o. Se tiver razão ser-lhe-á atribuída a totalidade da cotação dessa
pergunta.
Boa sorte!
Respostas certas:
Aluno Número:
Respostas erradas:
Nome: __________________________________
Perguntas não respondidas:
Licenciatura: _____________________________
Perguntas. Abertas:
Classificação final:
PÁGINA 2
ALUNO NÚMERO:
1ª PARTE
(cada resposta certa=+0,5; cada resposta errada=-0,125; ausência de resposta=0,0)
RESPOSTAS:
Resposta
escolhida
PERGUNTA
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PERGUNTAS:
(cada resposta certa=+0,2; cada resposta errada=-0,05; ausência de resposta=0,0)
1. Qual das seguintes afirmações está correcta, tendo em consideração o diagrama UML:
B
A
A
A e B são classes derivadas
D
A é a classe derivada
B
nem A nem B são classes derivadas
E
nenhum dos anteriores
C
B é a classe derivada
PÁGINA 3
ALUNO NÚMERO:
2. Uma das vantagens da utilização de polimorfismo é:
A
a execução do código ser mais rápida
D
eliminar classes desnecessárias
B
facilitar a adição de novos tipos
E
nenhum dos anteriores
C
melhorar a verificação de tipos na
compilação
D
não ter membros privados
3. Uma classe “abstracta” tem como característica?
A
corresponder à realização de interfaces
B
estar sempre na raiz da árvore hierárquica E
C
não ter instâncias
nenhum dos anteriores
4. Em JAVA, de quem é a responsabilidade pela destruição dos objectos no monte?
A
programador (sempre)
D
programador (só para constantes)
B
colector de lixo (sempre)
E
nenhum dos anteriores
C
colector de lixo (só para referências)
5. Em JAVA, a dimensão de um objecto do tipo vector:
A
tem de ser conhecida na compilação
D
B
tem de ser conhecida na criação do vector E
C
pode ser alterada durante a execução
os dois anteriores
nenhum dos anteriores
6. Em JAVA, durante a iniciação de um objecto é recursivamente evocado o construtor de omissão da
classe de base. O programador tem a opção de chamar outros construtores (não os de omissão) desde
que use a palavra reservada:
A
“upper”
D
“super”
B
“this”
E
nenhum dos anteriores
C
“base”
7. Em JAVA, uma interface pode ser estendida:
A
por agregação
D
as duas anteriores
B
por herança de uma interface
E
todas as anteriores
C
por herança de várias interfaces
8. Em JAVA, quando se pretende criar uma classe para ajudar à solução de um problema, mas não se
quer que esteja disponível para qualquer outro uso, pode-se usar uma:
A
interface
D
classe abstracta
B
classe protected
E
nenhum dos anteriores
C
classe constante
PÁGINA 4
ALUNO NÚMERO:
9. A associação de uma posição de memória (código de um método) a um identificador (nome do
método) denomina-se:
A ligação
D sobrecarregar
B
evocação
C
polimorfismo
E
nenhum dos anteriores
10. Quais são as linhas do seguinte programa que contêm instruções ilegais:
Ficheiro Beta.java
Ficheiro Gamma.java
1. package Greek;
15. package Greek;
2. class Alpha {
16. class Gamma {
3.
protected int x1;
17.
void accessMethod() {
4.
private
int y1;
18.
Beta b = new Beta();
5.
public
int z1;
19.
b.x1 = 10;
6.
int k1;
20.
b.y1 = 10;
7. }
21.
b.z1 = 10;
8.
22.
b.k1 = 10;
9. public class Beta extends Alpha{
23.
b.x2 = 10;
10. protected int x2;
24.
b.y2 = 10;
11. private
int y2;
25.
b.z2 = 10;
12. public
int z2;
26.
b.k2 = 10;
13. int k2;
27.
}
14. }
28. }
A
linha 20 e linha 24
D
linha 23, linha 24, linha 25 e linha 26
B
linha 19, linha 20, linha 23 e linha 24
E
nenhuma das anteriores
C
linha 19, linha 20, linha 21 e linha 22
11. Qual é o padrão de desenho que tem o objectivo de:
a) compor objectos em estruturas (árvores);
b) tratar objectos individuais e composições uniformemente.
A
Command
D
Visitor
B
Strategy
E
TemplateMethod
C
Composite
12. Qual é o padrão de desenho que tem a seguinte estrutura:
A
Composite
D
Iterator
B
Command
E
nenhum dos anteriores
C
Visitor
13. Qual é o padrão de desenho que tem o objectivo de:
a) Transformar um pedido num objecto
PÁGINA 5
ALUNO NÚMERO:
b) Parametrizar clientes com diferentes pedidos, filas de espera, lista de pedidos, …
c) Anular o efeito de operações previamente executadas
A
Command
D
Visitor
B
Bridge
E
Flyweight
C
Strategy
14. Qual é o padrão de desenho que tem como participantes “Client”, “Invoker”, “ Receiver” e outros dois
participantes com o nome do próprio padrão de desenho:
A
Visitor
D
Iterator
B
Command
E
nenhum dos anteriores
C
Strategy
15. Qual é o padrão de desenho que tem a seguinte estrutura:
A
Composite
D
Iterator
B
Visitor
E
nenhum dos anteriores
C
Command
PÁGINA 6
ALUNO NÚMERO:
2ª PARTE
(5 perguntas com a cotação máxima de 12,5 valores
a cotação de cada pergunta está indicada entre parêntesis)
1. (2,0 valores) Relacione os conceitos de “desenvolvimento incremental” com o de “herança”.
(Só se avaliam as ideias expressas na resposta e não a quantidade de palavras usadas)
______________________________________________________________________________________
______________________________________________________________________________________
______________________________________________________________________________________
______________________________________________________________________________________
2. (1,5 valor) Considere o seguinte contexto. Uma loja de produtos informáticos vende produtos simples
como memórias, placas gráficas, discos e ratos, por exemplo. A loja também vende outro tipo de
produtos designados como produtos agregados. Um produto agregado resulta da combinação de outros
produtos, simples ou agregados, disponíveis na loja. Por exemplo, a loja vende configurações de
computadores, em que cada configuração é representada por uma dada placa gráfica, disco, quantidade
de memória, leitor de DVD ou CDROM, etc ... . Se tivesse que fazer uma aplicação que faça a gestão
de todos os produtos à venda na loja, qual o padrão de desenho que aplicaria para representar os dois
tipos de produtos que existem por forma a que a aplicação não tenha que tratar cada tipo de produto de
forma distinta? Descreva sucintamente como aplicaria o padrão escolhido neste contexto.
______________________________________________________________________________________
______________________________________________________________________________________
______________________________________________________________________________________
______________________________________________________________________________________
______________________________________________________________________________________
3. (1,5 valor) Suponha o seguinte contexto. Uma folha de cálculo é constituída por células e fórmulas. O
valor de uma célula pode ser dado por uma constante ou pelo resultado da aplicação de uma fórmula.
Uma fórmula é definida como uma função matemática aplicada a um dado conjunto de células e está
associada a uma dada célula. Por exemplo, uma fórmula pode ser definida como o somatório dos
valores das células A2, B2 e C3. Sempre que uma célula muda de valor, pretende-se que haja uma
actualização automática de todas as fórmulas onde esta célula aparece. Qual o padrão ou padrões de
desenho que acha conveniente utilizar neste caso para concretizar esta interacção entre células e
fórmulas? Descreva sucintamente como aplicaria o ou os padrões escolhidos neste contexto.
______________________________________________________________________________________
______________________________________________________________________________________
______________________________________________________________________________________
______________________________________________________________________________________
______________________________________________________________________________________
PÁGINA 7
ALUNO NÚMERO:
4. (2,5 valores) Desenhe o “diagrama de classes” UML do seguinte programa JAVA. Represente
unicamente as classes pelos seus nomes e métodos (não refira atributos), e as relações de herança e de
agregação.
import java.util.*;
interface Xyz { Xyz cloan(); }
class Tom implements Xyz {
public Xyz
cloan()
{ return new Tom(); }
public String toString() { return "ttt"; }
}
class Dick implements Xyz {
public Xyz
cloan()
{ return new Dick(); }
public String toString() { return "ddd"; }
}
class KKK {
private Map _prototypes = new HashMap();
public KKK add(Object obj) {
_prototypes.put(obj.getClass().getName(),
obj);
return this;
}
public Xyz makeObject( String s ) {
return ((Xyz)_prototypes.get(s)).cloan();
}
}
public class KKKProto {
public static void main( String[] args ) {
class Harry implements Xyz {
public Xyz
cloan()
{ return new Harry(); }
public String toString() { return "hhh"; }
}
KKK k = new KKK();
k.add(new Tom()).add(new Dick()).add(new Harry());
for (int i=0; i < args.length; i++)
System.out.println(k.makeObject(args[i]));
}
}
PÁGINA 8
ALUNO NÚMERO:
5. (2,0 valores) Desenhe o “diagrama de sequência” UML correspondente à execução do seguinte
programa JAVA. O diagrama de sequência deve conter os nomes das mensagens trocadas, mas não é
necessário representar os argumentos dessas mensagens nem as correspondentes ao retorno.
class Fabrica{
public void produz(Peca p1, Fornecedor f1) {
Maquina m1 = escolhe(p1);
p1.faz(f1.obtem(p1),m1);
}
public Maquina escolhe(Peca p1) {...}
}
class Peca{
public void faz(String s1, Maquina m1) {
m1.executa(s1);
}
}
class Maquina{
public void executa(String s1) {...}
}
class Fornecedor {
public String obtem(Peca p1) {...}
}
public class Executa {
static Peca pe= new Peca();
static Fornecedor fo = new Fornecedor();
static Fabrica fa = new Fabrica();
public static void main( String[] args) {
fa.produz(pe, fo);
}
}
PÁGINA 9
ALUNO NÚMERO:
6. (3,0 valores) Defina em Java a classe FilaDeClientes cujos objectos são filas de clientes que estão em
lista de espera para comprar um telefone. Esta classe deve ter três operações: (i) para inserir um cliente
no final da fila; (ii) remover o primeiro elemento da fila e, em seguida, devolvê-lo; (iii) remover da
fila um cliente com um dado número. Ignore os casos de erro (por exemplo, remoção de um cliente
inexistente). Use um vector para guardar os clientes, em cada instante existem no máximo 100
clientes. Os clientes são representados pela classe Cliente e são identificados por um número de
cliente. A classe cliente tem um método, obtemNumero, que devolve o número de cliente.
Download

Enunciado