Je suis d'accord avec Kevin (
./12) : le polymorphisme parait bien.
Si l'interface parait lourde, pense à ce que tu peux factoriser pour simplifier l'interface...
Par exemple, tu peux avoir
Bloc:receiveEvent(Event) qui factorise toutes les réceptions d'événements.
Tu peux aussi mettre dans la classe Bloc des méthodes par défaut (vides) pour n'écrire que les méthodes nécessaires dans les blocs spécifiques.
La seule fois où j'ai essayé de faire un programme générique avec une super archi modulaire qui fait tout, je me suis complètement planté.
Il vaut mieux rester simple (principe KISS).