این مطلب بخشی از آموزش اصول برنامه نویسی شی گرا هست.
ایده ای که پشت محاسبات شی گرایی هست باعث میشه شما راجع به برنامه نویسی همانند دنیای واقعی فکر کنید. بنابراین برای اینکه بپرسیم شی (Object) در برنامه کامپیوتری چی هست باید بپرسیم که شی در دنیای واقعی چی هست؟
- بطور مثال آیا کلوچه شی هست؟
- بله، حتما.
-آیا این لیوان سفید یک شی است؟
-مطمئنا. هر دوی آنها شی هستند.
-آیا این لیوان سیاه یک شی است؟
- یقینا
- آیا لیوان سفید و سیاه هر دو شی یکسانی هستند؟
- خیر، اگرچه که هر دوی آنها لیوان های مشابهی هستند ولی یکی نیستند، اینها دو شی مجزا هستند و هر کدام موجودیت خود را دارند. آنها موجودیت خود را دارند و از تمام اشیا دیگر مستقل هستند.
هر شی مشخصات خودش را دارد، ویژگی های ذاتی که حالت فعلی آن را مشخص میکند. بطور مثال یک لیوان می تواند پر، خالی و یا چیزی بین این دو باشد. پر کردن یک لیوان با قهوه به این معنی نیست که تمام لیوان های دنیا پر شده اند. وضعیت فعلی این لیوان پر شده مستقل از بقیه لیوان های خالی ست زیرا هر کدام از لیوان ها شی های مجزایی هستند.
برای یک لیوان بجز خصوصیت پر یا خالی بودن خصوصیات دیگری نیز وجود دارد، مانند اندازه، رنگ و .... خب، بیشتر اشیا چندین خصوصیت دارند، بعضی از این خصوصیات مانند رنگ و اندازه ثابت خواهند بود در حالیکه بعضی مانند اینکه این لیوان پر یا خالی است ممکن است در طول دوره حیات تغییر بکنند.
Attributes، Properties، Characteristics، States، Fields، Variables همه اینها اصطلاحات یکسانی هستن که معمولا برنامه نویس ها استفاده میکنن. معنی این اصطلاحات با توجه به موقعیت و زمینه خاص، بواسطه زبان برنامه نویسی ممکن است کمی متفاوت باشه.
خب فکر کردن راجع به لیوان به عنوان یک شی ساده است چون اون یه شی تک هست، اما راجع به چیزهای پیچیده مانند تلفن همراه که از صدها جز و قطعه الکترونیک تشکیل شده چطور؟ جواب اینه که شی بودن ربطی به پیچیدگی نداره و ممکنه که یک شی از اشیا دیگه تشکیل شده باشه، میتونیم راجع به تلفن همراه به عنوان یک چیز در دنیای واقعی صحبت کنیم، بنابراین میشه به تلفن همراه به عنوان شی محاسباتی فکر کرد که خصوصیاتی مانند رنگ، اندازه و وزن داره. علاوه بر این تلفن همراه رفتارهایی هم داره مانند اینکه میتونه زنگ بخوره و پیام بفرسته. توجه کنید که رفتار هر شی مخصوص به خودشه، مثلا لیوان نمیتونه زنگ بخوره یا پیام بده!
هویت (Identity)، خصوصیات (Attributes) و رفتارها (Behaviors) سه چیزی هستند که اشیا رو در برنامه نویسی شی گرا توصیف میکنن. هر شی در برنامه کامپیوتری متکی به خود (self-contained) است. بنابراین شی هویت (Identity) خود را مستقل از بقیه اشیا دارد. اشیا خصوصیات (Attributes) خودشان را دارند که وضعیت فعلی آنها را توصیف میکنه، همچنین آنها رفتارهای (Behaviors) مربوط به خودشان را دارند که می توانند انجام دهند.
تمام مثال هایی که گفتیم مانند لیوان،کلوچه و تلفن همراه رو میتونیم لمس کنیم و ببینیم ولی نرم افزار معمولا چیزهایی رو توصیف میکنه که ملموس نیستن، بنابراین آیا اشیا در یک برنامه می توانند نمایانگر چیزی بیش از چیزهای فیزیکی باشند؟؟؟ در برنامه نویسی، ایده شی برای توصیف چیزهای غیر ملموس هم بکار برده میشه، مانند یک تاریخ، یک زمان سنج و یا یک حساب بانکی. شما نمی تونید یک حساب بانکی را در زندگی واقعی بصورت فیزیکی لمس کنید یا در دست بگیرید، اما همچنان ایده خوبی است که با تعریف یک شی مطابقت دارد. یک حساب بانکی دارای هویت است و از حساب بانکی دیگر جداست، ویژگی هایی مانند شماره حساب و تراز مالی دارد، همچنین رفتارهایی مانند واریز و برداشت پول دارد.
یکی از چالش های طراحی شی گرایی این است که آیا چیزی در برنامه شما باید به عنوان یک شی در نظر گرفته شود یا خیر؟ این مسئله وقتی که با لیوان، شخص و سند سروکار دارید آسونه ولی اگر بخواهید یک برنامه مدیریت رویداد (Event Management) رو بسازید، چه میکنید؟ آیا یک رویداد میتونه یک شی باشد؟ خب فقط از خودتون بپرسید که آیا این یک نام است؟ نام ها فقط چیزهای فیزیکی نیستند بلکه افراد ، مکانها و ایده ها یا مفاهیم نیز نام هستند. به عنوان یک تست ساده ، اگر در زبان انگلیسی توانستید جلوی آن کلمه The قرار دهید آن کلمه می تواند به عنوان شی در نظر گرفته شود. مانند The Mug, The Person, The Document، ولی کلماتی مانند زنگ زدن و یا پیام دادن را نمی توان به عنوان شی بکار برد، اینها فعل هستند و رفتار یک شی را توصیف میکنند. ما باید این افعال را نیز شناسایی کنیم زیرا برنامه بدون رفتار خیلی مفید نخواهد بود. اما همانطور که از نام شی گرایی پیداست ، هنگامی که نوبت به ساختن یک برنامه شی گرا می رسد ، تمایل داریم ابتدا روی نام متمرکز شویم.
قسمت قبلی : آموزش اصول برنامه نویسی شی گرا : تفکر شی گرا
قسمت بعدی : آموزش اصول برنامه نویسی شی گرا : کلاس ها