شی گرایی:
در نظر بگیرید برای رانندگی مجبور بودید از تمام نکات فنی و همه اتفاقاتی که در موتور و پیستونها اتفاق میافتد با خبر بودید واقعاً گیج کننده میشد، اینطور نیست! در واقع برنامه نویسی ابتدا بدین صورت بود و فقط افراد خاصی میتوانستند این کار را انجام دهند ولی با ظهور شی گرایی همه چیز عوض شد. حالا ببینیم یک شی دقیقاً چکار میکند. اول اینکه یک شی طوری طراحی شده که برنامه نویسی همانند دنیای اطراف ما بنظر برسد. یک شی همه چیزهای مربوط را دور هم جمع میکند مثلا توابع ، زیرروالها، متغییرها و حتی پایگاه داده مربوط همه و همه در یک جا و به صورت یک موجودیت. کار دیگر شی این است که جزئیات را از دید شما پنهان میکند به طوری که شما بدون آن که از ماهیت درونی آنها آگاه باشید میتوانید به راحتی از آنها استفاده کنید. همانطور که بدون آنکه از جزئیات درونی و مدارهای یک تلوزیون باخبر باشید با آن کار میکنید و این به یکی از آرزروهای دیرینه برنامه نویسان یعنی سادگی و عدم پیچیدگی پاسخ داد. حال بیایید ببینیم یک شی چگونه این کارها را انجام میدهد.
شی های یک زبان مانند دلفی همانند اشیای دنیای واقعی مثل ماشین و متورسیکلت اهرمهایی برای کنترل نیاز دارند که این وظیفه را Method ها به عهده میگیرند. متدها نقش زیرروالها را در زبانهای قدیمیایفا میکنند. شی ها برای حفظ حالت جاری از Properties استفاده میکنند مثلاً شما با دیدن کیلومتر ماشین به سرعت آن پی میبرید و در اشیا با خواندن یک Properties همان کار را انجام میدهید. در واقع Properties یا خاصیتها نقش متغییرها و به طور کلی ساختمان دادهها را در زبانهای قدیمیایفا میکنند البته تفاوتهایی بین یک متغییر و Properties وجود دارد که شما به تدریج به آن پی میبرید. حالا به مفاهیم مشکل تر شی گرایی میرسیم.
اشیا قابلیتی بنام ارث بری دارند در واقع هر شی میتواند خصوصیات خود را به فرزند خود منقل کند و یا به عکس میتواند از والد خود خصوصیاتی را به ارث ببرد. حالا سعی میکنم با مثالی این را تشریح کنم. فرض کنیم شما میخواهید شی ای ایجاد کنید مثل قناری شما ابتدا میتوانید شی به نام پرنده بوجود آورده و همه خصوصیات پرنده را در آن ایجاد کنید. سپس شی بنام قناری ایجاد میکنید که خصوصیات مربوط به پرندگان را میتواند از شی پرنده به ارث ببرد و بقیه خصوصیات را برای آن مشخص کنید و اگر بعداً خواستید پرنده دیگری مثل گنجشک را معرفی کنید هنوز هم میتوانید از شی پرنده استفاده کنید و این یعنی راحت تر شدن کد نویسی. قانون مهمیکه باید بخاطر داشته باشید و به سادگی از آن رد نشوید این است که هر شی میتواند بجای والد خود بکار گرفته شود چون همه خصوصیات آن را دارد ولی یک والد نمیتواند بجای فرزند خود بکار رود این مثل این است که دوست شما ، شما را به یک میهمانی دعوت کند و بگوید میتوانید پرنده خود را بیاورید و شما میتوانید قناری را با خود ببرید ولی در صورتی که میگفت فقط میتوانید گنجشک با خود بیاورید شما نمیتوانستید هر پرنده دیگری را با خود ببرید. این نکته مهم در آنجا کاربرد دارد که در صورتی که پارامتر یک زیرروال از نوع یک شی باشد همه فرزندان آن شی میتوانند به آن زیروال ارسال شوند. برای فهم این موضوع عجله نکنید و فقط قانون را بیاد داشته باشید. مطلب دیگری که راجع به شی گرایی باید بدانید Class و instance میباشد . در واقع اشیا فقط یک قالب میباشند که نمیتوانند به تنهایی مورد استفاده قرار گیرند. برای مثال وقتی شما میگویید قناری منظورتان قناری خاصی نیست. ولی وقتی یک قناری را با اسمیکه برای آن گذاشته اید صدا میزنید یک قناری خاص را در نظر دارید. در واقع قناری به طور کلی وجود خارجی ندارد بلکه یک قناری خاص که مثلاً اسم آن تویتی است وجود خارجی دارد در واقع Class مانند قناری و Instance مانند تویتی است و این به معنی این است که ما همواره ابتدا کلاسها را تعریف کرده و سپس برای استفاده یک نمونه یا Instance از آن را بوجود میآوریم.
رویداد گرایی: در زبانهای قدیمیدستورات خط به خط انجام میشد تا برنامه به پایان برسد و این یک روند قابل پیشبینی را ایجاد میکرد ولی با به وجود آمدن روشهای رویدادگرا برنامه منتظر یک اتفاق میماند تا عکس العمل نشان دهد. در اشیای روزمره هم همین طور است مثلاً یک ماشین حساب تازمانی که شما دکمه ای را فشار ندهید عمل نمیکند. در اینجور زبانها باید برنامه را طوری طراحی کنید که کدهایتان برای عکس العمل نشان دادن به کار کاربر نوشته شده باشد. این خلاصهای از شی گرایی و رویداد گرایی بود.
مفاهیم شی گرایی
در دیدگاه شئگرا از سه دریچه به مسایل مینگرند. یکی نگرش به مسایل به عنوان مجموعهای از اشیاء مرتبط با هم است. اشیا در قالب موجودیتهای مفعول شناخته میشوند. در اثر فعل اشیا بر یکدیگر ساختار سیستم در حال سکون مشخص میشود. دریچه دید دیگر، نگرش به تغییر رفتار و عملکرد هر شئ در طول زمان و به دنبال رویدادهای حاصل از ارتباط آن با سایر اشیاء است
مفاهیم شئگرایی دیدگاه شئگرا
در دیدگاه شئگرا از سه دریچه به مسایل مینگرند. یکی نگرش به مسایل به عنوان مجموعهای از اشیاء مرتبط با هم است. اشیا در قالب موجودیتهای مفعول شناخته میشوند. در اثر فعل اشیا بر یکدیگر ساختار سیستم در حال سکون مشخص میشود. دریچه دید دیگر، نگرش به تغییر رفتار و عملکرد هر شئ در طول زمان و به دنبال رویدادهای حاصل از ارتباط آن با سایر اشیاء است. دیدگاه سوم، جریان گردش دادهها و اطلاعات درون سیستم مشخص میکند.
شئگرایی تجربه بهتری از جهان خارج است. در تئوری، این بدان معناست که اگر مسئله تغییر کند (تغییر در نیازهای سیستم) راه حل به آسانی قابل تغییر است، زیرا نگاشت بین مسئله و راه حل آسان است.
شناخت اشیاء
در شناخت شئگرا دیدگاه اولیه آنالیست تعیین اجزاء تشکیل دهنده سیستمها است. اجزاء سیستمها در قالب اشیاء مشخص میشوند. یک شئ موجودیتی[1] است که هم میتواند مفعول باشد و هم فاعل. افعال در قالب عملیات مشخص میشوند. گوناگونی اشیاء مانعی برای شناخت است. لذا اشیاء را براساس صفات مشترکشان کلاسهبندی میکنند. برای نمونه، کلاس پرندگان یا کلاس سوابق در واقع نوع دو دسته از اشیاء را مشخص میکنند. کلاس اشیاء نشاندهنده صفات، خواص و افعال مشترک اشیاء مفعول است. کلاس اشیاء از تجرید [2] اشیاء ایجاد میشود.
اصولا ًانسان برای شناخت هر چیزی تجزیه و تحلیل میکند. یکی دیگر از کارهای فوقالعاده ذهن است، تجرید است. تجرید غیر از تجزیه است. در عمل تجرید جهت شناخت، تجزیه انجام نمیشود. ذهن انسان پس از اینکه چند چیز مشابه را درک کرد، صفات مشترک آنها را بدست میآورد و صفت محض هر یک از آنها را از صفت مشترک تمیز میدهد و از آن صفت مشترک یک صفت کلی میسازد که بر همه اشیاء کثیره یعنی بر همه اشیایی که از آنها این صفت کلی و مشترک بدست آمده، صدق میکند.در این حالت گفته میرود که این مفهوم کلی از اشیاء انتزاع یا تجرید شده است، مثل مفهوم دانشجو که از محمد و آیدین و غیره انتزاع میشود.
در واقع با تجرید، جزئیات خاص را نادیده گرفته، کلیتها را مجزا میکنند. تشخیص کلیتها راهی برای شناخت توسط ذهن انسان است. برای این منظور ذهن اشیاءرا تعمیم میدهد. برای نمونه کارخانه یک کلیت است. چنانچه یک کلیت در ذات و حقیقت اشیاء مربوطه میباشد و در واقع ماهیت اشیاء مربوطه، قائم به آن میباشد،آنرا کل ذاتی گویند. وگرنه آن کل عرضی است. برای نمونه کلیت جسم برای انسان یک کلیت ذاتی است. اما آنچه شئ در وجود خود به آن محتاج نباشد، عرضی است. برای نمونه خندان، گریان، سفید پوست، مریض، ... جزء عوارض هستند.
اصول منطق حکم میکند که لازمه شناخت اشیاء تعیین پنج کلیت است. این پنج کلیت عبارتند از: نوع، جنس، فصل، عرض عام و عرض خاص.
نوع، مفهوم کلیای است که شامل افراد و عناصر یک مجموعه میشود. برای نمونه نوع انسان نمایانگر ویژگیهای کلی و نام کلاس دستهای از اشیاء است.
جنس،مفهوم کلیای است که شامل افراد و عناصر بیش از یک مجموعه میشود. برای نمونه در جنمله انسان حیوانی ناطق است، انسان از جنس حیوان معرفی شدهاست. علاوه بر حیوان بودن ناطق هم است. این وجه ممیزه ناطق بودن فاصله بین انسان و حیوان را مشخص میکند.
اصولاً کلیت فصل، مفهوم کلیای است که باعث میشود افراد یا عناصر یک نوع مشخصشوند.
برطبق تعاریف شئگرایی در زبانهای برنامهسازی، انسان یک کلاس و حیوان کلاس مافوق برای انسان است. بعبارت دیگر انسان خواص حیوان بودن را از کلاس حیوان به ارث میبرد. وجه ممیزه و ویژگیهای خاص کلاس انسان، ناطق بودن است که در داخل این کلاس مشخص میشود. بااستفاده از رابطه وراثت ویژگیهای حیوان بودن از کلاس حیوان به ویژگیهای انسان افزوده میشود.
کلاس یک دسته از اشیاء باید نمایانگر ماهیت و در واقع کلیت ذاتی آن دسته از اشیاء باشد. در واقع ماهیت هر چیزی نمایانگر نوع آنست. با تعیین کلاس و سوپر کلاس برای یک شئ درواقع تعریفی برای آن شئ ایجاد میشود. درجمله، حیوان موجود زنده است، کلاس حیوان به عنوان زیرکلاسی از کلاس موجود زنده تعریف شدهاست. موجود زنده کلیت جنس را برای نوع حیوان مشخص میکند. اصولاً، تعریف، قضیهای است که ماهیت شئ را بیان میکند. بنابراین با رجوع به تعاریف میتوان مجموعه اشیاء تشکیل دهنده یک سیستم را مشخص نمود.
علاوه بر سه کلیت نوع، جنس و فصل ، عوارض (جمع عرض) نیز از عوامل شناخت اشیاء هستند. برای نمونه، تعجب کردن، عرض خاص و ویژه انسانها است. عوارض اشیاء شامل مکان، فعل یا عملکرد، انفعال، اضافات و کم و کیف میباشند.
مدل اشیاء
مدل اشیاء نمایانگر چگونگی ارتباط ثابت بین اشیاء تشکیل دهنده یک کلاس است. لذا، جهت ایجاد مدل اشیاء باید هویت اشیاء موجود در سیستم مورد نظر را شناسایی نموده، ارتباط بین آنها را مشخص کرد.
برای تعیین هویت اشیاء باید در نظر داشت که اشیاء صرفاً فیزیکی نیستند، مفاهیم نیز میتوانند به عنوان اشیاء مطرح باشند. به عنوان نمونه زمانبندی در سیستمهای عامل را میتوان به عنوان یک شئ در نظر گرفت. اصولاً اشیاء را در حالت کلی به دو دسته تقسیم میکنند:
-1- اشیاء فیزیکی
- 2- اشیاء مفهومی
رفتار اشیاء
رفتار هر شیء را بطور جداگانه مشخص میکنند. رفتار شئ نمایانگر چگونگی تغییر حالت آن در اثر رویدادها است. چگونگی صفات و مقادیر خواص شئ در یک مدت زمان، حالت را مشخص میکند. رویدادها محرک افعال تعیین شده بر شئ مفعول هستند. این افعال موجب تغییر مقادیر خواص و صفات شئ و در واقع تغییر حالت آن میشوند. رویدادها ممکن است موجب ارتباط و تغییر حالت اشیاءمرتبط میشوند.
رویدادها را میتوان از متن ارتباطات لحظهای و متوالی یک شئ با اشیاء اطراف آن در جهت انجام هدفی خاص مشخص نمود.
در حالت کلی اتفاقات مؤثر بر یک شئ را به سه دسته میتوان تقسیم کرد. یک دسته اتفاقاتی هستند که موجب تولد یا ایجاد یک کلاس از اشیاء میشوند. دسته دیگر اتفاقاتی هستند که در طول حیات شئ موجب تغییرات در آن میشوند. دسته سوم اتفاقاتی هستند که موجب مرگ و حذف یک شئ از داخل سیستم میشوند.