Problema das moléculas da vida
Dificuldade única
Crie uma classe abstrata de nome AcidoNucleico que deverá ter os elementos membros:
- BasesNitrogenadas - propriedade pública de leitura e escrita do tipo string.
- Acucar - propriedade pública abstrata, somente leitura, do tipo string.
- AdicionarBase - método público abstrato sem retorno que receberá um char como parâmetro.
Herde da classe AcidoNucleico duas classes Helice e Rna.
A classe Rna deverá implementar o método AdicionarBase e a propriedade Acucar da seguinte forma:
- AdicionarBase: caso o parâmetro char seja um 'G', 'C', 'U' ou 'A' ele deverá ser concatenado à propriedade BasesNitrogenadas, caso contrário uma exceção InvalidOperationException deve ser lançada com a mensagem "Base inválida. Deve ser guanina (G), citosina (C), uracila (U) ou adenina (A)".
- Acucar: deve-se retornar a string "ribose".
A classe Helice deverá implementar o método AdicionarBase e a propriedade Acucar da seguinte forma:
- Caso o parâmetro char seja um 'G', 'C', 'T' ou 'A' ele deverá ser concatenado à propriedade BasesNitrogenadas, caso contrário uma exceção InvalidOperationException deve ser lançada com a mensagem "Base inválida. Deve ser guanina (G), citosina (C), timina (T) ou adenina (A)".
- Acucar: deve-se retornar a string "desoxirribose".
A classe Helice deve implementar também um método público de nome GerarIrma que não receberá parâmetros, mas retornará um objeto do tipo Helice. O comportamento deste método deve ser como o que se segue:
- Instanciar um objeto Helice.
- Para cada caractere em this.BasesNitrogenadas, chamar o método AdicionarBase do novo objeto criado substituindo 'G' por 'C', 'C' por 'G', 'T' por 'A' e 'A' por 'T'.
- Retornar o objeto Helice instanciado inicialmente. (Deve-se começar o processamento do primeiro caractere e seguir um por um até o último). Assim, se this.BasesNitrogenadas for 'GCTA' o objeto retornado terá BasesNitrogenadas igual a 'CGAT'.
Crie uma classe Programa com o entry point (o método Main) que execute os seguintes procedimentos:
- Solicite do usuário e adicione 10 bases a uma objeto Rna utilizando o método AdicionarBase.
- Imprima no console as bases nitrogenadas de Rna.
- Solicite do usuário e adicione 10 bases a uma objeto Helice utilizando o método AdicionarBase.
- Imprima no console as bases nitrogenadas da "irmã" através da chamada <objeto_helice>.GerarIrma().BasesNitrogenadas.
Caso o usuário informe uma base inválida deve ser informada a mensagem gerada pela exceção e solicitado um novo dado (o programa não deve encerrar no caso de um erro).
Caso seja necessário crie outros elementos membros necessários, bem como construtores padrões e campos.
Todas as classes devem pertencer ao espaço de nome (namespace) Lac.Prova1.Questao3.
Não imprima mensagens instruindo ao usuário o que fazer ou outra informação qualquer não solicitada.
Exemplo
G U A C T Base inválida. Deve ser guanina (G), citosina (C), uracila (U) ou adenina (A). G A A C C T Base inválida. Deve ser guanina (G), citosina (C), uracila (U) ou adenina (A). X Base inválida. Deve ser guanina (G), citosina (C), uracila (U) ou adenina (A). U GUACGAACCU A T C G A A U Base inválida. Deve ser guanina (G), citosina (C), timina (T) ou adenina (A). M Base inválida. Deve ser guanina (G), citosina (C), timina (T) ou adenina (A). A T T A TAGCTTTAAT