Problema con la definición de objetos

04/11/2007 - 21:29 por Javito | Informe spam
Hola a todos estoy creando un aplicación que utiliza una Clase base Empleado
que contiene todos los datos de los empleados de una empresa y otras, por
ejemplo un Gerente que hereda de Empleado y añade funcionalidad específica
tal como control de la actividad de empleados.

Por tanto sería Class Empleado y Class Gerente:Empleado

Intento que mi aplicación pregunte en el formulario Inicial el nombre de
Usuario y la clave y que con esos datos vaya a la Base de datos los valide y
compruebe la categoría y dependiendo de esa categoría cree un objeto
Empleado o Gerente y le permita acceder a la funcionalidad de la aplicación
que le esté permitido a cada uno, pero el problema que se me presenta es que
para que el objeto que tengo que crear sea global para toda la aplicación, y
verlo en todo el programa, necesito declararlo en Cabecera y luego cuando
tenga la categoría crear un objeto correspondiente a la categoría, y ese es
el problema yo no sé que categoría voy a tener y si las cruzo pasa lo
siguiente:

- Cabecera: Gerente Miobjeto;
- y luego resulta ser empleado MiObjeto=new Empleado() => MiObjeto vé
lo público de Gerentes.

- Cabecera Epleado MiObjeto;
- y luego resulta ser Gerente MiObjeto=new Gerente() => MiObjeto no vé lo
de Gerentes.

Debe haber alguna forma pero no se me ocurre, también pensé en declarar un
objeto de cada tipo y luego chequear el resto del programa cual no está
vacio pero es bastante engorroso y debe haber alguna otra forma.

un saludo
 

Leer las respuestas

#1 Alberto Poblacion
05/11/2007 - 07:57 | Informe spam
"Javito" wrote in message
news:
Hola a todos estoy creando un aplicación que utiliza una Clase base
Empleado que contiene todos los datos de los empleados de una empresa y
otras, por ejemplo un Gerente que hereda de Empleado y añade funcionalidad
específica tal como control de la actividad de empleados.

Por tanto sería Class Empleado y Class Gerente:Empleado

Intento que mi aplicación pregunte en el formulario Inicial el nombre de
Usuario y la clave y que con esos datos vaya a la Base de datos los valide
y compruebe la categoría y dependiendo de esa categoría cree un objeto
Empleado o Gerente y le permita acceder a la funcionalidad de la
aplicación que le esté permitido a cada uno, pero el problema que se me
presenta es que para que el objeto que tengo que crear sea global para
toda la aplicación, y verlo en todo el programa, necesito declararlo en
Cabecera y luego cuando tenga la categoría crear un objeto correspondiente
a la categoría, y ese es el problema yo no sé que categoría voy a tener y
si las cruzo pasa lo siguiente:

- Cabecera: Gerente Miobjeto;
- y luego resulta ser empleado MiObjeto=new Empleado() => MiObjeto vé
lo público de Gerentes.

- Cabecera Epleado MiObjeto;
- y luego resulta ser Gerente MiObjeto=new Gerente() => MiObjeto no vé lo
de Gerentes.

Debe haber alguna forma pero no se me ocurre,



La solución buena es la última, es decir, declaras un Empleado y le metes
dentro un Gerente cuando proceda. Para acceder a la funcionalidad
modificada, lo mejor mientras puedas es usar polimorfismo. Por ejemplo
declaras dentro de la clase empleado un método virtual llamado
CalcularIncentivos, y en la clase Gerente haces un override de dicho método.
Cuando llamas al método CacularIncentivos de tu objeto Empleado, si dentro
de esa variable está metido un Gerente, se ejecuta realmente el
CalcularIncentivos de Gerente y no de Empleado.

Por otra parte, si tienes campos o propiedades adicionales dentro
Gerente que no existen en Empleado, puedes acceder a ellos mediante un
"cast" en cualquier punto del programa en que los necesites:

Empleado MiObjeto;
MiObjeto = new Gerente();
...

if (MiObjeto is Gerente)
{
Gerente g = (Gerente)MiObjeto;
valor = g.Propiedad;
...
}

Preguntas similares