1/7 Programação com Objectos 1º Teste Tipo • 1º Semestre (90 minutos) Nome: _____________________________________________ Primeira Parte (7 valores) PERGUNTA NOTA Segunda Parte (3 valores) PERGUNTA 1.1 2.1 1.2 2.2 1.3 2.3 1.4 2.4 RESPOSTA 2.5 1ª PARTE 2ª PARTE certas 0.6 / erradas -0.15 / ausentes 0 Para alterar uma resposta: riscar a resposta antiga e escrever à frente a nova resposta. Considera-se ausência de resposta a apresentação de várias repostas a uma pergunta, mesmo que uma delas esteja certa. Consideram-se não respondidas as perguntas cujas respostas não estejam assinaladas nesta tabela. 2/7 1.1. (3.0) Considere o seguinte domínio: Uma editora gere vários tipos de publicação (livros, revistas e tabloides), cada um composto por várias peças (artigos, fotografias e publicidade). Podem ser criados mais tipos, tanto de publicação, como de peça. Nem todos os tipos de peça se podem incluir todas em todas as publicações: nos livros, apenas são incluídos artigos; nas revistas, podem ser inseridos artigos e fotografias; nos tabloides, todas as peças podem aparecer. Todas as publicações e peças são identificadas por um número inteiro. As publicações e peças têm ainda a indicação de qual é o título e de quem é o autor. A editora mantém sobre os seus autores um registo, no qual inclui (sobre cada um) o nome e o número de telefone. A forma de disponibilização de publicações, i.e., papel, web, meios móveis, etc., permite oferecer variedade ao consumidor, mas complica a definição de uma arquitetura flexível para a aplicação. Inicialmente, estão definidos dois formatos: textual e estruturado. No formato textual, os atributos das publicações são apresentados sucessivamente e as peças e seus atributos são também simplesmente apresentados de forma textual simples (as fotografias são representadas pelo seu título). No formato estruturado, em XML, cada publicação é iniciada e terminada por uma “tag” que a caracteriza (respetivamente, <book>, <magazine>, etc. e </book>, etc.), o mesmo se passando com as peças. Os atributos são apresentados como atributos XML (e.g., para o autor de um livro: <book author="anónimo">). Os elementos internos são ancorados dentro dos externos, como é habitual em XML. A solução de apresentação deve permitir flexibilidade na definição de novas formas de apresentação sem impacto no código existente. Desenhe o diagrama de classes UML correspondente ao domínio apresentado. Represente todas as classes (seus nomes, métodos e atributos). Indique também as relações de herança, associação e agregação. 3/7 1.1. (espaço adicional) 4/7 1.2. (1.0 val.) Modele e implemente a classe Table que contém um número fixo de inteiros (especificado na altura da criação das suas instâncias). Essa classe possui um método (print) que permite imprimir todo o conteúdo, aplicando uma transformação a cada valor. A transformação aplicada varia de acordo com o tipo do objecto Transform, passado como como argumento de print. As potenciais transformações têm um método transform (aceita um inteiro e devolve outro inteiro) que permite modificar um valor inteiro de uma forma específica. Defina os conceitos Table e Transform. Defina ainda duas transformações: uma que calcula o sucessor de cada inteiro (Successor); e outra que calcule o quadrado de cada um dos valores da tabela (Square). Pode realizar outros conceitos/métodos que julgue necessitar. Evite repetições de código. 5/7 1.2. (espaço adicional) 6/7 1.3. (1.5 val.) Os mecanismos de herança entre classes e de composição de objetos são, por vezes, apresentados como alternativos, face à disponibilização de funcionalidade ao código de uma classe. Compare-os, em termos de potencialidade e flexibilidade. __________________________________________________________________________________________________ __________________________________________________________________________________________________ __________________________________________________________________________________________________ __________________________________________________________________________________________________ __________________________________________________________________________________________________ __________________________________________________________________________________________________ __________________________________________________________________________________________________ __________________________________________________________________________________________________ __________________________________________________________________________________________________ __________________________________________________________________________________________________ __________________________________________________________________________________________________ __________________________________________________________________________________________________ 1.4. (1.5 val.) Relacione o mecanismo de herança e o conceito de polimorfismo e diga de que forma potenciam o desenvolvimento incremental e evitam a repetição de código. Na discussão, foque os aspetos positivos e possíveis limitações. Que conceitos estão disponíveis em Java para realizar aqueles mecanismos? Ilustre com um exemplo. __________________________________________________________________________________________________ __________________________________________________________________________________________________ __________________________________________________________________________________________________ __________________________________________________________________________________________________ __________________________________________________________________________________________________ __________________________________________________________________________________________________ __________________________________________________________________________________________________ __________________________________________________________________________________________________ __________________________________________________________________________________________________ __________________________________________________________________________________________________ __________________________________________________________________________________________________ __________________________________________________________________________________________________ 7/7 2.1. Considere o diagrama UML da figura 1 (à direita). Qual das seguintes afirmações está correta? (a) a implementação de doThat tem de estar necessariamente em A (b) doThat não está definido para B (c) doIt pode ser diretamente invocado através de referências para I (d) A fornece a implementação para métodos declarados por I (e) A é uma classe derivada de B 2.2. Em Java, qual das seguintes frases está correta? (a) uma classe interna não pode ser anónima (b) uma exceção pode ser apanhada e relançada (c) uma classe anónima não pode implementar uma interface (d) os métodos de classes anónimas não podem lançar exceções (e) uma classe abstrata pode ser instanciada se definir pelo menos um construtor Figura 1 (todos os métodos estão implementados) 2.3. Em Java, um método declarado private... (a) não pode chamar outros métodos (b) não pode ser redefinido (c) não pode ser declarado static (d) não pode ser usado por construtores (e) pode ser acedido por classes da mesma package 2.4. Em Java, o mecanismo de redefinição de métodos... (a) não pode ser utilizado por classes anónimas (b) permite redefinir numa subclasse qualquer método de uma superclasse (c) funciona apenas se os métodos não forem declarados static (d) não funciona para métodos públicos (e) nenhuma das anteriores 2.5. Em Java, a utilização da palavra protected... (a) indica que apenas as classes da mesma package podem aceder ao membro da classe em causa (b) permite definir um atributo como sendo constante (c) permite acesso aos membros da classe assim declarados, por parte de classes dela derivadas, definidas em outras packages (d) permite garantir que um método assim declarado não altera o objeto sobre o qual é chamado (e) impede o acesso aos membros assim declarados (i.e., apenas a própria classe lhes tem acesso) NÃO ESQUECER DE PREENCHER A FOLHA DE ROSTO