AOO

Visto 8 veces
Saltar al primer mensaje no leído

Edgar Ramos

no leída,
19 oct 2010, 8:24:0219/10/10
a altnet-...@googlegroups.com
Gente un saludo, 


Tengo una confusion con el siguiente contexto

Resulta que tengo que registrar la asistencia (ingresos y salidas) del personal, entre los objetos que identifique, se encuentran

Empleado y Horario, pude identificar 2 tipos de horarios HorarioFijo y HorarioVariable, que luego de factorizar de estos dos extraigo
un HorarioGeneral, del cual los dos anteriores Heredan.

Hasta aqui todo bien, veo una relacion de uno a uno existente entre Empleado y Horario
Al presentarle en pantalla al usuario para que asigne un horario especifico al empleado, este puede asignarle cualquiera de los dos
tipos de horarios, por lo cual no se de que forma hacer esta relacion entre Empleado y Horario

No quiero tener algo asi

public class Empleado {
..
  public virtual HorarioFijo {get; set;}
  public virtual HorarioVariable {get; set;}
..
}

tener una variable del tipo HorarioGeneral, internamente no poseo el resto de propiedades de sus clases hijas

O sera que tengo que ver la relacion desde el otro extremo ?, es decir, un horario (el que sea) tiene cero o mas
empleados asignados ?

Sus comentarios me son de gran ayuda

Saludos

Edgar

Angel Java Lopez

no leída,
19 oct 2010, 8:34:4619/10/10
a altnet-...@googlegroups.com
Hola gente!

Interesante, Edgar.

Primero, lo que yo haria seria registrar entradas y salidas. Luego, no entiendo en que lugar juega en tu caso, que un empleado tenga horario fijo o variable. Me lo imagino (por ejemplo, para calcular ausentismo, etc..), pero no quiero imaginar, podrias explicar en que momento se utilizan esos objetos? Y la diferencia de conducta que esperas obtener?

Nos leemos!

Angel "Java" Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez


2010/10/19 Edgar Ramos <eramo...@gmail.com>
--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a altnet-hispan...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/altnet-hispano?hl=es.

Juan Nallar

no leída,
19 oct 2010, 9:08:0019/10/10
a altnet-...@googlegroups.com
Hola Edgar.
 
Podrias usar una interfaz IHorario, implementada por los dos tipos de horario.
 
El empleado entonces tendría una propiedad the tipo IHorario, a la que podes asignarle cualquiera de los 2 :)
 
Espero que te sirva.
 
Aprovecho para saludar a la comunidad.

Walter Poch

no leída,
19 oct 2010, 9:32:5619/10/10
a altnet-...@googlegroups.com
Buenas gente, 

Según UML y Patrones de Larman, existen dos reglas del 100% y es-un para la generalización especialización que la podemos ver en: http://elvex.ugr.es/idbis/db/docs/design/4-heuristics.pdf

Si la clase general de Horario y sus dos hijas HorarioFijo HorarioVariable la cumplen, y un Empleado tiene SOLO una de las dos asignadas creo que podrías hacer:

public class Empleado{
public virtual Horario Horario {get;set;}
}

Y luego por ejemplo tener un HorarioViewModel que tenga todas las propiedades de HorarioFijo y HorarioVariable, y un HorarioFactory (http://en.wikipedia.org/wiki/Factory_method_pattern) que reciba el ViewModel y te devuelva las instancias de HorarioFijo o HorarioVariable según una propiedad bool del ViewModel bindeada a un Option de tu vista.

Eso es lo que se me ocurre, pero seguro aparece alguno con una mejor solución y aprendemos todos :D

Saludos,
Saludos,

Walter G. Poch
Sr. .Net Developer
--------------------------------------------
Cell: +54 (9 341) 3353273
walte...@gmail.com

Angel Java Lopez

no leída,
19 oct 2010, 9:42:1619/10/10
a altnet-...@googlegroups.com
Igual pregunto, porque si estuviera en un modelo que he conocido en una aplicacion, en mi caso, un empleado podria tener HorarioVariable desde que entro a trabajar hasta el 15 de Octubre, y desde ahi tener HorarioFijo.

Puede que sea asi: hay una Especificacion, por rango de dias (o tal vez para los dias Martes y Miercoles, no se) que indicara algo como: este dia tal, digamos Martes 10 de Octubre, el empleado Jose que sabemos que entro a la hora X y salio a la hora Y, no/si cumple con la Especificacion E. La especificacion puede decir:

- El empleado tiene que trabajar 8hs
- El empleado tiene que trabajar de 9 a 18hs
- El empleado es el hijo del duenio y puede hacer lo que quiera :-)

O quizas especificaciones como

- El empleado tiene que trabajar 40hs por semana, no importa como

O especificaciones como (me pasa en aplicaciones de choferes)

- El empleado tiene que trabajar minimo 20hs por semana, maximo 40hs, pero no puede trabajar mas de 12hs seguidas

Por eso pregunto, a Edgar: en que caso se usa luego HorarioFijo y HorarioVariable? En que caso de uso da distinto tener uno u otro?
2010/10/19 Walter Poch <walte...@gmail.com>

Carlos Peix

no leída,
19 oct 2010, 9:50:3019/10/10
a altnet-hispano
Hola Edgard,

Creo que es clave la pregunta que hizo Angel: cual es el codigo dentro de tu clase Empleado que querrias que funcione de una manera u otra de acuerdo al tipo de horario?

Yo (aunque con informacion limitada) veo una candidatura para resolver esto mediante el patron State (GoF), en cuyo caso el codigo "diferente" estaria dentro de las subclases de HorarioGeneral en lugar de estar sobre empleado.

Un saludo

----------------------------------
Carlos Peix

2010/10/19 Edgar Ramos <eramo...@gmail.com>
--

Edgar Ramos

no leída,
19 oct 2010, 11:49:1319/10/10
a altnet-...@googlegroups.com
Gracias gente, por eso me encanta esta lista, no es si no preguntar y obtengo respuesta, bueno

Angel
----

que un empleado tenga horario fijo o variable
----

Se logro identificar lo siguiente, existen empleados que ingresan a trabajar
1.- medio dia de 08:00 a 13:00
2.- jornada completa 08:00, 13:00, 14:00, 18:00, 13 y 14 son horas de salida e ingreso de la comida
3.- un empleado (familiar del dueño que estudia) que viene a trabajar durante el día a la hora que pueda, pero se le exije
    que cumpla algunas horas diarias de trabajo

Obviamente para cada empleado con su horario respectivo se verifica sus horas laborales, atrasos, etc, tal cual lo comentas,

Espero haberme explicado bien, sigo analizando lo que me comentan

Edgar Ramos

no leída,
19 oct 2010, 11:53:2619/10/10
a altnet-...@googlegroups.com
Me falto comentar que mi caso horario variable, es aplicado unicamente a aquellos empleados que no se sabe su ingreso ni salida (si este caso es para familiares) pero diariamente cumplen horas especificas de trabajo

Saludos

Edgar Ramos

no leída,
19 oct 2010, 11:55:5719/10/10
a altnet-...@googlegroups.com
Aquellos empleados que sabemos tienen uno o mas ingresos o salidas en el dia son candidatos a un horario fijo
Un empleado tiene uno y solo un horario, pudiendo ser este fijo o variable

Saludos

Pedro J. Molina

no leída,
19 oct 2010, 14:09:4919/10/10
a altnet-...@googlegroups.com
Hola Edgar.
Si entendí bien tus requisitos, son los siguientes:

1.- Una persona tiene siempre un solo horario (digamos que estamos interesados en el horario actual y no en pasados o futuribles).
2.- Dicho horario puede ser fijo o variable.
3.- Nada impide que dos personas compartan un mismo horario (es habitual).

Si es así como resumí, lo modelaría del siguiente modo:

http://yuml.me/diagram/scruffy/class/[Empleado]0..*-<>Horario-1:1[Horario], [Horario]^-[HorarioFijo], [Horario]^-[HorarioVariable]


Como comentaba Juan Nallar o Walter, implementar Horario como una interfaz (IHorario) te permite llegar a montar una unica propiedad, que es lo que uno espera desde el punto de vista conceptual:

public class Empleado {
..
  public virtual IHorario Horario {get; set;}
..
}

Obviamente, la parte común del horario (propiedades comunes) estarán disponibles en la signatura de IHorario.
Sin embargo, en algún momento tal vez tengas que especializar tus algoritmos para tratar de modo diferente un HorarioFijo respecto a un HorarioVariable.
O bien definir métodos o propiedades comunes en la signatura de la interfaz como por ejemplo:

public interface IHorario {
...
    int HorasTotalesSemanales {get; }
...
}

Donde la implementación de esta propiedad deriva sera, a todas luces, diferente en cada implementación de horario y podrás usarlos de modo genérico gracias al polimorfismo.

Un saludo,



--

Pedro J. Molina

no leída,
19 oct 2010, 14:11:2119/10/10
a altnet-...@googlegroups.com
Se corto el enlace al diagrama.

Edgar Ramos

no leída,
19 oct 2010, 14:16:2319/10/10
a altnet-...@googlegroups.com
Gracias a todos,su ayuda fue fenomenal, y si Pedro ese contexto que decribes es el mío, por cierto el grafico no se puede ver ni en el primero correo ni en el segundo, pero te capte la idea

Muchas gracias

Walter Poch

no leída,
19 oct 2010, 14:19:3919/10/10
a altnet-...@googlegroups.com
Edgar aquí se ve el "UML"

Saludos,

Pedro J. Molina

no leída,
19 oct 2010, 14:22:0819/10/10
a altnet-...@googlegroups.com
La URL que adose por dos veces no se dejo empotrar.
Pero si toman y copian y pegan lo siguiente en el navegador, con un poco de suerte, seguro que lo ven completo:

Pedro J. Molina

no leída,
19 oct 2010, 14:26:2719/10/10
a altnet-...@googlegroups.com
Nada que no Walter, a Google no le acaban de gustar las URLs con espacios. Probaremos con una ultima sin ellos. A ver si a la quinta va la vencida...

Edgar Ramos

no leída,
19 oct 2010, 14:29:1719/10/10
a altnet-...@googlegroups.com
Los dos enlaces funcionan muy bien

Saludos

Carlos Peix

no leída,
20 oct 2010, 5:02:2720/10/10
a altnet-hispano
Hola Edgar,

Veo que has resuelto tu duda pero ahora me queda una a mi y insisto con alguna pregunta puesto que le veo potencial a este ejemplo en la VAN del proximo sabado sobre SOLID.

En tu primer post decias que desde la clase Empleado no te servia tener una propiedad de tipo HorarioGeneral (o IHorario) puesto que solo dispondrias de los metodos de esa clase no pudiendo acceder a los metodos de las subclases.

Luego en el resto de tus posts nunca mencionaste cuales serian esos casos en los que necesitas acceder a los metodos de las subclases (ver mi post anterior en el hilo).

Podrias mencionarme cuales son esos casos? (si no podes, no te preocupes, yo me imagino algunos para el ejemplo y listo)

Gracias

----------------------------------
Carlos Peix

2010/10/19 Edgar Ramos <eramo...@gmail.com>
Los dos enlaces funcionan muy bien

Edgar Ramos

no leída,
20 oct 2010, 11:14:3620/10/10
a altnet-...@googlegroups.com
Gracias Carlos

Seguro no me pierdo esa van, mi primer planteamiento que estuvo mal desde luego, analizaba de la siguiente forma,

.- Cada vez que ingrese un empleado voy a asociarle a este empleado, un horario especifico (cero o uno y no mas horarios), pudiense ser
   estos Fijo y Variable
.- Al identificar los atributos comunes de estos dos Tipos de Horarios, elegi un clase (no abstracta, no se me ocurrio en principio), en
   donde colocarlos HorarioGeneral y proceder a aplicar la herencia respectiva.
.- Al tener en empleado un atributo de tipo HorarioGeneral, asumia que, si creo un objeto HorarioFijo, y lleno sus propiedades, y asignarla a este atributo, luego para propositos de calculos no podría utilizar todas las caracteristicas (atributos y propiedades)

Si lo se suena básico, mi nivel no es el mejor y procuro aprendo de todos sus comentarios ( y de las van porsupuesto)

Saludos

Carlos Peix

no leída,
20 oct 2010, 18:02:4020/10/10
a altnet-hispano
Muchas gracias por tu tiempo Edgar.

Voy a suponer, a los efectos de la VAN, que se requiere una suerte de procesamiento al momento del ingreso y del egreso para, en los casos de horarios fijos, notiifcar incumplimiento de horario de entrada o de horas totales trabajadas.

Con esto me alcanza para el ejemplo y, con tu permiso, lo usare en la VAN, solo con los detalles que has publicado.

Gracias de nuevo

----------------------------------
Carlos Peix

2010/10/20 Edgar Ramos <eramo...@gmail.com>

Edgar Ramos

no leída,
20 oct 2010, 18:18:3120/10/10
a altnet-...@googlegroups.com
Gracias a ti Carlos y a todos, yo soy el mas favorecido en todo esto, y ahi estaré en la van, no puedo perderme por nada del mundo.


Saludos

Edgar
Responder a todos
Responder al autor
Reenviar
0 mensajes nuevos