Ejemplo de POO en JavaScript

INICIO

CODE

    <h1>Ejemplo de POO en JavaScript</h1>

    <script>
        alert("Ejemplo de POO en JavaScript");
        // Definición de la clase Persona
        class Persona {
        constructor(nombre) {
        this.nombre = nombre;
        }
        // Método para saludar
        saludar() {
        alert(`¡Hola! Mi nombre es ${this.nombre}.`);
        }
        }
        // Creación de objetos de la clase Persona
        let persona1 = new Persona("Juan");
        let persona2 = new Persona("María");
        // Llamada al método saludar de los objetos
        persona1.saludar();
        persona2.saludar();
        </script>    

Clases en JavaScript

Las clases en JavaScript son una forma de crear objetos y manejar la herencia de manera más estructurada y orientada a objetos. Introducidas en ECMAScript 2015 (ES6), las clases proporcionan una sintaxis más clara y concisa para definir objetos y sus comportamientos.

Conceptos Básicos de Clases

  1. Definición de Clase: Una clase es un molde para crear objetos. Define propiedades y métodos que los objetos creados a partir de esa clase tendrán.
  2. Sintaxis: La sintaxis para definir una clase en JavaScript utiliza la palabra clave class.

Ejemplo de Definición de Clase

class Persona {
    constructor(nombre, edad) {
        this.nombre = nombre; // Propiedad de instancia
        this.edad = edad;     // Propiedad de instancia
    }

    saludar() {
        console.log(`Hola, soy ${this.nombre} y tengo ${this.edad} años.`);
    }
}

// Crear una instancia de la clase
const persona1 = new Persona("Juan", 30);
persona1.saludar(); // Salida: Hola, soy Juan y tengo 30 años.
    

Componentes de una Clase

  1. Constructor: Es un método especial llamado constructor() que se ejecuta cuando se crea una nueva instancia de la clase. Se utiliza para inicializar propiedades.
  2. Métodos: Son funciones definidas dentro de la clase que pueden ser llamadas en las instancias de esa clase.

Interfaces en JavaScript

En JavaScript, el concepto de interfaces no está presente de manera nativa como en otros lenguajes orientados a objetos como Java o C#. Sin embargo, las interfaces se pueden simular utilizando diversas técnicas que permiten definir un contrato que las clases deben seguir.

¿Qué es una Interfaz?

Una interfaz es un conjunto de métodos y propiedades que una clase debe implementar. No se trata de una implementación concreta, sino de una declaración de métodos que deben ser definidos en las clases que implementan la interfaz.

Simulación de Interfaces en JavaScript

En JavaScript, no hay una palabra clave especial para definir interfaces. En su lugar, se puede crear una función o un objeto que actúe como una interfaz, y luego utilizarla para validar que una clase cumple con el contrato esperado.

Ejemplo de Simulación de Interfaz

function validarInterfaz(obj) {
    if (typeof obj.metodo1 !== 'function' || typeof obj.metodo2 !== 'function') {
        throw new Error("El objeto no implementa la interfaz requerida.");
    }
}

class ClaseImplementadora {
    metodo1() {
        console.log("Método 1 implementado.");
    }

    metodo2() {
        console.log("Método 2 implementado.");
    }
}

// Validar que la clase cumple con la interfaz
const instancia = new ClaseImplementadora();
validarInterfaz(instancia); // No lanzará un error
    

Uso de Interfaces con TypeScript

TypeScript, un superconjunto de JavaScript, introduce el concepto de interfaces de manera formal, permitiendo definir un contrato claro y facilitar la verificación de tipos en tiempo de compilación.

Ejemplo de Interfaz en TypeScript

interface InterfazEjemplo {
    metodo1(): void;
    metodo2(): void;
}

class ClaseImplementadora implements InterfazEjemplo {
    metodo1() {
        console.log("Método 1 implementado.");
    }

    metodo2() {
        console.log("Método 2 implementado.");
    }
}

const instancia = new ClaseImplementadora();
instancia.metodo1(); // Salida: Método 1 implementado.
    

Conclusión

Las interfaces no son una característica nativa en JavaScript, pero se pueden simular para establecer contratos en el diseño de clases. Para un enfoque más robusto y formal, TypeScript ofrece un soporte completo para interfaces, mejorando la calidad y mantenibilidad del código.

Métodos Estáticos en JavaScript

Definición

Los métodos estáticos son funciones que pertenecen a una clase en sí, en lugar de a las instancias de esa clase. Esto significa que no se pueden llamar desde un objeto creado a partir de la clase, sino directamente desde la clase misma.

Características de los Métodos Estáticos

  1. No Acceden a Instancias: Un método estático no tiene acceso a this de la instancia de la clase. Esto se debe a que no se llama en el contexto de una instancia, sino en el contexto de la clase.
  2. Se Utilizan para Funciones Generales: Son útiles para operaciones que no requieren información de las instancias. Por ejemplo, funciones de utilidad, cálculos o métodos que operan en datos que no dependen de instancias individuales.
  3. Definición: Se definen utilizando la palabra clave static antes del nombre del método.

Ejemplo de Métodos Estáticos

class Matematica {
    // Método estático para sumar dos números
    static sumar(a, b) {
        return a + b;
    }
}

// Llamada al método estático directamente desde la clase
const resultado = Matematica.sumar(5, 3);
console.log(resultado); // Salida: 8
    

Cuando Usar Métodos Estáticos

Conclusión

Los métodos estáticos son una forma efectiva de organizar y reutilizar el código en JavaScript, permitiendo que funciones relacionadas con una clase sean accesibles sin necesidad de crear instancias.

Propiedades Estáticas en JavaScript

Definición

Las propiedades estáticas son variables que pertenecen a una clase en sí, no a las instancias de la clase. Esto significa que se pueden acceder directamente a través de la clase sin necesidad de crear un objeto de esa clase.

Características de las Propiedades Estáticas

  1. Acceso Directo: Se accede a las propiedades estáticas usando el nombre de la clase, en lugar de una instancia.
  2. No Accesibles desde Instancias: No puedes acceder a las propiedades estáticas a través de las instancias de la clase, ya que son parte de la clase en sí.
  3. Almacenamiento de Datos Comunes: Son útiles para almacenar información que es común a todas las instancias de la clase, como configuraciones o contadores.

Ejemplo de Propiedades Estáticas

class Contador {
    // Propiedad estática
    static conteo = 0;

    constructor() {
        Contador.conteo++; // Incrementa el contador cada vez que se crea una instancia
    }

    static obtenerConteo() {
        return Contador.conteo; // Método estático para obtener el conteo
    }
}

// Crear instancias de la clase
const instancia1 = new Contador();
const instancia2 = new Contador();
const instancia3 = new Contador();

console.log(Contador.obtenerConteo()); // Salida: 3
    

Detalles del Ejemplo

  1. Definición de Propiedad Estática: En la clase Contador, la propiedad estática conteo se inicializa en 0.
  2. Uso del Constructor: Cada vez que se crea una nueva instancia de Contador, se incrementa la propiedad estática conteo.
  3. Método Estático: El método obtenerConteo es estático y permite acceder al valor de la propiedad estática conteo sin necesidad de instanciar la clase.

Ventajas de Usar Propiedades Estáticas

Conclusión

Las propiedades estáticas son una característica poderosa de las clases en JavaScript que te permiten definir variables relacionadas con la clase en su conjunto, en lugar de cada instancia individual. Son útiles para almacenar información común y proporcionar métodos que no dependen de instancias.

VIDEO: Métodos y Propiedades estáticas

VIDEO: Principios POO