شی یک بسته نرمافزاری از وضعیت و رفتار مرتبط است. این بخش توضیح میدهد وضعیت و رفتار چگونه در یک شی نمایش داده میشوند، مفهوم بستهبندی داده (Data Encapsulation) را معرفی میکند و مزایای طراحی نرمافزار به این شکل را توضیح میدهد.
اشیا دو ویژگی مشترک دارند: همه آنها وضعیت و رفتار دارند. سگها وضعیت دارند (نام، رنگ، نژاد، گرسنه بودن) و رفتار (پارس کردن، بازی کردن، تکان دادن دم). دوچرخهها هم وضعیت دارند (دنده فعلی، سرعت پدال فعلی، سرعت فعلی) و رفتار (تغییر دنده، تغییر سرعت پدال، ترمز). شناسایی وضعیت و رفتار اشیای دنیای واقعی روش عالی برای شروع فکر کردن به سبک برنامهنویسی شیگرا است.
یک دقیقه وقت بگذارید و اشیای دنیای واقعی اطراف خود را مشاهده کنید. برای هر شی از خود بپرسید: «چه وضعیتهایی ممکن است این شی داشته باشد؟» و «چه رفتارهایی ممکن است این شی انجام دهد؟». مشاهدات خود را یادداشت کنید. مثلاً چراغ میز شما ممکن است فقط دو وضعیت (روشن و خاموش) و دو رفتار (روشن کردن، خاموش کردن) داشته باشد، اما رادیوی میز شما وضعیتهای اضافی (روشن، خاموش، صدای فعلی، ایستگاه فعلی) و رفتارهای بیشتری (افزایش صدا، کاهش صدا، جستجو، اسکن و تنظیم) دارد. همچنین ممکن است متوجه شوید برخی اشیا خود شامل اشیای دیگری هستند. این مشاهدات دنیای واقعی نقطه شروع درک دنیای برنامهنویسی شیگرا هستند.
اشیای نرمافزاری از وضعیت و رفتار مرتبط تشکیل شدهاند. یک شی وضعیت خود را در فیلدها (Fields) (متغیرها در برخی زبانها) ذخیره میکند و رفتار خود را از طریق متدها (Methods) (توابع در برخی زبانها) نمایش میدهد. متدها روی وضعیت داخلی شی عمل میکنند و مکانیزم اصلی ارتباط شی با شی هستند. پنهانسازی وضعیت داخلی و الزام تمام تعاملات از طریق متدهای شی به عنوان بستهبندی داده (Data Encapsulation) شناخته میشود — یک اصل بنیادی برنامهنویسی شیگرا.
فرض کنید یک دوچرخه داریم. با نسبت دادن وضعیت (سرعت فعلی، سرعت پدال فعلی و دنده فعلی) و فراهم کردن متدهایی برای تغییر آن وضعیت، شی کنترل نحوه استفاده دنیای بیرون از خود را حفظ میکند. مثلاً اگر دوچرخه فقط ۶ دنده دارد، متد تغییر دنده میتواند هر مقداری کمتر از ۱ یا بیشتر از ۶ را رد کند.
بستهبندی کد در اشیای نرمافزاری منفرد فواید زیادی دارد:
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: https://dev.java/learn/