2010-07-24 7 views
13

संपादित करें: मेरा बुरा, मेरा उद्देश्य उद्देश्य-सी है, सी # नहीं। कुछ कारणों से मैं इसे अपने सिर में मिला, यह सी # आईफोन था। तो सी # के लिए जवाब बहुत अच्छे थे, धन्यवाद, लेकिन वे थोड़ा अप्रासंगिक हैं, इसके बारे में खेद है।क्या उद्देश्य-सी और जावा, या आईफोन और एंड्रॉइड के बीच कोई बड़ा अंतर है?

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

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

+0

अं ... यह नीचे दिए गए उत्तर में दो बार उल्लेख किया गया है, लेकिन अभी बताते ... ** iPhone ऑब्जेक्टिव-सी, नहीं सी # में प्रोग्राम किया गया है। ** (सी # एक Microsoft तकनीक है, शायद आप प्रोग्राम कर सकते हैं उसमें विंडोज फोन 7) – Ricket

+0

विंडोज फोन 7 को सी # (और केवल सी # में प्रोग्राम किया जा सकता है)।आपके पास विंडोज फोन 7 में उपयोगकर्ता इंटरफ़ेस समर्थन के लिए सिल्वरलाइट और एक्सएनए के बीच एक विकल्प भी है। –

+2

असल में, मोनो पैकेज और टूल्स हैं जो आईफोन, आईपॉड टच और आईपैड अनुप्रयोगों के विकास में सी # के उपयोग का समर्थन करते हैं। –

उत्तर

0

आप एंड्रॉइड के लिए उसी भाषा में आईफोन के लिए विकसित नहीं हो सकते हैं। आईफोन के लिए, आप केवल उद्देश्य सी में प्रोग्राम कर सकते हैं, यह ऐप्पल द्वारा विकसित किया गया है। आप एंड्रॉइड के लिए इसका उपयोग नहीं कर सकते हैं, और आईफोन विकास करने का एकमात्र तरीका उस भाषा के साथ है (यह उपयोगकर्ता समझौते में है)।

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

वैसे भी, आपको इन दो मोबाइल ऑपरेटिंग सिस्टम के लिए दो अलग-अलग ऐप्स बनाना होगा।

+0

जे ++ अब समर्थित नहीं है। –

+0

हालांकि यह मौजूद है। मैं इसे और अधिक स्पष्ट करने के लिए संपादित कर दूंगा। –

+0

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

3

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

सी # जावा से जेनरिक का बेहतर कार्यान्वयन करता है, उस सी # के जेनेरिक रन-टाइम पर मजबूत टाइपिंग बनाए रखते हैं।

सी # में LINQ भी है, जहां तक ​​मुझे पता है कि जावा में कोई समकक्ष (अभी तक) नहीं है। LINQ एक SQL- जैसी क्वेरी क्षमता प्रदान करता है, जो भाषा में बनाया गया है और पूरी तरह से .NET Frameowrk द्वारा समर्थित है, जो आपको ऑब्जेक्ट संग्रहों की क्वेरी करने देता है, और ऐसा करता है कि यह बहुत ही कार्यात्मक-भाषा शैली में है। एक बार क्वेरी प्रदाता एक ऑब्जेक्ट मॉडल प्रदान करता है जो दूसरे प्रारूप में अनुवाद करता है, तो क्वेरीक प्रदाताओं द्वारा अन्य डेटा प्रारूपों जैसे कि एक्सएमएल और एसक्यूएल के साथ काम करने के लिए LINQ बढ़ाया जा सकता है। LINQ बहु-कोर काम के लिए समांतरता को बहुत आसान बनाता है। यह भाषा क्षमता के लिए एक बड़ा विस्तार है।

0

यदि आप एंड्रॉइड विकास करने के बारे में सोच रहे हैं तो मेरी सबसे अच्छी सलाह जावा के लिए जाना है। सी # से जावा में कनवर्ट करने के लिए परत को पूरी तरह से अबास्ट्रक्शन (मान लेना आप कर सकते हैं) लिखने पर कोई लाभ नहीं है। जैसा कि आईफोन विकास के उद्देश्य से उद्देश्य-सी का उपयोग करने के बारे में संदेह नहीं है।

4

उपकरण XMLVM, Codename One और iSpectrum की तरह हमें बताया है कि आप वास्तव में जावा कोड (क्रॉस-संकलन कर सकते हैं किसी Android ऐप्लिकेशन या एक बनाने से स्क्रैच से) ऑब्जेक्टिव-सी कोड जो आईफोन पर चल रहा है बिना चीजों के ऐप्पल पक्ष पर किसी वर्चुअल मशीन को स्थापित किए।

मैं देख रहा Developing iPhone Applications using Java

दुर्भाग्य से iPhone SDK के लिए एप्पल के लाइसेंस समझौते पर प्रतिबंध लगाता है iPhone करने के लिए जावा आभासी मशीन के porting सुझाव देते हैं। इस प्रस्तुति में हम एक ओपन स्रोत जावा-टू-ऑब्जेक्टिव-सी पार संकलक के साथ-साथ कोको पुस्तकालय का एक जावा आधारित कार्यान्वयन परिचय। इन उपकरणों की सहायता से, आईफोन एप्लिकेशन शुद्ध जावा में लिखा जा सकता है। कोको, के जावा संस्करण का उपयोग करना जावा-आधारित आईफोन एप्लिकेशन को जावा डेस्कटॉप/एप्लेट एप्लिकेशन के रूप में चलाने के लिए संभव है जो आईफोन पर मूल रूप से चलाने के लिए क्रॉस-संकलित हो सकता है। बातचीत जावा-टू-ऑब्जेक्टिव-सी क्रॉस-कंपाइलर के साथ-साथ कोको के जावा-आधारित संस्करण की चुनौतियों पर चर्चा करेगी। विवरण http://www.xmlvm.org/

पर और अधिक जानकारी के लिए उपलब्ध हैं Frebruary 2010 से iPhone करने के लिए एंड्रॉयड अनुप्रयोगों पार संकलन के बारे में और अधिक हाल ही में बात उपलब्ध here, जो http://www.xmlvm.org/android/ पर दर्ज है है:

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

एंड्रॉइड एप्लिकेशन जावा में लिखा गया है और एंड्रॉइड विशिष्ट API का उपयोग करता है। XMLVM संगतता लाइब्रेरी प्रदान करता है, जो जावा में लिखा गया है, जो एंड्रॉइड के समान API प्रदान करता है, लेकिन केवल कोको टच के लिए जावा-आधारित API का उपयोग करता है। पार संकलन प्रक्रिया के दौरान, दोनों आवेदन और Android संगतता पुस्तकालय ऑब्जेक्टिव-सी करने के लिए जावा से पार संकलित और एक देशी iPhone आवेदन उपज के लिए कोको टच संगतता पुस्तकालय के साथ जुड़ा हुआ है।

iPhone http://www.xmlvm.org/iphone/ के लिए जावा अनुप्रयोगों के निर्माण के बारे में 2008 बात से:

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

+2

बिल्कुल मैंने आईफोन विकास को छोड़ने का फैसला क्यों किया ... यह उल्लेख न करें कि ऐप को अनुमोदित करने के लिए आपको मौखिक उत्तेजना के साथ ऐप्पल प्रदान करने के लिए मजबूत जबड़े और प्रवृत्ति होनी चाहिए। – androidworkz

+0

आपको हमेशा कठिन तरीके से काम नहीं करना पड़ता है .. – overboming

+0

ऐप को अनुमोदित करना मुश्किल नहीं है। –

1

आप वास्तव में पार फोन विकास करना चाहते हैं, जब तक कि यह वास्तव में कुछ computationally महंगा नहीं है, मैं शायद PhoneGap साथ जाना होगा।

फ़ोनगैप क्रॉस-प्लेटफ़ॉर्म मोबाइल ऐप्स बनाने के लिए एक ओपन सोर्स डेवलपमेंट फ्रेमवर्क है। एचटीएमएल और जावास्क्रिप्ट में ऐप्स बनाएं और अभी भी आईफोन/आईटouch, आईपैड, Google एंड्रॉइड, पाम, सिम्बियन और ब्लैकबेरी एसडीके में कोर फीचर्स का लाभ उठाएं।

जहां तक ​​मेरा बता सकते हैं, यह बहुत ज्यादा ही क्रॉस प्लेटफॉर्म टूलकिट कि iPhone app की दुकान में अनुमति दी है।

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

+1

फोनगैप के समान टाइटेनियम (http://www.appcelerator.com/) है जो आपको वेब प्रौद्योगिकियों के साथ * मूल * मोबाइल और डेस्कटॉप ऐप्स बनाने की अनुमति देता है। मुझे नहीं पता कि जावा आईफोन, आईपैड के लिए उपलब्ध होगा या नहीं, लेकिन http://monotouch.net/ परियोजना के माध्यम से सी # पहले से ही वहां है और कई ऐप्स स्वीकार किए जाते हैं, http://monotouch.info/MonoTouch/Apps – bitek

+0

बस देखें iSpectrum नामक खोजी गई और रोचक परियोजना, (उत्तर अनुभाग में पहले से वर्णित XMLVM प्रोजेक्ट के अलावा) जो आपको आईफोन के लिए जावा ऐप्स बनाने की अनुमति देती है, देखें http://www.flexycore.com./ispectrum-overview.html – bitek

52

मैं समय बर्बाद नहीं होगा iOS और Android के बीच समानता खोजने की कोशिश।

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

क्रॉस-प्लेटफॉर्म विकास के वातावरण के बजाय जटिलता दीर्घकालिक को कम जोड़ें। हाँ, यह साफ लग रहा है लेकिन आम तौर पर आप 90% क्या आप आसानी से चाहते हैं और फिर आप एक अवरोध है कि सभी बचत आपके द्वारा किए नष्ट कर देता है और फिर छेद में आप डाल शुरू होता है मारा। गोल छेद में कई समझौता और वर्ग pegs जाम करने के लिए बस हैं।

अपने अनुप्रयोग जब तक कर सकता है एक सामान्य वेब पेज से सिद्धांत काम में, पार मंच नहीं आपके लिए है।

ऑब्जेक्टिव-सी और जावा के विशिष्ट मामले में, हालांकि जावा ऑब्जेक्टिव-सी का वंशज है वे कोई आधुनिक अंतर है। आप एक दूसरे से कोड का उपयोग नहीं कर सकते हैं।

आपको प्रत्येक प्लेटफ़ॉर्म के विशिष्ट API को जानने के लिए समय बिताना चाहिए। यहां कोई छोटा रास्ता नहीं है।

+4

यह ऋषि है क्रॉसप्लेटफार्म यूआई के लिए सलाह, लेकिन सभी क्रॉस-प्लेटफ़ॉर्म कोड नहीं। – jamesh

+2

बहुत ही बेहतर सलाह। और आगे जाने के लिए बहुत साफ है। लेकिन जो लोग पहले ही क्रॉस प्लेटफॉर्म करना चाहते हैं, वे इसे स्वीकार नहीं करेंगे ... –

3

इस विषय को अक्सर प्रौद्योगिकी jihadis की हठधर्मिता से भर जाता है, तो मैं कोशिश करते हैं और मेरा उत्तर में कि को दूर करेगा।

मेरे अनुभव में, मैं काफी हद तक लोगों को कह रही है कि दो प्लेटफार्मों के बीच कोड साझा करने के लिए कोशिश कर रहा मुश्किल होगा साथ सहमत होंगे। हालांकि, कुछ महत्वपूर्ण अपवाद हैं:

मैं पार मंच विकास जहाँ आपके व्यापार तर्क पर विचार करेंगे:

  • गैर तुच्छ है,
  • प्लेटफार्मों में मानकीकृत किया जाना चाहिए; और
  • बाहरी दुनिया (जैसे नेटवर्क स्टैक या यूआई) के साथ अच्छी तरह से परिभाषित इंटरैक्शन है।
  • (बोनस) पहले से ही लिखा गया है।

ऐप्पल स्रोत कोड भाषाओं पर अब कुख्यात 3.3.1 प्रतिबंधों के कारण यहां चरण निर्धारित करने की दर है। आप बंडल वेबकिट, सी, सी ++ और ऑब्जेक्टिव सी

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

और यूआई से व्यापार तर्क नेटवर्किंग की साफ जुदाई, महत्वपूर्ण है।

मैं C/C++ में क्रॉस प्लेटफॉर्म यूआई कोड लिखने के लिए प्रयास नहीं होता है, और या तो कुछ है कि HTML/CSS/जे एस इस्तेमाल किया, या अधिक होने की संभावना कुछ लिखने पूरी तरह से कस्टम लिखने पर विभिन्न यूआई रूपकों का लाभ लेने के हैं प्रत्येक प्लेटफॉर्म - उदाहरण के लिए आईफोन पर अधिसूचना बार में कोई एनालॉग नहीं है। आईफोन पर एनीमेशन एंड्रॉइड की तुलना में कार्यान्वित करने के लिए परिमाण के आदेशों का आसान है।

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

जटिलता में दूसरी तरफ जाकर, ओपन जीएलएस दोनों प्लेटफार्मों पर उपलब्ध है।

यह भी ध्यान दिया जाना चाहिए कि एसवीजी एंड्रॉइड ओएस की वर्तमान फसल पर उपलब्ध नहीं है।

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