2010-11-30 13 views
6

उद्देश्य-सी एक ऑब्जेक्ट उन्मुख प्रोग्रामिंग भाषा है जो सी प्रोग्रामिंग भाषा में स्मॉलटॉक-स्टाइल मैसेजिंग जोड़ती है। मैं समझता हूं कि सीखना स्मॉलटाक उसी तरह अच्छा हो सकता है कि लिस्प सीखना किसी के ज्ञान के लिए अच्छा है, लेकिन मैं जानना चाहता हूं कि छोटे-छोटे-छोटे अवधारणाओं को सीखना मुझे उद्देश्य-सी को पूरी तरह से समझने में मदद करेगा, जिसे "मूल" में स्मालटाक की भूमिका दी गई है कहानी"। यदि हां, तो विशेष रूप से क्या?उद्देश्य-सी प्रोग्रामिंग: सीखना सी और/या स्मॉलटॉक सहायता करेगा?

मान लीजिए कि पहले से ही सी प्रोग्रामिंग जानता है, हम स्मॉलटाक से क्या सीख सकते हैं? जाहिर है, उद्देश्य-सी में बहुत सी अवधारणाएं हैं जो सी में नहीं हैं (यानी मैसेजिंग, इंटरफेस, प्रोटोकॉल, गतिशील टाइपिंग, प्रतिनिधिमंडल, प्रतिबिंब; यह वस्तु-उन्मुख है!) लेकिन स्मॉलटाक से ली गई हैं।

संपादित करें: मैंने सी प्रोग्रामिंग भाषा को प्रश्न में जोड़ा है, क्योंकि आम सहमति यह है कि सीखना सी सीखना छोटे समय (जब उद्देश्य-सी में प्रोग्रामिंग की बात आती है) सीखने से बेहतर होता है।

+0

मुझे स्मॉलटाक नहीं पता है, इसलिए मैं वास्तव में ऐसा उत्तर देने के लिए योग्य महसूस नहीं करता हूं जो इस उद्देश्य के लिए वाउच करता है कि यह उद्देश्य-सी डेवलपर की कितनी मदद कर सकता है या नहीं। ऐसा कहा जा रहा है, मुझे लगता है कि यह इंगित करने लायक है कि ** यह दो अलग-अलग भाषाओं को एक साथ सीखने की बजाय सामान्य रूप से ऑब्जेक्ट उन्मुख प्रोग्रामिंग अवधारणाओं के साथ सहज बनने के लिए * अधिक * उपयोगी होगा। ** –

+1

मुझे आश्चर्य है कि उपयोग कैसे करें ओबीजे-सी पहले सी सीखने के बिना ... क्योंकि यह ओब्जे-सी का हिस्सा है। – Vovanium

उत्तर

6

स्मॉलटॉक एक अविश्वसनीय रूप से कॉम्पैक्ट भाषा है और यह सबसे शुद्ध ऑब्जेक्ट उन्मुख भाषाओं में से एक है। उद्देश्य-सी स्मॉलटॉक और सी के बीच एक व्यावहारिक समझौता है, जो कुछ बहुत ही महत्वपूर्ण अंतर बनाता है। उदाहरण के लिए, स्मॉलटॉक में सबकुछ एक वस्तु है - यहां तक ​​कि सरल संख्याएं - और किसी ऑब्जेक्ट का प्रत्येक हेरफेर संदेश भेजने से होता है। उनके नाम के बावजूद संदेशों को उसी क्रम में मूल्यांकन किया जाता है। तो उदा। निम्नलिखित:

8 + 9/23 + 16 * 8 

सख्त बाएँ से सही क्रम में मूल्यांकन किया जाता है क्योंकि ऑपरेटरों '+', '/' और '*' सिर्फ संदेशों उस नंबर को भेजी जाती हैं किया जा रहा है भाषा के लिए कोई विशेष अर्थ नहीं वस्तुओं।

उद्देश्य-सी छोटी सी स्टाइल ऑब्जेक्ट्स को सी में जोड़ता है लेकिन सी का एक सख्त सुपरसेट भी है जो सी के आदिम प्रकारों और अंतर्निर्मित ऑपरेटरों को बनाए रखता है। तो उद्देश्य-सी में संचालन के सामान्य गणितीय क्रम को उपरोक्त अभिव्यक्ति पर लागू किया जाएगा - विभाजन और गुणा पहले किया जाएगा, इसके बाद के संस्करण।

सीखना सी उद्देश्य-सी की पूरी तरह से समझने के लिए बिल्कुल जरूरी है। उद्देश्य-सी सी का एक सख्त सुपरसेट है और जहां तक ​​वे जाते हैं, वही वाक्यविन्यास और अर्थशास्त्र का स्पष्ट रूप से उपयोग करता है। यह किसी चीज को किसी भी ऑपरेशन को लागू करने के तरीके के बिना किसी चीज़ को पॉइंटर बनाए रखने की क्षमता के कारण सी पर ऑब्जेक्ट्स की अवधारणा को ग्राफ्ट करता है। इसके बाद यह वस्तुओं को संदेश पोस्ट करने और किसी ऑब्जेक्ट को प्राप्त संदेशों को घोषित करने और कार्यान्वित करने के साधन प्रदान करने के लिए सी सिंटैक्स को बढ़ाता है।

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

मेरे सिर के ऊपर से, स्मॉलटाक भी प्रवाह नियंत्रण प्रणाली में बहुत अलग है और इसमें 'ब्लॉक' का एक समान लेकिन संक्षेप में अलग विचार है (हालांकि अधिकांश नए कार्यान्वयन ने दोनों को लाइन में लाया है)। ऐप्पल ने वास्तव में सी स्तर पर एक विस्तार के रूप में ब्लॉक लागू किए हैं जिसका उपयोग उद्देश्य-सी वस्तुओं पर कई नए तरीकों से किया जाता है।

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

तो, निष्कर्ष में: स्मॉलटॉक -80 पुस्तक (बैंगनी एक) निश्चित रूप से एक पढ़ने योग्य और बेहद उपयोगी है लेकिन आवश्यक रूप से पूरी तरह से प्रासंगिक नहीं है। सीखना सी किसी भी मामले में आवश्यक है; के & आर के लिए मेरे संदर्भ तुलना के लिए हैं।

+0

ऐसा लगता है जैसे यह लगता है सर्वसम्मति है: सी महत्वपूर्ण है; स्मॉलटॉक दिलचस्प लेकिन अनावश्यक है। –

+2

यह बिल्कुल गलत है। अच्छा उद्देश्य सी लिखने के लिए आपको अच्छे स्मॉलटाक और सी –

+2

का थोड़ा सा अच्छा उद्देश्य-सी लिखने के लिए आपको अच्छे उद्देश्य-सी सीखने की आवश्यकता है। मुझे लगता है कि हम जो कह रहे हैं वह दो अग्रदूतों में से एक है, केवल एक ही आवश्यक है सी। यदि आप अच्छा उद्देश्य-सी लिख सकते हैं तो आप सी लिख सकते हैं, आप जरूरी नहीं कि स्मॉलटाक लिख सकें। – Tommy

0

मुझे लगता है कि सबसे अच्छा पृष्ठभूमि उद्देश्य जानने के लिए - सी सी है आप सी पता है, आप आसानी से ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग से परिचित हो और उद्देश्य में लिखेंगे - सी

निजी तौर पर, मैं ' टी सीखने के लिए हमें एक अच्छा विचार छोटा मत सोचो।

+1

नहीं। ऑब्जेक्ट उन्मुख प्रोग्रामिंग सीखना आसान नहीं है। इसे संकलित करना उतना ही नहीं है जितना ऑब्जेक्ट उन्मुख –

+1

यह आपकी प्रोग्रामिंग शैली को बदलने और सिद्धांतों को समझने के बारे में है। हो सकता है कि किसी ऐसे व्यक्ति के लिए जिसने सी में एक बेहद अनुभव किया हो, यह वास्तव में कठिन है लेकिन मेरे लिए यह – Knodel

+0

का एक बड़ा सौदा नहीं था ... पिछले दस वर्षों में मैंने देखा है कि कोड सी #, जावा और डेल्फी में देखा गया है , मैं कहूंगा कि उन भाषाओं में उन प्रोग्रामिंग के बीस प्रोसेस ने ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग सीखा है, सटीक होने के लिए: * लागू करें * यह –

2

अस्वीकरण: मुझे स्मॉलटाक नहीं पता।

मुझे यकीन है कि आपके ओब्जे-सी कौशल को स्मॉलटाक सीखने से फायदा होगा, लेकिन मेरी राय में, आपका समय सी सीखने में काफी बेहतर होगा। सी के रूप में जाने से पहले ओबज-सी सीखने वाले किसी व्यक्ति के रूप में, अवधारणाएं स्मॉलटाक लेने में आसान है, सी से ली गई अवधारणाएं और अधिक कठिन हैं।

0

कॉलिंग विधियों के बजाय ऑब्जेक्ट्स को संदेशों को पास करने के लिए उपयोग करना छोटे-छोटे पृष्ठभूमि के बिना बहुत आसान है। हालांकि, स्मॉलटाक सी जैसे कुछ भी नहीं दिखता है (सुपरकॉलीडर संस्करण को छोड़कर) और भाषा कोड ब्लॉक और अन्य पागल सामान को प्रथम श्रेणी की वस्तुओं के रूप में भी मानती है: उदा। SuperCollider {i < 5}.while({ // do stuff }) में यह व्यवहार उद्देश्य-सी पर नहीं आया था और संभवतः आपको भ्रमित कर देगा क्योंकि यह मुझे करता है।

+1

अब हमारे पास उद्देश्य सी (और बहुत बदसूरत वाले) में ब्लॉक हैं –

3

मैं Knodel से सहमत नहीं सिर्फ एक उदाहरण इस

[someObject संदेश] देख और

someObject संदेश दिखाई है।

आप देखते हैं उद्देश्य-सी एक ही "स्थिति" का उपयोग करता है और हाँ यह स्मॉलटॉक से आता है। लर्निंग स्मॉलटॉक हमेशा समय का अच्छा निवेश होता है। और इस क्षेत्र में अर्थ 100% छोटा सा सामान किसी ऑब्जेक्ट या कक्षा में कुछ संदेश भेजता है जिसमें स्वयं कुछ मेटा क्लास होता है।

और हाँ सीखना सी जानना अच्छा है कि उद्देश्य-सी के हिस्से का उपयोग कैसे करें, लेकिन ओओ में उपयोग करने के लिए सी द्वारा सिखाया नहीं जाता है इसलिए सी और स्मॉलटाक को जानना उद्देश्य-सी का उपयोग करना आसान बनाता है। लेकिन उद्देश्य-सी सिर्फ भाषा "पुस्तकालय" भाषा पुस्तकालयों से नहीं है। तो उस पर समय बिताना निश्चित रूप से अच्छा समय बिताया जाता है।

और हाँ आप सी-स्मॉलटाक को उद्देश्य-सी से सर्वश्रेष्ठ बनाने के लिए बेहतर जानते थे।

2

हां, उद्देश्य-सी के उद्देश्य भाग छोटे-छोटे के समान हैं। यदि आप पहले स्मॉलटाक सीखते हैं, तो उद्देश्य-सी की कुछ अवधारणाएं आसान होंगी और संदेश भेजने का सिंटैक्स कम सदमे से कम होगा।हालांकि, मुझे नहीं लगता कि स्मालटाक उद्देश्य-सी से सीखना जरूरी है, निश्चित रूप से यदि आप पहले ही सी को नहीं जानते हैं, तो आप उद्देश्य-सी को सीधे सीख सकते हैं।

यह कहकर कि, स्मॉलटाक एक अच्छी भाषा आईएमओ है और इसके लिए सीखने लायक है।

5

स्मॉलटॉक से आप वास्तविक ऑब्जेक्ट उन्मुख प्रोग्रामिंग सीख सकते हैं। जावा, सी # और डेल्फी जैसे हाइब्रिड ऐसा करने के लिए प्रतीत नहीं होते हैं। दस साल के संकर के बाद, मेरी कोडिंग शैली में कुछ महीनों के बाद स्मॉलटाक में काफी सुधार हुआ।

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

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