From 53f63335dec8d812380927be2ebf9049024671cf Mon Sep 17 00:00:00 2001 From: FranKaddour Date: Thu, 25 Jun 2026 10:56:03 -0300 Subject: [PATCH] #09 - TypeScript --- .../09 - HERENCIA/typescript/FrancoKaddour.ts | 111 ++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 Roadmap/09 - HERENCIA/typescript/FrancoKaddour.ts diff --git a/Roadmap/09 - HERENCIA/typescript/FrancoKaddour.ts b/Roadmap/09 - HERENCIA/typescript/FrancoKaddour.ts new file mode 100644 index 0000000000..a743a53c56 --- /dev/null +++ b/Roadmap/09 - HERENCIA/typescript/FrancoKaddour.ts @@ -0,0 +1,111 @@ +// https://www.typescriptlang.org/ + +// Herencia básica +class Animal { + name: string; + + constructor(name: string) { + this.name = name; + } + + makeSound(): void { + console.log(`${this.name} hace un sonido`); + } +} + +class Dog extends Animal { + makeSound(): void { + console.log(`${this.name} dice: guau`); + } +} + +class Cat extends Animal { + makeSound(): void { + console.log(`${this.name} dice: miau`); + } +} + +function printSound(animal: Animal): void { + animal.makeSound(); +} + +printSound(new Dog("Rex")); +printSound(new Cat("Whiskers")); +printSound(new Animal("Animal genérico")); + +// Dificultad extra: jerarquía de empresa + +class Employee { + id: number; + name: string; + subordinates: Employee[] = []; + + constructor(id: number, name: string) { + this.id = id; + this.name = name; + } + + addSubordinate(employee: Employee): void { + this.subordinates.push(employee); + } + + display(): void { + console.log(`[${this.id}] ${this.name}`); + } +} + +class Manager extends Employee { + department: string; + + constructor(id: number, name: string, department: string) { + super(id, name); + this.department = department; + } + + display(): void { + console.log(`[${this.id}] Manager: ${this.name} (Dpto: ${this.department})`); + } +} + +class ProjectManager extends Employee { + project: string; + + constructor(id: number, name: string, project: string) { + super(id, name); + this.project = project; + } + + display(): void { + console.log(`[${this.id}] Project Manager: ${this.name} (Proyecto: ${this.project})`); + } +} + +class Programmer extends Employee { + language: string; + + constructor(id: number, name: string, language: string) { + super(id, name); + this.language = language; + } + + display(): void { + console.log(`[${this.id}] Programmer: ${this.name} (${this.language})`); + } +} + +const cto = new Manager(1, "Sara", "Engineering"); +const pm = new ProjectManager(2, "Luis", "Plataforma v2"); +const dev1 = new Programmer(3, "Ana", "TypeScript"); +const dev2 = new Programmer(4, "Marcos", "Python"); + +pm.addSubordinate(dev1); +pm.addSubordinate(dev2); +cto.addSubordinate(pm); + +cto.display(); +for (const sub of cto.subordinates) { + sub.display(); + for (const inner of sub.subordinates) { + inner.display(); + } +}