0% encontró este documento útil (0 votos)
24 vistas30 páginas

POO 3.0 Herencia

Cargado por

patomichi2023
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
24 vistas30 páginas

POO 3.0 Herencia

Cargado por

patomichi2023
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 30

Programación Orientada

a Objetos

Tema 3: Herencia
Tema 3: Herencia
3 Herencia
3.1 Definición: clase base, clase derivada
3.2 Clasificación: herencia simple, herencia múltiple
3.3 Reutilización de miembros heredados
3.4 Referencia al objeto de la clase base
3.5 Constructores y destructores en clases derivadas
3.6 Redefinición de métodos en clases derivadas
Herencia
• De la misma manera que en el mundo real la POO permite definir tipos generales
de objetos y algunos subtipos de éstos.

• El concepto de herencia es el segundo mecanismo que facilita el reuso en la POO.

• La herencia reduce la necesidad de especificar información redundante y


simplifica el mantenimiento de muchas instancias de objetos, las cuales pueden
ser modificadas y dadas de alta en una sola actualización de la información.

• La herencia, también llamada especialización, es un mecanismo que permite


crear clases, que automáticamente modelan las características de otras clases.
Clasificación -- Especialización
• Una clase llamada subclase, se define a partir de otra clase llamada
superclase. Dado que los objetos de la subclase pueden tener el
comportamiento computacional propio de un objeto de la superclase, se
dice que la subclase hereda la conducta computacional de la superclase.

• La subclase puede tener rasgos específicos, que no adquiere por


herencia, y son los que hacen más particular a la subclase.

El mecanismo de herencia permite que una clase se especifique a partir


de otra por adición y/o substracción de conductas.
El mecanismo de herencia permite que una clase se especifique a partir de
otra por adición y/o substracción de conductas.

Si el nombre de un atributo o método definido en la clase es el mismo que el


atributo de la superclase, el atributo NO se hereda, es decir, la definición en
la subclase tiene preferencia sobre la definición de la superclase.

La herencia representa una forma importante de abstracción, la posibilidad


de definir una clase a partir de otra simplifica la tarea de su definición de
clases y superclases.
Jerarquía de Clases en proyectos
ClasesHerencia v0 .. v3
Abuelo Padre Hijo Nieto
suma() suma() suma() suma()

resta() resta() resta() resta()

multiplica() multiplica() multiplica()

divide() divide() divide()

raizCuadrada() raizCuadrada()
HermanoPadre potencia() potencia()
suma()
seno()
resta()
coseno()

tangente()

Objetos de la jerarquía de clases en el paquete


clasesHerencia
Abuelo Padre Hijo Nieto
suma() suma() suma() suma()

resta() resta() resta() resta()

multiplica() multiplica() multiplica()

divide() divide() divide()

raizCuadrada() raizCuadrada()
HermanoPadre potencia() potencia()
suma()
seno()
resta()
coseno()

tangente()

Objetos de la jerarquía de clases en el paquete


clasesHerencia
Atributos Predefinidos (de paquete)
Objetos construidos por Agregación
atribN401 MetN402() atribN301 MetN302() atribN201 MetN202()
atribN401 MetN402()
atribN402 MetN401() atribN302 MetN301() atribN202 MetN201()
atribN402 MetN401()
atribN403 atribN303 atribN203
atribN403
MetN403() atribN3CN4 MetN303() atribN2CN4 MetN203()
MetN403()

ClaseNivel4 ClaseNivel3 ClaseNivel2


ClaseNivel4

atribN101 MetN102() atribN401 MetN402() atribN301 MetN302()

atribN102 MetN101() atribN402 MetN401() atribN302 MetN301()

atribN103 atribN403 atribN303

atribN3CN4 MetN103() MetN403() atribN3CN4 MetN303()

ClaseNivel1 ClaseNivel4 ClaseNivel3

Clases básicas atribN401

atribN402
MetN402()

MetN401()
atribN301

atribN302
MetN302()

MetN301()
atribN201

atribN202
MetN202()

MetN201()

atribN403 atribN303 atribN203

MetN403() atribN3CN4 MetN303() atribN2CN4 MetN203()

ClaseNivel4 ClaseNivel3 ClaseNivel2

atribN401 MetN402() atribN301 MetN302() atribN201 MetN202() atribN101 MetN102()

atribN402 MetN401() atribN302 MetN301() atribN202 MetN201() atribN102 MetN101()

atribN403 atribN303 atribN203 atribN103

MetN403() atribN3CN4 MetN303() atribN2CN4 MetN203() atribN3CN4 MetN103()

ClaseNivel4 ClaseNivel3 ClaseNivel2 ClaseNivel1


Abuelo Padre Hijo Nieto
suma() suma() suma() suma()

resta() resta() resta() resta()

multiplica() multiplica() multiplica()

divide() divide() divide()

raizCuadrada() raizCuadrada()
HermanoPadre
potencia() potencia()
suma()
seno()
resta()
coseno()

tangente()

Objetos de la jerarquía de clases en el paquete


clasesHerencia
Atributos Privados, ocultos a todas las clases
Abuelo Padre Hijo Nieto
suma() suma() suma() suma()

resta() resta() resta() resta()

multiplica() multiplica() multiplica()

divide() divide() divide()

raizCuadrada() raizCuadrada()
HermanoPadre potencia() potencia()
suma()
seno()
resta()
coseno()

tangente()

Objetos de la jerarquía de clases en el paquete clasesHerencia


Atributos Protegidos (protected), fuera del paquete
Abuelo Padre Hijo Nieto
suma() suma() suma() suma()

resta() resta() resta() resta()

multiplica() multiplica() multiplica()

divide() divide() divide()

raizCuadrada() raizCuadrada()
HermanoPadre potencia() potencia()
suma()
seno()
resta()
coseno()

tangente()

Objetos de la jerarquía de clases en el paquete clasesHerencia


Atributos Protegidos (protected), dentro del paquete
Abuelo Padre Hijo Nieto
suma() suma() suma() suma()

resta() resta() resta() resta()

multiplica() multiplica() multiplica()

divide() divide() divide()

raizCuadrada() raizCuadrada()
HermanoPadre potencia() potencia()
suma()
seno()
resta()
coseno()

tangente()

Objetos de la jerarquía de clases en el paquete clasesHerencia


Atributos y métodos públicos (public)
Abuelo Padre Hijo Nieto
suma() suma() suma() suma()

resta() resta() resta() resta()

multiplica() multiplica() multiplica()

divide() divide() divide()

raizCuadrada() raizCuadrada()
HermanoPadre potencia() potencia()
suma()
seno()
resta()
coseno()

tangente()

Objetos de la jerarquía de clases en el paquete clasesHerencia


Atributos y métodos públicos (public)
ClasesHerencia v3
HermanoPadre Abuelo Padre Hijo Nieto
Objetos suma()
resta()
suma()
resta()
suma()
resta()
suma()
resta()
suma()
resta()

multiplica multiplica multiplica


() () ()
divide() divide() divide()
raizCuadr raizCuadr
ada() ada()
potencia() potencia()
seno()
coseno()
tangente()

HermanoPadre Abuelo Padre Hijo Nieto


suma() suma() suma() suma() suma()

Referencias resta() resta() resta()


multiplica()
resta()
multiplica()
resta()
multiplica()

divide() divide() divide()


raizCuadrada() raizCuadrada()

potencia() potencia()
seno()
coseno()
tangente()
Jerarquía de clases en
ClasesHerencia v4
Tablas de verdad de los componentes
Polimorfismo
• El Polimorfismo permite enviar el mismo mensaje a diferentes objetos y que cada
objeto responda de acuerdo a las características de la clase a la que pertenece.

• La posibilidad de usar el mismo mensaje para operaciones similares con diferentes


tipos de objetos es parecida a la forma en que el ser humano piensa para resolver
problemas, por ejemplo, no es natural usar diferentes términos para expresar que
se desea imprimir enteros, reales, cadenas de caracteres o registros de datos.

• El polimorfismo es una de las características que da lugar a que la POO se


conceptualice como un estilo de programación diferencial o programación por
modificación, debido a que tiene la facilidad de añadir capacidades a una solución si
los nuevos objetos que serán creados utilizan métodos ya definidos.
Herencia Simple y Herencia múltiple
• Algunos sistemas permiten que una clase tenga varias superclases
(herencia múltiple), mientras otros imponen la restricción de una sola
superclase (herencia simple).

• Cuando el modelo no provee herencia múltiple, el conjunto de clases


puede ser organizado en una gráfica en forma de árbol.

• Con la herencia múltiple, una nueva clase hereda todos las


estructuras y características de sus antecesores inmediatos y todas las
superclases de ellos.
Métodos de instancia
• Los métodos de instancia pertenecen a los objetos de la clase no a la
clase. Sólo pueden ser llamados después de crear un objeto de la clase.
• Cada objeto creado tiene una copia de los métodos de instancia de su
clase.
• Los métodos de instancia pueden ser sobrescritos debido a que ellos se
resuelven usando enlace dinámico en tiempo de ejecución.
• Los métodos de instancia tienen un comportamiento propio del objeto,
aun cuando el código es el mismo puede tener un comportamiento
diferente para cada objeto (depende de los atributos).
Métodos de clase y atributos de
clase
• El modificador static permite definir que un método o un atributo que
pertenece a la clase: método de clase o atributo de clase.

• Los métodos de clase son métodos que la clase atiende directamente.


• Los atributos de clase son atributos de la clase que son compartidos por
todos los miembros de la clase.

• Los métodos de clase sólo pueden usar atributos de clase e invocar


métodos de clase. Es decir, no pueden usar atributos ni invocar métodos
de instancias (no static).
Atributos y métodos de clase/atributos y métodos de instancia

Atributos y métodos de la clase


Declaración de Calificados static cuenta()
la Clase: corrige()
a b c d saldo()
ClaseStatic
inicia()
y
avanza()
x
salta()
z inicia() inicia() inicia()
gira() y y y
avanza() avanza() avanza()
x x x
salta() salta() salta()
z z z
gira() gira() gira()

objeto1 objeto2 objeto3


Métodos de Clase (static)
Como pertenecen a la clase
• Los métodos static están asociados con la clase en la que residen.
pueden ser llamados sin crear un objeto de la clase.
• Los métodos static están diseñados con el objetivo de compartir un
comportamiento por todos los objetos creados de la clase.
• Los métodos static no pueden ser sobrescritos (overridden). Pero
pueden ser sobrecargados (overloaded) dado que su armado se
resuelve en tiempo de compilación.
Diagrama de clases del proyecto
PruebaClaseStatic
a d Declaración de la
cuenta()
b corrige() Clase: ClaseStatic
c saldo()

inicia()
y
avanza()
x
salta()
z h
gira() cuenta()
g corrige()
datosIns()

inicia()

r
s
Declaración de la gira()
Clase: HijoStatic datosIns()
a d Declaración de la
b cuenta()
corrige() Clase: ClaseStatic
c saldo()
cuenta()
inicia()
a b d corrige()
y
avanza()
c saldo()
x
salta() h
z
cuenta()
h
cuenta()
gira() g corrige() g corrige()
datosIns()

inicia()

r inicia()
inicia() inicia()
inicia() inicia()
inicia()
s
y y y
avanza() avanza() avanza()
Declaración de la
Clase: HijoStatic
gira()
x x x
datosIns() salta() salta() salta()
z z z
gira()
gira() r gira()
gira() r gira()
gira()
r
datosIns() datosIns()
datosIns() datosIns()
datosIns()
s datosIns() s s
Objeto hijoStatic1 Objeto hijoStatic2 Objeto hijoStatic3
Modificadores static y final
• El modificador static permite definir que una variable es una variable
de clase.
• El modificador final en una variable la establece como una constante.
La variable debe ser creada e inicializada en la misma línea.

También podría gustarte