1+ // Ejercicio
2+
3+ /* Incorrecto */
4+
5+ class Animal {
6+ constructor ( sound ) {
7+ this . sound = sound
8+ }
9+
10+ makeSound ( ) {
11+ switch ( this . sound ) {
12+ case 'meau' :
13+ console . log ( `The animal makes meau!!!` ) ;
14+ break ;
15+ case 'woof' :
16+ console . log ( `The animal makes woof!!!` ) ;
17+ break ;
18+ default :
19+ console . log ( 'Please incert an animal sound!' ) ;
20+ break ;
21+ }
22+ }
23+ }
24+ const animal = new Animal ( 'meau' )
25+ animal . makeSound ( )
26+
27+ /* Correcto */
28+
29+ class Person {
30+ constructor ( name , occupation ) {
31+ this . name = name
32+ this . occupation = occupation
33+ }
34+
35+ getOccupation ( ) {
36+ return this . occupation . getOccupation ( )
37+ }
38+ }
39+
40+ class PersonOccupation {
41+ getOccupation ( ) { }
42+ }
43+
44+ class IndustrialEngineer extends PersonOccupation {
45+ getOccupation ( ) {
46+ return 'I am an industrial engineer.'
47+ }
48+ }
49+
50+ const engineer = new Person ( 'Yojan' , new IndustrialEngineer ( ) )
51+ console . log ( `Hola mi nombre es ${ engineer . name } soy ${ engineer . getOccupation ( ) } ` )
52+
53+ // Extra
54+
55+ /* Clase abstracta. No puede ser instanciada directamente pero es capaz de ser heredada por la descendencia */
56+
57+ class Operation {
58+ constructor ( ) {
59+ if ( new . target === Operation ) {
60+ throw new TypeError ( "No puedes instanciar la clase abstracta 'Operation' directamente" )
61+ }
62+ }
63+ execute ( ) {
64+ throw new Error ( "Método 'execute()' debe ser implementado en la clase hija" )
65+ }
66+ }
67+
68+ class Addition extends Operation {
69+ constructor ( a , b ) {
70+ super ( )
71+ this . a = a
72+ this . b = b
73+ }
74+ execute ( ) {
75+ return this . a + this . b
76+ }
77+ }
78+
79+ class Subtract extends Operation {
80+ constructor ( a , b ) {
81+ super ( )
82+ this . a = a
83+ this . b = b
84+ }
85+ execute ( ) {
86+ return this . a - this . b
87+ }
88+ }
89+
90+ class Multiply extends Operation {
91+ constructor ( a , b ) {
92+ super ( )
93+ this . a = a
94+ this . b = b
95+ }
96+ execute ( ) {
97+ return this . a * this . b
98+ }
99+ }
100+
101+ class Divide extends Operation {
102+ constructor ( a , b ) {
103+ super ( )
104+ this . a = a
105+ this . b = b
106+ }
107+ execute ( ) {
108+ return this . a / this . b
109+ }
110+ }
111+
112+ class Power extends Operation {
113+ constructor ( a , b ) {
114+ super ( )
115+ this . a = a
116+ this . b = b
117+ }
118+ execute ( ) {
119+ return this . a ** this . b
120+ }
121+ }
122+
123+ class Calculator {
124+ constructor ( ) {
125+ this . operations = { }
126+ }
127+
128+ addOperation ( name , operation ) {
129+ this . operations [ name ] = operation
130+ }
131+
132+ calculate ( name ) {
133+ if ( ! this . operations [ name ] ) {
134+ throw new Error ( `Operación ${ name } no es valida` )
135+ }
136+ return this . operations [ name ] . execute ( )
137+ }
138+ }
139+
140+ const calculadora = new Calculator ( )
141+ calculadora . addOperation ( 'addition' , new Addition ( 10 , 2 ) )
142+ calculadora . addOperation ( 'subtraction' , new Subtract ( 5 , 2 ) )
143+ calculadora . addOperation ( 'multiplication' , new Multiply ( 9 , 2 ) )
144+ calculadora . addOperation ( 'division' , new Divide ( 9 , 2 ) )
145+ calculadora . addOperation ( 'power' , new Power ( 5 , 4 ) )
146+
147+ console . log ( calculadora . calculate ( 'subtraction' ) )
148+ console . log ( calculadora . calculate ( 'addition' ) )
149+ console . log ( calculadora . calculate ( 'multiplication' ) )
150+ console . log ( calculadora . calculate ( 'division' ) )
151+ console . log ( calculadora . calculate ( 'power' ) )
0 commit comments