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+ class Animal {
16+
17+ constructor ( nombre ) {
18+ this . nombre = nombre ;
19+ }
20+
21+ print ( ) {
22+ console . log ( 'Soy un animal.' ) ;
23+ }
24+ }
25+
26+ class Perro extends Animal {
27+
28+ constructor ( nombre , raza ) {
29+ super ( nombre ) ;
30+ this . raza = raza ;
31+ }
32+
33+ sonido ( ) {
34+ return 'Guau!'
35+ }
36+
37+ print ( ) {
38+ console . log ( `Este perro se llama ${ this . nombre } , es de raza ${ this . raza } y hace: ${ this . sonido ( ) } ` ) ;
39+ }
40+ }
41+
42+ class Gato extends Animal {
43+
44+ constructor ( nombre , raza ) {
45+ super ( nombre ) ;
46+ this . raza = raza ;
47+ }
48+
49+ sonido ( ) {
50+ return 'Miaaaau' ;
51+ }
52+
53+ print ( ) {
54+ console . log ( `Este gato se llama ${ this . nombre } , es de raza ${ this . raza } y hace: ${ this . sonido ( ) } ` ) ;
55+ }
56+ }
57+
58+ const loki = new Perro ( 'Loki' , 'border collie' ) ;
59+ const gatoConBotas = new Gato ( 'El gato con botas' , 'siames' ) ;
60+
61+ loki . print ( ) ;
62+ gatoConBotas . print ( ) ;
63+
64+ // * DIFICULTAD EXTRA (opcional):
65+ // * Implementa la jerarquía de una empresa de desarrollo formada por Empleados que
66+ // * pueden ser Gerentes, Gerentes de Proyectos o Programadores.
67+ // * Cada empleado tiene un identificador y un nombre.
68+ // * Dependiendo de su labor, tienen propiedades y funciones exclusivas de su
69+ // * actividad, y almacenan los empleados a su cargo.
70+ // */
71+
72+ class Empleado {
73+
74+ constructor ( id , nombre ) {
75+ this . id = id ;
76+ this . nombre = nombre ;
77+ }
78+ }
79+
80+ class Gerente extends Empleado {
81+
82+ constructor ( id , nombre , departamentosSupervisados , empleadosGestionados ) {
83+ super ( id , nombre ) ;
84+ this . departamentosSupervisados = departamentosSupervisados ;
85+ this . empleadosGestionados = empleadosGestionados ;
86+ }
87+
88+ listDepartamentos ( ) {
89+ return this . departamentosSupervisados ;
90+ }
91+
92+ listEmpleadosGestionados ( ) {
93+ return this . empleadosGestionados ;
94+ }
95+
96+ print ( ) {
97+ console . log ( `El gerente ${ this . nombre } con id ${ this . id } supervisa los departamentos: ${ this . departamentosSupervisados } y tiene a cargos los siguientes empleados: ${ this . empleadosGestionados } .` ) ;
98+ }
99+ }
100+
101+ class GerenteProyecto extends Empleado {
102+
103+ constructor ( id , nombre , proyectosActivos , metasProyectos ) {
104+ super ( id , nombre ) ;
105+ this . proyectosActivos = proyectosActivos ;
106+ this . metasProyectos = metasProyectos ;
107+ }
108+
109+ listProyectosActivos ( ) {
110+ return this . proyectosActivos ;
111+ }
112+
113+ listMetasProyectos ( ) {
114+ return this . metasProyectos ;
115+ }
116+
117+ print ( ) {
118+ console . log ( `El gerente de proyecto ${ this . nombre } con id ${ this . id } tiene los siguientes proyectos activos: ${ this . proyectosActivos } y las siguientes metas: ${ this . metasProyectos } .` ) ;
119+ }
120+ }
121+
122+ class Programadora extends Empleado {
123+
124+ constructor ( id , nombre , tickets , rol ) {
125+ super ( id , nombre ) ;
126+ this . tickets = tickets ;
127+ this . rol = rol ;
128+ }
129+
130+ countOpenTickets ( ) {
131+ return this . tickets . filter ( ticket => ticket . open ) . length ;
132+ }
133+
134+ getRol ( ) {
135+ return this . rol ;
136+ }
137+
138+ print ( ) {
139+ console . log ( `El programador ${ this . nombre } con id ${ this . id } tiene ${ this . countOpenTickets ( ) } tickets abiertos. Su rol es ${ this . getRol ( ) } .` ) ;
140+ }
141+ }
142+
143+ const gerente = new Gerente ( '001' , 'Mike' , [ 'contabilidad' , 'economato' ] , [ 'Robo, Tere, Shin Shan' ] )
144+ gerente . print ( ) ;
145+
146+ const gerenteProyecto = new GerenteProyecto ( '002' , 'Tere' , [ 'FaceLibro' , 'JustCome' ] , 'completar el 80% de tareas de cada sprint' ) ;
147+ gerenteProyecto . print ( ) ;
148+
149+ const programadora = new Programadora ( '003' , 'Caterina' , [ { id : 't1' , open : true } , { id : 't2' , open : false } , { id : 't3' , open : true } ] , 'FullStack' ) ;
150+ programadora . print ( ) ;
0 commit comments