Eu quebro o princípio de Liskov se estabelecer um contrato através de uma interface?
Deste modo eu continuaria usando o polimorfismo mas não estipularia nenhuma pré ou pós condição. Não consigo encontrar nenhum outro modo para implementar a composição neste exercício. Até posso compor as classes, mas não faria sentido.
Modo tosco de implementação:
public class ProcessadorDeInvestimentos
{
static void Main(string[] args)
{
IList<Conta> contas = ContasDoBanco();
foreach (Conta conta in contas)
{
conta.SomaInvestimento();
Console.WriteLine("Novo saldo: " + conta.Saldo);
}
Console.ReadLine();
}
private static IList<Conta> ContasDoBanco()
{
List<Conta> contas = new List<Conta>();
contas.Add(umaContaComum(100));
contas.Add(umaContaComum(150));
contas.Add(umaContaEstudante(300));
return contas;
}
private static ContaEstudante umaContaEstudante(double saldo)
{
ContaComum conta = new ContaComum();
conta.ContaEstudante.Deposita(saldo);
return conta.ContaEstudante;
}
private static ContaComum umaContaComum(double saldo)
{
ContaComum conta = new ContaComum();
conta.Deposita(saldo);
return conta;
}
}