En este tema, exploraremos las clases en TypeScript, una característica fundamental para la programación orientada a objetos (POO). Las clases permiten definir estructuras de datos complejas y comportamientos asociados, facilitando la creación de objetos con propiedades y métodos.

Contenido

Definición de Clases

En TypeScript, una clase se define utilizando la palabra clave class. Aquí tienes un ejemplo básico:

class Persona {
    nombre: string;
    edad: number;

    constructor(nombre: string, edad: number) {
        this.nombre = nombre;
        this.edad = edad;
    }

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

const persona1 = new Persona("Juan", 30);
persona1.saludar(); // Hola, mi nombre es Juan y tengo 30 años.

Explicación

  • Definición de la Clase: class Persona { ... } define una nueva clase llamada Persona.
  • Propiedades: nombre y edad son propiedades de la clase.
  • Constructor: constructor(nombre: string, edad: number) { ... } es una función especial que se ejecuta cuando se crea una nueva instancia de la clase.
  • Método: saludar() es un método que pertenece a la clase Persona.

Constructores

El constructor es un método especial para crear e inicializar un objeto creado con una clase. En TypeScript, se define dentro de la clase utilizando la palabra clave constructor.

class Animal {
    nombre: string;

    constructor(nombre: string) {
        this.nombre = nombre;
    }

    hacerSonido(): void {
        console.log(`${this.nombre} hace un sonido.`);
    }
}

const animal1 = new Animal("Perro");
animal1.hacerSonido(); // Perro hace un sonido.

Explicación

  • Constructor: El constructor toma un parámetro nombre y lo asigna a la propiedad nombre del objeto.

Propiedades y Métodos

Las propiedades son variables que pertenecen a una clase, y los métodos son funciones que pertenecen a una clase.

class Coche {
    marca: string;
    modelo: string;
    año: number;

    constructor(marca: string, modelo: string, año: number) {
        this.marca = marca;
        this.modelo = modelo;
        this.año = año;
    }

    detalles(): void {
        console.log(`Coche: ${this.marca} ${this.modelo}, Año: ${this.año}`);
    }
}

const coche1 = new Coche("Toyota", "Corolla", 2020);
coche1.detalles(); // Coche: Toyota Corolla, Año: 2020

Explicación

  • Propiedades: marca, modelo y año son propiedades de la clase Coche.
  • Método: detalles() es un método que imprime los detalles del coche.

Herencia

La herencia permite crear una nueva clase basada en una clase existente. La nueva clase hereda todas las propiedades y métodos de la clase base.

class Vehiculo {
    marca: string;

    constructor(marca: string) {
        this.marca = marca;
    }

    mover(): void {
        console.log(`${this.marca} se está moviendo.`);
    }
}

class Bicicleta extends Vehiculo {
    tipo: string;

    constructor(marca: string, tipo: string) {
        super(marca);
        this.tipo = tipo;
    }

    mover(): void {
        console.log(`${this.marca} (${this.tipo}) se está moviendo.`);
    }
}

const bici1 = new Bicicleta("Giant", "Montaña");
bici1.mover(); // Giant (Montaña) se está moviendo.

Explicación

  • Clase Base: Vehiculo es la clase base.
  • Clase Derivada: Bicicleta extiende Vehiculo usando la palabra clave extends.
  • Método super: super(marca) llama al constructor de la clase base.

Modificadores de Acceso

TypeScript proporciona modificadores de acceso para controlar la visibilidad de las propiedades y métodos de una clase.

  • public: Accesible desde cualquier lugar.
  • private: Accesible solo dentro de la clase.
  • protected: Accesible dentro de la clase y sus subclases.
class CuentaBancaria {
    private saldo: number;

    constructor(saldoInicial: number) {
        this.saldo = saldoInicial;
    }

    depositar(cantidad: number): void {
        this.saldo += cantidad;
    }

    retirar(cantidad: number): void {
        if (cantidad <= this.saldo) {
            this.saldo -= cantidad;
        } else {
            console.log("Saldo insuficiente.");
        }
    }

    verSaldo(): void {
        console.log(`Saldo: ${this.saldo}`);
    }
}

const cuenta = new CuentaBancaria(1000);
cuenta.depositar(500);
cuenta.retirar(200);
cuenta.verSaldo(); // Saldo: 1300

Explicación

  • private: saldo es una propiedad privada, solo accesible dentro de la clase CuentaBancaria.

Ejercicios Prácticos

Ejercicio 1

Crea una clase Libro con las siguientes propiedades y métodos:

  • Propiedades: titulo, autor, anio.
  • Constructor que inicialice las propiedades.
  • Método detalles que imprima los detalles del libro.
class Libro {
    titulo: string;
    autor: string;
    anio: number;

    constructor(titulo: string, autor: string, anio: number) {
        this.titulo = titulo;
        this.autor = autor;
        this.anio = anio;
    }

    detalles(): void {
        console.log(`Libro: ${this.titulo}, Autor: ${this.autor}, Año: ${this.anio}`);
    }
}

const libro1 = new Libro("1984", "George Orwell", 1949);
libro1.detalles(); // Libro: 1984, Autor: George Orwell, Año: 1949

Ejercicio 2

Crea una clase Empleado que herede de una clase Persona. La clase Empleado debe tener una propiedad adicional salario y un método detalles que imprima todos los detalles del empleado.

class Persona {
    nombre: string;
    edad: number;

    constructor(nombre: string, edad: number) {
        this.nombre = nombre;
        this.edad = edad;
    }
}

class Empleado extends Persona {
    salario: number;

    constructor(nombre: string, edad: number, salario: number) {
        super(nombre, edad);
        this.salario = salario;
    }

    detalles(): void {
        console.log(`Empleado: ${this.nombre}, Edad: ${this.edad}, Salario: ${this.salario}`);
    }
}

const empleado1 = new Empleado("Ana", 28, 50000);
empleado1.detalles(); // Empleado: Ana, Edad: 28, Salario: 50000

Conclusión

En esta sección, hemos aprendido sobre las clases en TypeScript, incluyendo cómo definir clases, constructores, propiedades, métodos, herencia y modificadores de acceso. Las clases son una herramienta poderosa en la programación orientada a objetos y son fundamentales para estructurar y organizar el código de manera eficiente.

En el próximo tema, exploraremos los Enums en TypeScript, que nos permiten definir conjuntos de constantes con nombres más legibles y manejables.

© Copyright 2024. Todos los derechos reservados