हाय! आज आपण ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग (OOP) च्या एका तत्त्वावर बारकाईने नजर टाकू: इनहेरिटन्स. आम्ही वर्गांमधील इतर प्रकारच्या संबंधांचा देखील अभ्यास करू: रचना आणि एकत्रीकरण. हा विषय कठीण होणार नाही: मागील धड्यांमध्ये तुम्हाला वारसा आणि वारसाची उदाहरणे आधीच आली आहेत. आज, मुख्य गोष्ट म्हणजे आपले ज्ञान अधिक मजबूत करणे, वारशाच्या यंत्रणेचे अधिक तपशीलवार परीक्षण करणे आणि पुन्हा एकदा काही उदाहरणे पहा. :) बरं, चला जाऊया!
जावा मधील वारसा आणि त्याचे फायदे
तुम्हाला नक्की आठवत असेल, वारसा ही एक यंत्रणा आहे जी तुम्हाला विद्यमान वर्गावर आधारित नवीन वर्गाचे वर्णन करू देते (पालक वर्ग). असे करताना, नवीन वर्ग मूळ वर्गाचे गुणधर्म आणि कार्यक्षमता उधार घेतो. मागील धड्यांमध्ये दिलेले वारशाचे उदाहरण आठवूया:
public class Car {
private String model;
private int maxSpeed;
private int yearOfManufacture;
public Car(String model, int maxSpeed, int yearOfManufacture) {
this.model = model;
this.maxSpeed = maxSpeed;
this.yearOfManufacture = yearOfManufacture;
}
public void gas() {
// Gas
}
public void brake() {
// Brake
}
}
public class Truck extends Car {
public Truck(String model, int maxSpeed, int yearOfManufacture) {
super(model, maxSpeed, yearOfManufacture);
}
}
public class Sedan extends Car {
public Sedan(String model, int maxSpeed, int yearOfManufacture) {
super(model, maxSpeed, yearOfManufacture);
}
}
आमच्याकडे एक विशिष्ट प्रोग्राम आहे ज्यामध्ये विविध प्रकारच्या कारसह कार्य करणे समाविष्ट आहे. तुम्ही कार उत्साही नसले तरीही, तुम्हाला कदाचित माहित असेल की जगात अनेक प्रकारच्या कार आहेत. :) त्यानुसार, आम्ही कारचे सामान्य गुणधर्म एका सामान्य पालक वर्गात विभक्त करू ज्याला Car
. मग त्यांच्या प्रकाराकडे दुर्लक्ष करून सर्व कारमध्ये काय सामान्य आहे? प्रत्येक कारचे उत्पादन वर्ष, मॉडेलचे नाव आणि कमाल वेग असतो. model
आम्ही हे गुणधर्म , maxSpeed
, आणि फील्डमध्ये ठेवतो yearOfManufacture
. वर्तनासाठी, कोणतीही कार वेगवान आणि मंद होऊ शकते. :) आम्ही या वर्तनाची व्याख्या gas()
आणि मध्ये करतोbrake()
पद्धती यामुळे आम्हाला कोणते फायदे मिळतात? सर्व प्रथम, ते कोडचे प्रमाण कमी करते. अर्थात, आम्ही पालक वर्गाशिवाय करू शकतो. परंतु प्रत्येक कार वेगवान आणि कमी करण्यास सक्षम असणे आवश्यक असल्याने, आम्हाला , , , आणि वर्गांमध्ये आणि इतर प्रत्येक कार वर्गामध्ये पद्धती gas()
आणि पद्धती तयार कराव्या लागतील . कल्पना करा की आपल्याला किती अतिरिक्त कोड लिहावे लागतील. आणि , , आणि फील्ड बद्दल विसरू नका : जर आम्ही पालक वर्गापासून मुक्त झालो, तर आम्हाला प्रत्येक कार वर्गात ते तयार करावे लागतील! brake()
Truck
Sedan
F1Car
SportsCar
model
maxSpeed
yearOfManufacture
जेव्हा आमच्याकडे दोन डझन कार वर्ग असतात, तेव्हा डुप्लिकेट कोडची संख्या खरोखर गंभीर होते. सामान्य फील्ड आणि पद्धती (ज्याला "राज्ये" आणि "वर्तणूक" देखील म्हणतात) पालक वर्गात हलवल्याने आम्हाला बराच वेळ आणि जागा वाचवता येते. जर काही प्रकारात अद्वितीय गुणधर्म किंवा पद्धती असतील ज्या इतर कार प्रकारांकडे नसतील तर काही मोठी गोष्ट नाही. तुम्ही त्यांना नेहमी वंशज वर्गात तयार करू शकता, इतर सर्वांपेक्षा वेगळे.
public class F1Car extends Car {
public void pitStop() {
// Only race cars make pit stops
}
public static void main(String[] args) {
F1Car formula1Car = new F1Car();
formula1Car.gas();
formula1Car.pitStop();
formula1Car.brake();
}
}
उदाहरण म्हणून फॉर्म्युला वन रेस कार पाहू. त्यांच्या "नातेवाईक" च्या विपरीत, त्यांचे एक अद्वितीय वर्तन आहे - ते वेळोवेळी खड्डा थांबवतात. हे आम्हाला त्रास देत नाही. आम्ही आधीच पालक वर्गातील सामान्य वर्तनाचे वर्णन केले आहे Car
आणि वंशज वर्गांचे विशिष्ट वर्तन त्या वर्गांमध्ये जोडले जाऊ शकते. फील्डच्या बाबतीतही असेच आहे: जर बाल वर्गात अद्वितीय गुणधर्म असतील, तर आम्ही शांतपणे ही फील्ड बाल वर्गात घोषित करतो आणि काळजी करणे थांबवतो. :) कोडचा पुनर्वापर करण्याची क्षमता हा वारशाचा मुख्य फायदा आहे. प्रोग्रामरसाठी, अतिरिक्त कोड न लिहिणे खूप महत्वाचे आहे. तुमच्या कामात तुम्हाला हे वारंवार आढळेल. कृपया आणखी काही महत्त्वाचे लक्षात ठेवा: Java ला एकाधिक वारसा नाही. प्रत्येक वर्गाला फक्त एक वर्ग वारसा मिळतो. आम्ही भविष्यातील धड्यांमध्ये याच्या कारणांबद्दल अधिक बोलू. आत्तासाठी, फक्त ते लक्षात ठेवा. तसे, हे जावा इतर काही OOP भाषांपेक्षा वेगळे बनवते. उदाहरणार्थ, C++ एकाधिक वारसा समर्थन देते. वारसासह सर्व काही कमी-अधिक स्पष्ट आहे. चला पुढे जाऊया.
रचना आणि एकत्रीकरण
वर्ग आणि वस्तू एकत्र जोडल्या जाऊ शकतात. वारसा हे "आहे-अ" नातेसंबंधाचे वर्णन करते. सिंह हा प्राणी आहे. असा संबंध सहजपणे वारसा वापरून व्यक्त केला जातो,Animal
पालक वर्ग कुठे आहे आणि Lion
मूल आहे. तथापि, सर्व नातेसंबंधांचे अशा प्रकारे वर्णन केले जात नाही. उदाहरणार्थ, कीबोर्ड निश्चितपणे संगणकाशी संबंधित आहे, परंतु तो संगणक नाही . हात कसे तरी एखाद्या व्यक्तीशी संबंधित असतात, परंतु ते एक व्यक्ती नसतात. या प्रकरणांमध्ये, आमच्याकडे आणखी एक प्रकारचा संबंध आहे: "is-a" नाही तर "has-a". हात हा एक व्यक्ती नसून व्यक्तीचा भाग असतो. कीबोर्ड हा संगणक नसून तो संगणकाचा भाग आहे. रचना आणि एकत्रीकरण वापरून कोडमध्ये आहे-संबंधाचे वर्णन केले जाऊ शकते. फरक नात्यातील "कडकपणा" मध्ये आहे. चला एक साधे उदाहरण देऊ: आमच्याकडे एक Car
वर्ग आहे. प्रत्येक गाडीला इंजिन असते. याव्यतिरिक्त, प्रत्येक कारमध्ये प्रवासी असतात. Engine engine
फील्ड आणि फील्डमध्ये मूलभूत फरक काय आहे Passenger[] passengers
? प्रवासी A
कारमध्ये बसले आहेत याचा अर्थ प्रवासी B
आणि C
कारमध्ये नाहीत असा होत नाही. एक कार अनेक प्रवाशांना अनुरूप असू शकते. इतकेच काय, जर सर्व प्रवासी कारमधून बाहेर पडले, तरीही ते सुरळीतपणे चालेल. Car
वर्ग आणि अॅरे यांच्यातील संबंध Passenger[] passengers
कमी कठोर आहे. त्याला एकत्रीकरण म्हणतात . हे एकत्रीकरणाचे आणखी एक चांगले उदाहरण देते. समजा आपल्याकडे Student
वर्ग आहे आणि एStudentGroup
वर्ग एक विद्यार्थी अनेक विद्यार्थी संघटनांमध्ये सामील होऊ शकतो: एक भौतिकशास्त्र क्लब, स्टार वॉर्स फॅन क्लब आणि/किंवा विद्यार्थी कॉमेडी क्लब. रचना हा एक कठोर प्रकारचा संबंध आहे. रचना वापरताना, एखादी वस्तू काही ऑब्जेक्टचा भाग असते आणि त्याच प्रकारच्या दुसर्या ऑब्जेक्टशी संबंधित असू शकत नाही. सर्वात सोपा उदाहरण म्हणजे कार इंजिन. इंजिन कारचा भाग आहे आणि दुसर्या कारचा भाग असू शकत नाही. Car
जसे तुम्ही बघू शकता, त्यांचे नाते आणि यांच्यातील नातेसंबंधापेक्षा खूपच कडक आहे Passengers
.
GO TO FULL VERSION