در برنامهنویسی جنبهای و عملکردی، مشاوره کلاسی مشاوره برنامه نویسی از توابع را توصیف میکند که وقتی توابع اجرا میشوند، سایر توابع را تغییر میدهند. این یک تابع، روش یا رویه خاص است که قرار است در یک نقطه اتصال معین از یک برنامه اعمال شود.
استفاده کنید
استفاده عملی از توابع مشاوره عموماً برای اصلاح یا گسترش رفتار عملکردهایی است که نمیتوانند یا نباید به آسانی تغییر یابند. به عنوان مثال، افزونه Emacspeak Emacs به طور گسترده از توصیه ها استفاده می کند: باید هزاران ماژول و عملکرد Emacs موجود را به گونه ای تغییر دهد که بتواند خروجی صوتی ر مشاوره برنامه نویسی ا برای نابینایان مطابق با ارائه تصویری تولید کند، اما کپی کردن همه آنها غیر ممکن است. و آنها را برای تولید خروجی صوتی علاوه بر خروجی های معمولی خود دوباره تعریف کنید. بنابراین، برنامه نویسان Emacspeak توابع مشاوره را تعریف می کنند که قبل و بعد اجرا می شوند.
برای مثال ساده Emacs: فرض کنید پس از اینکه کاربر یک کلمه غلط املایی را با استفاده از ماژول ispell Emacs تصحیح کرد، میخواست کل بافر را مجدداً بررسی کند. ispell-word چنین قابلیتی را ارائه نمی دهد، حتی اگر کلمه تصحیح شده اغلب در بافر ظاهر شود. کاربر میتواند تعریف ispell-word را ردیابی کند، آن را در فایلهای Emacs شخصی خود کپی کند و عملکرد مورد نظر را در آنجا اضافه کند، اما این کار خستهکننده و بدتر مشاوره برنامه نویسی از آن، شکننده است (نسخه کاربر اکنون با اجرای اصلی Emacs هماهنگ نیست. ، اگر حتی بدون بازسازی بیشتر کار کند). آنچه کاربر می خواهد بسیار ساده است - فقط برای اجرای دستور دیگری هر زمان که ispell-word اجرا شود. با استفاده از مشاوره، می توان این کار را به سادگی انجام داد:
(توصیه-#'ispell-word را اضافه کنید
:بعد از #'flyspell-buffer)
در حالی که این مثال آشکارا بی اهمیت است، قدرت مشاوره، به ویژه در مقایسه با امکانات مشابه مانند تزئینات پایتون و حاشیه نویسی های جاوا، در این واقعیت نهفته است که توابع / روش مشاوره برنامه نویسی های توصیه شده نیازی به طراحی برای پذیرش توصیه برای شروع ندارند. در دسترس بودن ارزیابی در طول عمر یک قطعه کد (مراجعه کنید به مرحله بندی کد) در Lisp اجازه می دهد تا مشاوره به صورت خودکار در هر کد دیگری به روش های مختلف گنجانده شود. به هر قطعه کدی می توان توصیه کرد که هر محاسبات دیگری را قبل، بعد، اطراف یا به جای تعریف اصلی خود انجام دهد.
نگرانی
مشاوره میتواند پتانسیل ایجاد سردرگمی را داشته باشد، زیرا توصیهای که برای یک تابع اعمال میشود برای کاربری که تعریف تابع را دنبال میکند تا در مورد آن بیاموزد، آشکار نیست. در این موارد، مشاوره تقریباً مانند COMEFROM عمل میکند، یک وسیله شوخی که به INTERCAL اضافه میشود تا مسئول اسپاگتسازی استفاده از GOTO را جعل کند. اما در عمل، چنین مسائلی به ندرت خود را نشان می دهند. توسعهدهندگان بالادستی و مشاوره برنامه نویسی نگهدارندههای بستهها و ماژولهای Lisp هرگز از مشاوره استفاده نمیکنند، زیرا زمانی که تعاریف اصلی آنها میتواند آزادانه برای نشان دادن رفتار دلخواه بازطراحی شود، هیچ مزیتی با توصیه توابع به دست نمیآید. توصیه تنها از این جهت مفید است که به کاربران پایین دستی امکان می دهد متعاقباً رفتار پیش فرض را به گونه ای خودسرانه تغییر دهند که نیازی به انتشار چنین تغییراتی در تعریف منبع اصلی پیاده سازی نباشد. علاوه بر این، سیستمهای Lisp که تسهیلات مشاوره ارائه میکنند، عموماً دروننگری را نیز ارائه میکنند که مواردی مانند رشتههای اسناد، امضاهای نوع، و در صورت لزوم، توصیههای کاربردی واژگانی را برمیگرداند.
پیاده سازی ها
در اواخر دهه 1970 و اوایل دهه 1980، نوعی مشاوره برنامه نویسی مشاوره بخشی از C با کلاس ها بود، یعنی توابعی به نام call و return تعریف شده در یک کلاس، که قبل از (به ترتیب، بعد) توابع عضو کلاس فراخوانی می شدند. با این حال، اینها از C++ حذف شدند.[1]
مشاوره ها بخشی از سیستم شیء مشترک Lisp (CLOS) هستند، برنامه نویسی نوجوانان مانند متدهای :before، :after و :around، که با روش اصلی تحت "ترکیب روش استاندارد" ترکیب می شوند.[2]
پیاده سازی های Common Lisp قابلیت مشاوره (علاوه بر ترکیب روش استاندارد برای CLOS) را به عنوان افزونه ارائه می دهند. LispWorks[3] از توابع مشاوره، ماکروها و روشهای CLOS پشتیبانی میکند.
EmacsLisp کدهای مربوط به مشاوره را در نسخه 19.28، 1994 اضافه کرد.
تاریخ
موارد زیر از بحث در لیست پستی aosd-discuss گرفته شده است. پاسکال کوستانزا به شرح زیر کمک کرد:
اصطلاح "مشاوره" به اصطلاح مشاوره که توسط وارن مشاوره برنامه نویسی تیتلمن در پایان نامه دکترای خود در سال 1966 معرفی شد، برمی گردد. در اینجا نقل قولی از فصل 3 پایان نامه او آمده است:
مشاوره نوآوری اساسی در مدل و در سیستم PILOT است. مشاوره شامل درج رویه های جدید در هر یک یا همه نقاط ورودی یا خروجی به یک رویه خاص (یا دسته رویه ها) است. رویه های درج شده "روش های مشاوره" یا به سادگی "مشاوره" نامیده می شوند.
از آنجایی که هر توصیه ای خود یک رویه است، Programming advice ورودی ها و خروجی های خاص خود را دارد. به ویژه، این بدان معنی است که اجرای توصیه می تواند باعث شود رویه ای که آن را به b تغییر می دهد
- ۰۲/۱۱/۱۷