Cap 12 Int-Java

Redactado por

Christopher Mendoza

Resumen Cap 12

Libro: Introducción a la programación con JAVA (John S. Dean, Raymon H. Dean)

Agregación, composición y herencia

Formas para Organizar una clase:

  • Agregación Normal (Una clase es el todo, las otras son parte de ese todo).
  • Herencia (Una clase base, las demas heredan de la primera).

En ciertos casos pueden trabajar en conjunto.

Composición y agregación

Existen dos formas de agregación, la ya mencionada Agregación Normal y la **Agregación Compuesta(Composición)**que se diferencia porque la clase todo es "propietaria exclusiva" de las demas clases que las conforman, por ende estas no pueden ser parte de otra clase.

Las clases de la agregación tienen solo un propietario a la vez, pueden ser "transplantados" pero siempre existen en un "propietario" a la vez.

En los UML, la figura de diamante rellenada(◆) denota una composición, en cambio un diamante vacio(◇) una agregación.

Reglas de implementación

  • Agregación: Se guarda el objeto en la clase contenedora en una variable de referencia y también en otra variable de referencia fuera de la clase contenedora para poder ser asignada en mas de una clase luego.
  • Composición: Se guarda unicamente en una variable de referencia dentro de la clase contenedora.

Ejemplo en el mundo real

Imagina un concesionario de autos, las personas que trabajan en el tienen una relación de Agregaciónporque estas pueden trabajar en otra tienda o tener mas responsabilidades personales. En cambio, los autos tienen una relación de Composiciónya que esos autos solo pertenecen a esta tienda y ninguna más.

Herencia

Describe un anidamiento de conceptos que van escalando de lo mas especifico a lo mas general.

Son clases con metodos bases que podemos ir heredando en nuevas clases de forma que obtenemos las funcionalidades de la clase original pero agregamos lo nuevo que necesitamo.

Las mas generales se consideran superClase y las más específicas como *subClase.*Otros terminnos menos formales pero también muy utlizados son Clase Padre o Clase Base para las superClase y Clase Hijo o Clase derivada para las subClases.

En los UML, para denotar herencia se utiliza, utilizamos una linea continua con punta en flecha hueca (⇾) apuntando a la superclase.

Beneficios de la Herencia

Lo básico seria la reutilización de código cosa que siempre es buena manteniendonos en la idea de código DRY (Don't Repeat Yourself), La modularización (Encapsulamiento) es una gran forma de organizar y mantener las cosas en donde deben estar sin poder acceder a ellas de formas inadecuadas que puedan ocacionar problemas, por ende hace mejora el mantenimiento y escalabilidad del código.

Implementación de la Herencia

public class subClase extends superClase{
// Creamos el Constructor de la subClase utilizando el Super Constructor para llamar al constructor de la superClase
public subClase(int varSuper, int varSub){
super(varSuper);
this.varSub = varSub;
}
private int varSub;
}

Recibimos en nuestro constructor nuevo todos los parametros que utilzaremos, los parametros que pertenecen a la clase padre se los pasamos al superConstructor y los que son exclusivos de la subClase los incializamos como de costumbre.

Sobreposición de metodos

Se da cuando una subclase tiene un metodo con el mismo nombre y caracteristicas (incluyendo lo que retorna de otra manera el compilador generara un )que otro de la superClase, en ese caso cuando utlicemos una instancia de la subClase se estara usando el metodo superpuesto de la subclase siguiendo con la lógica de darle prioridad a lo local sobre lo externo.

En caso de necesitar al metodo que fue sobrepuesto podemos utilizar

super.metodoQueFueSobrepuesto();

Modificador final

Si consideramos que nuestro metodo de la SuperClase no debe ser sobrepuesto bajo ninguna circunstancia podemos establecer final en el encabezado del metodo.

En caso de no desear que la SuperClase obtenga SubClases podemos establecer el modificador final en la declaración de la clase.

Ejemplo en el mundo real

Imagina una persona, pueden caminar, respirar, Hablar como funciones básicas, a partir de esta clase podrias crear la clase Cliente, que hereda de la clase persona, Hablar ,caminar y respirar pero le estariamos agregando cosas como pagar entre otras cosas. siendo la clase cliente una subClase de la superClase Persona.

Utilizar Herencia con Agregación y Composición

Recuerda que nos alternativas para resolver el mismo problema, si no que son formas diferentes de hacer cosas diferentes, existen casos en los que podemos hacer uso de cada uno de sus ventajas uniendolas en programas complejos como se hace en la vida real.

Ir Arriba↑