ग्रूवी - ऑब्जेक्ट ओरिएंटेड
ग्रूवी में, किसी भी अन्य ऑब्जेक्ट-ओरिएंटेड भाषा के रूप में, प्रोग्रामिंग भाषा के ऑब्जेक्ट ओरिएंटेड प्रकृति का प्रतिनिधित्व करने के लिए कक्षाओं और वस्तुओं की अवधारणा है। एक ग्रूवी वर्ग डेटा का संग्रह है और उस डेटा पर काम करने वाले तरीके हैं। साथ में, एक डोमेन के डेटा और तरीकों का उपयोग समस्या डोमेन से कुछ वास्तविक दुनिया ऑब्जेक्ट का प्रतिनिधित्व करने के लिए किया जाता है।
ग्रूवी में एक वर्ग राज्य (डेटा) और उस वर्ग द्वारा परिभाषित वस्तुओं के व्यवहार की घोषणा करता है। इसलिए, एक ग्रूवी वर्ग उस वर्ग के लिए उदाहरण क्षेत्र और विधियाँ दोनों का वर्णन करता है।
निम्नलिखित ग्रूवी में एक वर्ग का एक उदाहरण है। कक्षा का नाम छात्र है जिसके दो क्षेत्र हैं -StudentID तथा StudentName। मुख्य कार्य में, हम इस वर्ग की एक वस्तु बना रहे हैं और मानों को निर्दिष्ट कर रहे हैंStudentID तथा StudentName वस्तु का।
class Student {
int StudentID;
String StudentName;
static void main(String[] args) {
Student st = new Student();
st.StudentID = 1;
st.StudentName = "Joe"
}
}
गेटटर और सेटर विधियाँ
किसी भी प्रोग्रामिंग भाषा में, निजी सदस्यों के साथ इंस्टेंस सदस्यों को छिपाने के लिए हमेशा अभ्यास किया जाता है और इसके बजाय उदाहरण चर के मूल्यों को सेट करने और प्राप्त करने के लिए गेट्टर और सेटर विधियां प्रदान की जाती हैं। निम्न उदाहरण दिखाता है कि यह कैसे किया जा सकता है।
class Student {
private int StudentID;
private String StudentName;
void setStudentID(int pID) {
StudentID = pID;
}
void setStudentName(String pName) {
StudentName = pName;
}
int getStudentID() {
return this.StudentID;
}
String getStudentName() {
return this.StudentName;
}
static void main(String[] args) {
Student st = new Student();
st.setStudentID(1);
st.setStudentName("Joe");
println(st.getStudentID());
println(st.getStudentName());
}
}
जब हम उपरोक्त कार्यक्रम चलाते हैं, तो हमें निम्नलिखित परिणाम मिलेंगे -
1
Joe
उपरोक्त कार्यक्रम के बारे में निम्नलिखित मुख्य बातों पर ध्यान दें -
कक्षा में छात्र और छात्र दोनों को निजी के रूप में चिह्नित किया जाता है जिसका अर्थ है कि उन्हें कक्षा के बाहर से नहीं पहुँचा जा सकता है।
प्रत्येक उदाहरण सदस्य की अपनी गटर और सेटर विधि होती है। गेट्टर विधि उदाहरण चर का मान लौटाता है, उदाहरण के लिए विधि int getStudentID () और सेटर विधि उदाहरण ID का मान सेट करता है, उदाहरण के लिए विधि - शून्य setStudentName (स्ट्रिंग pName)
उदाहरण के तरीके
यह सामान्य रूप से वर्ग के अंदर और अधिक विधियों को शामिल करने के लिए स्वाभाविक है जो वास्तव में वर्ग के लिए कुछ प्रकार की कार्यक्षमता करता है। हमारे छात्र उदाहरण में, आइए 3 विषयों में छात्र के अंकों को निरूपित करने के लिए Marks1, Marks2 और Marks3 के उदाहरण सदस्यों को शामिल करें। फिर हम एक नया उदाहरण विधि जोड़ेंगे जो छात्र के कुल अंकों की गणना करेगा। इसके बाद कोड कैसा दिखेगा।
निम्नलिखित उदाहरण में, विधि टोटल एक अतिरिक्त इंस्टेंस विधि है जिसमें कुछ तर्क निर्मित होते हैं।
class Student {
int StudentID;
String StudentName;
int Marks1;
int Marks2;
int Marks3;
int Total() {
return Marks1+Marks2+Marks3;
}
static void main(String[] args) {
Student st = new Student();
st.StudentID = 1;
st.StudentName="Joe";
st.Marks1 = 10;
st.Marks2 = 20;
st.Marks3 = 30;
println(st.Total());
}
}
जब हम उपरोक्त कार्यक्रम चलाते हैं, तो हमें निम्नलिखित परिणाम मिलेंगे -
60
कई वस्तुओं का निर्माण
एक वर्ग के कई ऑब्जेक्ट भी बना सकता है। निम्नलिखित इस बात का उदाहरण है कि इसे कैसे प्राप्त किया जा सकता है। यहाँ हम 3 ऑब्जेक्ट्स बना रहे हैं (st, st1 और st2) और उनके इंस्टेंस सदस्यों और उदाहरण के तरीकों को अपने अनुसार बुला रहे हैं।
class Student {
int StudentID;
String StudentName;
int Marks1;
int Marks2;
int Marks3;
int Total() {
return Marks1+Marks2+Marks3;
}
static void main(String[] args) {
Student st = new Student();
st.StudentID = 1;
st.StudentName = "Joe";
st.Marks1 = 10;
st.Marks2 = 20;
st.Marks3 = 30;
println(st.Total());
Student st1 = new Student();
st.StudentID = 1;
st.StudentName = "Joe";
st.Marks1 = 10;
st.Marks2 = 20;
st.Marks3 = 40;
println(st.Total());
Student st3 = new Student();
st.StudentID = 1;
st.StudentName = "Joe";
st.Marks1 = 10;
st.Marks2 = 20;
st.Marks3 = 50;
println(st.Total());
}
}
जब हम उपरोक्त कार्यक्रम चलाते हैं, तो हमें निम्नलिखित परिणाम मिलेंगे -
60
70
80
विरासत
वंशानुक्रम को उस प्रक्रिया के रूप में परिभाषित किया जा सकता है जहां एक वर्ग दूसरे के गुणों (तरीकों और क्षेत्रों) का अधिग्रहण करता है। विरासत के उपयोग के साथ सूचना को एक पदानुक्रमित क्रम में प्रबंधनीय बनाया जाता है।
जो वर्ग अन्य के गुणों को विरासत में देता है, उसे उपवर्ग (व्युत्पन्न वर्ग, बाल वर्ग) के रूप में जाना जाता है और जिस वर्ग के गुण विरासत में मिलते हैं उसे सुपरक्लास (आधार वर्ग, मूल वर्ग) के रूप में जाना जाता है।
का विस्तार
extendsवह कीवर्ड है जिसका उपयोग किसी वर्ग के गुणों को प्राप्त करने के लिए किया जाता है। नीचे दिए गए कीवर्ड का विस्तार वाक्य है। निम्नलिखित उदाहरण में हम निम्नलिखित बातें कर रहे हैं -
व्यक्ति नामक वर्ग बनाना। इस वर्ग में एक उदाहरण सदस्य है जिसका नाम है।
छात्र नामक एक वर्ग बनाना जो व्यक्ति वर्ग से विस्तारित होता है। ध्यान दें कि व्यक्ति वर्ग में नाम उदाहरण सदस्य को छात्र वर्ग में विरासत में मिला है।
स्टूडेंट क्लास कंस्ट्रक्टर में, हम बेस क्लास कंस्ट्रक्टर को बुला रहे हैं।
हमारे छात्र वर्ग में, हम StudentID और Marks1 के 2 अतिरिक्त उदाहरण सदस्य जोड़ रहे हैं।
class Example {
static void main(String[] args) {
Student st = new Student();
st.StudentID = 1;
st.Marks1 = 10;
st.name = "Joe";
println(st.name);
}
}
class Person {
public String name;
public Person() {}
}
class Student extends Person {
int StudentID
int Marks1;
public Student() {
super();
}
}
जब हम उपरोक्त कार्यक्रम चलाते हैं, तो हमें निम्नलिखित परिणाम मिलेंगे -
Joe
भीतरी वर्ग
अन्य वर्गों के भीतर आंतरिक वर्गों को परिभाषित किया गया है। संलग्नक वर्ग हमेशा की तरह आंतरिक वर्ग का उपयोग कर सकता है। दूसरी तरफ, एक आंतरिक वर्ग अपने संलग्न वर्ग के सदस्यों तक पहुंच सकता है, भले ही वे निजी हों। संलग्नक वर्ग के अलावा अन्य वर्गों को आंतरिक कक्षाओं तक पहुंचने की अनुमति नहीं है।
निम्नलिखित एक बाहरी और आंतरिक वर्ग का एक उदाहरण है। निम्नलिखित उदाहरण में हम निम्नलिखित बातें कर रहे हैं -
- बाहरी नामक एक वर्ग बनाना जो हमारा बाहरी वर्ग होगा।
- हमारे बाहरी वर्ग में नाम नामक एक स्ट्रिंग को परिभाषित करना।
- हमारे बाहरी वर्ग के अंदर एक आंतरिक या नेस्टेड वर्ग बनाना।
- ध्यान दें कि आंतरिक वर्ग में हम बाहरी वर्ग में परिभाषित नाम उदाहरण सदस्य तक पहुँचने में सक्षम हैं।
class Example {
static void main(String[] args) {
Outer outobj = new Outer();
outobj.name = "Joe";
outobj.callInnerMethod()
}
}
class Outer {
String name;
def callInnerMethod() {
new Inner().methodA()
}
class Inner {
def methodA() {
println(name);
}
}
}
जब हम उपरोक्त कार्यक्रम चलाते हैं, तो हमें निम्नलिखित परिणाम मिलेंगे -
Joe
सार वर्ग
सार वर्ग सामान्य अवधारणाओं का प्रतिनिधित्व करते हैं, इस प्रकार, उन्हें त्वरित नहीं किया जा सकता है, उपवर्ग बनाने के लिए बनाया जा रहा है। उनके सदस्यों में फ़ील्ड / गुण और अमूर्त या ठोस तरीके शामिल हैं। सार विधियों में कार्यान्वयन नहीं है, और कंक्रीट उपवर्गों द्वारा कार्यान्वित किया जाना चाहिए। अमूर्त कक्षाओं को सार कीवर्ड के साथ घोषित किया जाना चाहिए। सार विधियों को भी सार कीवर्ड के साथ घोषित किया जाना चाहिए।
निम्नलिखित उदाहरण में, ध्यान दें कि व्यक्ति वर्ग अब एक सार वर्ग में बना है और उसे तत्काल नहीं बनाया जा सकता है। यह भी ध्यान दें कि सार वर्ग में DisplayMarks नामक एक सार पद्धति है जिसमें कोई कार्यान्वयन विवरण नहीं है। छात्र वर्ग में कार्यान्वयन विवरण जोड़ना अनिवार्य है।
class Example {
static void main(String[] args) {
Student st = new Student();
st.StudentID = 1;
st.Marks1 = 10;
st.name="Joe";
println(st.name);
println(st.DisplayMarks());
}
}
abstract class Person {
public String name;
public Person() { }
abstract void DisplayMarks();
}
class Student extends Person {
int StudentID
int Marks1;
public Student() {
super();
}
void DisplayMarks() {
println(Marks1);
}
}
जब हम उपरोक्त कार्यक्रम चलाते हैं, तो हमें निम्नलिखित परिणाम मिलेंगे -
Joe
10
null
इंटरफेस
एक इंटरफ़ेस एक अनुबंध को परिभाषित करता है जिसे एक वर्ग को इसके अनुरूप होना चाहिए। एक इंटरफ़ेस केवल उन तरीकों की एक सूची को परिभाषित करता है जिन्हें लागू करने की आवश्यकता होती है, लेकिन तरीकों के कार्यान्वयन को परिभाषित नहीं करता है। इंटरफ़ेस कीवर्ड का उपयोग करके एक इंटरफ़ेस घोषित किया जाना चाहिए। एक इंटरफ़ेस केवल विधि हस्ताक्षर को परिभाषित करता है। एक इंटरफ़ेस के तरीके हमेशा होते हैंpublic। यह इंटरफेस में संरक्षित या निजी तरीकों का उपयोग करने के लिए एक त्रुटि है।
निम्नलिखित groovy में एक इंटरफ़ेस का एक उदाहरण है। निम्नलिखित उदाहरण में हम निम्नलिखित बातें कर रहे हैं -
Marks नामक एक इंटरफ़ेस बनाना और DisplayMarks नामक एक इंटरफ़ेस विधि बनाना।
क्लास की परिभाषा में, हम इंटरफ़ेस को लागू करने के लिए इम्प्लीमेंट कीवर्ड का उपयोग कर रहे हैं।
क्योंकि हम इंटरफ़ेस को लागू कर रहे हैं इसलिए हमें DisplayMarks विधि के लिए कार्यान्वयन प्रदान करना होगा।
class Example {
static void main(String[] args) {
Student st = new Student();
st.StudentID = 1;
st.Marks1 = 10;
println(st.DisplayMarks());
}
}
interface Marks {
void DisplayMarks();
}
class Student implements Marks {
int StudentID
int Marks1;
void DisplayMarks() {
println(Marks1);
}
}
जब हम उपरोक्त कार्यक्रम चलाते हैं, तो हमें निम्नलिखित परिणाम मिलेंगे -
10
null