टाइपस्क्रिप्ट - कक्षाएं
टाइपस्क्रिप्ट ऑब्जेक्ट ओरिएंटेड जावास्क्रिप्ट है। टाइपस्क्रिप्ट ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग फ़ीचर जैसे क्लास, इंटरफेस आदि का समर्थन करता है। OOP के संदर्भ में एक क्लास ऑब्जेक्ट बनाने का एक खाका है। एक वर्ग ऑब्जेक्ट के लिए डेटा एनकैप्सुलेट करता है। टाइपस्क्रिप्ट इस अवधारणा के समर्थन में बनाया गया है जिसे कक्षा कहा जाता है। जावास्क्रिप्ट ES5 या पहले के वर्गों का समर्थन नहीं करता था। टाइपस्क्रिप्ट को ES6 से यह सुविधा मिलती है।
कक्षाएं बनाना
टाइपस्क्रिप्ट में क्लास घोषित करने के लिए क्लास कीवर्ड का उपयोग करें। उसी का सिंटैक्स नीचे दिया गया है -
वाक्य - विन्यास
class class_name {
//class scope
}
क्लास कीवर्ड के बाद क्लास का नाम आता है। कक्षा का नामकरण करते समय पहचानकर्ताओं के नियमों पर विचार किया जाना चाहिए।
एक वर्ग परिभाषा में निम्नलिखित शामिल हो सकते हैं -
Fields- एक क्षेत्र किसी भी वर्ग में घोषित चर है। फ़ील्ड ऑब्जेक्ट से संबंधित डेटा का प्रतिनिधित्व करती हैं
Constructors - कक्षा की वस्तुओं के लिए स्मृति आवंटित करने के लिए जिम्मेदार
Functions- कार्य उन क्रियाओं का प्रतिनिधित्व करते हैं जो एक वस्तु ले सकती है। उन्हें कई बार विधियों के रूप में भी जाना जाता है
एक साथ रखे गए इन घटकों को कक्षा के डेटा सदस्य के रूप में जाना जाता है।
टाइपस्क्रिप्ट में एक वर्ग व्यक्ति पर विचार करें।
class Person {
}
संकलन करने पर, यह जावास्क्रिप्ट कोड के बाद उत्पन्न होगा।
//Generated by typescript 1.8.10
var Person = (function () {
function Person() {
}
return Person;
}());
उदाहरण: एक वर्ग की घोषणा
class Car {
//field
engine:string;
//constructor
constructor(engine:string) {
this.engine = engine
}
//function
disp():void {
console.log("Engine is : "+this.engine)
}
}
उदाहरण एक वर्ग कार घोषित करता है। क्लास में एक फील्ड है जिसका नाम इंजन है। varफ़ील्ड घोषित करते समय कीवर्ड का उपयोग नहीं किया जाता है। ऊपर दिया गया उदाहरण कक्षा के लिए एक कंस्ट्रक्टर घोषित करता है।
एक रचनाकार वर्ग का एक विशेष कार्य है जो कक्षा के चर को आरंभ करने के लिए जिम्मेदार है। टाइपस्क्रिप्ट कंस्ट्रक्टर कीवर्ड का उपयोग करके एक कंस्ट्रक्टर को परिभाषित करता है। एक कंस्ट्रक्टर एक फ़ंक्शन है और इसलिए इसे पैरामीटर किया जा सकता है।
thisकीवर्ड क्लास के वर्तमान उदाहरण को संदर्भित करता है। यहां, पैरामीटर नाम और वर्ग के क्षेत्र का नाम समान हैं। इसलिए अस्पष्टता से बचने के लिए, वर्ग के क्षेत्र के साथ उपसर्ग किया जाता हैthis कीवर्ड।
disp () एक साधारण फ़ंक्शन परिभाषा है। ध्यान दें कि फ़ंक्शन कीवर्ड का उपयोग यहां नहीं किया गया है।
संकलन करने पर, यह जावास्क्रिप्ट कोड के बाद उत्पन्न होगा।
//Generated by typescript 1.8.10
var Car = (function () {
//constructor
function Car(engine) {
this.engine = engine;
}
//function
Car.prototype.disp = function () {
console.log("Engine is : " + this.engine);
};
return Car;
}());
इंस्टेंस ऑब्जेक्ट बनाना
कक्षा का एक उदाहरण बनाने के लिए, का उपयोग करें newकीवर्ड के बाद वर्ग नाम। उसी का सिंटैक्स नीचे दिया गया है -
वाक्य - विन्यास
var object_name = new class_name([ arguments ])
new तत्काल के लिए कीवर्ड जिम्मेदार है।
अभिव्यक्ति का दाहिना हाथ निर्माणकर्ता को आमंत्रित करता है। यदि इसे मानकीकृत किया जाता है, तो कंस्ट्रक्टर को मान दिया जाना चाहिए।
उदाहरण: एक वर्ग को त्वरित करना
var obj = new Car("Engine 1")
पहुँच गुण और कार्य
एक कक्षा के गुण और कार्यों को ऑब्जेक्ट के माध्यम से एक्सेस किया जा सकता है। उपयोग ' । 'डॉट नोटेशन (जिसे अवधि कहा जाता है) एक वर्ग के डेटा सदस्यों तक पहुंचने के लिए।
//accessing an attribute
obj.field_name
//accessing a function
obj.function_name()
उदाहरण: उन्हें एक साथ रखना
class Car {
//field
engine:string;
//constructor
constructor(engine:string) {
this.engine = engine
}
//function
disp():void {
console.log("Function displays Engine is : "+this.engine)
}
}
//create an object
var obj = new Car("XXSY1")
//access the field
console.log("Reading attribute value Engine as : "+obj.engine)
//access the function
obj.disp()
संकलन करने पर, यह जावास्क्रिप्ट कोड के बाद उत्पन्न होगा।
//Generated by typescript 1.8.10
var Car = (function () {
//constructor
function Car(engine) {
this.engine = engine;
}
//function
Car.prototype.disp = function () {
console.log("Function displays Engine is : " + this.engine);
};
return Car;
}());
//create an object
var obj = new Car("XXSY1");
//access the field
console.log("Reading attribute value Engine as : " + obj.engine);
//access the function
obj.disp();
उपरोक्त कोड का आउटपुट निम्नानुसार है -
Reading attribute value Engine as : XXSY1
Function displays Engine is : XXSY1
कक्षा में प्रवेश
टाइपस्क्रिप्ट इनहेरिटेंस की अवधारणा का समर्थन करता है। वंशानुक्रम एक मौजूदा कक्षा से नई कक्षाएं बनाने के लिए एक कार्यक्रम की क्षमता है। नए वर्ग बनाने के लिए जिस वर्ग का विस्तार किया जाता है, उसे मूल वर्ग / सुपर क्लास कहा जाता है। नव निर्मित कक्षाओं को बच्चे / उप कक्षाएं कहा जाता है।
एक वर्ग 'एक्सटेंड्स' कीवर्ड का उपयोग करके दूसरे वर्ग से विरासत में मिला है। मूल वर्ग से निजी सदस्यों और निर्माणकर्ताओं को छोड़कर सभी वर्गों और विधियों में बाल वर्ग विरासत में मिला है।
वाक्य - विन्यास
class child_class_name extends parent_class_name
हालाँकि, टाइपस्क्रिप्ट एकाधिक वंशानुक्रम का समर्थन नहीं करता है।
उदाहरण: क्लास इनहेरिटेंस
class Shape {
Area:number
constructor(a:number) {
this.Area = a
}
}
class Circle extends Shape {
disp():void {
console.log("Area of the circle: "+this.Area)
}
}
var obj = new Circle(223);
obj.disp()
संकलन करने पर, यह जावास्क्रिप्ट कोड के बाद उत्पन्न होगा।
//Generated by typescript 1.8.10
var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
var Shape = (function () {
function Shape(a) {
this.Area = a;
}
return Shape;
}());
var Circle = (function (_super) {
__extends(Circle, _super);
function Circle() {
_super.apply(this, arguments);
}
Circle.prototype.disp = function () {
console.log("Area of the circle: " + this.Area);
};
return Circle;
}(Shape));
var obj = new Circle(223);
obj.disp();
उपरोक्त कोड का आउटपुट निम्नानुसार है -
Area of the Circle: 223
उपरोक्त उदाहरण एक वर्ग आकृति की घोषणा करता है। वर्ग को सर्किल वर्ग द्वारा विस्तारित किया जाता है। चूंकि कक्षाओं के बीच एक वंशानुक्रम संबंध है, इसलिए चाइल्ड क्लास यानी क्लास कार को अपने मूल वर्ग विशेषता अर्थात क्षेत्र में एक अंतर्निहित पहुंच मिलती है।
वंशानुक्रम को निम्नानुसार वर्गीकृत किया जा सकता है -
Single - प्रत्येक वर्ग एक मूल वर्ग से सबसे अधिक विस्तार कर सकता है
Multiple- एक वर्ग कई वर्गों से वारिस हो सकता है। टाइपस्क्रिप्ट एकाधिक वंशानुक्रम का समर्थन नहीं करता है।
Multi-level - निम्न उदाहरण दिखाता है कि बहु-स्तरीय विरासत कैसे काम करती है।
उदाहरण
class Root {
str:string;
}
class Child extends Root {}
class Leaf extends Child {} //indirectly inherits from Root by virtue of inheritance
var obj = new Leaf();
obj.str ="hello"
console.log(obj.str)
क्लास लीफ मल्टी-लेवल इनहेरिटेंस के आधार पर रूट और चाइल्ड क्लासेस की विशेषताओं को प्राप्त करता है।
संकलन करने पर, यह जावास्क्रिप्ट कोड के बाद उत्पन्न होगा।
//Generated by typescript 1.8.10
var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
var Root = (function () {
function Root() {
}
return Root;
}());
var Child = (function (_super) {
__extends(Child, _super);
function Child() {
_super.apply(this, arguments);
}
return Child;
}(Root));
var Leaf = (function (_super) {
__extends(Leaf, _super);
function Leaf() {
_super.apply(this, arguments);
}
return Leaf;
}(Child));
var obj = new Leaf();
obj.str = "hello";
console.log(obj.str);
इसका आउटपुट निम्नानुसार है -
उत्पादन
hello
टाइपस्क्रिप्ट। क्लास इनहेरिटेंस और मेथड ओवरराइडिंग
मेथड ओवरराइडिंग एक ऐसा तंत्र है जिसके द्वारा बालक वर्ग सुपरक्लास पद्धति को पुनर्परिभाषित करता है। निम्न उदाहरण से पता चलता है -
class PrinterClass {
doPrint():void {
console.log("doPrint() from Parent called…")
}
}
class StringPrinter extends PrinterClass {
doPrint():void {
super.doPrint()
console.log("doPrint() is printing a string…")
}
}
var obj = new StringPrinter()
obj.doPrint()
सुपर कीवर्ड का उपयोग किसी वर्ग के तत्काल अभिभावक को संदर्भित करने के लिए किया जाता है। कीवर्ड का उपयोग किसी चर, संपत्ति या विधि के सुपर क्लास संस्करण को संदर्भित करने के लिए किया जा सकता है। लाइन 13 doWork () फ़ंक्शन के सुपर क्लास संस्करण को आमंत्रित करता है।
संकलन करने पर, यह जावास्क्रिप्ट कोड के बाद उत्पन्न होगा।
//Generated by typescript 1.8.10
var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
var PrinterClass = (function () {
function PrinterClass() {
}
PrinterClass.prototype.doPrint = function () {
console.log("doPrint() from Parent called…");
};
return PrinterClass;
}());
var StringPrinter = (function (_super) {
__extends(StringPrinter, _super);
function StringPrinter() {
_super.apply(this, arguments);
}
StringPrinter.prototype.doPrint = function () {
_super.prototype.doPrint.call(this);
console.log("doPrint() is printing a string…");
};
return StringPrinter;
}(PrinterClass));
var obj = new StringPrinter();
obj.doPrint();
उपरोक्त कोड का आउटपुट निम्नानुसार है -
doPrint() from Parent called…
doPrint() is printing a string…
स्थैतिक खोजशब्द
स्थैतिक कीवर्ड को किसी वर्ग के डेटा सदस्यों पर लागू किया जा सकता है। एक स्थिर चर कार्यक्रम के निष्पादन को पूरा करने तक अपने मूल्यों को बरकरार रखता है। स्टैटिक सदस्यों को वर्ग नाम से संदर्भित किया जाता है।
उदाहरण
class StaticMem {
static num:number;
static disp():void {
console.log("The value of num is"+ StaticMem.num)
}
}
StaticMem.num = 12 // initialize the static variable
StaticMem.disp() // invoke the static method
संकलन करने पर, यह जावास्क्रिप्ट कोड के बाद उत्पन्न होगा।
//Generated by typescript 1.8.10
var StaticMem = (function () {
function StaticMem() {
}
StaticMem.disp = function () {
console.log("The value of num is" + StaticMem.num);
};
return StaticMem;
}());
StaticMem.num = 12; // initialize the static variable
StaticMem.disp(); // invoke the static method
उपरोक्त कोड का आउटपुट निम्नानुसार है -
The value of num is 12
Instof ऑपरेटर
instanceof यदि ऑपरेटर निर्दिष्ट प्रकार का है तो ऑपरेटर सही रिटर्न देता है।
उदाहरण
class Person{ }
var obj = new Person()
var isPerson = obj instanceof Person;
console.log(" obj is an instance of Person " + isPerson);
संकलन करने पर, यह जावास्क्रिप्ट कोड के बाद उत्पन्न होगा।
//Generated by typescript 1.8.10
var Person = (function () {
function Person() {
}
return Person;
}());
var obj = new Person();
var isPerson = obj instanceof Person;
console.log(" obj is an instance of Person " + isPerson);
उपरोक्त कोड का आउटपुट निम्नानुसार है -
obj is an instance of Person True
डेटा छिपाना
एक वर्ग अपने डेटा सदस्यों की दृश्यता को अन्य वर्गों के सदस्यों को नियंत्रित कर सकता है। इस क्षमता को डेटा छिपाना या एनकैप्सुलेशन कहा जाता है।
ऑब्जेक्ट ओरिएंटेशन, एनकैप्सुलेशन की अवधारणा को लागू करने के लिए एक्सेस मॉडिफायर्स या एक्सेस स्पेसियर्स की अवधारणा का उपयोग करता है। पहुँच विनिर्देशक / संशोधक एक कक्षा के डेटा सदस्यों की दृश्यता को उसकी परिभाषित कक्षा के बाहर परिभाषित करते हैं।
टाइपस्क्रिप्ट द्वारा समर्थित एक्सेस संशोधक हैं -
क्र.सं. | पहुँच विनिर्देशक और विवरण |
---|---|
1। | public एक सार्वजनिक डेटा सदस्य की सार्वभौमिक पहुँच होती है। किसी वर्ग में डेटा सदस्य डिफ़ॉल्ट रूप से सार्वजनिक होते हैं। |
2। | private निजी डेटा सदस्य केवल उस वर्ग के भीतर पहुंच योग्य होते हैं जो इन सदस्यों को परिभाषित करता है। यदि कोई बाहरी वर्ग का सदस्य किसी निजी सदस्य तक पहुँचने का प्रयास करता है, तो संकलक एक त्रुटि फेंकता है। |
3। | protected एक संरक्षित डेटा सदस्य उसी वर्ग के सदस्यों के पास पहुंचता है जो पूर्व की तरह है और बाल वर्ग के सदस्यों द्वारा भी। |
उदाहरण
आइए अब एक उदाहरण लेते हैं कि डेटा छिपाना कैसे कार्य करता है -
class Encapsulate {
str:string = "hello"
private str2:string = "world"
}
var obj = new Encapsulate()
console.log(obj.str) //accessible
console.log(obj.str2) //compilation Error as str2 is private
वर्ग में दो स्ट्रिंग विशेषताएँ, str1 और str2 हैं, जो क्रमशः सार्वजनिक और निजी सदस्य हैं। क्लास को तत्काल किया जाता है। उदाहरण एक संकलित समय त्रुटि देता है, क्योंकि निजी विशेषता str2 उस वर्ग के बाहर पहुंचता है जो इसे घोषित करता है।
कक्षाएं और इंटरफेस
कक्षाएं इंटरफेस भी लागू कर सकती हैं।
interface ILoan {
interest:number
}
class AgriLoan implements ILoan {
interest:number
rebate:number
constructor(interest:number,rebate:number) {
this.interest = interest
this.rebate = rebate
}
}
var obj = new AgriLoan(10,1)
console.log("Interest is : "+obj.interest+" Rebate is : "+obj.rebate )
क्लास एग्रीलोन इंटरफ़ेस लोन को लागू करता है। इसलिए, यह अब संपत्ति को शामिल करने के लिए वर्ग पर बाध्यकारी हैinterest इसके सदस्य के रूप में।
संकलन करने पर, यह जावास्क्रिप्ट कोड के बाद उत्पन्न होगा।
//Generated by typescript 1.8.10
var AgriLoan = (function () {
function AgriLoan(interest, rebate) {
this.interest = interest;
this.rebate = rebate;
}
return AgriLoan;
}());
var obj = new AgriLoan(10, 1);
console.log("Interest is : " + obj.interest + " Rebate is : " + obj.rebate);
उपरोक्त कोड का आउटपुट निम्नानुसार है -
Interest is : 10 Rebate is : 1