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
+ }
92
+
93
+
94
+ class Gerente extends Empleado {
95
+ gerenciar ( ) {
96
+ return `${ this . name } esta coordinando todos los proyectos de la empresa`
97
+ }
98
+
99
+ }
100
+
101
+ class GerenteDeProyectos extends Empleado {
102
+ proyecto : string
103
+
104
+ constructor ( name : string , id : number , proyecto : string ) {
105
+ super ( name , id )
106
+ this . proyecto = proyecto
107
+ }
108
+
109
+ gerenciarDeProyectos ( ) {
110
+ return `${ this . name } esta coordinando su proyectos`
111
+ }
112
+
113
+ }
114
+
115
+ class Programador extends Empleado {
116
+ lenguage : string
117
+
118
+ constructor ( name : string , id : number , lenguage : string ) {
119
+ super ( name , id )
120
+ this . lenguage = lenguage
121
+ }
122
+
123
+ programar ( ) {
124
+ return `${ this . name } esta programando en ${ this . lenguage } `
125
+ }
126
+
127
+ add ( empleado : Empleado ) : string {
128
+ return `Un programador no tinene empleados a cargo, ${ empleado . name } no se añadira`
129
+ }
130
+
131
+ }
132
+
133
+ const miGerente = new Gerente ( "Sebastian" , 1 )
134
+ const miGerenteDeProyectos = new GerenteDeProyectos ( "Laura" , 2 , "Proyecto 1" )
135
+ const miGerenteDeProyectos2 = new GerenteDeProyectos ( "Daniela" , 3 , "Proyecto 2" )
136
+ const miProgramador = new Programador ( "Juan" , 4 , "JavaScript" )
137
+ const miProgramador2 = new Programador ( "JuanSe" , 5 , "TypeScript" )
138
+ const miProgramador3 = new Programador ( "Sebas" , 6 , "Pyton" )
139
+ const miProgramador4 = new Programador ( "Michael" , 7 , "Java" )
140
+
141
+ miGerente . add ( miGerenteDeProyectos )
142
+ miGerente . add ( miGerenteDeProyectos2 )
143
+
144
+ miGerenteDeProyectos . add ( miProgramador )
145
+ miGerenteDeProyectos . add ( miProgramador2 )
146
+ miGerenteDeProyectos2 . add ( miProgramador3 )
147
+ miGerenteDeProyectos2 . add ( miProgramador4 )
148
+
149
+ console . log ( miProgramador . add ( miProgramador2 ) )
150
+ console . log ( miGerente . print ( ) )
151
+ }
0 commit comments