آنچه در این صفحه می خوانید:
- معرفی آبجکتیو سی (Objective-C)
- تاریخچه آبجکتیو سی (Objective-C)
- ویژگی های آبجکتیو سی (Objective-C)
- مثال کد آبجکتیو سی (Objective-C)
معرفی آبجکتیو سی (Objective-C)
Objective-C یک زبان برنامه نویسی همه منظوره و هدفمند است که پیام های سبک Smalltalk را به زبان برنامه نویسی C اضافه می کند. این زبان اصلی برنامه نویسی تا معرفی سوئیفت (Swift) در سال 2014 بود که توسط اپل برای macOS، آی او اس (iOS) و رابط های برنامه نویسی برنامه مربوطه (API)، Cocoa و Cocoa Touch پشتیبانی شد.
Objective-C زبان ساده و اصلی برنامه نویسی نوشتن نرم افزار برای OS X و iOS می باشد. این یک نسخه از زبان برنامه نویسی سی است و قابلیت های شی گرا و اجرا پویا را فراهم می کند. تفاوت اصلی آبجکتیو سی با دیگر زبان ها در Syntax، مکانیزم مدیریت حافظه و اسامی مفاهیم آن است. با این زبان فقط می توان برای اپل برنامه نوشت و با ابزار ایکس کد برای آن کدنویسی کرد. اکثر دستورات این زبان برگرفته از زبان سی می باشد و تنها قابلیت ارسال پیغام به آن اضافه شده است.
زبان Objective-C اول و مهمتر از همه، یک زبان شی گرا است. نوع عملکرد که در Cocoa framework قرار گرفته تنها می تواند از طریق تکنیک های شی گرا تحویل داده شود. به این دلیل که Objective-C فرمت استاندارد ANSI C است، برنامه های C موجود را می توان با استفاده از فریمورک های نرم افزاری بدون تغییر توسعه اصلی آنها، سازگار کرد. از آنجا که Objective-C شامل C می شود، هنگامی که در Objective-C کار می کنید، تمام مزایای C را دریافت می کنید.
در مقایسه با دیگر زبان های شی گرا بر اساس سی، Objective-C بسیار پویاتر است. کامپایلر اطلاعات زیادی در مورد خود اشیا برای استفاده در ران تایم حفظ می کند. تصمیماتی که ممکن است در زمان کامپایل صورت گیرد، می تواند تا زمان اجرای برنامه به تعویق بیفتد. قابلیت دینامیک به برنامه های Objective-C انعطاف پذیری و قدرت غیر عادی می بخشد.
تاریخچه آبجکتیو سی (Objective-C)
Objective-C در درجه اول توسط Brad Cox و Tom Love در اوایل دهه 1980 در شرکت تولیدی محصولات بین المللی ایجاد شد. پیش از ایجاد شرکت خود، هر دو در سال 1981 در مرکز فناوری برنامه نویسی شرکت ITT شرکت SmallTalk، معرفی شدند. Cox تحت تأثیر مشکلات قابلیت استفاده مجدد در طراحی و برنامه نویسی نرم افزار قرار گرفت. او فهمید که زبانی مانند Smalltalk در ایجاد محیط های توسعه برای توسعه دهندگان سیستم در ITT بسیار ارزشمند خواهد بود. با این حال، او و Tom Love نیز تشخیص دادند که سازگاری با C در محیط مهندسی مخابرات ITT از اهمیت بالایی برخوردار است.
Love و Cox سرانجام PPI را برای تجاری کردن محصول خود تشکیل دادند که یک کامپایلر Objective-C را با کتابخانه های کلاس همراه کرد. در سال 1986، Cox توضیحات اصلی Objective-C را به شکل اصلی خود در کتاب برنامه نویسی شی گرا، یک رویکرد تکاملی منتشر کرد. اگرچه وی مراقب این نکته بود كه مسئله استفاده مجدد بیشتر از آنچه كه Objective-C ارائه می دهد وجود دارد، این زبان اغلب ویژگی مقایسه شده با ویژگی را با سایر زبان ها پیدا می كرد.
ویژگی های آبجکتیو سی (Objective-C)
کلاس ها آبجکت هستند
هر کلاس نمونه ای از یک کلاس متا است که به طور خودکار توسط زمان اجرا ایجاد و مدیریت می شود. ما می توانیم متد کلاس را تعریف کنیم، کلاس ها را به عنوان آرگومان بگذرانیم، آنها را در مجموعه ها قرار دهیم و مواردی از این دست. برای ایجاد یک شی، ما فقط پیامی را به کلاس مورد نظر برای آن ارسال می کنیم. نیازی به اختراع سیستم "کارخانه" نیست. نیازی به سازوکار سازنده خاص در سطح زبان نیست. این به ساده نگه داشتن زبان کمک می کند. و به هر حال، کلاس های فراشناختی نیز آبجکت هستند!
تایپ پویا
همانطور که در روبی، پایتون، Smalltalk، Groovy ... بسیار مفید است زیرا ما همیشه از قبل نمی دانیم اشیاء ما در زمان اجرا چه می شوند. استفاده از تایپ پویا در Objective-C ساده است. به عنوان مثال، این متغیر را اعلام می کند که می تواند یک شیء را در خود جای دهد:
id myObject;
تایپ استاتیک اختیاری
با این وجود، Objective-C از تایپ استاتیک نیز پشتیبانی می کند. این متغیر را اعلام می کند که می تواند یک شیء از کلاس (یا زیر کلاس) NSView را نگه دارد:
NSView * myObject؛
دسته بندی ها
دسته بندی ها به ما اجازه می دهند متد های جدیدی را تعریف کنیم و آنها را به کلاس هایی اضافه کنیم که کد منبع برای آنها نداریم. این امر باعث می شود که کلاس ها بدون توسل به ساب کلاس انجام شود. برای تطبیق کلاس های موجود با الزامات فریمورکی که می خواهیم از آنها استفاده کنیم یا ایجاد کنیم، بسیار مفید است.
ارسال پیام
ما با ارسال پیام به آنها با اشیاء در تعامل هستیم. اغلب، گیرنده پیام متدی را خواهد داشت که به طور مستقیم با پیام مطابقت دارد (یعنی همان نام را دارد، یا به تعبیری Objective-C همان انتخاب کننده). در این حالت، روش فراخوانی می شود. اما این تنها نتیجه ممکن نیست، زیرا یک شیء می تواند مسئولیت رسیدگی به پیام را به روش های دیگر مانند انتقال آن به یک شیء دیگر، پخش آن به تعدادی از اشیاء، درون یابی آن و اعمال منطق دلخواه و غیره انتخاب کند.
مزایا و معایب آبجکتیو سی (Objective-C)
مزایا:
- قابلیت همکاری با ++C و ++Objective C
- خصوصیات مؤثر مانند متد swizzling
- پشتیبانی قابل اطمینان برای کد نویسی فریمورک های باینری.
معایب:
- از آنجا که Objective-C در بالای C تشکیل شده است، به مکان یابی نیاز دارد. کلیه کلاس ها در یک برنامه Objective-C باید در گلوبال بی نظیر باشد.
- نشانگرهای خاص.
- امکان ارسال پیام بر روی یک زیرو آبجکت و عدم وجود تایپ دقیق، باعث بروز اشکالات می شود که ردیابی و رفع آن دشوار است.
مثال کد آبجکتیو سی (Objective-C)
مثال ساده Hello World! در آبجکتیو سی به این صورت است:
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSLog (@"hello world");
[pool drain];
return 0;
}