Volver a Interfaces y Clases
Ir al examen del modulo
Interfaces y Clases — Leccion 5
·15 minClases Abstractas
Clases que no se instancian, solo se heredan.
Clases abstractas
Una clase abstracta no se puede instanciar directamente. Sirve como base para otras clases.
typescript
abstract class Forma {
abstract area(): number; // Obligatoria en subclases
descripcion(): string {
return `Area: ${this.area()}`;
}
}
// const f = new Forma(); // Error: Cannot create instance of abstract class
class Circulo extends Forma {
constructor(private radio: number) {
super();
}
area(): number {
return Math.PI * this.radio ** 2;
}
}
class Rectangulo extends Forma {
constructor(private ancho: number, private alto: number) {
super();
}
area(): number {
return this.ancho * this.alto;
}
}
Métodos abstractos
typescript
abstract class Animal {
abstract hacerSonido(): string; // Obligatoria
abstract movimiento(): string; // Obligatoria
describir(): string {
return `${this.hacerSonido()} y se mueve ${this.movimiento()}`;
}
}
class Gato extends Animal {
hacerSonido(): string { return "Miau"; }
movimiento(): string { return "salta"; }
}
class Pato extends Animal {
hacerSonido(): string { return "Cuac"; }
movimiento(): string { return "nada y vuela"; }
}
Cuando usar abstract vs interface
typescript
// Interface: solo define la forma
interface Volador {
volar(): void;
}
// Clase abstract: puede tener implementación
abstract class Transporte {
protected velocidad: number = 0;
abstract arrancar(): void;
frenar(): void {
this.velocidad = 0;
}
getVelocidad(): number {
return this.velocidad;
}
}
Patrón Template Method
typescript
abstract class Proceso {
// Template method
ejecutar(): void {
this.iniciar();
this.procesar();
this.finalizar();
}
abstract iniciar(): void;
abstract procesar(): void;
finalizar(): void {
console.log("Proceso completado");
}
}
class ProcesoCSV extends Proceso {
iniciar() { console.log("Leyendo CSV"); }
procesar() { console.log("Parseando datos"); }
}
Ejercicio pratico
Crea una clase abstracta 'Figura' y dos subclases 'Cuadrado' y 'Triangulo'.
exercise.ts
Loading...
Resultado
Haz clic en "Ejecutar" para ver el resultado...