Պոլիմորֆիզմ JavaScript-ում
Պոլիմորֆիզմ JavaScript-ում — մեթոդների override և համատարած ինտերֆեյս
Պոլիմորֆիզմը (polymorphism) ծրագրավորման սկզբունք է, որը թույլ է տալիս տարբեր class-երի object-ներին ունենալ միևնույն մեթոդը՝ յուրօրինակ իրականացման տարբերակով։ JavaScript-ում պոլիմորֆիզմն առավելապես արտահայտվում է մեթոդների override-ով և ինտերֆեյսի նման ձևավորումով։
Սա կարևոր է երբ միևնույն գործողությունը (օրինակ՝ draw()
) կարող է տարբեր կերպ իրականացվել տարբեր object-ների վրա։
Երբ միևնույն մեթոդը սահմանվում է ծնողական և երեխա class-երում՝ տարբեր իրականացմամբ, սա պոլիմորֆիզմ է։
class Shape { draw() { console.log('Drawing a generic shape'); } }
class Circle extends Shape { draw() { console.log('Drawing a Circle'); } }
class Square extends Shape { draw() { console.log('Drawing a Square'); } }
Այժմ մենք կարող ենք գրել կոդ, որը աշխատում է բոլոր shape-ների հետ, առանց դրանց տեսակն իմանալու։
const shapes = [new Circle(), new Square(), new Shape()];
shapes.forEach(shape => shape.draw()); // Drawing a Circle // Drawing a Square // Drawing a generic shape
Սա է պոլիմորֆիզմի ուժը՝ կոդը գրվում է ծնողական class-ի մակարդակով, բայց վարքը որոշվում է իրական object-ի տեսակով։
JavaScript-ում չունենք interface
keyword, բայց կարող ենք ստեղծել անուղղակի ինտերֆեյս՝ դիզայնով։ Օրինակ՝ բոլոր figure-ները կարող են ունենալ area()
մեթոդ՝ տարբեր հաշվարկով։
class Rectangle { constructor(w, h) { this.w = w; this.h = h; }
area() { return this.w * this.h; } }
class Triangle { constructor(b, h) { this.b = b; this.h = h; }
area() { return 0.5 * this.b * this.h; } }
const figures = [new Rectangle(4, 5), new Triangle(4, 5)];
figures.forEach(f => { console.log(f.area()); }); // 20 // 10
Պայման է միայն այն, որ բոլորը ունենան area()
մեթոդ․ սա պոլիմորֆ դիզայն է առանց ժառանգության։
Օգտագործիր պոլիմորֆիզմ երբ․
draw()
բոլոր ֆիգուրների համար) Սա ապահովում է OOP-ի SOLID սկզբունքներից՝ Open/Closed Principle-ը։
Պոլիմորֆիզմը ծրագրավորողին թույլ է տալիս աշխատել ինտերֆեյսի մակարդակով՝ առանց մանրամասն իմանալու տվյալ object-ի ներքին կառուցվածքը։ JavaScript-ում այն կարող է իրականացվել class-երով։
Հաջորդ մասում կխոսենք՝ ինչպես ստեղծել ընդհանուր base class և օգտագործել abstract դասեր JavaScript-ում՝ չնայած լեզուն չունի ուղղակի սինտաքս դրա համար։