Por mucho que busco no encuentro ejemplos reales de programación OO, todo son simples ejemplos de una clase muy básica. Pero si nos remitimos a la realidad, nos topamos con diferentes problemas. A ver si alguien me da luz.
Pongo en antecedentes y luego pregunto. En cualquier website tenemos usuarios, en mi caso, ademas, hay empleados, clientes y proveedores.
Mi primera duda es como manejar estos "objetos".
La opcion A es crear una classe por cada tipo, clase usuarios, clase empleados, clase ...
La opcion B es crear una clase "Persona" con nombre, apellidos, ... y luego derivadas de ésta, clases Empleados, Usuarios, Clientes ...
La opción C es una clase que engloba a todos y tiene la propiedad "tipo" en donde especificas si es un empleado, usuario, etc.
Esta claro que cada tipo tiene algun atributo diferente, por ejemplo un empleado puede tener datos personales que un usuario no tiene. Según la teoría de programacion OO ¿ como debería programarlo ? A, B, C, D?????
Vale, ahora vamos a la segunda parte. Nos quedamos con la clase User y nos olvidamos de Empleados, Clientes ...
Un usuario se guarda en la tabla Usuarios de la BD. Supongo que de alguna forma debería heredar de otra clase cómo guardar y extraer la info de la BD. En el fondo haríamos algo como User->LoadByNick("nickname"), o bien User->Save()
¿ como hacerlo independiente de tipo de BD o formato ? Si en vez de usar Mysql quisiera grabar en un fichero ascii ? Debería heredar ? o bien obtener de una variable mas global el objeto "storage" y que este manejara si es una BD o un fichero ascii ...
Por último, continuando con la clase User. Imagina que hago una página que lista usuarios y hay un filtro por nick, puedes ver todos los usuarios o buscar los que contengan unos caracteres escritos por los usuarios.
Teniendo en cuenta que la clase User sólo contiene la información de un usuario ¿ hay que hacer una clase por encima que sea UsersList ? me explico, si creamos una clase con UsersList, con la funcion GetAll y la funcion FilterByNick("aaa").
Si es este caso: entendria de usar algo como Next() para recuperar el siguiente usuario y devolver el objeto User para imprimir el nombre y la fecha del último acceso.
Pero esto último me lleva a varios problemillas:
- Tanto la clase User como la Clase UsersList deben conocer como trabajar con la tabla Users.
- Si UsersList accede a la BD, entonces habria que crear un metodo de rellenar el objeto User a partir de los datos de Userlist.
- Si sólo necesito 2 campos de los 20, es un desperdicio de tiempo y recursos tener que coger siempre toda la información.
Gracias a todos.