Programação Orientada por Objectos OT3: Herança e Polimorfismo 1. Considere a hierarquia representada na figura abaixo, onde as caixas a tracejado contêm, como comentários, a implementação das funções membro. A C B int a; int b; int c; m1() m2() m1() return a+b; return c; return a; a) Defina as classes A, B e C, incluindo construtores. b) Indique os sucessivos valores porque passam as variáveis de instância durante a construção de um objecto da classe C. c) Todos os objectos desta hierarquia deverão saber responder à mensagem isC(), que responde true se o receptor é uma instância de C, responde false caso contrário. Implemente esta funcionalidade. 2. Para o desenvolvimento de um determinado jogo é necessário implementar: a) A classe Jogador. Esta classe tem como membros de dados nome e número, que deverá ser único, i.e., em cada instante, não deverá haver dois objectos desta classe com o mesmo número. A classe deve implementar ainda a função joga() que escreve "Jogador.joga” no ecrã. b) A classe JogadorAutomatico. Esta classe é uma sub classe de Jogador e implementa a sua versão da função joga() que escreve "JogadorAutomatico.joga" no ecrã. c) A classe Jogo. Esta classe tem como membro de dados um array de jogadores. Num jogo, no máximo só poderão existir 4 jogadores, independentemente de serem automáticos ou não. A classe implementa a função membro jogo(). Esta função percorre uma única vez o array de jogadores. Por cada jogador, escreve o nome e invoca a função joga(). Defina a classe Jogo. 3. Considere a classe ContaOrdem que modela o funcionamento (simplificado) de contas bancárias. http://w3.ualg.pt/~jvo/poo POO OT 3 - 1/2 Programação Orientada por Objectos i) Proponha um conjunto de atributos, propriedades ou características que habitualmente definem as contas à ordem. São exemplos, para além do seu saldo, o número. Represente esses atributos numa classe, em UML. ii) É necessário manter um registo de todos os movimentos efectuados uma conta, desde a sua criação. Considere que um movimento é caracterizado por um número de ordem; tipo, que poderá ser levantamento ou depósito; data; descrição e valor. Construa um diagrama em UML, que modele o pretendido. iii) Implemente o diagrama de classes identificado nas alíneas anteriores. Após ter aberto duas contas, atribuídas a 2 titulares diferentes e ambas com saldo inicial nulo, teste as suas classes com os seguintes movimentos: data 1/9/02 1/10/02 110/02 2/10/02 10/10/02 movimento valor (euros) levantamento 1000 depósito 1000 depósito 200 levantamento 50 Transferência 50 Origem A A A A A Conta Destino B seguidamente visualize o extracto de movimentos da conta A e o saldo da conta B, os quais devem indicar o número da conta e o nome do titular. 4. Implemente o diagrama de classes necessário à resolução de instâncias do seguinte problema (exemplo 2 da aula teórica 4). Para a implementação de um editor gráfico é necessário guardar e manipular figuras geométricas a duas dimensões. O editor suporta rectas (definidas por dois pontos representativos), triângulos (representados por três pontos representativos), rectângulos (representados por quatro pontos representativos), polígonos (representados por um número finito de pontos representativos) e circunferências (representadas por um ponto e um raio). Todas as figuras geométricas deverão ser capazes de responder o seu perímetro – O perímetro de uma circunferência, pc, é dado por pc=2Πr, o perímetro de qualquer outra figura fechada é dado pela soma do comprimento dos seus lados. Adicionalmente, um rectângulo deverá saber responder se é, ou não, um quadrado e um triângulo deverá saber se é, ou não, um triângulo rectângulo. http://w3.ualg.pt/~jvo/poo POO OT 3 - 2/2