प्रशिक्षण

लिस्कोव्ह सबस्टिट्यूशनचे तत्व, तिसरे सोलिड तत्व

बाल वर्गाने लेसवर कधीही प्रभाव टाकू नये किंवा बदलू नये defiपालक वर्गाच्या प्रकाराची विधाने.

या तत्त्वाची संकल्पना बार्बरा लिस्कोव्ह यांनी 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 मध्ये रॅन्समवेअरसाठी सर्वात व्यापक समर्थन, संरक्षणापासून प्रतिसाद आणि पुनर्प्राप्तीपर्यंत वैशिष्ट्ये आहेत

Veeam द्वारे Coveware सायबर खंडणी घटना प्रतिसाद सेवा प्रदान करणे सुरू ठेवेल. Coveware फॉरेन्सिक आणि उपाय क्षमता प्रदान करेल…

23 एप्रिल 2024

हरित आणि डिजिटल क्रांती: भविष्यसूचक देखभाल तेल आणि वायू उद्योगात कशी बदल घडवत आहे

वनस्पती व्यवस्थापनासाठी नाविन्यपूर्ण आणि सक्रिय दृष्टीकोनसह, भविष्यसूचक देखभाल तेल आणि वायू क्षेत्रात क्रांती घडवत आहे.…

22 एप्रिल 2024

यूके अँटिट्रस्ट रेग्युलेटरने GenAI वर BigTech अलार्म वाढवला

UK CMA ने आर्टिफिशियल इंटेलिजन्स मार्केटमध्ये बिग टेकच्या वर्तनाबद्दल चेतावणी जारी केली आहे. तेथे…

18 एप्रिल 2024

कासा ग्रीन: इटलीमध्ये शाश्वत भविष्यासाठी ऊर्जा क्रांती

इमारतींची उर्जा कार्यक्षमता वाढविण्यासाठी युरोपियन युनियनने तयार केलेल्या "ग्रीन हाऊसेस" डिक्रीने त्याची वैधानिक प्रक्रिया पूर्ण केली आहे ...

18 एप्रिल 2024

तुमच्या भाषेत इनोव्हेशन वाचा

इनोव्हेशन वृत्तपत्र
नवोपक्रमावरील सर्वात महत्त्वाच्या बातम्या चुकवू नका. त्यांना ईमेलद्वारे प्राप्त करण्यासाठी साइन अप करा.

आमचे अनुसरण करा