Conceptos de OOPS en Java – Ejemplo de Conceptos de OOPS

Los conceptos de programación orientada a objetos son muy importantes para programar. Sin tener una idea sobre los conceptos de POO, no podrás diseñar sistemas en el modelo de programación orientada a objetos.

¿Qué es el Modelo de Programación Orientada a Objetos?

El modelo de programación orientada a objetos gira en torno al concepto de Objetos. ¿Qué es un Objeto? Un objeto es una instancia de una Clase. Contiene propiedades y funciones. Son como objetos del mundo real. Por ejemplo, tu coche, casa, portátil, etc., son todos objetos. Tienen propiedades y métodos específicos para realizar acciones. ¿Qué es una Clase? La Clase define el diseño de los Objetos. Define las propiedades y funcionalidades de los objetos. Por ejemplo, Portátil es una clase y tu portátil es una instancia de ella.

Conceptos de POO

Los conceptos principales de POO son:

  1. Abstracción
  2. Encapsulación
  3. Polimorfismo
  4. Herencia
  5. Asociación
  6. Agregación
  7. Composición

Vamos a examinar estos conceptos de programación orientada a objetos uno por uno. Utilizaremos el lenguaje de programación Java para ejemplos de código para que sepas cómo implementar los conceptos de OOP en Java.

1. Abstracción

La abstracción es el concepto de ocultar los detalles internos y describir las cosas en términos simples. Por ejemplo, un método que suma dos enteros. El procesamiento interno del método se oculta del mundo exterior. Hay muchas formas de lograr la abstracción en la programación orientada a objetos, como la encapsulación y la herencia. Un programa Java es también un gran ejemplo de abstracción. Aquí, Java se encarga de convertir declaraciones simples a lenguaje de máquina y oculta los detalles de implementación internos al mundo exterior.

Lectura adicional: ¿Qué es la abstracción en OOPS?

2. Encapsulación

La encapsulación es la técnica utilizada para implementar la abstracción en la programación orientada a objetos. La encapsulación se utiliza para restringir el acceso a los miembros y métodos de una clase. Las palabras clave de modificador de acceso se utilizan para la encapsulación en la programación orientada a objetos. Por ejemplo, la encapsulación en Java se logra utilizando las palabras clave private, protected y public.

3. Polimorfismo

El polimorfismo es el concepto donde un objeto se comporta de manera diferente en diferentes situaciones. Hay dos tipos de polimorfismo: polimorfismo en tiempo de compilación y polimorfismo en tiempo de ejecución. El polimorfismo en tiempo de compilación se logra mediante sobrecarga de métodos. Por ejemplo, podemos tener una clase como la siguiente.

public class Circle {

	public void draw(){
		System.out.println("Drwaing circle with default color Black and diameter 1 cm.");
	}
	
	public void draw(int diameter){
		System.out.println("Drwaing circle with default color Black and diameter"+diameter+" cm.");
	}
	
	public void draw(int diameter, String color){
		System.out.println("Drwaing circle with color"+color+" and diameter"+diameter+" cm.");
	}
}

Aquí tenemos múltiples métodos draw, pero tienen diferentes comportamientos. Este es un caso de sobrecarga de método porque todos los métodos tienen el mismo nombre pero diferentes argumentos. En este caso, el compilador podrá identificar el método a invocar en tiempo de compilación, por lo tanto, se llama polimorfismo en tiempo de compilación. El polimorfismo en tiempo de ejecución se implementa cuando hay una relación “ES UN” entre objetos. También se llama anulación de método porque la subclase tiene que anular el método de la superclase para el polimorfismo en tiempo de ejecución. Si estamos trabajando en términos de la superclase, la clase de implementación real se decide en tiempo de ejecución. El compilador no puede decidir qué clase de método se invocará. Esta decisión se toma en tiempo de ejecución, de ahí el nombre de polimorfismo en tiempo de ejecución o despacho dinámico de métodos.

package com.journaldev.test;

public interface Shape {

	public void draw();
}
package com.journaldev.test;

public class Circle implements Shape{

	@Override
	public void draw(){
		System.out.println("Drwaing circle");
	}

}
package com.journaldev.test;

public class Square implements Shape {

	@Override
	public void draw() {
		System.out.println("Drawing Square");
	}

}

Shape es la superclase y hay dos subclases Circle y Square. A continuación se muestra un ejemplo de polimorfismo en tiempo de ejecución.

Shape sh = new Circle();
sh.draw();

Shape sh1 = getShape(); //some third party logic to determine shape
sh1.draw();

En los ejemplos anteriores, el compilador de Java no conoce la clase de implementación real de Shape que se usará en tiempo de ejecución, por lo tanto, polimorfismo en tiempo de ejecución.

4. Herencia

Herencia es el concepto de programación orientada a objetos donde un objeto se basa en otro objeto. La herencia es el mecanismo de reutilización de código. El objeto que se hereda se llama superclase y el objeto que hereda la superclase se llama subclase. Utilizamos la palabra clave extends en Java para implementar la herencia. A continuación, se muestra un ejemplo simple de herencia en Java.

package com.journaldev.java.examples1;

class SuperClassA {

	public void foo(){
		System.out.println("SuperClassA");
	}
	
}

class SubClassB extends SuperClassA{
		
	public void bar(){
		System.out.println("SubClassB");
	}
	
}

public class Test {
	public static void main(String args[]){
		SubClassB a = new SubClassB();
		
		a.foo();
		a.bar();
	}
}

5. Asociación

La asociación es el concepto de POO que define la relación entre objetos. La asociación define la multiplicidad entre objetos. Por ejemplo, objetos Maestro y Estudiante. Existe una relación de uno a muchos entre un maestro y estudiantes. De manera similar, un estudiante puede tener una relación de uno a muchos con objetos maestro. Sin embargo, ambos objetos estudiante y maestro son independientes entre sí.

Agregación

La agregación es un tipo especial de asociación. En la agregación, los objetos tienen su propio ciclo de vida, pero hay propiedad. Siempre que tengamos una relación “TIENE UN” entre objetos y propiedad, entonces es un caso de agregación.

6. Composición

La composición es un caso especial de agregación. La composición es una forma más restrictiva de agregación. Cuando el objeto contenido en una relación “TIENE-UN” no puede existir por sí mismo, entonces se trata de un caso de composición. Por ejemplo, una Casa tiene una Habitación. Aquí la habitación no puede existir sin la casa. Se dice que la composición es mejor que la herencia, lee más en Composición vs Herencia.

Lectura adicional: Composición en Java

Eso es todo para un rápido resumen sobre los conceptos de POO.

Puedes revisar más programas de ejemplo de Java en nuestro Repositorio de GitHub.

Referencias: https://docs.oracle.com/javase/tutorial/java/concepts/

Source:
https://www.digitalocean.com/community/tutorials/oops-concepts-java-example