Herencia Java

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 25

Lenguaje de Programación Java: Herencia

Dr. Mario Marcelo Berón

UNSL-APMDS

Dr. Mario Marcelo Berón (UNSL-APMDS) Lenguaje de Programación Java: Herencia 1 / 25


Herencia: Conceptualización

Herencia
Es una relación entre las clases en la cual una clase comparte la estructura
y el comportamiento de una (Herencia Simple) o más clases (Herencia
Múltiple).
La clase de la que las otras heredan se llama Superclase.
Análogamente la clase que hereda de otra/s clase/s se llama Subclase.

Dr. Mario Marcelo Berón (UNSL-APMDS) Lenguaje de Programación Java: Herencia 2 / 25


Herencia

Herencia por Extensión


Una subclase debe tener todas las propiedades de la clase padre y otras
propias de ella.

La clase ColaVigilada extiende el comportamiento de la clase Cola


proporcionando operaciones que hacen que las instancias de ella estén
protegidas.

Dr. Mario Marcelo Berón (UNSL-APMDS) Lenguaje de Programación Java: Herencia 3 / 25


Herencia

Herencia por Restricción


Como la subclase es más especializada que la clase padre es en cierto
sentido una restricción de la clase padre.

La clase ElementoDePantallaNoSeleccionable podrı́a restringir el


comportamiento de la clase ElementoDePantalla prohibiendo a sus clientes
la selección de sus instancias en una vista.

Dr. Mario Marcelo Berón (UNSL-APMDS) Lenguaje de Programación Java: Herencia 4 / 25


Herencia: Beneficios

Beneficios de la Herencia
Reusabilidad de Software: El código que provee el comportamiento
heredado de otra clase no se implementa nuevamente.
Compartición de Código: Componentes de software (para Cox son:
Software-ICs). También se da cuando dos o más clases
heredan de una clase.
Consistencia de Interfaz: Cuando una o más clases heredan de una clase
padre se está seguro que el comportamiento heredado será el
mismo en todos los casos. En este contexto se asume la
herencia sin sobre-escritura.
Componentes de Software: La herencia permite construir componentes
reusables de software.

Dr. Mario Marcelo Berón (UNSL-APMDS) Lenguaje de Programación Java: Herencia 5 / 25


Herencia: Beneficios

Beneficios de la Herencia
Prototipado Rápido: Cuando un sistema se puede construir usando
componentes reusables, el tiempo de desarrollo se concentra
en entender la porción del sistema que es nueva e inusual.
Polimorfismo: Permite que el programador pueda definir componentes de
alto nivel que pueden usarse en diferentes aplicaciones
cambiando sus rutinas de bajo nivel.
Información Oculta: Cuando un programador reusa una componente de
software solo necesita conocer la naturaleza de la
componente y su interfaz.

Dr. Mario Marcelo Berón (UNSL-APMDS) Lenguaje de Programación Java: Herencia 6 / 25


Herencia: Costos

Costos
Velocidad de Ejecución: Los sistemas que usan herencia son generalmente
más lentos que los que son hechos a mano. Esto se debe a
que los métodos heredados deben estar preparados para ser
usados por subclases arbitrarias.
Tamaño del Programa: El uso de bibiotecas de software impone una
penalidad de tamaño sobre el sistema que se está
construyendo.

Dr. Mario Marcelo Berón (UNSL-APMDS) Lenguaje de Programación Java: Herencia 7 / 25


Herencia: Costos

Costos
Overhead de Pasaje de Mensajes: Pasar un mensaje es una operación más
costosa que una invocación a un procedimiento o función.
Complejidad del Programa: Algunas veces, cuando se hace abuso de la
herencia, entender el flujo del programa requiere navegar
hacia arriba y hacia abajo el grafo de la herencia. Este
problemas se conoce con el nombre de: El problema del
yo-yo.

Dr. Mario Marcelo Berón (UNSL-APMDS) Lenguaje de Programación Java: Herencia 8 / 25


Herencia: Ejemplo

Personas Empresario

Dr. Mario Marcelo Berón (UNSL-APMDS) Lenguaje de Programación Java: Herencia 9 / 25


Herencia: Ejemplo

Observaciones
Las dos clases son muy similares. Ambas clases tienen datos y muchas
operaciones en común.
Si se implementan las clases por separado sin observar las
caracterı́sticas en común entonces se duplica el código, es más difı́cil
detectar errores, etc.

Dr. Mario Marcelo Berón (UNSL-APMDS) Lenguaje de Programación Java: Herencia 10 / 25


Herencia: Ejemplo

Observaciones
Si se aprovechan las similitudes entonces lo que se necesita implementar
son solamente las nuevas caracterı́sticas.

Dr. Mario Marcelo Berón (UNSL-APMDS) Lenguaje de Programación Java: Herencia 11 / 25


Herencia: Variables y Métodos

Variables y Métodos
Si B es una subclase de A entonces:
B hereda todas las variables y métodos que no son privados.
B puede definir nuevas variables y métodos de instancia propios.

Dr. Mario Marcelo Berón (UNSL-APMDS) Lenguaje de Programación Java: Herencia 12 / 25


Herencia: Variables y Métodos

Variables y Métodos
Una instancia de la clase Empresario
hereda:
Las variables de instancia:
nombre, edad, domicilio, sexo.
Los métodos: demeNombre(),
demeDomicilio(), demeSexo(),
.... etc.

Dr. Mario Marcelo Berón (UNSL-APMDS) Lenguaje de Programación Java: Herencia 13 / 25


Búsqueda de Métodos

Búsqueda de Métodos
Cuando una instancia recibe un mensaje el método se busca en su clase si
no está allı́ la búsqueda continua en su superclase y ası́ sucesivamente
hasta llegar al tope. En este caso si el método no se encuentra se produce
un error.

Dr. Mario Marcelo Berón (UNSL-APMDS) Lenguaje de Programación Java: Herencia 14 / 25


Búsqueda de Métodos

Dr. Mario Marcelo Berón (UNSL-APMDS) Lenguaje de Programación Java: Herencia 15 / 25


Herencia en Java

1 Toda clase en Java es derivada de la clase Object.


2 Las clases en Java se organizan en jerarquı́as usando la palabra clave
extends.
3 La relación de herencia establece una relación de superclase/subclase.
4 La superclase contiene los miembros comunes a sus subclases.
Generalización.
5 La subclase contiene miembros especı́ficos. Especialización.

Dr. Mario Marcelo Berón (UNSL-APMDS) Lenguaje de Programación Java: Herencia 16 / 25


Herencia

Herencia en Java
1 c l a s s A extends B {
2 .......
3 }

Herencia en Java
1 c l a s s E m p r e s a r i o extends P e r s o n a {
2 .......
3 }

Dr. Mario Marcelo Berón (UNSL-APMDS) Lenguaje de Programación Java: Herencia 17 / 25


Herencia

Inicialización de Objetos
En el contexto de la Herencia es confuso pensar en el objeto
producido por la clase derivada. Esto se debe a que hay dos clases en
lugar de una.
Desde el exterior se percibe que la nueva clase tiene la misma interfaz
que la clase base y quizás algunos métodos/campos adicionales.
Cuando se crea un objeto de la clase derivada, el mismo contiene un
objeto de la clase base. Este subobjeto se encuentra envuelto dentro
del objeto de la clase derivada.

Dr. Mario Marcelo Berón (UNSL-APMDS) Lenguaje de Programación Java: Herencia 18 / 25


Herencia

Inicialización de Objetos
La inicialización de los objetos creados mediante la Relación de Herencia
se realiza en el constructor a través de la invocación del constructor de la
clase base.
Es importante notar que: Java inserta llamadas al constructor de la clase
base en el constructor de la clase derivada.

Dr. Mario Marcelo Berón (UNSL-APMDS) Lenguaje de Programación Java: Herencia 19 / 25


Herencia
Inicialización de Objetos

1 class Arte {
2 Arte () {
3 System . o u t . p r i n t l n ( ” C o n s t r u c t o r de A r t e ” ) ;
4 }
5 }
6
7 c l a s s D i b u j o extends A r t e {
8 Dibujo () {
9 System . o u t . p r i n t l n ( ” C o n s t r u c t o r de D i b u j o ” ) ;
10 }
11 }
12
13 p u b l i c c l a s s DAnimado extends D i b u j o {
14 p u b l i c DAnimado ( ) {
15 System . o u t . p r i n t l n ( ” C o n s t . de DAnimado . ” ) ;
16 }
17 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
18 DAnimado x = new DAnimado ( ) ;
19 }
20 }

Dr. Mario Marcelo Berón (UNSL-APMDS) Lenguaje de Programación Java: Herencia 20 / 25


Herencia

Constructores con Argumentos


En el ejemplo anterior los Constructores usados son los Constructores sin
argumentos. No obstante, si se desea llamar al constructor de la clase base
se debe invocar explı́citamente a dicho constructor usando la palabra super
y la lista de argumentos apropiados.

Dr. Mario Marcelo Berón (UNSL-APMDS) Lenguaje de Programación Java: Herencia 21 / 25


Herencia
Ejemplo de Incialización con Constructores con Parámetros

1 import s t a t i c n e t . m i n d vi e w . u t i l . P r i n t . ∗ ;
2
3 c l a s s Game {
4 Game ( i n t i ) {
5 p r i n t ( ”Game c o n s t r u c t o r ” ) ;
6 }
7 }
8
9 c l a s s BoardGame extends Game {
10 BoardGame ( i n t i ) {
11 super ( i ) ;
12 p r i n t ( ”BoardGame c o n s t r u c t o r ” ) ;
13 }
14 }
15
16 p u b l i c c l a s s C h e s s extends BoardGame {
17 Chess ( ) {
18 super ( 1 1 ) ;
19 p r i n t ( ” Chess c o n s t r u c t o r ” ) ;
20 }
21
22 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
23 C h e s s x = new C h e s s ( ) ;
24 }
25 }

Dr. Mario Marcelo Berón (UNSL-APMDS) Lenguaje de Programación Java: Herencia 22 / 25


Herencia y Modificadores de Acceso

Se tiene dos niveles


1 A nivel de clases: public,paquete, private.
2 A nivel de miembros: public,package,protected, private.

Dr. Mario Marcelo Berón (UNSL-APMDS) Lenguaje de Programación Java: Herencia 23 / 25


Herencia y Modificadores de Acceso

Nivel de Clases
1 Public: la clase es accesible para todas las clases en todas partes.
2 Package: la clase es accesible solo dentro de su paquete.
3 Private: se utiliza para clases internas.

Dr. Mario Marcelo Berón (UNSL-APMDS) Lenguaje de Programación Java: Herencia 24 / 25


Herencia y Modificadores de Acceso

Nivel de Miembros
1 Public: el dato/método miembro es accesible para todas las clases en
todas las partes.
2 Protected: el dato/método miembro es accesible dentro de su propio
paquete y en sus subclases.
3 Package: el dato/método es accesible solo dentro de su paquete.
4 Private: el dato/método es accesible sólo dentro de su clase.

Dr. Mario Marcelo Berón (UNSL-APMDS) Lenguaje de Programación Java: Herencia 25 / 25

También podría gustarte

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy