// C:\JavaScriptYAngularJavaScript\C07\practica\main.ts 
module escuelaENI { 
    export class Persona { 
        // Atributos 
        _apellido: string; 
        _nombre: string; 
        _edad: number; 
        _altura: number; 
        _peso: number; 
        // Getters 
        get apellido () { 
            return this._apellido; 
        } 
        get nombre () { 
            return this._nombre; 
        } 
        get edad () { 
            return this._edad; 
        } 
        get altura () { 
            return this._altura; 
        } 
        get peso() { 
            return this._peso; 
        } 
  
        // Setters 
        set apellido(apellido: string) { 
            this._apellido = apellido; 
        } 
        set nombre(nombre: string) { 
            this._nombre = nombre; 
        } 
        set edad (edad: number) { 
            this._edad = edad; 
        } 
        set altura (altura: number) { 
            this._altura = altura; 
        } 
        set peso(peso: number) { 
            this._peso = peso; 
        } 
  
        // El constructor
        constructor(apellido: string, nombre: string, edad: number,  altura: number, peso: number) { 
            this._apellido = apellido; 
            this._nombre = nombre; 
            this._edad = edad; 
            this._altura = altura; 
            this._peso = peso; 
        } 
    } 
    export class Estudiante extends Persona { 
  
        _promocion: string; 
  
        // Getters 
        get promocion () { 
            return this._promocion; 
        } 
  
        // Setters 
        set promocion (promo: string) { 
            this._promocion = promo; 
        } 
  
        // Constructor
        constructor(apellido: string, nombre: string, edad: number, altura: number, peso: number, promo: string) { 
            super(apellido, nombre, edad, altura, peso); // Llamada al  constructor de la clase Persona 
            this._promocion = promo; 
        } 
  
    } 
    export class Curso { 
  
        _materia: string; 
  
        // Getters 
        get materia () { 
            return this._materia; 
        } 
  
        // Setters 
        set materia (materia: string) { 
            this._materia = materia; 
        } 
  
        // Constructor 
        constructor(materia: string) { 
            this._materia = materia; 
        } 
    } 
    export class Formador extends Persona { 
  
        _listaDeCursos: Curso[]; 
  
        // Getters 
        get listaDeCursos () { 
            return this._listaDeCursos; 
        } 
  
        // Setters 
        set promotion(listaDeCursos: Curso[]) { 
            this._listaDeCursos = listaDeCursos; 
        } 
  
        // Constructor
        constructor(apellido: string, nombre: string, edad: number, altura: number, peso: number, listaDeCursos: Curso[]) { 
            super(apellido, nombre, edad, altura, peso); // Llamada del constructor de la clase Persona 
            this._listaDeCursos = listaDeCursos; 
        } 
  
        // Añadir un curso 
        añadirCurso(curso: Curso) { 
            this._listaDeCursos.push(curso); 
        } 
  
        mostrarListaDeCursos() { 
            this._listaDeCursos.forEach(element => { 
                console.log(" - " + element.materia); 
            }); 
        } 
  
        mostrar() { 
            console.log("Yo, " + this._apellido + " " + this._nombre  + ", enseño cursos de  : "); 
            this. mostrarListaDeCursos (); 
        } 
    } 
  
}

 let listaDeCursos = [new escuelaENI.Curso("Java"), 
 new escuelaENI.Curso("JavaScript")]; 
 let yo = new escuelaENI.Formador("Garcia", "Julian ", 35, 185,  
 81, listaDeCursos); 
 yo.mostrar();
 