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 llamadaPersona. - Propiedades:
nombreyedadson 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 clasePersona.
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
nombrey lo asigna a la propiedadnombredel 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: 2020Explicación
- Propiedades:
marca,modeloyañoson propiedades de la claseCoche. - 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:
Vehiculoes la clase base. - Clase Derivada:
BicicletaextiendeVehiculousando la palabra claveextends. - 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: 1300Explicación
private:saldoes una propiedad privada, solo accesible dentro de la claseCuentaBancaria.
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
detallesque 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: 1949Ejercicio 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: 50000Conclusió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.
Curso de TypeScript
Módulo 1: Introducción a TypeScript
- ¿Qué es TypeScript?
- Configuración del Entorno de TypeScript
- Tipos Básicos
- Anotaciones de Tipo
- Compilando TypeScript
Módulo 2: Trabajando con Tipos
Módulo 3: Tipos Avanzados
Módulo 4: Funciones y Módulos
- Tipos de Función
- Parámetros Opcionales y Predeterminados
- Parámetros Rest
- Módulos y Espacios de Nombres
- Decoradores
Módulo 5: Programación Asíncrona
Módulo 6: Herramientas y Mejores Prácticas
- Linting y Formateo
- Pruebas de Código TypeScript
- TypeScript con Webpack
- TypeScript con React
- Mejores Prácticas
