He modificado el programa a mi gusto, añadiendo una clase abtracta.