تُعدّ Objective-C لغة برمجة كائنية التوجه أدّت دورًا محوريًا في تطوير البرمجيات لأجهزة Apple. وبوصفها امتدادًا للغة C، تجمع Objective-C بين العناصر البنيوية للغة C والميزات كائنية التوجه المستوحاة من Smalltalk، ما يتيح للمطورين إنشاء تطبيقات معقدة وفعالة. وقد طُوّرت اللغة في الأصل في أوائل ثمانينيات القرن العشرين، واعتمدتها شركة NeXT لنظام التشغيل NeXTSTEP، ثم انتقلت إلى Apple عندما استحوذت Apple على NeXT في عام 1997، لتصبح بعد ذلك اللغة الأساسية لتطوير تطبيقات macOS ثم تطبيقات iOS لاحقًا. وتكمن قوة Objective-C في تكاملها مع إطاري العمل Cocoa و Cocoa Touch من Apple، اللذين يمنحان المطورين إمكانية الوصول إلى نطاق واسع من الأدوات والمكتبات لبناء كل شيء من التطبيقات البسيطة إلى الحلول البرمجية المتقدمة. ورغم أن Swift، وهي لغة برمجة أحدث من Apple، قد تولّت بشكل متزايد دور Objective-C، فإن Objective-C لا تزال جزءًا مهمًا من كثير من التطبيقات الموجودة وأساسًا لفهم تاريخ تطور منظومة Apple.
تُعدّ Objective-C لغة برمجة كائنية التوجه توسّع لغة C بميزات من Smalltalk، ما يجعلها مناسبة بشكل خاص لتطوير تطبيقات ديناميكية ومرنة. وتُعرف بتمرير الرسائل وقت التشغيل، الذي يتيح للمطورين كتابة شيفرة نمطية وقابلة لإعادة الاستخدام معًا. وقد كانت Objective-C لسنوات عديدة اللغة الأساسية لتطوير تطبيقات macOS و iOS، ويتيح تكاملها مع أطر عمل Cocoa إنشاء واجهات مستخدم غنية وتطبيقات معقدة بسهولة نسبية. ورغم أن Swift أصبحت الآن اللغة المفضلة لمنصات Apple، فإن Objective-C لا تزال جزءًا مهمًا من كثير من قواعد الشيفرة الموجودة، وتضمن قابلية تشغيلها البيني مع Swift استمرارها في أداء دور في تطوير التطبيقات الحديث.
More about Objective-C
تُعدّ Objective-C لغة برمجة كائنية التوجه تُستخدم أساسًا لتطوير البرمجيات لمنصات Apple مثل macOS و iOS. وتُعرف اللغة بجمعها بين كفاءة C والميزات كائنية التوجه في Smalltalk، ما يجعلها أداة قوية للمطورين الراغبين في إنشاء تطبيقات متينة وقابلة للتوسع. وقد صُممت صياغة Objective-C وبيئة تشغيلها لدعم الربط الديناميكي وتمرير الرسائل، ما يمنح المطورين المرونة والتحكم في شيفرتهم.
من الناحية التقنية، تبني Objective-C على لغة C لكنها تضيف ميزات كائنية التوجه عبر الأصناف والتوابع. وتستخدم اللغة مكتبة وقت تشغيل تتيح الأنواع الديناميكية والتوزيع الديناميكي للتوابع، ما يتيح تغيير سلوك البرنامج أثناء تشغيله. وتُعدّ بيئة التشغيل هذه من المكونات المحورية التي تميز Objective-C عن اللغات الأخرى، إذ تتيح للمطورين تنفيذ ميزات متقدمة مثل التبديل الديناميكي للتوابع (method swizzling) والاستبطان.
تُستخدم Objective-C في ثلاثة سياقات أساسية، يدعم كل منها أنواعًا مختلفة من مشاريع التطوير:
تطوير تطبيقات iOS: تاريخيًا، كانت Objective-C اللغة الأساسية لتطوير تطبيقات iOS. وقد استُخدمت لإنشاء كل شيء من التطبيقات البسيطة إلى التطبيقات المعقدة كثيفة الرسوميات التي تستفيد بالكامل من منصة iOS. وتتكامل اللغة تكاملًا وثيقًا مع أطر عمل Cocoa Touch، ما يتيح استخدام ميزات خاصة بنظام iOS مثل الإيماءات والرسوم المتحركة والاتصال الشبكي.
تطوير برمجيات macOS: تُستخدم Objective-C أيضًا لتطوير تطبيقات macOS. وباستخدام أطر عمل Cocoa، يستطيع المطورون إنشاء تطبيقات سطح مكتب قوية تستخدم ميزات macOS مثل تعدد المهام ومعالجة الملفات وعرض الرسوميات. وتجعل قدرة Objective-C على العمل بشكل وثيق مع C وC++، والأخيرة عبر Objective-C++، منها خيارًا جيدًا للمطورين الراغبين في دمج قواعد شيفرة موجودة في مشاريع macOS.
تطوير المكتبات والأدوات: كثيرًا ما تُستخدم Objective-C لتطوير مكتبات وأدوات يمكن إعادة استخدامها عبر مشاريع مختلفة. ويشمل ذلك كل شيء من مكونات واجهة المستخدم إلى بروتوكولات الشبكة وخوارزميات معالجة البيانات. وتتيح مرونة اللغة وبيئة تشغيلها الديناميكية إنشاء حلول نمطية وقابلة للتوسيع يمكن تكييفها مع احتياجات محددة.
ومن أكبر نقاط قوة Objective-C قدرتها على التكامل مع شيفرة C و C++ الموجودة، ما يتيح للمطورين إعادة استخدام قواعد الشيفرة الموجودة وتوسيعها دون إعادة كتابتها من الصفر. وهذا مفيد بشكل خاص في المشاريع الكبيرة حيث تُعدّ كفاءة الشيفرة وصيانتها أمرين حاسمين. وإضافة إلى ذلك، تدعم Objective-C ميزات متقدمة مثل الفئات والبروتوكولات، التي تتيح للمطورين إضافة وظائف إلى أصناف موجودة وتحديد عقود للكائنات، ما يعزز إعادة استخدام الشيفرة والنمطية.
وتُعدّ بيئة تشغيل Objective-C ميزة مهمة أخرى. إذ تتيح للمطورين تنفيذ ميزات ديناميكية مثل الاستبطان والتبديل الديناميكي للتوابع، ما يتيح تغيير سلوك البرنامج أثناء تشغيله. وهذا مفيد بشكل خاص في التطبيقات التي تتطلب درجة عالية من المرونة وقابلية التكيف، مثل تلك التي تستخدم الإضافات أو وحدات التوسيع.
عمليًا، أدّت Objective-C دورًا محوريًا في تطوير كثير من التطبيقات المستخدمة يوميًا على أجهزة Apple. وقد ساعدت على تشكيل تجربة المستخدم على iOS و macOS بمنح المطورين الأدوات التي يحتاجونها لإنشاء تطبيقات بديهية وسريعة الاستجابة. ورغم أن Swift أصبحت الآن اللغة المفضلة لمعظم المشاريع الجديدة، فإن Objective-C لا تزال جزءًا مهمًا من منظومة Apple، خاصة لصيانة التطبيقات الموجودة وتحديثها.
خلاصة القول، تُعدّ Objective-C لغة تجمع بين ميزات كائنية التوجه قوية وكفاءة C، ما جعلها خيارًا طبيعيًا للمطورين العاملين على شيفرة موجودة على منصات Apple. وتجعلها قدرتها على التكامل مع الشيفرة الموجودة وبيئة تشغيلها الديناميكية أداة متعددة الاستخدامات في تطوير البرمجيات، حيث تُعدّ المرونة والكفاءة أمرين حاسمين.
Frequently asked questions about Objective-C
ما الفروق الجوهرية بين Objective-C و Swift؟
تُعدّ Objective-C لغة برمجة أقدم طُوّرت في ثمانينيات القرن العشرين، وكانت اللغة الأساسية لتطوير تطبيقات macOS و iOS لسنوات عديدة. وهي مبنية على C وتضيف ميزات كائنية التوجه، ما يتيح كتابة شيفرة أكثر تنظيمًا وقابلية لإعادة الاستخدام. وتستخدم Objective-C بيئة تشغيل تتيح الربط الديناميكي والاستبطان، ما يوفر مرونة كبيرة لكنه قد يؤدي أيضًا إلى أخطاء لا تظهر إلا وقت التشغيل وإلى عبء إضافي صغير في استدعاءات التوابع.
أما Swift، فقد قدّمتها Apple في عام 2014 بديلًا حديثًا لـ Objective-C. وقد صُممت Swift لتكون أكثر أمانًا وأسهل قراءة وكتابة، بصياغة أكثر وضوحًا وأقل عرضة للأخطاء. وهي تدعم ميزات مثل القيم الاختيارية، التي تساعد على التعامل مع القيم المفقودة بأمان، ولديها فحص صارم للأنواع يقلل خطر أخطاء وقت التشغيل. كما أن Swift محسّنة للأداء وكثيرًا ما تستطيع إنتاج شيفرة أسرع من Objective-C، وإن كان الفرق يعتمد على المهمة.
ومقارنة بلغة Objective-C، التي تتطلب فهمًا أعمق للغة C وتعقيداتها، تُعدّ Swift أيسر على المطورين الجدد وتدعم دورات تطوير أسرع. وتجعل الميزات الحديثة في Swift وأمانها المحسّن منها الخيار المفضل لكثير من المطورين العاملين في منظومة Apple.
كيف تتعامل Objective-C مع إدارة الذاكرة؟
تستخدم Objective-C عدّ المراجع لإدارة الذاكرة. إذ يمتلك كل كائن عدّادًا يشير إلى عدد أجزاء البرنامج التي تحتفظ بمرجع إليه. وعندما يصل العدّاد إلى الصفر، يُحرَّر الكائن.
في السابق، كان على المطورين استدعاء التابعين retain و release بأنفسهم، وكان ذلك مصدرًا متكررًا للأخطاء. أما اليوم، فيُستخدم العد التلقائي للمراجع (ARC)، الذي يُدرج فيه المترجم هذه الاستدعاءات تلقائيًا. غير أن على المطورين أن يظلوا منتبهين لدورات المراجع، التي يحتفظ فيها كائنان أحدهما بالآخر ولا يُحرَّران أبدًا. ويُتجنب ذلك باستخدام المراجع الضعيفة عبر الكلمة المفتاحية weak.
ما مزايا استخدام Objective-C في تطوير تطبيقات iOS وعيوبه؟
من مزايا Objective-C أن اللغة استُخدمت لمنصات Apple لسنوات عديدة. ونتيجة لذلك، توجد مكتبات راسخة كثيرة وتطبيقات قديمة مكتوبة بها، وهي تعمل جيدًا مع Swift في المشروع نفسه. كما أن اللغة ديناميكية وتستطيع استخدام شيفرة C مباشرة.
أما العيوب فهي صياغة أكثر إسهابًا وآليات أمان أقل مما في Swift، على سبيل المثال في التعامل مع القيم الفارغة. وتركز Apple الآن على Swift و SwiftUI، وتُنشر الميزات والأمثلة الجديدة أساسًا لـ Swift. لذلك تُختار Objective-C في أغلب الأحيان لصيانة الشيفرة الموجودة بدلًا من المشاريع الجديدة.
كيف تُنفَّذ البروتوكولات في Objective-C؟
يصف البروتوكول في Objective-C مجموعة من التوابع التي يستطيع صنف ما أن يتعهد بتنفيذها، على غرار الواجهة في اللغات الأخرى. ويُعرَّف البروتوكول باستخدام @protocol متبوعًا بالاسم وتصريحات التوابع، ويُغلق باستخدام @end.
يمكن تمييز التوابع بـ @required، أي التي يجب تنفيذها، أو بـ @optional، أي التي يمكن إغفالها. ويشير الصنف إلى أنه يمتثل للبروتوكول بكتابة اسم البروتوكول بين قوسين زاويين في تصريح الصنف ثم تنفيذ التوابع. وكثيرًا ما تُستخدم البروتوكولات في نمط المفوَّض، الذي يسلّم فيه كائن مهام محددة إلى كائن آخر.
ما أهمية الفئات في Objective-C؟
تتيح الفئات في Objective-C إضافة توابع جديدة إلى صنف موجود دون تغيير شيفرته الأصلية أو إنشاء صنف فرعي. وينطبق ذلك أيضًا على أصناف النظام مثل NSString، التي لا تتوفر شيفرتها المصدرية.
تُستخدم الفئات لتنظيم الأصناف الكبيرة في عدة ملفات ولإضافة دوال مساعدة يمكن استخدامها في أنحاء المشروع كله. ويُستخدم نوع خاص يُسمى امتداد الصنف للتصريح عن التوابع والخصائص الخاصة. وينبغي الحرص على عدم إعطاء توابع الفئات أسماء توابع موجودة نفسها، إذ قد يؤدي ذلك إلى سلوك غير متوقع. ولدى Swift ميزة مشابهة تُسمى الامتدادات.
كيف يعمل نظام الرسائل في Objective-C؟
في Objective-C، تُستدعى التوابع بإرسال رسائل إلى الكائنات. وتستخدم الصياغة أقواسًا مربعة، على سبيل المثال [object method]. وبدلًا من تحديد الدالة عند ترجمة البرنامج، يبحث نظام وقت التشغيل عن التابع الذي يجب تنفيذه لحظة إرسال الرسالة.
يتيح هذا النهج الديناميكي تغيير التوابع أو إضافتها وقت التشغيل وإرسال رسائل إلى كائنات لا يُعرف نوعها مسبقًا. وهو يوفر مرونة كبيرة ويُعدّ أساسًا لميزات مثل الفئات. ومن ناحية أخرى، لا تُكتشف أخطاء معينة إلا وقت التشغيل. كما أن الرسالة المرسلة إلى كائن nil لا تفعل شيئًا بدلًا من التسبب في خطأ.
Objective-C for dummies
Objective-C لغة برمجة تُستخدم لصنع التطبيقات، خاصة لمنتجات Apple مثل iPhone و iPad. فكّروا فيها كمجموعة من التعليمات التي تخبر الحاسوب بما يجب فعله. وقد صُنعت تطبيقات كثيرة، خاصة القديمة منها، باستخدام Objective-C، وإن كانت معظم التطبيقات الجديدة تُكتب بلغة Swift. والأمر يشبه قليلًا بناء منزل، حيث توفر Objective-C لبنات البناء والأدوات التي يستخدمها المطورون لإنشاء الميزات والتصميم اللذين يراهما الناس ويتفاعلون معهما. ورغم أنها لغة أقدم، فإنها لا تزال مهمة لأن تطبيقات موجودة كثيرة مبنية بها، وهي تعمل جيدًا مع تقنيات Apple الأحدث.