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:
nombre
yedad
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 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
nombre
y lo asigna a la propiedadnombre
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
yaño
son 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:
Vehiculo
es la clase base. - Clase Derivada:
Bicicleta
extiendeVehiculo
usando 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: 1300
Explicación
private
:saldo
es 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
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.
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