سه شنبه 27 آذر 1397 |  عضویت / ورود

تشریح مبحث شیئ گرایی در برنامه نویسی با استفاده از قرآن!


اگر دانشجوی رشته نرم افزار باشید احتمالاً درسی به نام «برنامه‌نویسی شیئ‌گرا» (Object Oriented Programming) و یا «برنامه‌نویسی پیشرفته» داشته‌اید که در هر دوی این دروس مبحث شیئ‌گرایی بیان می‌شود. (البته متأسفانه بسیاری از اساتید به اشتباه در این دروس به جای بیان مفاهیم زیبای شیئ‌گرایی که تا آخر عمر به درد دانشجو می‌خورد، یک سری چیزهای ابتدایی مثل کار با Visual C#‎ یعنی آوردن دکمه و textBox در صفحه و تولید برنامه‌های ویژوال (هر چند پیشرفته‌ترین برنامه‌ها) را یاد می‌دهند و هیچ اشاره‌ای به اینکه این دکمه یک شیئ است و شیئ یعنی چه نمی‌کنند!)

به هر حال، اگر از شما بخواهند شیئ‌گرایی را توضیح دهید به طوری که یک نفر که برنامه‌نویسی هم نمی‌داند، متوجه شود، شما چطور توضیح می‌دهید؟

من خودم در کلاس‌ها با یک مثال توضیح می‌دهم و آن مثال این است:

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

http://img.aftab.cc/news/91/ghaleb_class.jpg

دقیقاً از روی همین ماجرا، مبحث شیئ‌گرایی مطرح شد:

فرض کنید یک برنامه‌نویس دارد برنامه مدیریت ثبت احوال یا دانشگاه را می‌نویسد. به نظر شما آیا برای هر دانشجو مجدداً مفاهیمی مثل «نام»، «نام خانوادگی»، «نام پدر» و امثالهم را تعریف می‌کند؟ آیا مفاهیمی مثل «ثبت نام»، «ویرایش»، «ارتقا» و عملیات دیگر را مجدداً تعریف می‌کند؟ یعنی برای هر دانشجو می‌گوید: نام باید از نوع String باشد و نهایت طول آن 50 کاراکتر باشد، تاریخ تولد باید از نوع Date باشد و به صورت YYYY-MM-DD در نظر گرفته شود و یا «ثبت نام» یعنی درج مشخصاتی مثل نام و نام خانوادگی و نام پدر و غیره در جدولی به نام students در دیتابیسی به نام university با مجوزی با نام کاربری و پسورد فلان...؟ بعد همه این‌ها را دوباره در یک فایل دیگر از برنامه تکرار می‌کند؟

ما می‌گوییم این کار یعنی اتلاف وقت! (و برنامه‌نویس باید تا جایی که می‌تواند از اتلاف وقت جلوگیری کند) بهتر است برنامه نویس یک قالب کلی برای دانشجو تعریف کند که همه این مقاهیم یک بار برای آن قالب تعریف شده است. قالب، کمی حالت انعطاف‌پذیری دارد. یعنی می‌توان برخی اجزا را بعداً موقع تولید دانشجوی جدید تغییر داد. حالا برای ایجاد دانشجوی جدید، یک سری مقادیر جدید برای صفات خواهیم داشت (یعنی مقدار نام و نام خانوادگی و نام پدر دانشجوی جدید فرق می‌کند) این مقادیر جدید را در آن قالب کلی می‌ریزد و حالا دانشجوی تولید شده را از قالب بیرون می‌آورد و استفاده می‌کند.

برنامه‌نویسان در اصطلاح به آن قالب، Class (کلاس) می‌گویند. به آن اجزا (مثل گوش و چشم و غیره) اصطلاحاً Property Name و به مقادیر آن‌ها (مثل رنگ آبی و گوش بزرگ و غیره) اصطلاحاً Property Value و به آن عملیات (مثل گریه کردن، راه رفتن یا ثبت نام و ارتقا) اصطلاحاً Method می‌گویند.
اینکه قالب‌ها انعطاف‌پذیر هستند در اصطلاح گفته می‌شود می‌توان صفات و رفتار کلاس‌ها را Override کرد. (یعنی روی صفات قالب پیش‌فرض تغییراتی داد)
اگر شما از یک کلاس یک نمونه جدید تولید کنید (مثل دانشجویی که از کلاس Student ایجاد شده باشد)، به آن نمونه اصطلاحاً Object یا شیئ گفته می‌شود.

چون در برنامه‌نویسی‌های جدید، برنامه‌نویسان ترجیح می‌دهند تمام کارهایشان را با اشیاء و کلاس‌ها انجام دهند، گفته می‌شود آن‌ها «برنامه‌نویسی شیئ‌گرا» انجام می‌دهند.

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

خوب، امیدوارم مفهوم شیئ‌گرایی جا افتاده باشد، اما بحث اصلی من چیز دیگری بود.
هر وقت این مثال را در کلاس‌ها می‌زدم، با خودم فکر می‌کردم که: آیا واقعاً خدا از مفهوم شیئ‌گرایی برای خلقت انسان‌ها استفاده می‌کند؟ اصلاً درست است کار خدا را با کار دنیایی خودمان که زمان در آن دخیل است مقایسه کنیم؟

تا اینکه چند شب پیش در مسجد، قرائت قرآن شبانه رسید به سوره نساء. دور اول که در سال‌های قبل هر شب یک صفحه از قرآن را خواندند، من به معنی دقت نمی‌کردم و فقط آیات را می‌خواندم. این دور گفتم، قاری که قرآن را می‌خواند من فقط معانی را نگاه کنم.
تا معنی آیه اول سوره نساء را خواندم باور کنید چشمانم اینطور شد: Shocked

آیه را بخوانید:

بسْمِ اللَّهِ الرَّحْمَٰنِ الرَّحِيمِ يَا أَيُّهَا النَّاسُ اتَّقُوا رَبَّكُمُ الَّذِي خَلَقَكُمْ مِنْ نَفْسٍ وَاحِدَةٍ

اى مردم! از پروردگارتان پروا كنيد، آن كس كه شما را از يك نَفْس آفريد.

«نفس واحد» دقیقاً همان مفهوم «کلاس» است! او یک کلاس به نام «کلاس انسان» دارد که برای تولید یک انسان جدید، به قول برنامه‌نویس‌ها از آن کلاس، یک new می‌گیرد!

بلاشک خداوند یک برنامه‌نویس قهار است!

موفق باشید؛
حمید رضا نیرومند

_______________

Added: You may want to have a look at an English version of this post on my English blog:

Object Oriented Programming in Quran!

or another related post:

How Quran is nothing but loss after loss for the unjust!?

 

کلمات کلیدی: مبحث شیئ گرایی، برنامه نویسی، برنامه نویسی شیئ گرا، رشته نرم افزار، برنامه نویسی پیشرفته، مفهوم شیئ گرایی، توضیح مبحث شی گرایی با استفاده از قرآن، object ، مفهوم شیئ گرایی در برنامه نویسی، اصول برنامه نویسی شیئ گرا

[ارسال شده در مورخه : چهارشنبه، 27 اردیبهشت، 1391 توسط Hamid]
[ #قرآن با نگاه رشته کامپیوتر]



بازدیدها از این مطلب: 6767 بار   امتیاز متوسط :   تعداد آراء: 6   امتیاز دهید:

نظرات طرح شده

نام: [ کاربر جدید ]
ایمیل:

نظر:


اجازه استفاده از تگهای HTML را ندارید


جمع عدد 9 با 15 را در كادر زیر وارد نمایید:
(این كار برای جلوگیری از فعالیت موتورهای اسپمر است)


* توجه: نظر شما بعد از بررسی، نمایش داده خواهد شد.

[بدون موضوع]                توسط anari در مورخه : چهارشنبه، 27 اردیبهشت، 1391(لینک نظر)
خیلی لذت بردم... خیلی حمید جان...


[ ارسال جوابیه ]


سیمین (امتیاز : 0)(لینک نظر)
توسط سیمین در مورخه : یکشنبه، 31 اردیبهشت، 1391
واقعا لذت بردم.مرسی


[ ارسال جوابیه ]


saeid hasanzade (امتیاز : 0)(لینک نظر)
توسط saeid hasanzade در مورخه : شنبه، 6 آبان، 1391
سلام استاد نیرومند سایتتون درست مثل نام خانوادگی تون بسیار جالب و محرک است.حدود ده بیست صفحه از سایت رو زیر و رو کردم .میخواستم اگه اجازه بدید از این مطلب برای وبلاگ خودم استفاده کنم تا دوستانی که با سایت شما آشنا نیستند نیز از مطالب ناب و ارزشمند بهره ببرند.صد البته اول با اجازه شما و با ذکر منبع

یا علی


[ ارسال جوابیه ]


میلاد (امتیاز : 0)(لینک نظر)
توسط میلاد در مورخه : شنبه، 22 مهر، 1391
آقای نیرومند

سلام

خلاصه عرض کنم

حدود یک ساعت در وبلاگ و برنامه ها و مطالبتون دارم میچرخم

خلاصه تر عرض کنم

آقا یه‌دونه‌ای

می خوامت (ببخشید درست تایپ کنم :) می‌خوامت !


[ ارسال جوابیه ]


من (امتیاز : 0)(لینک نظر)
توسط من در مورخه : شنبه، 16 فروردین، 1393
واقعا عالی بود هر چند این مطلب قدیمیه ولی من تازه دیدمش و واقعا لذت بردم . همیشه با خودم فکر می کردم تو هر شاخه علمی که وارد میشی حتما یه ربطی تو قرآن پیدا میکنی ولی هیچ وقت ربطش به برنامه نویسیو درک نمی کردم !


[ ارسال جوابیه ]


bidak                توسط bidak در مورخه : شنبه، 25 بهمن، 1393(لینک نظر)
الان این مطلبو دیدم.بسیار عالی بود


[ ارسال جوابیه ]


alieh (امتیاز : 0)(لینک نظر)
توسط alieh در مورخه : سه شنبه، 14 مهر، 1394
سلام

خداقوت!

مطالبتون خیلی عالیه.مباحث پیچیده نرم افزار و برنامه نویسی رو به صورت کامل ملموس و قابل فهم توضیح میدین.و همچنین کاملا شیرین

اجرکم عندالله


[ ارسال جوابیه ]


هادی (امتیاز : 0)(لینک نظر)
توسط هادی در مورخه : یکشنبه، 8 بهمن، 1396
سلام مطلب عالی ای بود
خوشحال میشم دو مقاله بنده رو هم بخونین

http://fullkade.com/?p=27904
http://fullkade.com/?p=36765

موفق باشین


[ ارسال جوابیه ]