زبانهایی همچون اسمبلی، کوبال، فورتران و سایر زبانهای برنامه نویسی نسبتاً قدیمی به هیچ وجه شیء گرا نبودند و اصطلاحاً تحت عنوان زبانهای Procedural (پروسیژرال یا پروسه ای) شناخته میشوند به طوری که برنامههای نوشته شده با این دست زبانهای پروسه ای، به صورت پروسهای از دستورات پشت سر هم بوده که یکی پس از دیگری اجرا شده و در نهایت برنامه به هدف اصلیاش خواهد رسید.
این دست زبانهای پروسیژرال برای برنامههای نسبتاً بزرگ و پیچیده اصلاً مناسب نیستند چرا که مدیریت این دست برنامهها کار بسیار دشواری خواهد بود و هرچه این برنامه ها بزرگ تر شوند، مدیریت آن ها هم سخت خواهد شد.. در چنین شرایطی بود که زبانهای برنامه نویسی شیء گرا در دهه ۱۹۸۰ شروع به پیدایش کرده و به مرور زمان جای زبانهای برنامه نویسی پروسیژرال را گرفتند.
برنامهای که پیش از این مثال زدیم، چنانچه با یک زبان برنامه نویسی شیء گرا نوشته شود، سورس کد برنامه به بخشهایی مجزا از یکدیگر که تحت عنوان Object (آبجکت به معنی شیء) شناخته میشوند تبدیل می شود. به عبارت دیگر، آبجکت ها در یک برنامهای که با زبانی شیء گرا نوشته شده باشد به مثابه ی برنامههای کوچک مجزا از یکدیگری میباشند که هر کدام کار خاصی انجام داده و در صورتی که در کنار یکدیگر قرار گیرند، تشکیل یک برنامه ی کامل را خواهند داد که هر کدام منطق خاص خود را دارا است اما این در حالی است که با یکدیگر در ارتباط تنگاتنگی خواهند بود.
از یک دید کلی، برنامه نویسی شیء گرا یک پارادایم برنامه نویسی است و به هیچ وجه ربطی به یک زبان برنامه نویسی ندارد بلکه به مفاهیمی مرتبط است که توسط زبانهای بسیاری من جمله سی پلاس پلاس، جاوا، پایتون، پی اچ پی و … ساپورت می شود. پیش از این که بپرسیم یک آبجکت یا «شیء» در دنیای برنامه نویسی به چه معنا است، ابتدا می بایست بپرسیم که یک شیء در دنیای واقعی به چه چیزی اطلاق می گردد؟
به یاد داشته باشیم که یکی از مهمترین اهداف دانشمندان علوم کامپیوتری از ابداع زبانهای برنامه نویسی شیء گرا این بوده تا برنامه نویسی را تا حد ممکن به زندگی واقعی نزدیک سازند. به طور مثال، کامپیوتر یا لپ تاپی که با استفاده از آن این دوره از سکان آکادمی را مطالعه میکنید یک شیء است. ماوسی که آن را حرکت میدهید نیز یک شیء است. اگر از مطالعه ی این آموزش خسته شدهاید و تمایل دارید یک فنجان چای بنوشید، فنجانی که در دست میگیرد هم یک شیء در دنیای واقعی است. چیزی که در مورد این آبجکت ها یا اشیاء می بایست مد نظر قرار دهیم این است که هر کدام از آنها دارای هویتی مجزا از یکدیگر اند. به عبارت دیگر، شیئ همچون فنجان دارای هویتی مجزا از شیئ مثل لپ تاپ است و در دنیای واقعی آنها را دو چیز مجزا از یکدیگر تلقی میکنیم که هر کدام کاربرد خاص خود را دارا است.
جالب است بدانیم که در دنیای واقعی یک آبجکت میتواند دربرگیرنده ی چندین آبجکت یا شیء دیگر باشد. برای روشن شدن این مسأله مثالی می زنیم. هواپیما یک شیئ است که حاوی چندین شیء دیگر مثل صندلی، در، پنجره، موتور جت، کابین خلبان و … است. موتور جت نیز آبجکتی است که حاوی چندین آبجکت دیگر است که از آن جمله میتوان به شفت، توربین، سوپاپ، لوله، مخزن و … اشاره کرد.
اکنون که با مفهوم آبجکت ها در دنیای واقعی آشنا شدیم، حال نوبت به بررسی قابلیتهای آبجکت ها می رسد. هر آبجکت یا شیء در دنیای واقعی دارای یکسری Attribute یا «ویژگی» است. به طور مثال، شیئ هچون لپ تاپ میتواند مشکی، هشت هسته ای و با حافظه ی رم هشت گیگابایتی باشد.
اشیاء در دنیای واقعی معمولاً دارای بیش از یک Attribute هستند و این در حالی است که ویژگیهای اشیاء هیچ ربطی به ویژگیهای سایر اشیاء ندارد. به عنوان مثالی دیگر، میتوان میوه ای همچون سیب را در نظر گرفت. یک سیب میتواند تازه، قرمز، آبدار، ترش و خوشمزه باشد اما این به هیچ وجه بدان معنا نیست که تمامی سیب های داخل یخچال می بایست از چنین Attribute هایی برخوردار باشند. ممکن است سیب دیگری که در یخچال وجود دارد شیرین، زرد و بدمزه باشد اما به هر حال هر دو سیب اشیائی از یک جنس هستند.
مورد دیگری که اشیاء در دنیای واقعی از آن برخوردارند چیزی است تحت عنوان Behavior به معنی «رفتار یا عملکرد» که کارکرد یک شیء را مشخص می سازد. به طور مثال شیئ هچون هواپیما برای پرواز کردن ساخته شده است اما شیئ همچون ماوس برای کلیک کردن طراحی شده است. این رفتار اشیاء مختص به نوع آنها است. به عبارت دیگر، اشیائی که به یک دسته تعلق دارند از رفتارهای مشابهی برخوردارند اما در عین حال میتوانند ویژگیهای متفاوتی داشته باشند.
به طور مثال، هواپیمای Boeing 747 و هواپیمای F16 هر دو از Behavior یکسانی که همان پرواز کردن است برخوردارند اما این در حالی است که Attribute های این دو شیء با یکدیگر کاملاً متفاوت است. به عبارت دیگر، هواپیمای بوئینگ 747 برای مسافربری طراحی شده است اما هواپیمای اف 16 برای جنگ با دشمن طراحی گشته است.
در دنیای کامپیوتر و برنامه نویسی هم آبجکت ها تا حد بسیار زیادی شبیه به اشیاء در دنیای واقعی هستند. هر آبجکت در یک برنامهای که با یک زبان برنامه نویسی شیء گرا نوشته شده باشد دارای خصوصیات مخصوص به خود است، هویتی مجزا از سایر اشیاء موجود در برنامه داشته و رفتار خاصی هم از آن انتظار می رود.
در دنیای واقعی ما به هر چیزی که بتوانیم آن را ببینیم و لمس کنیم لقب شیء میدهیم اما در دنیای برنامه نویسی، قضیه تاحدودی متفاوت است. در برنامه نویسی، تاریخ، زمان، یک حساب بانکی و چیزهایی از این دست آبجکت تلقی می شوند. به طور مثال، فرض کنیم که در یک نرمافزار بانکی، آبجکتی داریم تحت عنوان BankAccount به معنی «حساب بانکی» که این آبجکت دارای یکسری Attribute ها است که از آن جمله میتوان به نوع حساب بانکی، شماره حساب و … اشاره کرد. در عین حال، دارای Behavior هایی نیز می باشد. به عبارت دیگر، در یک حساب بانکی میتوان سپرده گذاشت، پول جا به جا کرد و بسیاری کارهای دیگر. در عین حال، این حساب بانکی از سایر حسابهای بانکی مجزا است، به عبارت دیگر، این حساب بانکی دارای هویتی منحصر به فرد است.
توجه داشته باشیم که در دنیای برنامه نویسی آبجکت ها همواره نمی بایست قابل روٍئیت باشند. برای روشنتر شدن این مسأله مثالی دیگر می زنیم. فرض کنیم که در حال نوشتن یک نرمافزار ثبت رویدادها هستیم. یک رویداد چیزی است همچون جشن تولد، عروسی، بزرگداشت و … هیچ کدام از این رویدادها فیزیکی نیستند و به نوعی انتزاعی بوده اما در دنیای برنامه نویسی تحت عنوان آبجکت شناخته می شوند و همان گونه که ما با اشیاء ملموس در دنیای فیزیکی برخورد می کنیم، می توان با آن ها برخورد کرد.
اکنون ممکن است این سؤال برای برنامه نویسان مبتدی پیش بیاید که در دنیای واقعی اشیاء با استفاده از چیزهای دیگر ساخته می شوند. مثلاً یک خانه، با استفاده از آجر و سیمان ساخته میشود اما در دنیای برنامه نویسی آبجکت ها یا اشیاء از کجا ساخته میشوند، و این همان چیزی است که در آموزش بعد به تفصیل مورد بررسی قرار خواهد گرفت.