3. Propiedad que permite
compartir información entre
dos clases, su objetivo es
evitar la redundancia.
Surge, ya que con
frecuencia entre algunos
objetos existen atributos y
métodos que son comunes.
• Ejemplo: Lavadoras, Pulidoras, Neveras,
Microondas, Tostadoras, Planchas, etc. son
todos ELECTRODOMÉSTICOS. Ellos
comparten algunas características comunes.
4. Características Comunes
de los Electrodomésticos
• Son aparatos para el
hogar
• Necesitan corriente
• Tienen un serial,
garantía, costo,…
5. • Proceso inverso a la
Generalización.
• En los Objetos existen
atributos y métodos que son
específicos (particulares) a
cada objeto.
• Ejemplo: Los Electrodomésticos (Lavadoras,
Pulidoras, Neveras, Microondas, Tostadoras,
Planchas, ...) Si bien es cierto que comparten
algunas características (artefactos hogar, necesitan
corriente, serial, garantía,..) también es cierto que
cada uno tiene características y comportamiento
propio (específico).
6. Se utiliza solo
para planchar ropa
Se utiliza solo
para tostar pan
7. • La herencia o relación es-un,
es una relación que se
establece entre dos clases,
que permite definir nuevas
clases (específicas) a partir
de una clase base ya
existente (general).
• Las nuevas clases creadas se denominan clases
derivadas (clases hijas ó subclases) y heredan los
atributos y métodos de la clase base (clase padre ó
superclase), pudiendo las clases derivadas
redefinir los métodos que hereda de la clase
padre y añadir métodos propios.
8. • Las clases derivadas son una especialización de
la clase base.
• La clase base es la generalización de las clases
derivadas.
Clase Base (Padre)
ELECTRODOMÉSTICO
Clase Derivada Clase Derivada
(Hijo) (Hijo)
Tostadora Plancha
9. • En la clase base (superclase, padre) se encuentran
los atributos y métodos que son comunes.
• Las clases derivadas (subclases, hijas) además de
las características comunes (localizadas en la
superclase) tienen su propias características.
• El objetivo final es la
reutilización o
reusabilidad de código
anteriormente
desarrollado. Con esto
se reduce la cantidad
de código redundante
en componentes de las
clases.
10. Clase base (superclase)
Atributo A , B Método X , Y
Atributo A , B Atributo A , B
Atributo A , B
Método X , Y Método X , Y
Atributo C Método X , Y
Atributo D, E
Método Z Método T Método W
Clase derivada Clase derivada Clase derivada
(subclase) (subclase) (subclase)
La herencia supone una clase base y una Características
jerarquía de clases que contienen clases comunes
derivadas de la clase base. Las clases derivadas
heredan los atributos y métodos de su clase base, Características
añadiendo sus propios atributo(s) y método(s), específicas
incluso puede cambiar aquellos elementos de la
clase base que necesita sean diferentes.
11. Es una herramienta poderosa que
proporciona un marco adecuado para
producir software fiable, comprensible, de
bajo costo y reutilizable (no redundante).
12. Clase base (superclase)
PERSONA
Clase derivada
Clase derivada
(subclase)
(subclase)
Clase derivada Clase derivada
(subclase) (subclase)
Clase derivada
(subclase)
Una secretaria es una persona
Un médico es una persona ….
Un estudiante es una persona
13. Clase base (superclase)
TRANSPORTE
AÉREO TERRESTRE MARÍTIMO
Clase derivada Clase derivada
(subclase) (subclase)
Clase derivada Clase derivada Clase derivada Clase derivada
(subclase) (subclase) (subclase) (subclase)
Un avión es un medio de transporte aéreo
Un autobús es un medio de transporte terrestre ….
Un velero es un medio de transporte marítimo.
Todos a su vez son un medio de transporte
19. La declaración de herencia debe incluir la
palabra reservada class, el nombre de la nueva
clase, el especificador de acceso que indica el
tipo de herencia (pública, privada o protegida) y el
nombre de la clase base de la que se deriva.
20. El formato general es el siguiente:
Símbolo de derivación
class NombreClaseDerivada : tipo_herencia NombreClaseBase
{
private:
// nuevos miembros privados
……… específicos de clase derivada Especificador de
public: acceso (private,
// nuevos miembros públicos public, protected)
normalmente
…..…. específicos de clase derivada
public
};
21.
22. Como reglas se extrae:
– Los componentes ó miembros privados en
la clase base son inaccesibles (no utilizables)
por la clase derivada, para todos los modos
de derivación (private, protected, public).
– Derivando en modo privado se obtienen
miembros privados.
– Derivando en modo protegido se obtienen
miembros protegidos.
– Derivando en modo público se respetan las
características de los miembros de la clase
base.
23. Se dice que hay Herencia en C++, porque el
compilador permite dependiendo del tipo de
derivación, utilizar los atributos y métodos de
una clases desde otra.
La herencia permite que una jerarquía de clases
sea construida, moviéndose desde la más
general a la más específica.
El proceso implica primero
definir una clase base, que
define características
comunes a todos los objetos
que se derivarán de ella y
luego definir las clases
derivadas.
24. • En general, se debe utilizar la palabra
reservada public como tipo de herencia ya
que es la herencia más general, esto permite
conseguir que todos los miembros que son
públicos en la clase base permanezcan
públicos en la clase derivada.
El especificador de acceso es
opcional, pero si se omite el
compilador lo tomará por
defecto como private.
25. La derivación de clases
por el mecanismo de
herencia puede llegar a
muchos niveles de
profundidad, es decir,
una clase c1 puede
derivar de otra clase c2
que a su vez deriva de
otra clase c3 y así
sucesivamente.
26. • Son clases bases generales, que pueden
utilizarse para crear nuevas clases
derivadas en diversos planteamientos, de
acuerdo a la particularidad que se requiera.
• Estas clases bases pueden ser programadas
y colocadas como una librería genérica, su
objetivo es evitar la redundancia.
27. • Ejemplo: Ubíquese en un planteamiento
referido a un instituto educativo. Suponga
que necesitamos crear una clase para el
estudiante y otra clase para el profesor. De
ambos se requiere guardar los datos de:
cédula, nombre, dirección, …. (datos de
identificación). Evidentemente definimos una
clase base que podríamos llamar MPersona
y luego creamos dos clases derivadas una
MEstudiante y otra MProfesor.
28. • En otro instante, se requiere resolver un
planteamiento de una empresa, para controlar
la nómina de sus empleados. Por supuesto se
necesita tener los datos de identificación de
cada empleado (cédula, nombre, dirección,…..).
• ¿Qué hacemos?. Se podría crear para este
planteamiento en particular una clase
MEmpleado con todos sus atributos. Pero
estamos definiendo y programando
nuevamente atributos y métodos que ya
estaban en la clase MPersona del planteamiento
anterior (REDUNDANCIA)
29. • SOLUCIÓN. Crear una clase base genérica
llamada MPERSONA que puede ser utilizada
en cualquier planteamiento que se requiera.
• Así también, existen diversos planteamientos
en donde se debe trabajar con artículos (un
supermercado, una venta de repuestos, una
farmacia,…); de la misma manera podríamos
crear una clase base genérica llamada
MARTICULO que mantenga los atributos y
métodos generales para un artículo en
cualquier ámbito.
30. Los ejemplos antes citados están relacionados
con clases del modelo.
¿Qué ocurre con las clases de la vista?
• Podemos apreciar que en los planteamientos
con los que se ha trabajado, en varias vistas se
debe programar métodos para leer datos de
tipo char, int, float…., entonces si se diseña
una clase vista que contenga métodos
generales, reusables, solo se programarían una
vez. Esta clase de la vista la llamaremos
VGeneral y será una clase base genérica.
31. NOTA: Se presentará posteriormente un
material denominado «Tutorial
para crear librerías genéricas», en
donde se especifica los pasos que se
deben seguir para trabajar con las
librerías genéricas en C++