Skip to content

Commit 7149ed5

Browse files
#9 - javascript
1 parent 7f7e693 commit 7149ed5

File tree

1 file changed

+150
-0
lines changed

1 file changed

+150
-0
lines changed
Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
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

Comments
 (0)