برنامه‌نویسی مفهوم

**برنامه‌نویسی مفهوم** یک پارادایم برنامه نویسی است، که بر چگونگی ترجمهٔ مفاهیمی که در ذهن برنامه‌نویس شکل می‌گیرد به آنچه در فضای کد قابل دستیابی است، تمرکز می‌کند. این رویکرد توسط کریستوف دی نچین در سال ۲۰۰۱ با زبان برنامه‌نویسی XL معرفی شد.

## شبه سنجه‌ها
برنامه‌نویسی مفهوم شبه سنجه‌ها را برای ارزیابی کیفیت کد به کار می‌گیرد. بدین دلیل به این‌ها شبه سنجه گفته می‌شود که فضای مفهوم و فضای کد را به هم مربوط می‌سازند. با درک روشنی از اینکه فضای مفهوم را نمی‌توان به اندازهٔ کافی محدود به قالب بندی‌هایی کرد تا بتوان سنجه‌های واقعی را تعریف نمود. شبه سنجه‌های برنامه‌نویسی مفهومی در برگیرندهٔ موارد زیر می‌شوند:
* اعوجاج نحوی تفاوت میان مفهوم و نحوی که برای نمایش آن به کار گرفته شده‌است را اندازه‌گیری می‌کند. به عنوان مثال: نقطه ویرگول در انتهای دستورها در زبان C می‌تواند به عنوان اعوجاج نحوی در نظر گرفته شود چون در فضای مفهوم معادلی ندارد.
* اعوجاج معنایی فاصلهٔ معنا یا رفتار مورد انتظار از مفهوم با معنا با رفتار واقعی درون کد را اندازه‌گیری می‌کند. به عنوان مثال: این حقیقت که انواع دادهٔ حسابی سرریز می‌کنند (در حالیکه اعداد حسابی ریاضی چنین نیستند.) صورتی از اعوجاج معنایی است.
* پهنای باند این را اندازه‌گیری می‌کند که به چه میزان از فضای مفهوم را یک ساختار کد از پیش تعیین شده می‌تواند معرفی نماید. به عنوان مثال: عملگر جمع اضافه بار شده در زبان C پهنای باند بیشتری از دستور جمع در زبان اسمبلی (Add) دارد چون عملگر زبان C می‌تواند عمل جمع را با اعداد ممیز شناور (و نه فقط اعداد حسابی انجام دهد.)
* نسبت سیگنال به اعوجاج این را اندازه‌گیری می‍کند که چه کسری از فضای کد در برابر اطلاعات پیاده‌سازی شده برای نمایش مفاهیم واقعی به کار گرفته شده‌است.

## قانون برابری، شکست برابری
قانون برابری هنگامی تأیید می‌شود که رفتار کد با مفهوم اصلی همخوانی داشته باشد. این برابری ممکن است در حالت‌های بسیاری به شکست بینجامد. سرریز کردن اعداد حسابی برابری میان مفهوم ریاضی اعداد حسابی و تقریب کامپیوتری شده از این مفهوم را برهم می‌زند.
به راه‌های بسیاری در شکست برابری اسامی ویژه‌ای داده شده‌است زیرا این موارد خیلی رایج هستند:
* خطای دامنه وضعیتی است که در آن کد خارج از دامنهٔ برابری اجرا می‌شود، که این دامنه ایست که در آن مفهوم و پیاده‌سازی منطبق می‌شوند سرریز عدد حسابی مثالی از خطای دامنه است.
* قالب مفهوم (همچنین قالب بندی دوباره مفهوم یا مفهوم را دوباره قالب بندی کردن) بازنویسی یک مفهوم به صورت مفهومی دیگر است بدین سبب که مفهوم اصلی را نمی‌توان به وسیله ابزارها پیاده‌سازی نمود در زبان C به کار بردن اشاره گرها برای آرگومان‌های خروجی به این دلیل که زبان C از آرگومان‌های خروجی به صورت صریح پشتیبانی نمی‌کند، مثالی از قالب مفهوم است.
* وارونگی اولویت صورتی از اعوجاج نحوی یا معنایی است که به وسیله برخی قوانین عمومی دیکته شده از سوی زبان به وجود می‌آید. از این رو وارونگی اولویت نامیده می‌شود که زبان تقدم را بر مفهوم حاکم می‌سازد. در Smalltalk هر چیزی یک شی است و این قانون به این دستاورد ناخواسته منجر می‌شود که عبارتی شبیه به ۲+۳*۵ از توالی مرسوم عملیات پیروی نمی‌کند (در Smalltalk ابتدا ۲ با ۳ جمع شده، حاصل آن در ۵ ضرب می‌شود که در نهایت عدد ۲۵ به جای ۱۷ بدست می‌آید.)

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

## زبان‌ها
زبان برنامه‌نویسی XL تنها زبان شناخته شده ایست که تا به امروز به‌طور واضح برای برنامه‌نویسی مفهوم ایجاد شده‌است. اما برنامه‌نویسی مفهوم تقریباً در هر زبانی با درجات متفاوتی از موفقیت قابل اجراست. زبان‌های برنامه نویسی Lisp و Forth و مشتقات آن‌ها نمونه‌هایی از زبان‌های از قبل موجود هستند که به خوبی قابلیت استفاده به عنوان برنامه‌نویسی مفهوم را دارند.

## کارهای مشابه
پروژه‌هایی هستند که از ایده‌های مشابه بهره‌برداری کرده‌اند تا با سطح بالایی از انتزاع کد تولید کنند. در بین آن‌ها این موارد را می‌توان نام برد:
* برنامه‌نویسی هدفی
* برنامه‌نویسی زبان گرا
* برنامه نویسی ادیبانه
* معماری مدل- محور

## جستارهای وابسته
* پارادایم‌های برنامه نویسی
* زبان مختص به دامنه

## پیوند به بیرون
* زبان برنامه‌نویسی XL در وبگاه SourceForge
* ارائه‌ای درباره برنامه‌نویسی مفهوم به زبان انگلیسی
* یک گفتگو در بارهٔ برنامه‌نویسی مفهوم روی ثبات

## منابع

رده:پارادایم‌های برنامه‌نویسی
رده:زبان‌های برنامه‌نویسی
رده:زبان‌های برنامه‌نویسی با نحو گسترش‌پذیر
رده:زبان‌های برنامه‌نویسی سطح بالا
رده:نرم‌افزارهای ۲۰۰۰ (میلادی)