سلطه شیءگرایی و ریشه‌های نروژی آن

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

هسته اولیه ایده‌های شیءگرا در «مرکز محاسبات نروژ» شکل گرفت. کریستن نیگارد، مدیر پژوهش‌های این مرکز، با معضلی جدی در زمینه تحقیق در عملیات دست‌و‌پنج نرم می‌کرد: چگونه می‌توان سیستم‌های عظیم و پویا را توصیف و مدل‌سازی کرد؟ ابزارهای موجود برای این مقصدها بسیار محدود بودند. نیگارد که تجربه شبیه‌سازی‌های پیچیده را داشت، برای یافتن راه‌حلی بنیادین به سراغ اوله‌یوهان دال، برنامه‌نویس نخبه‌ای که با او در مؤسسه تحقیقات دفاعی نروژ همکاری کرده بود، رفت. شروع همکاری آن‌ها در سال‌های 1961 و 1962 آغاز شد و محصول این تفکر مشترک، زبانی بود که قرار بود آینده کامپیوتر را برای همیشه تغییر دهد.

از شبیه‌سازی تا معماری مدرن

آن‌ها زبان ALGOL 60 را به‌عنوان پایه کار انتخاب کردند. اولین دستاورد آن‌ها، سیمولا I بود که بین سال‌های 1961 تا 1965 تکامل یافت. در این مرحله، پژوهشگران دریافتند برای مدل‌سازی دقیق پدیده‌های جهان واقعی، باید سیستم‌های پیچیده را به واحدهای تعامل‌کننده‌ای تقسیم کرد. سیمولا I برای همین هدف طراحی شد و مفاهیمی مثل فعالیت‌ها و رویدادهای گسسته را معرفی کرد. اما همان‌طور که دال و نیگارد کاربرد عملی این زبان را در پروژه‌های واقعی می‌سنجیدند، دریچه‌ای تازه باز شد. آن‌ها فهمیدند این ساختار فراتر از شبیه‌سازی، پتانسیل مدیریت پروژه‌های نرم‌افزاری بزرگ را هم دارد. این بینش، تولد سیمولا 67 را رقم زد.

سیمولا 67 به‌عنوان نخستین زبان برنامه‌نویسی دارای کلاس و شیء، میراثی جاودانه به جای گذاشت. ویژگی‌هایی مثل جستجوی پویا، وراثت و زیرنوع‌سازی از نوآوری‌های این زبان بودند. نکته فنی ظریفی که ساختار شیء در سیمولا را شکل می‌داد، ایده تولید اشاره‌گر به فضای حافظه فعال یک رویه بود. این نوآوری چنان بنیادی بود که دال و نیگارد در دهه‌های بعد موفق به دریافت معتبرترین جوایز علوم کامپیوتر، از جمله جایزه تورینگ ACM در سال 2001، شدند. ایده‌های آن‌ها مستقیماً بر توسعه زبان‌های بعدی مثل اسمال‌تاک، سی‌پلاس‌پلاس و جاوا سایه افکند.

تاریخچه شکل‌گیری برنامه‌نویسی شیءگرا در کامپیوترهای اولیه

مکاشفه آلن کی و رویای گم‌شده

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

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

شکاف میان تئوری و صنعت

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

امروزه اگر به هسته زبان‌های محبوب نگاه کنیم، می‌بینیم که میراث سیمولا و رؤیای آلن کی کماکان در لایه‌های پنهان کدها زنده است. تقاضا برای معماری‌های نرم‌افزاری مقیاس‌پذیر و سیستم‌های توزیع‌شده در عصر ابررایانش، بازگشتی اجتناب‌ناپذیر به ایده‌های پیام‌محور و اکوسیستم‌های زنده محاسباتی ایجاد کرده است. شاید نسل بعدی از زبان‌های برنامه‌نویسی، همان جایی بایستد که آلن کی در آن سال‌های دور به آن چشم امید داشت و معمای اصلی توسعه نرم‌افزارهای پیچیده آینده را حل کند.