اسکیزوفرنی شیءگرا چیست؟
اسکیزوفرنی شیءگرا یا اسکیزوفرنی خود، مشکلی است که از تفویض و تکنیکهای مرتبط در برنامهنویسی شیءگرا ناشی میشود. در این حالت، اشارهگر self یا this میتواند به بیش از یک شیء اشاره کند. این پدیده به دلیل شباهت مفهومی با اختلال هویت تجزیهای در روانشناسی، اسکیزوفرنی شیءگرا نام گرفته است.
مفهوم شیء در برنامهنویسی
شیء مفهومی در رایانش است که دادهها و رفتار را ترکیب میکند و هویت مستقلی دارد. در برنامهنویسی مبتنی بر کلاس، اشیاء بر اساس سیستمهای کلاس ساخته میشوند، به طوری که هر شیء نمونهای از یک کلاس است. کلاسها میتوانند از طریق توارث به هم مرتبط باشند: یک کلاس پایه رفتار اساسی یا پیشفرض شیء را فراهم میکند، در حالی که یک کلاس مشتق میتواند رفتارهای کلاس پایه را تغییر دهد.
تفویض در مقابل توارث
به جای استفاده از کلاسها و توارث، میتوان از نمونهها و تفویض استفاده کرد که در برنامهنویسی مبتنی بر نمونه کاربرد دارد. تفویض به یک شیء اجازه میدهد تا رفتار شیء دیگری را تغییر دهد. به عنوان مثال، شیء a میتواند برخی از روشهای خود را به شیء b تفویض کند. در این حالت، فراخوانی روش foo روی شیء a باعث اجرای روش bar روی شیء b میشود، اما در زمینه شیء a.
مشکل اسکیزوفرنی شیءگرا
وقتی از تفویض استفاده میشود، این سوال پیش میآید که مقدار self هنگام ارزیابی یک روش روی شیء a که به شیء b تفویض شده است، چیست؟ هویت شیء دوگانه میشود: میتواند به a یا b اشاره کند. این ابهام میتواند باعث پیچیدگی و اشتباهات در کد شود.
تاریخچه و بحث
اصطلاح اسکیزوفرنی شیءگرا اولین بار توسط ویلیام هریسون از IBM در حدود مه 1997 مطرح شد. او در مجموعهای از صفحات وب، مشکلات ناشی از برخی الگویهای طراحی رایج را بررسی کرد. راهکارهایی مانند برنامهنویسی مبتنی بر موضوع یا استفاده از نقشهای زمینهای پیشنهاد شدهاند تا این مشکل را کاهش دهند.