अतिशयोक्तिपूर्ण सारांश (TM)
आपको कुछ चीजें मिलती हैं।
- प्रोटोटाइप विरासत और क्लोनिंग
- नए गुणों का गतिशील जोड़
- एक ही वर्ग के विभिन्न संस्करणों (विनिर्देश स्तर) की वस्तुओं का सह-अस्तित्व।
- अधिक हाल के संस्करणों (विनिर्देश स्तर) से संबंधित वस्तुओं में अतिरिक्त "वैकल्पिक" गुण होंगे।
- गुणों का आत्मनिरीक्षण, पुराना और नया
- सत्यापन नियमों का आत्मनिरीक्षण (नीचे चर्चा की गई है)
एक घातक दोष है।
- कंपाइलर आपके लिए गलत वर्तनी वाले तारों की जांच नहीं करता है।
- स्वचालित रीफ़ैक्टरिंग उपकरण आपके लिए संपत्ति के प्रमुख नामों का नाम नहीं बदलेंगे - जब तक आप फैंसी लोगों के लिए भुगतान नहीं करते हैं।
बात यह है कि, आप ओउम, आत्मनिरीक्षण का उपयोग करके आत्मनिरीक्षण प्राप्त कर सकते हैं। यह आमतौर पर होता है:
- प्रतिबिंब सक्षम करें।
- अपनी परियोजना में एक बड़ा आत्मनिरीक्षण पुस्तकालय जोड़ें।
- विशेषताओं या एनोटेशन के साथ विभिन्न ऑब्जेक्ट विधियों और गुणों को चिह्नित करें।
- आत्मनिरीक्षण पुस्तकालय जादू करें।
दूसरे शब्दों में, यदि आपको कभी भी एफपी के साथ इंटरफेस करने की आवश्यकता नहीं है, तो आपको रिच हिकी की सलाह नहीं लेनी है।
अंतिम, लेकिन कम से कम नहीं (न ही सबसे सुंदर), हालांकि String
संपत्ति कुंजी के रूप में उपयोग करना सबसे सीधा अर्थ है, आपको String
एस का उपयोग करने की आवश्यकता नहीं है । एंड्रॉइड ™ सहित कई विरासत प्रणालियां कक्षाओं, संपत्तियों, संसाधनों आदि का उल्लेख करने के लिए पूरे ढांचे के माध्यम से बड़े पैमाने पर पूर्णांक आईडी का उपयोग करती हैं।
एंड्रॉयड, Google इंक का ट्रेडमार्क है।
आप दोनों दुनियाओं को भी खुश कर सकते हैं।
जावा दुनिया के लिए, हमेशा की तरह गेटर्स और सेटरर्स को लागू करें।
एफपी दुनिया के लिए, लागू करें
Object getPropertyByName(String name)
void setPropertyByName(String name, Object value) throws IllegalPropertyChangeException
List<String> getPropertyNames()
Class<?> getPropertyValueClass(String name)
इन फ़ंक्शन के अंदर, हाँ, बदसूरत कोड, लेकिन आईडीई प्लगइन्स हैं जो आपके लिए इसे भर देंगे ... उह, एक स्मार्ट प्लगइन जो आपके कोड को पढ़ता है ।
चीजों के जावा पक्ष हमेशा की तरह प्रदर्शनशील होंगे। वे कभी भी उस बदसूरत हिस्से का उपयोग नहीं करेंगे कोड के का । आप इसे जावदोक से छुपाना भी चाह सकते हैं।
दुनिया का एफपी पक्ष जो भी "लेट" कोड लिख सकता है, वे चाहते हैं और कोड धीमा होने के बारे में वे आमतौर पर आपको चिल्लाते नहीं हैं।
सामान्य तौर पर, ऑब्जेक्ट के स्थान पर एक मैप (प्रॉपर्टी बैग) का उपयोग करना सॉफ्टवेयर विकास में आम बात है। यह कार्यात्मक प्रोग्रामिंग या किसी विशेष प्रकार की भाषाओं के लिए अद्वितीय नहीं है। यह किसी भी भाषा के लिए एक मुहावरेदार दृष्टिकोण नहीं हो सकता है, लेकिन ऐसी परिस्थितियां हैं जो इसके लिए कॉल करती हैं।
विशेष रूप से, सीरियलाइज़ेशन / डिसेरिएलाइज़ेशन में अक्सर एक समान तकनीक की आवश्यकता होती है।
"ऑब्जेक्ट के रूप में मैप" के बारे में बस कुछ सामान्य विचार।
- आपको अभी भी इस तरह के "ऑब्जेक्ट के रूप में मैप" को मान्य करने के लिए एक फ़ंक्शन प्रदान करना होगा। अंतर यह है कि "ऑब्जेक्ट के रूप में नक्शा" अधिक लचीले (कम प्रतिबंधात्मक) सत्यापन मानदंडों के लिए अनुमति देता है।
- आप आसानी से "ऑब्जेक्ट के रूप में मैप" में अतिरिक्त फ़ील्ड जोड़ सकते हैं।
- एक वैध वस्तु की न्यूनतम आवश्यकता का विनिर्देश प्रदान करने के लिए, आपको निम्नलिखित की आवश्यकता होगी:
- मैप में अपेक्षित कुंजियों के "न्यूनतम आवश्यक" सेट को सूचीबद्ध करें
- प्रत्येक कुंजी के लिए जिसका मान मान्य होना आवश्यक है, मान सत्यापन फ़ंक्शन प्रदान करें
- यदि सत्यापन नियम हैं जिन्हें कई प्रमुख मूल्यों की जांच करने की आवश्यकता है, तो वह भी प्रदान करें।
- फायदा क्या है? विनिर्देश प्रदान करना इस तरह से आत्मनिरीक्षण है: आप कुंजियों के न्यूनतम आवश्यक सेट को क्वेरी करने के लिए और प्रत्येक कुंजी के लिए सत्यापन फ़ंक्शन प्राप्त करने के लिए एक कार्यक्रम लिख सकते हैं।
- OOP में, इन सभी को "इनकैप्सुलेशन" के नाम से एक ब्लैक बॉक्स में रोल किया जाता है। मशीन-पठनीय सत्यापन तर्क के स्थान पर, कॉलर केवल मानव-पठनीय "एपीआई प्रलेखन" पढ़ सकता है (यदि सौभाग्य से यह मौजूद है)।