Abstracción, encapsulamiento, herencia y polimorfismo

Abstracción, encapsulamiento, herencia y polimorfismo

En la Programación Orientada a Objetos (POO), existen cuatro conceptos fundamentales que ayudan a construir sistemas informáticos de manera eficiente y estructurada. Permíteme explicarte cada uno de ellos:

  1. Abstracción:
    • La abstracción es el proceso de simplificar y representar una entidad del mundo real en forma de un modelo o clase.
    • Se enfoca en ocultar los detalles internos y mostrar solo lo esencial para el uso externo.
    • Ejemplo: Imagina una clase “Vehículo” que representa características comunes de todos los vehículos, como “arrancar”, “detenerse” y “acelerar”. Aquí, no nos preocupamos por los detalles específicos de cada tipo de vehículo (automóvil, bicicleta, etc.), sino que abstraemos las funcionalidades comunes.
  2. Encapsulamiento:

    • El encapsulamiento se refiere a ocultar los detalles de implementación de una clase y exponer solo una interfaz pública.
    • Protege los datos y métodos internos de una clase para evitar modificaciones no autorizadas.
    • Ejemplo: Una clase “Cuenta Bancaria” podría tener atributos privados como “saldo” y métodos públicos como “depositar” y “retirar”. El acceso directo al saldo se restringe, y solo se permite a través de los métodos públicos.
  3. Herencia:

    • La herencia permite crear nuevas clases basadas en clases existentes.
    • Una clase derivada (subclase) hereda propiedades y comportamientos de una clase base (superclase).
    • Facilita la reutilización de código y la creación de jerarquías de clases.
    • Ejemplo: Una clase “Empleado” podría heredar de una clase “Persona”. Los empleados comparten atributos como nombre y edad, pero también tienen atributos específicos como salario y cargo.
  4. Polimorfismo:

    • El polimorfismo permite que objetos de diferentes clases respondan de manera similar a un mismo método.
    • Puede manifestarse como sobrecarga de métodos (mismo nombre, diferentes parámetros) o sobreescritura de métodos (mismo nombre, misma firma, diferentes implementaciones).
    • Ejemplo: Un método “calcularÁrea()” podría funcionar para diferentes formas geométricas (círculo, cuadrado, triángulo) de manera transparente.

En resumen, estos conceptos son los pilares de la POO y nos ayudan a crear sistemas más organizados, mantenibles y flexibles. 

Ejemplo práctico

Vamos a explorar algunos conceptos de Programación Orientada a Objetos (POO) utilizando pokémon como ejemplo en JavaScript.

1. Abstracción:

    • La abstracción nos permite simplificar y representar objetos del mundo real en forma de clases.
    • Imagina que queremos modelar a los pokémon. Creamos una clase llamada Pokemon que servirá como plantilla para crear instancias de pokémon.
    • Aquí está un ejemplo básico:
				
					// Definición de la clase Pokemon
class Pokemon {
  constructor(nombre, vida) {
    this.nombre = nombre;
    this.vida = vida;
  }

  // Método para atacar
  atacar() {
    console.log(`${this.nombre} ataca al oponente.`);
  }
}

// Crear una instancia de Pikachu
const pikachu = new Pokemon('Pikachu', 100);
pikachu.atacar(); // Imprime: "Pikachu ataca al oponente."

				
			

2. Encapsulamiento:

    • El encapsulamiento oculta los detalles internos de una clase y expone solo lo necesario.
    • En nuestro ejemplo, nombre y vida son propiedades encapsuladas dentro de la clase Pokemon.
    • Los métodos también pueden ser encapsulados.

3. Herencia:

      • La herencia nos permite crear nuevas clases basadas en clases existentes.
      • Imagina que queremos modelar diferentes tipos de pokémon. Creamos una subclase llamada PokemonEvolucion que hereda de Pokemon.
      • Aquí está un ejemplo:
				
					// Subclase para pokémon evolucionado
class PokemonEvolucion extends Pokemon {
  constructor(nombre, vida, tipo) {
    super(nombre, vida); // Llama al constructor de la clase base
    this.tipo = tipo;
  }

  // Método adicional para atacar (comportamiento específico)
  atacar() {
    console.log(`${this.nombre} lanza un ataque especial de tipo ${this.tipo}.`);
  }
}

// Crear una instancia de Pikachu (clase base)
const pikachu = new Pokemon('Pikachu', 100);
pikachu.atacar(); // Imprime: "Pikachu ataca al oponente."

// Crear una instancia de Charizard (pokémon evolucionado)
const charizard = new PokemonEvolucion('Charizard', 150, 'Fuego');
charizard.atacar(); // Imprime: "Charizard lanza un ataque especial de tipo Fuego."
				
			

4. Polimorfismo:

    • El polimorfismo permite que objetos de diferentes clases respondan de manera similar a un mismo método.
    • En nuestro ejemplo, tanto pikachu como charizard tienen un método atacar(), pero cada uno lo implementa de manera diferente.

En resumen, la POO nos ayuda a organizar y modelar sistemas informáticos de manera más eficiente y estructurada. 

Facebook
Twitter
LinkedIn

Post relacionados

Post recientes

Search