2010-10-11 10 views
5

तो मेरी समझ से (ओ) ओबीजे-सी का सबसे बड़ा आकर्षण गतिशील, संदेश-गुजरने वाला रनटाइम है।उद्देश्य-सी के गतिशील फायदे?

यह और अन्य विशेषताएं कोको विकास के लिए समग्र रूप से फायदेमंद कैसे हैं? Obj-C कोको देव के लिए क्यों इस्तेमाल किया गया था और सी ++/सी नहीं?

मूल रूप से मैं यह समझने की कोशिश कर रहा हूं कि ओएसएक्स या आईओएस एप्लिकेशन के संदर्भ में वास्तव में किसी विशेष समस्या को हल करने के दौरान ऐसी भाषा सुविधाएं वास्तव में फायदेमंद कैसे होती हैं।

+0

मुझे स्पष्टीकरण दें: यदि कोको को सी ++ या जावा में लागू किया गया था तो क्या ढांचे की कोई भी विशेषता काफी अलग होगी? या पूरी तरह से संभव नहीं है? – Maverick

उत्तर

7

कम गतिशील भाषाओं में कोको ढांचे के प्रमुख टुकड़े कठिन (बिल्कुल असंभव नहीं) हैं। कुंजी-मूल्य कोडिंग (जो गतिशील प्रेषण और रनटाइम कक्षा और पदानुक्रम संशोधन का उपयोग करती है) संकलन-समयबद्ध (विधि-कॉलिंग) भाषाओं में करना बहुत कठिन है। विशेषता डेटा गेटर्स/सेटर्स के कोर डेटा का संश्लेषण उद्देश्य-सी के गतिशील संदेश (और गतिशील रनटाइम) का एक समान उदाहरण है जो चीजों को अधिक आसान बनाता है।

उद्देश्य-सी के गतिशील संदेश को बड़ी परियोजनाओं में निर्भरता समस्या को हल करने के लिए विशेष रूप से डिज़ाइन किया गया था। जबकि सी ++ जैसी संकलन-समयबद्ध भाषा की आवश्यकता होती है कि निर्भर मॉड्यूल को एक साथ फिर से सम्मिलित किया जाए, उद्देश्य-सी के रनटाइम-बाउंड मैसेजिंग का अर्थ है कि आप हमेशा को सबकुछ फिर से संकलित नहीं करना चाहते हैं। उद्देश्य-सी ओवर (उस समय, अपरिपक्व सी ++) का उपयोग करने के नेक्स्ट के निर्णय के समय, यह डेवलपर स्वच्छता में एक प्रमुख कारक था। यह अभी भी बड़े सिस्टम को प्रबंधित करना आसान बनाता है (हालांकि, फिर से, यह निश्चित रूप से सी ++ या जावा या असंभव नहीं है ..., बस इतना कठिन है)।

+2

कोको-जावा पुल का जीवनकाल और केवीओ/केवीसी का प्रसार पूरी तरह से ऑर्थोगोनल है .... – bbum

+0

@bbum, अंदरूनी ज्ञान के लिए धन्यवाद। मैंने सुना होगा (हालांकि आधिकारिक तौर पर कभी नहीं) कि जावा पुल में केवीओ जैसी चीजें बहुत कठिन थीं। किसी भी मौके पर आप इसे अपने बहिष्कार के कारणों पर प्रबुद्ध कर सकते हैं? –

0

मेरे दो सेंट:

  1. एकल विरासत: वर्गों के युग्मन कम कर देता है फिर भी, कुछ (अपने आप को शामिल) सिर्फ अपनी एक बाधा लगता है।
  2. प्रोटोकॉल है: सी ++ नहीं है।
  3. संदेश प्रणाली: यह प्रति लाभ नहीं है, लेकिन यह सी ++ में डॉट सिंटैक्स उपयोग से अलग है।
  4. सी: सी ++ का सख्त सुपर सेट केवल सी
  5. का एक सुपर सेट है आप उद्देश्य-सी ++ का उपयोग कर सकते हैं जो आपको उद्देश्य-सी के साथ सी ++ की शक्ति देता है।
+0

सी ++ में आप आमतौर पर एक इंटरफ़ेस (उर्फ प्रोटोकॉल) को लागू करने के लिए एकाधिक विरासत का उपयोग करेंगे। – Ferruccio

0

मैं सी ++ और उद्देश्य-सी ++ का व्यापक रूप से उपयोग कर रहा हूं। मेरा लेना यह है कि संदेश प्रणाली बहुत सारे मुद्दों को हल करती है। सी ++ में बहुत से डिजाइन पैटर्न/हैक उद्देश्य-सी में तुच्छ हैं।

एक मुद्दा यह है कि मैसेजिंग सिस्टम (अगर मैं गलत हूं तो मुझे सही करें) असुरक्षित है कि संदेशों को पाठ के रूप में पारित किया जाता है। यह एक उद्देश्य-सी प्रोग्राम को रिवर्स इंजीनियर के लिए बहुत आसान लगता है।

+2

चयनकर्ताओं में एक टेक्स्ट नाम शामिल है ('initWithFoo: बार: baz:' part), लेकिन तर्क एक सी फ़ंक्शन के समान होते हैं (क्योंकि विधि कार्यान्वयन * एक सी फ़ंक्शन है)। मुझे यकीन नहीं है कि "संदेश प्रणाली ... असुरक्षित है" से आपका क्या मतलब है। आप सही हैं कि उद्देश्य-सी कक्षाएं रिवर्स-इंजीनियर के लिए बहुत आसान हैं; आपको केवल क्लास-डंप की ज़रूरत है। –

+0

डिज़ाइन पैटर्न/हैक्स के किसी भी उदाहरण जो ओज-सी में सी ++ से छोटे होते हैं? – Maverick

+0

संदेश पाठ के रूप में पारित नहीं किया गया है। संदेश प्रेषण में विधि तालिकाओं में कोड को पॉइंटर्स की तलाश करना, स्टैक पर पैरामीटर को धक्का देना और फिर फ़ंक्शन पॉइंटर को कॉल करना शामिल है। – NSResponder

-3

आपके प्रश्न का उत्तर तकनीकी नहीं है, लेकिन ऐतिहासिक है।

स्टीव जॉब्स ऐप्पल छोड़ देता है और उद्देश्य सी पर आधारित एनईएक्सटी पाया जाता है एक नई उन्नत ऑब्जेक्ट-ओरिएंटेड गतिशील टाइप की गई भाषा - सी में एक विशाल सुधार, फिर ऐप्पल और ऐप्पल लौटता है और एनईएक्सटी खरीदता है और मैक ओएस एक्स मैक डिजाइन करने के लिए इसका मूल उपयोग करता है। इस प्रकार ओएस एक्स और आईओएस ढांचे को उद्देश्य-सी में बनाया गया है।

अब तकनीकी विवरण के लिए एक अलग मामला है।

उदाहरण के लिए गतिशील टाइपिंग प्रोग्रामेटिक क्षमता का इंद्रधनुष लाती है, लेकिन संकलन समय से रनटाइम तक डिबगिंग कार्य का एक बड़ा हिस्सा लेती है, यानी जब भाषा लचीली होती है तो चलिए आप चल रहे ऐप्स के साथ चले जाते हैं जो जरूरी नहीं हैं और/या सुसंगत।

दूसरी ओर जावा उद्देश्य-सी शिकार करने वाली सभी समस्याओं को हल करता है और आपको आत्मनिरीक्षण के साथ एक गतिशील भाषा देता है - आपको गतिशील टाइपिंग की सभी शक्तियों को अनुमति देता है और नियमों का भारी कठोर सेट रखता है जो आपको 98 से बहुत अधिक राहत देता है आपके डीबगिंग समय का%।

C और C++ अतीत
ऑब्जेक्टिव-सी की बुरी भाषाओं है आधुनिक भाषाओं

यह नरक में एक वंश से व्यापक जावा/सी # आने के लिए किया जा रहा है कर रहे हैं से अतीत
जावा/सी # एक अच्छा भाषा प्रोग्रामिंग और ओबीजेसी के साथ काम करने के लिए स्लोपियर कंपाइलर्स के साथ फिर से सौदा करना है, लेकिन हे, यह आईफोन के लिए विकसित करने के लिए मेरा जुर्माना है।

+3

यह उद्देश्य-सी के खिलाफ एक गैरकानूनी रान है, सवाल के जवाब का जवाब नहीं। क्या है "चूंकि भाषा लचीली है, तो क्या आप उन चल रहे ऐप्स से दूर चले जाते हैं जो आवश्यक नहीं हैं और/या सुसंगत हैं" वैसे भी इसका मतलब है? शायद आपको निर्णय लेने से पहले अभ्यास में भाषा के साथ थोड़ा और समय बिताना चाहिए। –

+0

नहीं, यह न तो बकवास और न ही rant है। यदि आप ओबीजेसी की ओर एक आक्रामकता के रूप में मेरी पोस्ट देखते हैं तो आप मील से मेरी बात चूक गए, और मुझे खेद है। हालांकि इसका मतलब यह नहीं है कि आज के परिप्रेक्ष्य और कंप्यूटर भाषाओं और कंपाइलरों के ज्ञान को देखते हुए ओबीजेसी में कई डिज़ाइन त्रुटियां नहीं हैं। मैंने जो कहा वह सिर्फ एक राय नहीं है, थोड़ी कम रुक गई है, यह एक अनुभवी तथ्य है और यह ओबीजेसी प्रोग्रामर के साथ ओबीजेसी मंच होने से स्वतंत्र है। –

संबंधित मुद्दे