| پارادایم‌های برنامه‌نویسی |
| --- |
| * زبان عملی
* عامل گرا
* آرایه‌گرا
* مبتنی بر اتوماتا
* رایانش همزمان
	+ نسبیت گرایی
* داده‌محور
* اعلانی (تضاد: دستوری)
	+ تابعی
		- منطق تابعی
		- تابعی خالص
	+ منطقی
		- منطقی قیاسی
		- مجموعه جواب
		- منطق همزمان
		- منطق تابعی
		- منطق استقرایی
	+ محدودیتی
		- منطق محدودیتی
			* منطق محدودیت همزمان
	+ جریان داده
		- مبتنی بر جریان
		- واکنشی
	+ هستی‌شناسی
* تشخیص پذیر
* پویا/اجرانامه‌نویسی
* رویدادمحور
* سطح تابع (تضاد: سطح مقدار)
	+ سبک بدون آرگومان
		- الحاقی
* همگانی
* دستوری (تضاد: اعلانی)
	+ رویه‌ای
	+ شیءگرا (OOP)
		- کد چندریخت
* تصمیم گرا
* زبان گرا
	+ خاص دامنه
* ادیبانه
* برنامه‌نویسی زبان طبیعی
* فرا برنامه‌نویسی
	+ خودکار
		- استقرایی
	+ پژواکی
		- صفت گرا
	+ مبتنی بر کلان‌دستور (ماکرو)
	+ خودآرا
* غیر ساخت‌یافته (تضاد: ساخت‌یافته)
	+ آرایه‌ای (برداری)
* غیرقطعی
* رایانش موازی
	+ فرایند گرا
* احتمالی
* کوانتمی
* نظریه مجموعه‌ها
* مبتنی بر پشته
* ساخت‌یافته (تضاد: غیر ساخت‌یافته)
	+ بلوک ساختاری
		- ساخت‌یافته همزمان
	+ شیءگرا (OOP)
		- مبتنی بر بازیگر
		- مبتنی بر کلاس
		- همزمان
		- بر پایه پیش‌نمونه
		- با تفکیک دغدغه‌ها:
			* جنبه‌گرا
			* نقش گرا
			* موضوع گرا
	+ بازگشتی
* نمادین
* سطح مقدار (تضاد: سطح تابع)
 |
| * ن
* ب
* و
 |

**برنامه‌نویسی مبتنی بر کلاس** یا به‌طور معمول **جهت‌گیری کلاس**، سبک برنامه‌نویسی Object-Oriented) OOP) است که در آن ارث بری از طریق تعریف کلاس از اشیاء، به جای ارث بردن از طریق اشیاء به تنهایی اتفاق می‌افتد (مقایسه با برنامه‌نویسی مبتنی بر نمونه اولیه).

مدل محبوب و پیشرفته OOP یک مدل مبتنی بر کلاس است، به جای مدل مبتنی بر شیء. در این مدل، ورودی اشیاء هستند که حالت (یعنی داده)، رفتار (به عنوان مثال، فرایندها یا روش‌ها) و هویت (وجود منحصر به فرد در میان تمام اشیاء دیگر) را ترکیب می‌کنند. ساختار و رفتار یک شی توسط یک( کلاس )تعریف شده یا یک طرح مشخص از تمام اشیاء یک نوع خاص تعریف می‌شود. یک شیء باید به صراحت بر اساس یک کلاس ایجاد شود و یک شیء که در نتیجه ایجاد شده‌است به عنوان یک نمونه از آن کلاس است. یک شی شبیه به ساختار است، با افزودن اشاره گرهای روش، کنترل دسترسی اعضا و یک عضو داده ضمنی که نمونه‌های کلاس را (به عنوان مثال، اشیاء کلاس) در سلسله مراتب کلاس (ضروری برای ویژگی‌های ارثی زمان اجرا) قرار می‌دهد.

کپسوله سازی
-----------

کپسوله سازی مانع از شکستن متغیرها از کلاس می‌شود. استفاده از آن مفید است زیرا اجازه می‌دهد که یک کلاس از اشیا را برای جنبه‌هایی که در رابط کاربری در معرض نمایش قرار نمی‌گیرند بدون تأثیر بر روی کد کاربر تغییر دهند. تعاریف کپسوله سازی بر گروه‌بندی و بسته‌بندی اطلاعات مرتبط (انسجام) به جای مسائل امنیتی تمرکز می‌کنند. زبان‌های OOP به‌طور معمول محدودیت‌های امنیتی رسمی را به حالت شیء داخلی ارائه نمی‌دهند. استفاده از یک روش دسترسی به موضوع مورد نظر برای طراحی رابط است.

وراثت
-----

دربرنامه‌نویسی مبتنی بر کلاس، وارثت به وسیله تعریف کلاس‌های جدید به عنوان پسوند کلاس‌های موجود انجام می‌شود: کلاس موجود، کلاس والدین است و کلاس جدید کلاس فرزند است. اگر یک کلاس فرزند دارای تنها یک کلاس پدر و مادر باشد، این به عنوان وراثت تکی شناخته می‌شود، در حالی که اگر یک کلاس فرزند می‌تواند بیش از یک کلاس پدر و مادر داشته باشد، که به آن وراثت چندگانه گفته می‌شود. این کلاسها را به صورت یک سلسله مراتب، یا یک درخت (اگر وراثت تکی باشد) یا شبکه (اگر وراثت چندگانه باشد) سازماندهی می‌کند.

ویژگی تعریف وراثت این است که هر دو رابط و پیاده‌سازی به ارث برده می‌شوند؛ اگر تنها واسط به ارث برده شود، این به عنوان واسط یا زیر نوع رابط شناخته می‌شود. میراث نیز می‌تواند بدون کلاس‌ها، مانند برنامه‌ریزی مبتنی بر نمونه اولیه، انجام شود.

نقدهای بر مدل‌های مبتنی بر کلاس
-------------------------------

زبانهای مبتنی بر کلاس، و یا، دقیق تر، زبانهای تایپ شده، جایی که زیر کلاس‌ها تنها روش زیر تعریف است، برای مخلوط کردن پیاده‌سازی‌ها و رابط‌ها مورد انتقاد قرار گرفته‌است - اصل ضروری در برنامه‌نویسی شی گرا. منتقدان می‌گویند ممکن است یک کلاس کیسه ای ایجاد کند که مجموعه ای از اشیا را ذخیره کند و سپس آن را گسترش دهد تا یک کلاس جدید به نام کلاس مجموعه ای که در آن اشیا کپی شده حذف شود، گسترش دهد. حال حاضر، یک تابع که یک شی از کلاس را می‌گیرد، ممکن است انتظار داشته باشد که بااضافه کردن دو شی اندازه یک کلاس را دو برابر کند، با این حال اگر یک شی از کلاس مجموعه عبور می‌کند، با اضافه کردن دو شیء ممکن است سایز کلاس دوبرابر شود یا تغییری نکند.
دلیل این مشکل این است که زیر کلاس‌ها مستلزم زیر گروه‌ها هستند.

بنابراین، به‌طور معمول باید زیر کلاس و زیر مجموعه را تشخیص دهید. اکثر زبان‌های فعلی شی گرا، زیرمجموعه و زیر کلاس را تشخیص می‌دهند، اما برخی از روش‌های طراحی، آن را ندارند.

زبان‌های نمونه
--------------

اگر چه شبیه‌ساز معرفی کلاس انتزاع مثال متعارف از یک کلاس مبتنی بر زبان اسمالتاک. دیگر شامل PHPبا C++های جاوابا C#و هدف-Cاست. اگر چه سیمولا انتزاع کلاس را معرفی کرد، نمونهٔ کانونی زبان مبتنی بر کلاس اسمالتاک است. دیگر موارد شامل PHP, C ++، Java, C # و Objective-C هستند.

جستارهای وابسته
---------------

* برنامه‌نویسی بر پایه پیش‌نمونه (کنتراست)
* پارادایم‌های برنامه‌نویسی
* کلاس (برنامه‌نویسی کامپیوتر)

منابع
-----

1. ↑  Kiselyov, Oleg. "Subtyping, Subclassing, and Trouble with OOP". Retrieved 7 October 2012.
2. ↑  Ducasse, Stéphane. "A set cannot be a subtype of a bag". Retrieved 7 October 2012.

| * ن
* ب
* و
گونه‌های زبان‌های برنامه‌نویسی |
| --- |
| 
* Actor-based
* Array
* جنبه‌گرا
* مبتنی بر کلاس
* Concatenative
* محاسبات همزمان
* Data-structured
* Dataflow
* اعلانی
* خاص دامنه
* پویا
* محرمانه
* رویدادمحور
* Extensible
* تابعی
* دستوری
* منطقی
* ماکرو
* فرا برنامه‌نویسی
* چندالگویی
* مبتنی بر شئ
* شیءگرا
* خط لوله
* رویه‌ای
* بر پایه پیش‌نمونه
* پژواکی
* قانون محور
* اسکریپت‌نویسی
* Synchronous
* Templating

 |
| 
* اسمبلی
* ترجمه‌شده
* تفسیری
* ماشین

 |
| 
* سطح پایین
* سطح بالا
* Very high-level

 |
| 
* First generation
* Second generation
* نسل سوم
* نسل چهارم
* زبان برنامه‌نویسی نسل پنجم

 |
| 
* Non-English-based
* تصویری

 |