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