این روزها اگر زبان برنامه نویسی، شی گرا نباشد، این احتمال وجود دارد که محبوبیت زیادی به دست نیاورد و یا زیاد کاربردی نشود. همچنین اگر برنامه نویسی باشید که شی گرایی را بلد نیست در پیدا کردن کار یا ویرایش پروژه ها یا حتی شروع پروژه های خودتان، کارتان خیلی سخت است.
در این مقاله از سایت زیکو ، به تاریخچه شی گرایی و مفاهیم شی گرایی میپردازیم که برای برنامه نویسی آنها را لازم دارید.
در سال 1981 کمتر کسی پیدا می شد که در مورد برنامه نویسی شی گرا چیزی بداند! در همین سال بود که مجله بایت شماره ویژه ای در مورد معرفی زبان SmallTalk منتشر کرد.
جالب است بدانید که نویسندگان نه تنها مجبور بودند مفهوم "شی" را توضیح بدهند بلکه حتی باید توضیح میدادند که یک رابط گرافیکی چگونه کار میکند (در آن زمان بیشتر برنامه ها بر اساس متنی و دستوری ساده بود). همچنین در این شماره از مجله بایت یک دستگاه عجیب و غریب اشاره گر به اسم موس معرفی کرده بودند که برای اکثر خوانندگان خیلی عجیب بود!
در این شماره بود که اکثر برنامه نویسان اولین دید به برنامه نویسی شی گرا را پیدا کردند.
SmallTalk زبانی بود که توسط تیمی در مرکز تحقیقات پالو آلتو طراحی شد. یکی از اعضای این تیم Alan Kay بود که میتوان گفت اولین کسی بود که مفهوم برنامه نویسی شی گرا را ایجاد کرد.
تا آن زمان زبان های برنامه نویسی اکثرا به صورت رویه ای کار میکردند یعنی بلوک های کد به شکل رویه اجرا میشدند. اما در SmallTalk بلوک های کد شی خوانده میشدند.
در این زبان شما میتوانستید شی تعریف کنید و داده ها و رویه های لازم را به آن نسبت دهید و هر وقت کار خاصی را نیاز داشتید، شی خاصی را صدا بزنید و آن شی جستجو کند و پاسخ درست را برای درخواست شما پیدا کند، این روش ها را متد میگویند.
برای مثال اگر طوطی را یک شی بدانید، این طوطی متد پرواز کردن دارد، متد صحبت کردن دارد و..
یکی دیگر از ویژگی های مهم شی گرایی، وراثت است. فرض کنید یک کلاس داریم به اسم "حیوانات"، حیوانات همگی شان یک سری ویژگی های کلی دارند مثل خوردن، خوابیدن و.. که این ویژگی ها همه شان در این کلاس میباشد.
حالا اگر از ویژگی ارث بری استفاده کنیم و یک کلاس جداگانه برای مثلا یک حیوان مثل طوطی بسازیم، کلاس طوطی تمامی ویژگی های حیوانی که در تمام حیوانات مشترک است را به ارث میبرد و دیگری نیازی به تعریف دوباره آن ویژگی ها نیست. سپس میتوانید برای طوطی ویژگی هایی نام ببرید که فقط مختص او باشند مثل پرواز یا حرف زدن و...
?
در نهایت این ویژگی باعث میشود کدها ساده تر و خوانا تر باشند (چون دیگر نیازی نیست ویژگی های تکراری را برای هر کلاس دوباره بنویسید.) و همچنین کد امن تر میشود.
شی گرایی پیشرفت بزرگی برای برنامه نویسی بود و مزایای آن باعث شد که زبان های برنامه نویسی تصمیم به شی گرا شدن گرفتند! زبان C که یک زبان غیر شی گرا بود، به روز شد و نسخه شی گرای آن یعنی C++ ساخته شد.
سپس بیشتر زبان هایی که بر پایه C نوشته شدند مثل Objective-C ، Action Script ، Java و C# هم شی گرا بودند. و در نهایت به دنبال اینها Ruby و Python هم شی گرا بودند...
حالا سوال این است که آیا شی گرایی برنامه نویس ها را پر کار تر کرد؟! آیا برنامه ها ساده تر و شفاف تر و واضح تر بودند؟؟ جواب ساده: نه!
سی پلاس پلاس از سی پیچیده تر شد. همچنین نسخه شی گرای پاسکال از نسخه رویه ای آن پیچیده تر بود. اما این داستان در مورد زبان هایی مثل روبی کمی فرق میکرد چون روبی از اول شی گرا ساخته شد و دیگر نسخه ساده روبی وجود نداشت!
پس برنامه نویس های روبی به دو دسته تقسیم میشوند: 1-برنامه نویس های دقیق که میتوانند از ویژگی های شی گرایی روبی یک برنامه کامل و بی نقص درست کنند. 2-برنامه نویس های بی دقت که میتوانند کدهایی بنویسند که بعدها حتی نشود به آنها نگاه کرد!
دلایل زیادی برای اینکه چرا SmallTalk نتوانست ایده های بزرگ دیگرش را به زبان های بعدی منتقل بدهد؟ وجود دارد.
برای مثال یکی از نقص های مهم این است که تعداد کمی زبان برنامه نویسی وجود دارد که داده های داخل اشیا را مخفی نگه میدارد. اگر برنامه نویس های دیگر بتوانند به جزئیات داخل شی دسترسی پیدا بکنند میتواند برنامه دچار مشکل شود که این در تضاد با یکی از ایده های اصلی Small Talk بود.
یکی دیگر از ویژگی هایی که باعث شد SmallTalk یک زبان انقلابی باشد، محیط برنامه نویسی آن بود. SmallTalk یک زبان برنامه نویسی مستقل محسوب نمیشد، بلکه طراحی شده بود تا زبان های برنامه نویسی دیگر را کامل کند.
در واقع پنجره های ویرایشی و مرورگر ها اشیا SmallTalk بودند، شما میتوانستید در اسمال تالک، محیط ویرایش را با طراحی کلاس های جدید، عوض کنید.
?
در اکثر زبان های برنامه نویسی امروزی، چنین چیزی را نمیبینیم. برای مثال اگر برنامه نویس روبی باشید، میتوانید ویرایشگر کد یا محیط توسعه خودتان را انتخاب کنید اما نه زبان برنامه نویسی و نه محیط ویرایشگر، آگاهی از همدیگر ندارند.
یا برای سی شارپ احتمالا برنامه نویس ها از ویژوال استودیو استفاده میکنند اما برای ساخت برخی فرم ها و... شما نمیتوانید تمام کدها را ارزیابی کنید.
به عبارت دیگر، زبان های امروزی فقط یک سری تصادفی از ویژگی های SmallTalk را برای خودشان برداشته اند و فراموش کرده اند چه چیزی بود که این زبان را زیباتر و کاربردی تر کرده بود.
البته این به این معنی نیست که شما نمیتوانید با زبان های برنامه نویسی امروزی کدهای خوب و زیبا و همچنین امن بنویسید، اما زیبایی همیشه در سادگی بوده و بس و این هدف نهایی Small Talk بود..!