Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Por otra parte hay algunos tipos de empleados de los que se requiere
mantener información especial, que seguramente afectará al cálculo
de su sueldo.
1
Ejemplo Empresa
Clase Empleado
datosPersonales (rel)
legajo
fechaIngreso
sueldoBasico
horarioTrabajo
tipoEmpleado
horasExtra
tituloUniversitario
cargo
montoVentasMes
...
El problema es que además es necesario tener una indicación de que tipo de empleado se
trata para poder decidir en cada momento que variables debo utilizar, y ademas las
variables restantes correspondientes a los otros tipos serán desaprovechadas.
3
Ejemplo Empresa
Empleado
EmpleadoDirectivo
Empresa EmpleadoVendedor
EmpleadoAdministrativo
...
1..*
Empleado
EmpleadoDirectivo EmpleadoVendedor
EmpleadoAdministrativo
ColEmpleados (adm1, vend1, vend2, emp1, adm2, vend3, emp2, emp3, dir1, ...)
Definimos una jeraquía de clases, con una clase raiz o clase padre que es la clase
Empleado y clases hijas que son EmpleadoDirectivo, EmpleadoAdministrativo y
EmpleadoVendedor.
Todo empleado que no sea vendedor, administrativo ni directivo será instancia de la clase
Empleado.
Todo empleado administrativo será instancia de la clase EmpleadoAdministrativo, y tendrá
sus propias características, es decir tendrá lo que tienen TODOS los empleados y la
información propia y el comportamiento propio de los administrativos. Entonces cada
instancia de EmpleadoAdminsitrativo tiene datosPersonales, legajo, fechaIngreso,
sueldoBasico, horarioTrabajo y … tituloUniversitario y horasExtra, que son propias de los
administrativos.
4
Ejemplo Empresa
Clase Empleado
datosPersonales (rel) , legajo, fechaIngreso,
sueldoBasico, horarioTrabajo
Clase EmpleadoAdministrativo
horasExtra, tituloUniversitario, ...
Clase EmpleadoVendedor
montoVentasMes, …
Clase EmpleadoDirectivo
cargo, ...
5
Ejemplo Empresa
Empresa
...
1..*
Empleado DatosPersona
EmpleadoDirectivo EmpleadoVendedor
EmpleadoAdministrativo
ColEmpleados (adm1, vend1, vend2, emp1, adm2, vend3, emp2, emp3, dir1, ...)
En particular “datosPersonales” podría ser una referencia a una instancia de una clase
DatosPersona, por lo que sería la implementación de una “asociación” o “agregación”, lo
que significa que las relaciones entre clases (asociación, agregación, composición)
también se heredan.
Todas las subclases de Empleado HEREDAN la relación que tiene Empleado con
DatosPersona
¿Podría Empleado ser una subclase de Persona, es decir sería correcto plantear una
relación de herencia entre la clase Persona y la clase Empleado?. Todo depende del
contexto en que se presente el problema, de la información que se tenga y de lo que se
requiera. Si bien un Empleado es una persona, puede haber parte del comportamiento
de una persona que no sea útil para un empleado. En el enunciado dado hay muy poca
información al respecto por lo que decidimos no considerar esa relación de herencia.
_________________________________________________________________________
La idea es mantener a TODOS los empleados en una misma colección, de manera que
para accionar sobre los empleados se trabaje sobre esa única colección. Entonces la
colección tendrá referencias a instancias: de Empleado, de EmpleadoAdministrativo, de
EmpleadoVendedor y de EmpleadoDirectivo 6
Ejemplo Empresa
Empresa
...
1..*
Empleado DatosPersona
calcularSueldo()
EmpleadoDirectivo EmpleadoVendedor
calcularSueldoDirectivo() calcularSueldoVendedor()
EmpleadoAdministrativo
calcularSueldoAdministrativo()
ColEmpleados (adm1, vend1, vend2, emp1, adm2, vend3, emp2, emp3, dir1, ...)
7
Ejemplo Empresa
Empresa
...
1..*
calcularSueldo() Empleado DatosPersona
EmpleadoDirectivo EmpleadoVendedor
calcularSueldoDirectivo() calcularSueldoVendedor()
calcularSueldo() EmpleadoAdministrativo calcularSueldo()
calcularSueldoAdministrativo()
calcularSueldo()
ColEmpleados (adm1, vend1, vend2, emp1, adm2, vend3, emp2, emp3, dir1, ...)
Entonces cuando en la empresa se requiera calcular el sueldo para todos los empleados,
se tendrá que preguntar de que tipo de empleado se trata para saber cuál es el mensaje
que se debe enviar. Si es una instancia de EmpleadoVendedor le envío
calcularSueldoVendedor, si es una instancia de EmpleadoAdministrativo le envío el
mensaje calcularSueldoAdministrativo, y …
No parece una buena decisión trabajar de esa forma …
Hay que utilizar mensajes polimórficos y redefinición de métodos
8
Herencia
permite que una clase sea definida del tipo de la otra
EmpleadoVendedor
Empleado
Además tendré que agregar variables para las relaciones que tenga la
clase vendedor con otras clases (si existen y no son heredadas) y
redefinir los métodos que sea necesario para especializar el
comportamiento
9
Herencia
El comportamiento y datos asociados con las clases hijo (subclase)
son siempre una extensión de las propiedades asociadas con la clase
padre (superclase), es decir un conjunto mayor que lo incluye
EmpleadoVendedor
El conjunto de propiedades
Empleado de la clase
EmpleadoVendedor
incluye al conjunto de
propiedades de la clase
Empleado
¿siempre?
Esa es el objetivo al trabajar con herencia y polimorfismo: que la
subclase extienda a la superclase.
10
Gráficamente la Herencia
La clase EmpleadoVendedor define sólo sus
propias operaciones y estructura interna y hereda
las operaciones y estructura definidas en la clase
Empleado
Diagrama de clases ●
un EmpleadoVendedor es
Empleado un Empleado
●
un EmpleadoAdministrativo
es un Empleado
11
Relación de herencia entre las clases A y B
A es superclase de B
B es subclase de A
Empleado es superclase de EmpleadoVendedor y
EmpleadoAdministrativo
EmpleadoVendedor es subclase de Empleado
EmpleadoAdministrativo es subclase de Empleado.
12
Mecanismo de búsqueda de mensajes
el objeto O recibe un mensaje
se busca el mensaje en la clase CO del objeto O
si el mensaje está definido en la clase CO, se ejecuta
si no se encuentra el mensaje se busca en la superclase
de
CO
si no se encuentra, sigue la búsqueda hacia arriba en la
jerarquía, recorriendo la cadena de superclases
si al llegar a la clase raíz no se encontró ERROR
13
Características:
Las clases están organizadas en una única jerarquía de
herencia
La clase más general, raíz del árbol es Object ó …
Una clase puede tener varias subclases
Una clase puede tener sólo una superclase directamente
superior en la jerarquía
Este tipo de herencia se denomina Herencia Simple
Cualquier clase que se agregue a la jerarquía debe ser
subclase (directa o indirectamente) de la clase raíz (Object)
14
las subclases pueden . . .
redefinir métodos agregar métodos
¿redefinir atributos? agregar atributos
pueden agregarse asociaciones/agregaciones a las
subclases
Principio de sustitutabilidad
Las subclases pueden agregar variables (para considerar los atributos específicos y las
relaciones específicas) y pueden agregar métodos correspondientes a los mensajes
propios que las instancias de la subclase pueden responder.
15
sustitutabilidad . . .
emp1 (Empleado) emp1 (EmpleadoVendedor)
… …
valor := emp1 calcularSueldo. valor := emp1 calcularSueldo.
laEmpresa calcularTotal: valor. laEmpresa calcularTotal: valor.
16
Herencia
la clase de un objeto describe su estructura
especificando las variables instancia de los objetos
cada subclase puede declarar variables instancia
adicionales
la herencia es siempre transitiva, una clase puede
heredar características de varios niveles de
superclases
variables instancia de la clase: UNION de las
variables instancia de todas sus superclases y las
propias
Programación Orientada a Objetos 2020
17
17
Herencia
Clase C1 Clase C2 subclase de C1
Var. Instancia: Var. Instancia:
x1, x4,
x2, x5,
x3 x6
18
¿Clase abstracta ó concreta?
no puede tener
instancias
describe atributos y
comportamiento común tiene instancias
a sus subclases todos los métodos están
tiene operaciones implementados
abstractas puede haber
implementaciones
diferentes en subclases
sin implementación
solo signatura
Programación Orientada a Objetos 2020
19
19
¿clase abstracta?
clase A
¿clase abstracta
ó concreta?
clase B clase C
NO
¿clase abstracta? clase
CONCRETA
Programación Orientada a Objetos 2020
20
20
Ejemplo de jerarquía de clases en Smalltalk
Object
–Magnitude
•Character
•Number
». . .
»Fraction
»Integer
» SmallInteger
»…
». . .
•TimeSpan
». . .Date
21
Ejemplo de jerarquía de clases en Smalltalk
22
Ejemplo de jerarquía de clases en Smalltalk
•Number define el método unario negated
•SmallInteger
– hereda el método negated
– no lo redefine
–utiliza el código implementado en Number
23