برنامهنویسی مبتنی بر کلاس
برنامهنویسی مبتنی بر کلاس یا بهطور معمول جهتگیری کلاس، سبک برنامهنویسی Object-Oriented) OOP) است که در آن ارث بری از طریق تعریف کلاس از اشیاء، به جای ارث بردن از طریق اشیاء به تنهایی اتفاق میافتد (مقایسه با برنامهنویسی مبتنی بر نمونه اولیه).
پارادایمهای برنامهنویسی |
---|
|
مدل محبوب و پیشرفته OOP یک مدل مبتنی بر کلاس است، به جای مدل مبتنی بر شیء. در این مدل، ورودی اشیاء هستند که حالت (یعنی داده)، رفتار (به عنوان مثال، فرایندها یا روشها) و هویت (وجود منحصر به فرد در میان تمام اشیاء دیگر) را ترکیب میکنند. ساختار و رفتار یک شی توسط یک( کلاس )تعریف شده یا یک طرح مشخص از تمام اشیاء یک نوع خاص تعریف میشود. یک شیء باید به صراحت بر اساس یک کلاس ایجاد شود و یک شیء که در نتیجه ایجاد شدهاست به عنوان یک نمونه از آن کلاس است. یک شی شبیه به ساختار است، با افزودن اشاره گرهای روش، کنترل دسترسی اعضا و یک عضو داده ضمنی که نمونههای کلاس را (به عنوان مثال، اشیاء کلاس) در سلسله مراتب کلاس (ضروری برای ویژگیهای ارثی زمان اجرا) قرار میدهد.
کپسوله سازی
کپسوله سازی مانع از شکستن متغیرها از کلاس میشود. استفاده از آن مفید است زیرا اجازه میدهد که یک کلاس از اشیا را برای جنبههایی که در رابط کاربری در معرض نمایش قرار نمیگیرند بدون تأثیر بر روی کد کاربر تغییر دهند. تعاریف کپسوله سازی بر گروهبندی و بستهبندی اطلاعات مرتبط (انسجام) به جای مسائل امنیتی تمرکز میکنند. زبانهای OOP بهطور معمول محدودیتهای امنیتی رسمی را به حالت شیء داخلی ارائه نمیدهند. استفاده از یک روش دسترسی به موضوع مورد نظر برای طراحی رابط است.
وراثت
دربرنامهنویسی مبتنی بر کلاس، وارثت به وسیله تعریف کلاسهای جدید به عنوان پسوند کلاسهای موجود انجام میشود: کلاس موجود، کلاس والدین است و کلاس جدید کلاس فرزند است. اگر یک کلاس فرزند دارای تنها یک کلاس پدر و مادر باشد، این به عنوان وراثت تکی شناخته میشود، در حالی که اگر یک کلاس فرزند میتواند بیش از یک کلاس پدر و مادر داشته باشد، که به آن وراثت چندگانه گفته میشود. این کلاسها را به صورت یک سلسله مراتب، یا یک درخت (اگر وراثت تکی باشد) یا شبکه (اگر وراثت چندگانه باشد) سازماندهی میکند.
ویژگی تعریف وراثت این است که هر دو رابط و پیادهسازی به ارث برده میشوند؛ اگر تنها واسط به ارث برده شود، این به عنوان واسط یا زیر نوع رابط شناخته میشود. میراث نیز میتواند بدون کلاسها، مانند برنامهریزی مبتنی بر نمونه اولیه، انجام شود.
نقدهای بر مدلهای مبتنی بر کلاس
زبانهای مبتنی بر کلاس، و یا، دقیق تر، زبانهای تایپ شده، جایی که زیر کلاسها تنها روش زیر تعریف است، برای مخلوط کردن پیادهسازیها و رابطها مورد انتقاد قرار گرفتهاست - اصل ضروری در برنامهنویسی شی گرا. منتقدان میگویند ممکن است یک کلاس کیسه ای ایجاد کند که مجموعه ای از اشیا را ذخیره کند و سپس آن را گسترش دهد تا یک کلاس جدید به نام کلاس مجموعه ای که در آن اشیا کپی شده حذف شود، گسترش دهد.[1][2] حال حاضر، یک تابع که یک شی از کلاس را میگیرد، ممکن است انتظار داشته باشد که بااضافه کردن دو شی اندازه یک کلاس را دو برابر کند، با این حال اگر یک شی از کلاس مجموعه عبور میکند، با اضافه کردن دو شیء ممکن است سایز کلاس دوبرابر شود یا تغییری نکند. دلیل این مشکل این است که زیر کلاسها مستلزم زیر گروهها هستند.
بنابراین، بهطور معمول باید زیر کلاس و زیر مجموعه را تشخیص دهید. اکثر زبانهای فعلی شی گرا، زیرمجموعه و زیر کلاس را تشخیص میدهند، اما برخی از روشهای طراحی، آن را ندارند.
زبانهای نمونه
اگر چه شبیهساز معرفی کلاس انتزاع مثال متعارف از یک کلاس مبتنی بر زبان اسمالتاک. دیگر شامل PHPبا C++های جاوابا C#و هدف-Cاست. اگر چه سیمولا انتزاع کلاس را معرفی کرد، نمونهٔ کانونی زبان مبتنی بر کلاس اسمالتاک است. دیگر موارد شامل PHP, C ++، Java, C # و Objective-C هستند.
جستارهای وابسته
- برنامهنویسی بر پایه پیشنمونه (کنتراست)
- پارادایمهای برنامهنویسی
- کلاس (برنامهنویسی کامپیوتر)
منابع
- Kiselyov, Oleg. "Subtyping, Subclassing, and Trouble with OOP". Retrieved 7 October 2012.
- Ducasse, Stéphane. "A set cannot be a subtype of a bag". Retrieved 7 October 2012.