El problema se reduce a una parte en donde debo tener 2 tipos de directorios.
- Directorio Empresarial.Almacenada contactos empresariales
- Directorio Personal.Almacena contactos personales
Practicamente ambos directorios deben realizar los mismos mètodos solo con la diferencia de el tipo de contacto que almacena y algunas consultas que se realizan dentro de los métodos..
Nota.Existe una superclase que es padrede "Contacto Empresarial" y "Contacto Personal" que lleva como nombre "Contacto"
Mi primera solución planteaba crear una interfaz "Directorio" como la siguiente(hacen falta definir un par de metodos).
Pero no sé si esta esta es la manera más correcta de hacerlo, es decir, los argumentos y retornos de los métodos ya estan definidos en la la interfaz lo cual en cierta manera me hace pensar en como tratar los casos especiales de cada clase que lo implemente, es decir, en mi clase "Directorio Empresarial" yo quiero que sus metodos solo acepten como argumentos y constructor datos de tipo "Contacto Empresarial" pero al yo implementar una interfaz esta me esta definiendo argumentos como de tipo "Contacto" que podria provocar errores en algunos metodos por lo cual entonces seria necesario lanzar una exepcion si me envian como argumento un objeto de tipo "Contacto"en vez de uno de tipo "Contacto Empresarial" .... y en ese caso me hace pensar que tal vez mi diseño es erroneo o que no sè como diseñar este tipo de problemas.
Yo necesito definir estos dos tipos de directorios por que aunque realmente tiene los mismos mètodos yo requiero que algunos mètodos hagan la misma tarea pero ademas hagan una consulta especifica a una base de datos en el caso de que sea un directorio empresarial/personal va ser distinta la consulta.
Tengo idea de un segundo planteamiento donde defino una clase abstracta "Directorio " que tiene como atributo un objeto de tipo "Contacto" y los respectivos metodos y que las clases derivadas ("Directorio Empresarial" y "Directorio Personal") solo implementa esos metodos pero caigo en la misma duda. Un Directorio Empresarial al heredar de Directorio va tener como atributo un objeto Contacto que puede almacenar por herencia un Contacto Empresarial pero ¿ Yo debo exigir que a esta clase Directorio Personal solo se le pueda pasar objetos Contacto Empresarial aún cuando los métodos que hereda y sobrescribe de la clase Directorio permiten que se la pase un objeto de Contacto?. Yo podría pasar por alto esto debido a que estoy haciendo el programa y sé como puedo controlar que esta clase de error no suceda pero me da la sensación de que como buena practica las clases no se deben prestar para dejar huecos que puedan causar errores al ser reutilizadas.