آبجکتیو-سی: تفاوت میان نسخه‌ها

محتوای حذف‌شده محتوای افزوده‌شده
2061.shy (بحث | مشارکت‌ها)
فارسی سازی
2061.shy (بحث | مشارکت‌ها)
فارسی سازی
خط ۹:
راه حل جدید پیشنهاد شده روش [[برنامه‌نویسی شیءگرا|برنامه‌سازی شی‌گرا]] بود. زبان‌هایی مانند اسمال‌تاک بر مبنای آن ساخته شدند.
 
Brad Cox و Tom Love زبان آبجکتیو-سی را در سال‌های اولیهٔ ۱۹۸۰ در کارخانه‌شان تولید کردند. Cox با الهام از زبان اسمال‌تالک با تغییر در کامپایلر Cزبان سی توانست امکانات شی‌گرایی را به آن اضافه کند. او نام این زبان را OOPC مخفف Object Oriented Programming in C گذاشت. بعدها با کمک Love محصول جدیدی به نام Productivity Products International یا PPI را ساخت که یک کامپایلر Objectiveآبجکتیو-Cسی با کتابخانهٔ کلاس‌های قدرت‌مند بود.
 
در سال ۱۹۸۸ شرکت NeXT مالکیت آبجکتیو-سی را از StepStone خرید و کامپایلر و کتابخانه‌های خاص خودش را منتشر کرد.
خط ۲۰:
===پیام‌ها===
 
زبان آبجکتیو-سی روش‌هایی برای انتقال پیام به زبان سی اضافه کرد. در این زبان از مدل اسمال‌تالک برای فرستادن پیام استفاده می‌شود. در این روش یک پیام برای یک objectشی فرستاده می‌شود و در صورتی که objectشی گیرنده بخواهدمتدی برای اجرای آن داشته باشد،آن را اجرا می‌کند. این روش برعکس روش سی++C است که گیرنده باید حتماً یک متد را پیاده‌سازی کرده باشد تا شی‌ای بتواند آن را صدا بزند.
 
فرستادن یک پیام به یک شی در این زبان به شکل زیر است:
خط ۳۰:
</source>
 
این دستور مانند عمل زیر در سی++C است:
 
<source lang="cpp">
خط ۳۸:
</source>
 
پیام‌های آبجکتیو-سی نیازی ندارند که اجرا شوند.اگر به شیئی پیامی بدهیم و آن شی متد مربوطه را پیاده‌سازی کرده باشد. اجرا می‌شود و در غیر این صورت اجرا نمی‌شود. حتی می‌توان به nilشی پوچ نیز پیام فرستاد.
 
===واسط‌ها و پیاده‌سازی‌ها===
خط ۶۴:
</source>
 
+ نمایش‌گر توابع کلاس و – نمایش‌گر توابع مربوط به یک نمونه است. معادل کد بالا در سی++C به شکل زیر است.
 
<source lang="cpp">
خط ۸۴:
یکی از موارد قابل توجه instanceMethod2WithParameter است. در آبجکتیو-سی امکان استفاده از پارامتر‌دهی بانام‌ وجود دارد که در حال زیاد بودن تعداد پارامترها کد را تمیز نگاه می‌دارد. ولی در ++C چنین امکانی وجود ندارد.
 
مقادیر بازگشتی می‌توانند انواع سی، یک اشاره‌گر به یک شی Objectiveآبجکتیو-Cسی و یا یک اشاره‌گر به انواع خاص مانند *NSArray یا *NSImage یا *NSString باشد. مقدار بازگشتی پیش‌فرض نوع عمومی Objectiveآبجکتیو-Cسی به نام id است.
 
 
===پیاده‌سازی===
 
واسط تنها روش دسترسی به کلاس را بیان می‌کند و نه خود متد‌ها را. کد اصلی در قسمت پیاده‌سازی نوشته می‌شود. این فایل‌های پیاده‌سازی معمولاً با پسوند m. خاتمه می‌یابند.
 
<source lang="objc">
خط ۱۷۱:
Informal protocol لیست متدهایی است که یک کلاس می‌تواند پیاده‌سازی کند. توی مستندات می‌آید زیرا هیچ معادلی در زبان ندارد. معمولاً شامل متدهای اختیاری نیز هست.
 
Formal protocol مشابه interface در Javaجاوا است. یک لیست متدها است که یک کلاس می‌تواند بیان کند که آن‌ها را پیاده‌سازی می‌کند. این پروتکل‌ها نمی‌توانند هیچ‌گونه پیاده‌سازی داشته باشند.
 
تعریف یک formal protocol به این شکل است
خط ۲۰۵:
یک شی می‌تواند کارهای زیادی با یک پیام که برایش ارسال شده است انجام دهد. از جمله این که می‌تواند شی دریافت شده را به یک شی دیگر ارسال کند.
 
==تفاوت‌های اساسی با سی++C==
 
* سی++C شامل کتابخانه‌ها و استاندارد‌هایی برای برنامه‌سازی شی‌گرا، برنامه‌سازی عمومی است. در حالی که Objectiveآبجکتیو-Cسی تنها یک لایه برای برنامه‌سازی شی‌گرا به Cزبان سی اضافه می‌کند.
 
* آبجکتیو-سی امکانات reflection برای برنامه‌نویس به وجود می‌آورد که در زمان اجرا آدرس بعضی توابع معلوم می‌گردد حال آن‌که در Cسی++ امکانات reflection وجود ندارد. یعنی آبجکتیو-سی از سی++C امور بیشتری در زمان اجرا تعیین می‌شود که باعث انعطاف بیشتر زبان می‌شود ولی سرعت اجرای آن را کاهش می‌دهد.
 
==تحلیل زبان==
 
* آبجکتیو-سی برخلاف اکثر زبان‌های شی‌گرا که هم‌زمان با آن ساخته شدند از ماشین مجازی برای اجرای برنامه استفاده نمی‌کند.
این زبان می‌تواند روی یک کامپایلر زبان Cسی پیاده‌سازی شود. به این ترتیب که اول به صورت پیش‌پردازشی کدهای خاص Objectiveآبجکتیو-Cسی تبدیل به کدهای Cسی متناسب شوند.
 
* این زبان برعکس سی++C از دادن چند مفهوم به یک اپراتور (operator overloading) پشتیبانی نمی‌کند.
 
==منابع==