1+ /*
2+ * EJERCICIO:
3+ * Explora el concepto de herencia según tu lenguaje. Crea un ejemplo que
4+ * implemente una superclase Animal y un par de subclases Perro y Gato,
5+ * junto con una función que sirva para imprimir el sonido que emite cada Animal.
6+ *
7+ * DIFICULTAD EXTRA (opcional):
8+ * Implementa la jerarquía de una empresa de desarrollo formada por Empleados que
9+ * pueden ser Gerentes, Gerentes de Proyectos o Programadores.
10+ * Cada empleado tiene un identificador y un nombre.
11+ * Dependiendo de su labor, tienen propiedades y funciones exclusivas de su
12+ * actividad, y almacenan los empleados a su cargo.
13+ */
14+
15+ namespace herencias {
16+
17+ class Animals {
18+ animal : string
19+ nombre : string
20+
21+ constructor ( animal : string , nombre : string ) {
22+ this . animal = animal
23+ this . nombre = nombre
24+ }
25+
26+ talk ( ) :string {
27+ return `Soy un ${ this . animal } y me llamo ${ this . nombre } y emite un sonido no determiando`
28+ }
29+
30+ }
31+
32+ class Perro extends Animals {
33+ sonido : string
34+
35+ constructor ( nombre : string , sonido : string ) {
36+ super ( "perro" , nombre )
37+ this . sonido = sonido
38+ }
39+
40+ talk ( ) :string {
41+ return `Soy un ${ this . animal } , me llamo ${ this . nombre } y ladro, ${ this . sonido } !`
42+ }
43+ }
44+
45+ class Gato extends Animals {
46+ sonido : string
47+
48+ constructor ( nombre : string , sonido : string ) {
49+ super ( "gato" , nombre )
50+ this . sonido = sonido
51+ }
52+
53+ talk ( ) :string {
54+ return `Soy un ${ this . animal } , me llamo ${ this . nombre } y maullo, ${ this . sonido } !`
55+ }
56+ }
57+
58+ const loro = new Animals ( "loro" , "theo" )
59+ const perro = new Perro ( "Max" , "guau! guau!" )
60+ const gato = new Gato ( "Michi" , "miau miau!" )
61+
62+ const emitirSonido = ( animal : Animals ) : string => {
63+ return `${ animal . talk ( ) } `
64+ }
65+
66+ console . log ( emitirSonido ( loro ) )
67+ console . log ( emitirSonido ( perro ) )
68+ console . log ( emitirSonido ( gato ) )
69+
70+ //! EXTRA
71+
72+ class Empleado {
73+ name : string
74+ id : number
75+ empleados : Empleado [ ]
76+
77+ constructor ( name : string , id : number ) {
78+ this . name = name
79+ this . id = id
80+ this . empleados = [ ]
81+ }
82+
83+ print ( ) {
84+ return `Soy un el empleado ${ this . name } con id: ${ this . id } sin cargo asignado`
85+ }
86+
87+ add ( empleado : Empleado ) {
88+ this . empleados . push ( empleado )
89+ }
90+
91+ imprimirEmpleados ( ) {
92+ let empleados : string [ ] = [ ]
93+ for ( const empleado of this . empleados ) {
94+ empleados . push ( empleado . name )
95+ }
96+ return empleados
97+ }
98+
99+ }
100+
101+
102+ class Gerente extends Empleado {
103+ gerenciar ( ) {
104+ return `${ this . name } esta coordinando todos los proyectos de la empresa`
105+ }
106+
107+ }
108+
109+ class GerenteDeProyectos extends Empleado {
110+ proyecto : string
111+
112+ constructor ( name : string , id : number , proyecto : string ) {
113+ super ( name , id )
114+ this . proyecto = proyecto
115+ }
116+
117+ gerenciarDeProyectos ( ) {
118+ return `${ this . name } esta coordinando su proyectos`
119+ }
120+
121+ }
122+
123+ class Programador extends Empleado {
124+ lenguage : string
125+
126+ constructor ( name : string , id : number , lenguage : string ) {
127+ super ( name , id )
128+ this . lenguage = lenguage
129+ }
130+
131+ programar ( ) {
132+ return `${ this . name } esta programando en ${ this . lenguage } `
133+ }
134+
135+ add ( empleado : Empleado ) : string {
136+ return `Un programador no tinene empleados a cargo, ${ empleado . name } no se añadira`
137+ }
138+
139+ }
140+
141+ const miGerente = new Gerente ( "Sebastian" , 1 )
142+ const miGerenteDeProyectos = new GerenteDeProyectos ( "Laura" , 2 , "Proyecto 1" )
143+ const miGerenteDeProyectos2 = new GerenteDeProyectos ( "Daniela" , 3 , "Proyecto 2" )
144+ const miProgramador = new Programador ( "Juan" , 4 , "JavaScript" )
145+ const miProgramador2 = new Programador ( "JuanSe" , 5 , "TypeScript" )
146+ const miProgramador3 = new Programador ( "Sebas" , 6 , "Pyton" )
147+ const miProgramador4 = new Programador ( "Michael" , 7 , "Java" )
148+
149+ miGerente . add ( miGerenteDeProyectos )
150+ miGerente . add ( miGerenteDeProyectos2 )
151+
152+ miGerenteDeProyectos . add ( miProgramador )
153+ miGerenteDeProyectos . add ( miProgramador2 )
154+ miGerenteDeProyectos2 . add ( miProgramador3 )
155+ miGerenteDeProyectos2 . add ( miProgramador4 )
156+
157+ console . log ( miProgramador . add ( miProgramador2 ) )
158+ console . log ( miGerente . print ( ) )
159+
160+ console . log ( miProgramador . programar ( ) )
161+ console . log ( miProgramador2 . programar ( ) )
162+ console . log ( miProgramador3 . programar ( ) )
163+ console . log ( miProgramador4 . programar ( ) )
164+ console . log ( miGerenteDeProyectos . gerenciarDeProyectos ( ) )
165+ console . log ( miGerenteDeProyectos2 . gerenciarDeProyectos ( ) )
166+ console . log ( miGerente . gerenciar ( ) )
167+
168+ console . log ( miGerente . imprimirEmpleados ( ) )
169+ console . log ( miGerenteDeProyectos . imprimirEmpleados ( ) )
170+ console . log ( miGerenteDeProyectos2 . imprimirEmpleados ( ) )
171+ console . log ( miProgramador . imprimirEmpleados ( ) )
172+ }
0 commit comments