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

محتوای حذف‌شده محتوای افزوده‌شده
Rezabot (بحث | مشارکت‌ها)
جز برداشتن ویکی‌سازی Dynamic typing > تغییرمسیر نامشابه است (۹.۱ core) 0.48
LetsDoItBot (بحث | مشارکت‌ها)
تمیزکاری، + ویرایش با ماژول ابرابزار با استفاده از AWB
خط ۲:
|name=آبجکتیو-سی
|file ext=.h, .m, .mm, .C
|paradigm=[[reflection (computer science)|Reflective]]،, [[class-based programming|class-based]] [[برنامه‌نویسی شیءگرا]]
|scope=
|released={{Start date and age|1984}}
خط ۹:
|latest preview version=
|latest preview date=<!-- {{start date and age|YYYY|MM|DD}} -->
|typing=[[Static typing|static]]،, dynamic ،dynamic، [[وابستگی زیاد و کم به نوع]]
|implementations=[[کلنگ (کامپایلر)]]، [[جی‌سی‌سی]]
|dialects=
|influenced by=[[سی (زبان برنامه‌نویسی)]]، [[اسمال‌تاک]]
|influenced=[[گرووی (زبان برنامه‌نویسی)]]، [[جاوا (زبان برنامه‌نویسی)]]، [[Nu (programming language)|Nu]]،, [[Objective-J]]، [[TOM (object-oriented programming language)|TOM]]، [[سوئیفت (زبان برنامه‌نویسی)]]
|programming language=
|platform=
خط ۲۱:
|wikibooks=Objective-C Programming
}}
آبجکتیو-سی {{انگلیسی|Objective-C}} یک [[برنامه‌نویسی شیءگرا|زبان شی‌گرا]] است که با اضافه کردن مفاهیم ارسال پیام از [[زبان اسمال‌تاک]] به [[زبان سی]] ایجاد شده. در حال حاضر استفادهٔ اصلی آن در محیط‌های Mac OS X و iPhone OS است.
 
برنامه‌هایی از این زبان که از کتابخانه‌های خاص این محیط‌ها استفاده نکرده باشند در همهٔ محیط‌هایی که کامپایلر جی‌سی‌سی (GCC) استفاده می‌شود، قابل استفاده‌اند.
 
== تاریخچه ==
 
در سال‌های اولیهٔ ۱۹۸۰ روش غالب در [[مهندسی نرم‌افزار]] روش برنامه‌سازی ساخت‌یافته بود. این روش بر مبنای اصل تقسیم مسئله به اجزای کوچک‌تر و حل تک‌تک آن‌ها بنا شده بود. با افزایش اندازهٔ مسئله‌ها این روش به تدریج کارایی خود را از دست داد.
 
سطر ۳۳ ⟵ ۳۲:
Brad Cox و Tom Love زبان آبجکتیو-سی را در سال‌های اولیهٔ ۱۹۸۰ در کارخانه‌شان تولید کردند. Cox با الهام از زبان اسمال‌تالک با تغییر در کامپایلر زبان سی توانست امکانات شی‌گرایی را به آن اضافه کند. او نام این زبان را OOPC مخفف Object Oriented Programming in C گذاشت. بعدها با کمک Love محصول جدیدی به نام Productivity Products International یا PPI را ساخت که یک کامپایلر آبجکتیو-سی با کتابخانهٔ کلاس‌های قدرت‌مند بود.
 
در سال ۱۹۸۸ شرکت NeXT مالکیت آبجکتیو-سی را از StepStone خرید و کامپایلر و کتابخانه‌های خاص خودش را منتشر کرد.
پروژهٔ GNU نیز ورژن خودش به نام GNUStep را از کامپایلر این زبان منتشر کرد. بعد از خریده شدن NeXT توسط Apple این شرکت ابزارهایی برای کار با این زبان را منتشر کرد.
 
== دستور زبان ==
 
زبان آبجکتیو-سی یک لایهٔ بسیار نازک روی زبان سی است. هر برنامه به زبان سی را می‌توان با کامپایلر آبجکتیو-سی کامپایل کرد. اکثر دستورات از زبان سی به ارث رسیده‌اند و تعدادی دستور برای ارسال پیغام به آن‌ها اضافه شده‌است.
 
=== پیام‌ها ===
 
زبان آبجکتیو-سی روش‌هایی برای انتقال پیام به زبان سی اضافه کرد. در این زبان از مدل اسمال‌تالک برای فرستادن پیام استفاده می‌شود. در این روش یک پیام برای یک شی فرستاده می‌شود و در صورتی که شی گیرنده متدی برای اجرای آن داشته باشد، آن را اجرا می‌کند. این روش برعکس روش سی++ است که گیرنده باید حتماً یک متد را پیاده‌سازی کرده باشد تا شی‌ای بتواند آن را صدا بزند.
 
سطر ۶۰ ⟵ ۵۷:
</source>
 
پیام‌های آبجکتیو-سی نیازی ندارند که اجرا شوند. اگر به شیئی پیامی بدهیم و آن شی متد مربوطه را پیاده‌سازی کرده باشد. اجرا می‌شود و در غیر این صورت اجرا نمی‌شود. حتی می‌توان به شی پوچ نیز پیام فرستاد.
 
=== واسط‌ها و پیاده‌سازی‌ها ===
 
آبجکتیو-سی نیاز دارد که واسط و پیاده‌سازی یک کلاس در بلوک‌های کد جداگانه قرار بگیرند. به طور قراردادی، واسط در یک فایل سرآیند با پسوند h. و پیاده‌سازی در یک فایل کد، معمولاً با پسوند m. قرار می‌گیرد.
 
=== واسط ===
 
واسط کلاس معمولاً در فایل سرآیند قرار می‌گیرد و معمولاً نام آن فایل سرآیند همان نام کلاس گذاشته می‌شود.
 
سطر ۱۰۵ ⟵ ۱۰۰:
</source>
 
یکی از موارد قابل توجه instanceMethod2WithParameter است. در آبجکتیو-سی امکان استفاده از پارامتردهی بانام وجود دارد که در حال زیاد بودن تعداد پارامترها کد را تمیز نگاه می‌دارد.می‌دارد؛ ولی در سی++ چنین امکانی وجود ندارد.
 
مقادیر بازگشتی می‌توانند انواع سی، یک اشاره‌گر به یک شی آبجکتیو-سی و یا یک اشاره‌گر به انواع خاص مانند *NSArray یا *NSImage یا *NSString باشد. مقدار بازگشتی پیش‌فرض نوع عمومی آبجکتیو-سی به نام id است.
 
=== پیاده‌سازی ===
 
واسط تنها روش دسترسی به کلاس را بیان می‌کند و نه خود متدها را. کد اصلی در قسمت پیاده‌سازی نوشته می‌شود. این فایل‌های پیاده‌سازی معمولاً با پسوند m. خاتمه می‌یابند.
 
سطر ۱۳۶ ⟵ ۱۳۰:
</source>
 
[[دستور زبان]] اجازهٔ دادن مقدار با استفاده از اسم پارامترها را نیز می‌دهد.
 
مثلاً برای فراخوانی یک متد که این‌گونه تعریف شده است:
سطر ۱۵۷ ⟵ ۱۵۱:
 
=== نمونه گرفتن از یک کلاس ===
 
بعد از نوشتن کلاس آبجکتیو-سی می‌توان از آن نمونه گرفت. برای این کار باید ابتدا برای شی حافظه بگیریم و سپس به آن مقدار اولیه بدهیم. این دو کار با دستوری مانند
 
سطر ۱۸۷ ⟵ ۱۸۰:
 
=== پروتکل‌ها ===
 
پروتکل‌ها در زبان آبجکتیو-سی برای معرفی مفهوم [[وراثت چندگانه]] به وجود آمدند. در این زبان وراثت چندگانهٔ توصیفات وجود دارد ولی وراثت چندگانهٔ پیاده‌سازی‌ها وجود ندارد. این همان مفهومی است که در ++C با وراثت از یک کلاس abstract و در جاوا به عنوان مفهوم interface وجود دارد.
 
سطر ۱۹۳ ⟵ ۱۸۵:
Informal protocol لیست متدهایی است که یک کلاس می‌تواند پیاده‌سازی کند. توی مستندات می‌آید زیرا هیچ معادلی در زبان ندارد. معمولاً شامل متدهای اختیاری نیز هست.
 
Formal protocol مشابه interface در جاوا است. یک لیست متدها است که یک کلاس می‌تواند بیان کند که آن‌ها را پیاده‌سازی می‌کند. این پروتکل‌ها نمی‌توانند هیچ‌گونه پیاده‌سازی داشته باشند.
 
تعریف یک formal protocol به این شکل است
سطر ۲۱۸ ⟵ ۲۱۰:
 
=== تعیین نوع پویا ===
آبجکتیو-سی از تعیین نوع پویا پشتیبانی می‌کند. یک شی می‌تواند پیامی دریافت کند که در واسط آن مشخص نشده است که می‌تواند آن را دریافت کند. به این ترتیب انعطاف‌پذیری زبان افزایش می‌یابد.
 
آبجکتیو-سی از تعیین نوع پویا پشتیبانی می‌کند. یک شی می‌تواند پیامی دریافت کند که در واسط آن مشخص نشده است که می‌تواند آن را دریافت کند. به این ترتیب انعطاف‌پذیری زبان افزایش می‌یابد.
 
در این‌جا یک شی می‌تواند یک پیام را دریافت کرده و با توجه به نوع آن، به یک شی دیگر ارسالش کند یا آن را به مدیر خطا بسپارد. همچنین می‌توان با اضافه کردن تعیین نوع استاتیک امکان چک کردن انواع ارسالی به یک شی در زمان کامپایل را به یک شی اضافه کرد.
 
=== ارسال کردن پیام ===
 
یک شی می‌تواند کارهای زیادی با یک پیام که برایش ارسال شده است انجام دهد. از جمله این که می‌تواند شی دریافت شده را به یک شی دیگر ارسال کند.
 
سطر ۲۳۲ ⟵ ۲۲۲:
 
== تحلیل زبان ==
 
آبجکتیو-سی برخلاف اکثر زبان‌های شی‌گرا که هم‌زمان با آن ساخته شدند از [[ماشین مجازی]] برای اجرای برنامه استفاده نمی‌کند.
 
سطر ۲۴۰ ⟵ ۲۲۹:
 
== مثال‌هایی از آبجکتیو-سی ==
 
=== hello world-1 ===
 
مثال اول، صورت ساختاری
 
سطر ۲۵۶ ⟵ ۲۴۳:
 
=== hello world-2 ===
 
مثال دوم، صورت شی‌گرا
 
سطر ۳۱۹ ⟵ ۳۰۵:
Cox, Brad J. (1991). Object Oriented Programming: An Evolutionary Approach. Addison Wesley. ISBN 0-201-54834-8
 
http://www.ntecs.de/old-hp/uu9r/lang/html/objective_c.en.html بازیابی در 2009۲۰۰۹-06۰۶-7۷.
 
http://www.otierney.net/objective-c.html بازیابی در 2009۲۰۰۹-06۰۶-7۷.
 
http://objc.toodarkpark.net بازیابی در 2009۲۰۰۹-06۰۶-7۷.
 
{{زبان‌های برنامه‌نویسی}}