या तत्त्वाची संकल्पना बार्बरा लिस्कोव्ह यांनी 1987 च्या कॉन्फरन्सच्या कीनोटमध्ये मांडली होती आणि नंतर 1994 मध्ये जेनेट विंग सोबत एका पेपरमध्ये प्रकाशित केली होती. defiमूळ शब्द खालीलप्रमाणे आहे:
टाइप टी च्या ऑब्जेक्ट्स x वर एक्स (एक्स) गुणधर्म गुणधर्म असू द्या. मग क्यू (वाय) एस प्रकाराच्या ऑब्जेक्ट्ससाठी प्रात्यक्षिक असावे जेथे एस टीचा उपप्रकार आहे.
नंतर, रॉबर्ट सी. मार्टिन यांच्या ॲजाइल सॉफ्टवेअर डेव्हलपमेंट, प्रिन्सिपल्स, पॅटर्न्स आणि प्रॅक्टिसेस या पुस्तकात सॉलिड तत्त्वे प्रकाशित करून आणि नंतर C# मधील ऍजाइल प्रिन्सिपल्स, पॅटर्न आणि प्रॅक्टिसेस या पुस्तकाच्या C# आवृत्तीमध्ये पुन्हा प्रकाशित केले. defiलिस्कोव्ह प्रतिस्थापन तत्त्व म्हणून ओळखले जाऊ लागले.
हे आम्हाला आणते defiरॉबर्ट सी. मार्टिन यांनी दिलेली माहिती: उपप्रकार त्यांच्या बेस प्रकारांसह बदलण्यायोग्य असणे आवश्यक आहे.
वर्ग वाहन {
फंक्शन स्टार्टइंजिन () {
// डीफॉल्ट इंजिन प्रारंभ कार्यक्षमता
}
कार्य प्रवेग () {
// डीफॉल्ट प्रवेग कार्यक्षमता
}
}
एक वाहन वर्ग दिला - तो अमूर्त असू शकतो - आणि दोन अंमलबजावणीः
वर्ग कारने वाहन वाढविले {
फंक्शन स्टार्टइंजिन () {
$ हे-> मग्नता ();
पालक :: प्रारंभइंजिन ();
}
खाजगी कार्य गुंतवणे () {
// प्रज्वलन प्रक्रिया
}
}
वर्ग इलेक्ट्रिकबसने वाहनांचा विस्तार केला {
कार्य प्रवेग () {
$ हे-> वाढ व्होल्टेज ();
$ हे-> कनेक्टइंटिव्हिज्युअलइंजिन्स ();
}
खाजगी कार्य वाढ व्होल्टेज () {
// इलेक्ट्रिक लॉजिक
}
खासगी फंक्शन कनेक्टइंटिव्हिज्युअलइंजिन्स () {
// कनेक्शन लॉजिक
}
}
वर्ग चालक {
फंक्शन गो (वाहन $ v) {
$ v-> प्रारंभइंजिन ();
$ v-> गती ();
}
}
ज्याचा वापर आपण ओसीपीमध्ये केला म्हणून टेम्पलेट पद्धत डिझाइन पॅटर्नची साधी अंमलबजावणी करते.
तुम्हाला दुसऱ्या सॉलिड तत्त्वामध्ये देखील स्वारस्य असू शकते: https://bloginnovazione.en / open-closed-second-solid-principle / 3906 /
ओपन / क्लोज्ड तत्वानुसार आमच्या मागील अनुभवाच्या आधारे, आम्ही असा निष्कर्ष काढू शकतो की लिस्कोव्हच्या प्रतिस्थापनाचे तत्व ओसीपीशी जवळचे संबंधित आहे. खरं तर, "एलएसपीचे उल्लंघन हे ओसीपीचे सुप्त उल्लंघन आहे" (रॉबर्ट सी. मार्टिन), आणि टेम्पलेट मेथड डिझाइन पॅटर्न हे एलएसपीच्या आदर आणि अंमलबजावणीचे उत्कृष्ट उदाहरण आहे, जे पालन करण्याच्या निराकरणांपैकी एक आहे. ओसीपी सह.
वर्ग आयत {
खाजगी-टॉपलिफ्ट;
खाजगी-रुंदी;
खाजगी-उंची
सार्वजनिक कार्यसमूह सेट (उंची) {
$ या-> उंची = $ उंची;
}
सार्वजनिक कार्ये गेटहाइट () {
परतावा $ या-> उंची;
}
पब्लिक फंक्शन सेटविड्थ ($ रुंदी) {
$ या-> रुंदी = $ रुंदी;
}
सार्वजनिक कार्य getWidth () {
परतावा $ या-> रुंदी;
}
}
मूलभूत भूमिती आकार, आयत सह प्रारंभ करू या. रुंदी आणि उंचीसाठी सेटर आणि गेटर्ससह हा फक्त एक साधा डेटा ऑब्जेक्ट आहे. अशी कल्पना करा की आमचा अनुप्रयोग कार्य करीत आहे आणि आधीच अनेक ग्राहकांवर तैनात आहे. आता त्यांना एक नवीन वैशिष्ट्य आवश्यक आहे. ते चौरसांमध्ये फेरफार करण्यात सक्षम असणे आवश्यक आहे.
वास्तविक जीवनात भूमितीमध्ये चौरस आयताचा विशिष्ट आकार असतो. म्हणून आम्ही चौरस वर्ग लागू करण्याचा प्रयत्न करू शकतो जो आयताचा वर्ग वाढवितो. असे अनेकदा म्हटले जाते की बाल वर्ग हा एक पालक वर्ग आहे आणि ही अभिव्यक्ती देखील एलएसपीशी संबंधित आहे, कमीतकमी पहिल्या दृष्टीक्षेपात.
वर्ग चौरस आयत वाढविते {
पब्लिक फंक्शन सेटहाईट ($ मूल्य) {
$ या-> रुंदी = $ मूल्य;
$ हे-> उंची = $ मूल्य;
}
पब्लिक फंक्शन सेटविड्थ ($ मूल्य) {
$ या-> रुंदी = $ मूल्य;
$ हे-> उंची = $ मूल्य;
}
}
चौरस समान रुंदी आणि उंची असलेला आयत आहे आणि आम्ही मागील उदाहरणाप्रमाणेच एक विचित्र अंमलबजावणी करू शकतो. आम्ही उंची आणि रुंदी दोन्ही सेट करण्यासाठी दोन्ही सेट्टर अधिलिखित करू शकतो. परंतु क्लायंट कोडवर याचा कसा परिणाम होईल?
वर्ग क्लायंट {
कार्य क्षेत्रफळ (आयत $ r) $
$ आर-> सेटविड्थ (5);
$ आर-> सेटहाइट (4);
जर ($ r-> क्षेत्र ()! = 20)
नवीन अपवाद ('खराब क्षेत्र!') फेकून द्या;
}
खरे परत येणे;
}
}
कार्य क्षेत्र () {
रिटर्न $ या-> रुंदी * $ या-> उंची;
}
हे क्षेत्र प्रदान करण्यासाठी आम्ही वरील रीती आमच्या आयत वर्गात स्पष्टपणे जोडली.
वर्ग एलएसपीटेस्टने PHPUnit_Framework_TestCase वाढविला extend
फंक्शन चाचणीआरेखाआरिया () {
$ r = नवीन आयत ();
$ c = नवीन ग्राहक ();
$ हे-> assertTrue ($ c-> एरियावेरीफायर ($ r));
}
}
आणि आम्ही एरिया चेकर आणि चाचणी उत्तीर्णांना रिक्त आयत ऑब्जेक्ट पाठवून एक साधी चाचणी तयार केली. जर आमचा वर्ग स्क्वेअर असेल defiयोग्यरित्या nished, क्लायंटच्या areaVerifier() वर पाठवल्याने त्याची कार्यक्षमता खंडित होऊ नये. शेवटी, प्रत्येक गणिताच्या दृष्टीने चौरस हा आयत असतो. पण तो आमचा वर्ग आहे का?
फंक्शन टेस्टस्क्वेरिया () {
$ r = नवीन स्क्वेअर ();
$ c = नवीन ग्राहक ();
$ हे-> assertTrue ($ c-> एरियावेरीफायर ($ r));
}
तर, आमचा स्क्वेअर वर्ग हा आयत नाही. हे भूमितीचे नियम मोडते. हे अयशस्वी होते आणि लिस्कोव्ह प्रतिस्थापन तत्त्वाचे उल्लंघन करते.
Ercole Palmeri
Veeam द्वारे Coveware सायबर खंडणी घटना प्रतिसाद सेवा प्रदान करणे सुरू ठेवेल. Coveware फॉरेन्सिक आणि उपाय क्षमता प्रदान करेल…
वनस्पती व्यवस्थापनासाठी नाविन्यपूर्ण आणि सक्रिय दृष्टीकोनसह, भविष्यसूचक देखभाल तेल आणि वायू क्षेत्रात क्रांती घडवत आहे.…
UK CMA ने आर्टिफिशियल इंटेलिजन्स मार्केटमध्ये बिग टेकच्या वर्तनाबद्दल चेतावणी जारी केली आहे. तेथे…
इमारतींची उर्जा कार्यक्षमता वाढविण्यासाठी युरोपियन युनियनने तयार केलेल्या "ग्रीन हाऊसेस" डिक्रीने त्याची वैधानिक प्रक्रिया पूर्ण केली आहे ...