कम से कम विस्मय का सिद्धांत क्या है?


32

प्रोग्रामिंग में जिसे सिद्धांत का विषय कहा जाता है? यह कॉन्सेप्ट अच्छे APIs डिज़ाइन करने से कैसे संबंधित है? क्या यह केवल ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग के लिए लागू है या यह अन्य प्रोग्रामिंग तकनीकों को भी अनुमति देता है? क्या यह "आपकी विधि में एक ही काम करने और इसे अच्छी तरह से करने" के सिद्धांत से संबंधित है?


23
क्या आपने विकिपीडिया लेख ( en.wikipedia.org/wiki/Principle_of_least_astoniction ) पढ़ा था ?
डॉक्टर ब्राउन

जवाबों:


46

लिस्ट एस्टनमेंट का सिद्धांत डिजाइन गतिविधियों की एक विस्तृत श्रृंखला पर लागू होता है - और न केवल कंप्यूटिंग में (हालांकि यह अक्सर जहां सबसे आश्चर्यजनक चीजें होती हैं)।

इसके बगल में एक बटन के साथ एक लिफ्ट पर विचार करें जो "कॉल" कहता है। जब आप बटन दबाते हैं, तो पेफोन बजता है (लिफ्ट को उस फ्लोर पर बुलाने के बजाय)। इसे आश्चर्यजनक माना जाएगा। सही डिजाइन लिफ्ट के बजाय फोन के बगल में कॉल बटन लगाने के लिए होगा।

इसके बाद, एक वेब पेज के बारे में सोचें, जिसमें एक पॉप अप विंडो है जो उस पर 'ओके' बटन के साथ एक विंडोज़ शैली की त्रुटि दिखाता है। लोग 'ओके' बटन पर क्लिक करते हैं यह सोचकर कि यह ऑपरेटिंग सिस्टम के लिए है और इसके बजाय किसी अन्य वेब पेज पर जाएं। यह उपयोगकर्ता को चकित करता है।

जब यह एक एपीआई की बात आती है ...

  • एक .String () पद्धति के बारे में सोचें जो कि प्रिंट आउट करने के बजाय फ़ील्ड "लागू होने के लिए" वापस आती है।
  • एक समान () विधि जो छिपी हुई जानकारी पर काम करती है।
  • कभी-कभी लोग एरे पर कॉल सॉर्ट () को बाद में करने के लिए ऐड मेथड को बदलकर सॉर्ट लिस्ट क्लास को लागू करने की कोशिश करते हैं - जो आश्चर्यजनक है क्योंकि ऐड मेथड को लिस्ट में जोड़ना है - यह तब विशेष रूप से आश्चर्यजनक होता है जब कोई लिस्ट ऑब्जेक्ट वापस मिलता है बिना किसी ज्ञान के, कहीं गहरे में, किसी ने इंटरफ़ेस अनुबंध का उल्लंघन किया।

एक विधि जो एक अलग चीज करती है, वह विस्मय को कम करने में योगदान करती है, हालांकि ये एपीआई डिजाइन में अलग सिद्धांत हैं। चार सिद्धांतों को अक्सर "अच्छा एपीआई डिजाइन" के रूप में जाना जाता है ( इस पीडीएफ से - ऐसी प्रस्तुति का सिर्फ एक उदाहरण। इस विशेष के अंत में लिंक अच्छे पढ़ने के लिए बनाते हैं):

किसी के पास एक वर्ग के लिए संभावित रूप से आश्चर्यजनक है जो हर चीज को करने की कोशिश करता है - या किसी एक चीज को करने के लिए दो वर्गों की आवश्यकता होती है। यह वैसे ही किसी के लिए आश्चर्यजनक तरीके से कवर के तहत आंतरिक तरीकों से गड़बड़ करने के लिए आश्चर्यजनक है (मुझे लगता है कि रूबी में खुली कक्षाएं कभी न खत्म होने वाले विस्मय का स्रोत हैं)। यह भी दो तरीके खोजने के लिए आश्चर्यजनक है कि जाहिरा तौर पर एक ही बात करते हैं।

जैसे, कम से कम विस्मय का सिद्धांत अन्य एपीआई डिजाइनों को रेखांकित करता है - लेकिन यह, स्वयं, केवल यह कहने के लिए पर्याप्त नहीं है कि "एक आश्चर्यजनक एपीआई नहीं है।"

आगे पढ़ने (यूआई के दृष्टिकोण से) - एक आईबीएम डेवलपर ब्लॉग का शीर्षक द क्रंकी यूजर: द प्रिंसिपल ऑफ लिस्ट एस्टनमेंट


3
अच्छा उत्तर। केवल पीओएलए का मतलब है कि एक डिज़ाइन से दोनों अपेक्षाएं बननी चाहिए और उन उम्मीदों को पूरा करना चाहिए। लोगों को यह करने की अपेक्षा बहुत अधिक करनी चाहिए।
कैंडिड_ओरेंज

IBM डेवलपर ब्लॉग में लगता है कि पुनर्गठन किया गया है - लिंक अब काम नहीं कर रहा है, और न ही पीडीएफ डाउनलोड उपलब्ध है। हो सकता है कि किसी को इसके लिए एक आर्काइव.ऑर्ग लिंक मिल सकता है, या इसी तरह का?
जाप

4

कम से कम विस्मय का सिद्धांत है जब आप एक एपीआई डिजाइनर के रूप में, अपने उपयोगकर्ताओं को वाट कहने से रोकते हैं ।

विभिन्न भाषाओं में विस्मय के कुछ उदाहरण।

var array=new string[]; 
var list=array as IList<string>; //this works... 
list.Add("foo"); //exception saying it's not supported

foo.Equals(bar); //will call overriden Equals method
foo == bar; //equivalent to above in everyway, except for it won't call overrides... unless you're dealing with a string

var d=DateTime.Today;
d.Add(new TimeSpan(36,0,0,0)); //add 36 days to datetime d
Console.Writeline(d); //will print todays date. WAT

//in javascript
var f=function(){
  return 
    10; 
} //will either throw a syntax error or return void, depending on your javascript runner

और विभिन्न भाषाओं और एपीआई में कई और उदाहरण हैं। एपीआई लेखक के रूप में आपका काम इसे रोकना है। चीजों को नाम दिया जाना चाहिए और इस तरह से टाइप किया जाना चाहिए कि यह स्पष्ट रूप से स्पष्ट हो कि आपके एपीआई के लिए कॉल क्या होगा। पर्याप्त दस्तावेज शामिल करें जहां यह संभव नहीं है।

असल में, अगर लोगों को आपके एपीआई के लिए लिखे गए READ कोड का पता लगाने के लिए आपके प्रलेखन को अच्छी तरह से पढ़ना है, तो आप शायद इसे गलत कर रहे हैं।


2
वह ब्लॉग पोस्ट bs से भरा है, और उस पर इंगित करना बिल्कुल मददगार नहीं है (भले ही वह bs से भरा न हो)। आपको इसे हटा देना चाहिए और PHP की विसंगतियों के विशिष्ट उदाहरणों की ओर इशारा करना चाहिए (उनमें से बहुत सारे हैं, यह एक जोड़े को चुनना मुश्किल नहीं होगा)।
यानि

"WAT" की परिभाषा के लिए, यह CodeMash 2012 सम्मेलन का संदर्भ लें destroyallsoftware.com/talks/wat
क्लेमेंट Herreman

मैं आपके उदाहरणों से सहमत हूँ सिवाय DateTimeबात के। मुझे लगता है कि यह एक अपरिवर्तनीय वस्तु है और Addएक नया उदाहरण देता है। यह काफी सामान्य है।
मुशीक

@musiKk - यह केवल उन भाषाओं में आम है जहां सदस्य कार्यों को कॉल करने से होने वाले दुष्प्रभावों को संशोधित करने की अपेक्षा करना अधिक सामान्य नहीं है। विस्मय संदर्भ-संवेदनशील है।
जॉरिस टिम्मरमैन

@YannisRizos मैंने अभी उस लिंक को हटा दिया है। मैं बस :) में एक छोटी सी हंसी लाने की कोशिश कर रहा था
अर्लज़

0

यहाँ "विस्मय" का एक उदाहरण है जो हाल ही में मेरे साथ हुआ। मैं सड़क पर खो गया, इसलिए खींच लिया और कुछ हद तक (मुझे देर हो गई) अपने जीपीएस में एक चौराहे पर मुक्का मारा। मैंने गो पर क्लिक किया और अपने हाथों को वापस पहिया पर रख दिया - लेकिन फिर एक जोर से (फुल-स्क्रीन) चेतावनी मिली कि जीपीएस को अपडेट किया जाना चाहिए - मुझे स्वीकार करने की आवश्यकता है।

मेरा विचार था "क्या आप मजाक कर रहे हैं? आप मुझे अभी बता रहे हैं? मुझे स्वीकार करने के लिए अपने हाथों को पहिया से हटाने की जरूरत है।"

इंटरफ़ेस में आश्चर्यजनक सतहों (आमतौर पर यूआई, लेकिन मुझे लगता है कि यह एक एपीआई भी हो सकता है जो अप्रत्याशित तरीके से व्यवहार करता है)। मैं इसे इंटरफ़ेस के नीचे भी अनुमति दूंगा, क्योंकि यह अच्छी तरह से डिज़ाइन किए गए इंटरफ़ेस का समर्थन करने के लिए अच्छी तरह से डिज़ाइन किए गए अंतर्निहित सॉफ़्टवेयर को लेता है।


मेरे पास एक जीपीएस ऐप था जो उस विशिष्ट पते की पहचान नहीं कर सकता था जो मैं (एक अपरिचित शहर में) चाहता था, इसलिए इसने मुझे शहर के केंद्र के लिए दिशा-निर्देश दिए। सौभाग्य से, Google मैप्स ने यह पता लगा लिया कि मेरी मंजिल केवल कुछ मील की दूरी पर थी।
गैलेक्टीकॉवॉय

4
हालांकि यह एक अच्छी कहानी है लेकिन यह सवाल का जवाब नहीं है।
मार्सेल

1
काफी उचित। एक अवधारणा को समझने में मदद के लिए पूछा गया प्रश्न। कम से कम मेरे लिए, उदाहरण हमेशा इसके साथ मदद करते हैं। यह सवाल भी पूछा गया कि यह अवधारणा किस तरह से आगे बढ़ती है; जिसका मैंने जवाब देने की कोशिश की।
डेव क्लॉसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.