Вы находитесь на странице: 1из 19

Relaciones entre Clases

- generalización (herencia)

Semestre: 01/17

DCI – Dpto. Cs. de Computación e Informática Dr. Samuel Sepúlveda


samuel.sepulveda@ceisufro.cl
Contenidos

•  Recordando…las asociaciones
•  Concepto de Generalización
•  Implementación en Java
•  Consideraciones

Dr. Samuel Sepúlveda


2
Departamento Computación e Informática | Universidad de La Frontera samuel.sepulveda@ceisufro.cl
Resumiendo

•  Concepto de asociación
•  Refinando el concepto de asociación
•  Asociación à agregación
•  Asociación à composición

•  Asociación
•  Relación "estructural", el objeto es parte de la estructura propia de la
construcción del objeto.
•  Un objeto está integrado por atributos que son a su vez otros objetos.
•  Agregación
•  Se agregan objetos a otro objeto a través de un método y se incluye en
una estructura contenedora de objetos, como un array.
•  Composición
•  Caso particular de agregación y generalmente se dice que solo aporta
"semántica”, pero que en la vida real es poco común implementarla.

Dr. Samuel Sepúlveda


3
Departamento Computación e Informática | Universidad de La Frontera samuel.sepulveda@ceisufro.cl
Herencia y la POO

•  Cuando se crea una clase, la idea es NO volver a crearla más


•  No reinventar la rueda!!!
•  Es posible reaprovechar el código haciendo uso de la
generalización (herencia)
•  Lo anterior puede realizarse, utilizando nuestra clase:
•  para crear nuevas clases a partir de ella en su definición.
•  para especializar una clase existente

La herencia es una relación entre clases, en la que una clase


comparte la estructura y/o comportamiento definidos en una
(herencia simple) o más clases (herencia múltiple) (G. Booch, 1994).

Dr. Samuel Sepúlveda


4
Departamento Computación e Informática | Universidad de La Frontera samuel.sepulveda@ceisufro.cl
Herencia y la POO

Dr. Samuel Sepúlveda


5
Departamento Computación e Informática | Universidad de La Frontera samuel.sepulveda@ceisufro.cl
Herencia y la POO

•  Cuando heredamos a partir de una clase existente, estamos re-


utilizando código (métodos y atributos).
•  Podemos agregar métodos y atributos para adaptar la clase a la
nueva situación.
•  La herencia la identificamos cuando encontramos la relación es-
un / es-de-tipo entre la nueva clase y la ya existente.
•  Ejs.
•  un estudiante es una persona à estudiante es de tipo persona.
•  un auto deportivo es un auto à auto deportivo es de tipo auto.
•  una silla de playa es una silla à silla de playa es de tipo silla.

Dr. Samuel Sepúlveda


6
Departamento Computación e Informática | Universidad de La Frontera samuel.sepulveda@ceisufro.cl
Herencia y la POO

•  La clase ya existente se es llamada superclase, clase base o


clase padre.
•  A la nueva clase se le llama subclase, clase derivada, o clase
hija.
•  Para los ejs. anteriores
•  estudiante es de tipo persona, clase padre: persona, clase hija:
estudiante.
•  auto deportivo es de tipo auto, clase padre: auto, clase hija: auto
deportivo.
•  silla de playa es de tipo silla, clase padre: silla, clase hija: silla de
playa.

Dr. Samuel Sepúlveda


7
Departamento Computación e Informática | Universidad de La Frontera samuel.sepulveda@ceisufro.cl
Herencia y la POO

•  Para el caso anterior:


•  estudiante es de tipo persona
•  clase padre: persona, clase hija: estudiante

+
Clases POO UML

ABSTRACCIÓN
Persona Super clase Generalización

Estudiante Sub clase Especialización

--
Dr. Samuel Sepúlveda
8
Departamento Computación e Informática | Universidad de La Frontera samuel.sepulveda@ceisufro.cl
Herencia y la POO

•  Herencia, especialización o generalización


•  Se tiene una clase y se desea crear otra clase
—  de características similares
—  conalgunas extensiones/modificaciones que la hagan más
especializada
•  A esto se le llama una relación de especialización
•  Suponga que ya existe class Persona { … }
•  Se desea crear otra clase para representar a los estudiantes
•  Se sabe que todo estudiante es-de-tipo persona
•  OJO! No todas las personas son estudiantes!!!

Dr. Samuel Sepúlveda


9
Departamento Computación e Informática | Universidad de La Frontera samuel.sepulveda@ceisufro.cl
Herencia y la POO

Representación de la
•  Herencia, especialización o generalización Especialización en UML
•  Suponga que ya existe class Persona { … }
•  Se desea crear otra clase para representar a los estudiantes
•  Se sabe que todo Estudiante es-de-tipo Persona

class Estudiante extends Persona { ...}

¿Qué hay dentro de la


Representación de la
Especialización en Java clase Estudiante?

Dr. Samuel Sepúlveda


10
Departamento Computación e Informática | Universidad de La Frontera samuel.sepulveda@ceisufro.cl
Herencia y la POO

•  Observaciones
•  Conviene indicar que Java es un LDP OO en el que todas las clases
son heredadas, aún cuando no se indique explícitamente.
•  Hay una jerarquía de objetos única, lo que significa que existe una
clase de la cual son hijas todas las demás.
•  Esta clase se llama Object, cuando no se indica que las clases
hereden de alguna clase, heredan de ella.
•  Esto permite que todas las clases tengan algunas cosas en común, lo
que permite que funcione, entre otras cosas, el garbage collector.

Ver la clase Object en JavaDoc Oracle


http://docs.oracle.com/javase/7/docs/api/java/util/Objects.html

Dr. Samuel Sepúlveda


11
Departamento Computación e Informática | Universidad de La Frontera samuel.sepulveda@ceisufro.cl
Herencia y la POO - Java

•  Implementación con Java


•  Java no soporta la herencia múltiple.
•  Regla: Una subclase hereda todos los atributos/métodos de su
superclase que puedan ser accesibles desde la subclase.

Java, C#, PHP

C++

Dr. Samuel Sepúlveda


12
Departamento Computación e Informática | Universidad de La Frontera samuel.sepulveda@ceisufro.cl
Herencia y la POO - Java

•  Implementación con Java Ver Apunte Herencia-Mensaje


•  Java no soporta la herencia múltiple.
•  Regla: Una subclase hereda todos los atributos/métodos de su
superclase que puedan ser accesibles desde la subclase.
•  Las subclases y los atributos/métodos heredados
•  heredan aquellos declaradas como public o protected.
•  heredan aquellos declarados sin especificador de acceso, siempre
que la subclase esté en el mismo package que la clase.
•  no hereda de la superclase si la subclase lo declara con el mismo
nombre. En la subclase se dice que oculta a la variable miembro de la
superclase.
•  no hereda los atributos de tipo private.
Ver Apunte Package

Dr. Samuel Sepúlveda


13
Departamento Computación e Informática | Universidad de La Frontera samuel.sepulveda@ceisufro.cl
Herencia y la POO

•  Herencia y diversos LDP

Dr. Samuel Sepúlveda


14
Departamento Computación e Informática | Universidad de La Frontera samuel.sepulveda@ceisufro.cl
Herencia y la POO

•  Clases, super clases, sub clases, packages

Dr. Samuel Sepúlveda


15
Departamento Computación e Informática | Universidad de La Frontera samuel.sepulveda@ceisufro.cl
Herencia y la POO

•  Implementación con Java


•  Si algún método en la clase
hija oculta uno de los
atributos de la superclase, se
puede referir a la variable
oculta utilizando el operador
super
•  De igual forma, si el método
sobrescribe uno de los
métodos de la superclase, se
puede llamar al método
sobrescrito a través de
super.

¿Qué sucede aquí?


¿Qué se vería por pantalla?
Dr. Samuel Sepúlveda
16
Departamento Computación e Informática | Universidad de La Frontera samuel.sepulveda@ceisufro.cl
Herencia y la POO
extends cPadre
•  Implementación con Java
•  Dicho operador (super) también puede ser usado para
invocar desde una clase hija al constructor de la clase padre.
—  Debe ser la primera instrucción usada en el constructor de la
clase hija.

¿Qué sucede aquí?

Dr. Samuel Sepúlveda


17
Departamento Computación e Informática | Universidad de La Frontera samuel.sepulveda@ceisufro.cl
Resumiendo…

•  Recordando conceptos sobre las asociaciones


•  Concepto de Generalización
•  La herencia como relación entre clases con UML
•  Implementación en Java
•  Consideraciones

Dr. Samuel Sepúlveda


18
Departamento Computación e Informática | Universidad de La Frontera samuel.sepulveda@ceisufro.cl
Asociaciones entre Clases
- agregación
- composición

Semestre: 01/17

DCI – Dpto. Cs. de Computación e Informática Dr. Samuel Sepúlveda


samuel.sepulveda@ceisufro.cl

Вам также может понравиться