Linguagens e Ambientes de Programação (2017/2018)



Teórica 26 (07/jun/2018)

Resolução de problemas, para ajudar na preparação do 2º teste.

Adaptado do problema 6 do exame de recurso de 21 de junho de 2014.

6. [4 valores] Vida. O objetivo deste problema é definir em JavaScript um sistema de classes adequado à representação de espécies de seres vivos e de relações entre espécies. Esta pergunta é um pouco extensa, mas descobrirá que o problema se resolve escrevendo pouco código.

Vamos considerar espécies e relações simbióticas.

Espécies: Uma espécie é um tipo de ser vivo, que pode ser tanto animal como vegetal. Exemplos: humano, lírio, cão, raposa, peixepalhaço, anémona. Cada espécie é implementada usando uma classe com atributos que podem ser bastante variados. Contudo, existem dois atributos que são comuns a todas as espécies: name (o nome da espécie, uma string) e time (o tempo médio de vida dos membros dessa espécie em segundos, um inteiro).

Relações simbióticas: Existem diversos tipos de relações simbióticas: mutualista quando os dois participantes recolhem benefícios; comensalistica quando o primeiro participante beneficia e o segundo nem beneficia nem é prejudicado (geralmente o primeiro alimenta-se dos restos deixado pelo segundo); parasítica quando o primeiro beneficia e o segundo é prejudicado. Há outros tipos de relações simbióticas conhecidas e mais poderão vir a ser descobertos no futuro.

Cada relação simbiótica envolve duas componentes, que tanto podem ser espécies como podem ser outras relações simbióticas. Por exemplo: a relação [peixepalhaço-anémona] envolve só duas espécies; a relação [humano-cão] também só envolve duas espécies; mas a relação [[humano-cão]-raposa] já envolve uma relação simbiótica (caçador + cão) e uma espécie (raposa). Cada tipo de relação simbiótica é implementado usando uma classe com atributos que podem ser bastante variados. Mas existem dois atributos que são comuns a todas as relações simbióticas: l (o primeiro participante na relação) e r (o segundo participante na relação).

Problema

O objetivo deste problema é a definição dum sistema de classes bem fatorizado e extensível, adequado à representação de aspetos da vida. Escreva código compacto, bem fatorizado e extensível. No futuro vamos querer acrescentar novas espécies e novas variedades de relações simbióticas, e o programa tem de estar preparado para isso.

Programe apenas as classes abstratas do sistema. Se escrever classes concretas para exemplificar, deixe-as ficar vazias. As funções que todos as classes devem suportar são as seguintes quatro:

Recomendamos que use as seguintes classes, já identificadas. Se preferir, pode ignorar o que se oferece e fazer diferente.


Uma solução



#80