در این مقاله سعی شده است تا بهطور جامع به این سوال پاسخ داده شود که شی در برنامه نویسی چیست و توضیحات لازم پیرامون مفهوم آبجکت در برنامه نویسی ارائه شده است. همچنین سایر مفاهیم مهم شی گرایی در برنامه نویسی و مرتبط با مفهوم شیء نیز شرح داده شدهاند. مثالی هم برای آبجکت در برنامه نویسی ارائه شده است تا بتوان درک بهتری نسبت به چیستی این مفهوم مهم در برنامه نویسی شی گرا بهدست آورد.
شی در برنامه نویسی چیست ؟
در برنامه نویسی شی گرا ، شی (Object) اولین و مهمترین موجودیتی است که برنامه نویس برای طراحی و توسعه نرم افزار باید در نظر بگیرد. اشیا در برنامه نویسی واحدهایی از کدها هستند که در نهایت از فرایند برنامه نویسی شی گرا مشتق میشوند.
هر شی نمونهای (موردی | Instance) از یک کلاس خاص یا زیرکلاسی مشخص به حساب میآید. با توجه به اینکه هر شی از کلاس خاصی نمونهسازی میشود، میتوان از طریق آن شی به متدهای تعریف شده یا روالها و همچنین متغیرهای داده در آن کلاس دسترسی داشت.
در این میان، هر شی به یک «کلاس عمومی از شی» (Generic Class of Object) تبدیل میشود و حتی کلاسهای عمومی بیشتری تعریف میشوند تا اشیا بتوانند مدلها را با یکدیگر بهاشتراک بگذارند و از تعریفهای کلاس در کدهای خود استفاده مجدد بکنند. «کلاسهای عمومی» (Generic Classes) عملیاتی را کپسولهسازی میکنند که مربوط به نوع داده مشخصی نیستند.
شی در برنامه نویسی چیست و چه تفاوتی با کلاس در شی گرایی دارد؟
دو مفهوم شی و کلاس در برنامه نویسی شی گرا و تفاوت شی با کلاس اغلب برای برنامه نویسان تازهکار گیجکننده و گُنگ هستند. بنابراین لازم است ضمن پاسخ به سوال آبجکت در برنامه نویسی چیست ، تفاوت بین این دو مفهوم نیز شرح داده شود.
مفهوم کلاس در برنامه نویسی شی گرا چیست؟
کلاس در واقع نوعی نقشهساخت (طرح اولیه) به حساب میآید. منظور از نقشهساخت این است که مثلاً برای ساخت یک کشتی، ابتدا باید نقشهساخت آن را طراحی و ایجاد کرد. حقیقت این است که نقشهساخت خودش کار خاصی انجام نمیدهد؛ بلکه نقشهساخت در واقع تنها دستورالعملهایی را برای نحوه ساخت یک موجودیت ملموس در اختیار افراد قرار میدهد. مثلاً ابتدا نقشهساخت کشتی آماده میشود و سپس کارگران و متخصصان نسبت به ساخت آن اقدام میکنند و پس از مدتی کشتی مورد نظر ساخته خواهد شد.
شی یا آبجکت در برنامه نویسی شی گرا چیست ؟
در برنامه نویسی شی گرا هم از همین رویکرد استفاده از نقشهساخت استفاده میشود. نقشهساخت در شی گرایی ، همان کلاس است. بنابراین ابتدا کلاس مورد نظر ایجاد میشود و سپس ممکن است برنامه نویس بخواهد موجودیتی را از آن کلاس و براساس نقشهساخت مشخص شده به وسیله آن کلاس بسازد؛ به این موجودیت یا همان نمونه از یک کلاس خاص در برنامه نویسی شی گرا ، شی یا آبجکت گفته میشود.
در واقع، خودِ کلاس یک قالب و الگو به حساب میآید و برای ایجاد این قالب باید کدنویسیهای لازم را انجام داد. سپس در ادامه کار، وقتی برنامه نویس بخواهد یک شی را از آن کلاس بسازد، لازم است کدهایی را برای درخواست ایجاد آن شی جدید براساس کلاس مورد نظر بنویسد.
در نتیجه اینجا مشخص میشود که میتوان چندین شی را از یک کلاس ایجاد کرد. اما این روش چه مزیتی به همراه دارد و به چه دردی میخورد؟ برای توضیح بهتر مزیت برنامه نویسی شی گرا و استفاده از شی در برنامه نویسی در ادامه مثالی ساده ارائه شده است.
مثالی برای درک بهتر اهمیت شی گرایی در برنامه نویسی
برای مثال، فرض میشود کلاسی ساخته شده که نقشهساختی برای دادههای کارمندان یک سازمان به حساب میآید. در داخل این کلاس نام، نام خانوادگی و نشانی پست الکترونیک به عنوان مشخصههای یک کارمند تعیین شدهاند. حالا میتوان شیئی از این کلاس ایجاد و نام، نام خانوادگی و نشانی ایمیل مشخصی را برای آن شی تعیین کرد. در واقع میتوان بعداً و هر زمانی که نیاز بود همین کلاس را بهکار برد و کارمند دیگری را با نام و مشخصات متفاوت ایجاد کرد.
بنابراین میتوان چندین آبجکت در برنامه نویسی از یک کلاس ایجاد کرد. همه اشیای ایجاد شده تمام مشخصهها و خصوصیات کلاس اصلی و همه کارهایی که آن کلاس میتواند انجام بدهد را «به ارث میبرند» (Inherit)؛ مواردی مثل نام، نشانی ایمیل و سایر موارد توسط اشیاء ساخته شده از آن کلاس به ارث برده میشوند.
پیاده سازی عملکردهای مشخص روی آبجکت ها در برنامه نویسی
همچنین در صورت نیاز میتوان کدهایی را در کلاس نوشت که قابلیت عملکردی خاصی را انجام ميدهند. مثلاً در کلاس کارمند، میتوان کدهایی را نوشت که به وسیله آنها میتوان نام و آدرس ایمیل کارمندان را با هم ترکیب (ادغام) کرد و مثلاً یک ایمیل سازمانی تولید شود.
به دلیل اینکه کدهای مربوط به چنین قابلیت عملکردی در کلاس اصلی نوشته شدهاند، تمام اشیا ساخته شده از آن کلاس هم دارای این قابلیت عملکردی خواهند بود. مثلاً در مورد مثال کشتی، اگر کشتی جنگی باشد، در کلاس کشتی جنگی میتوان قابلیت عملکردی مشخصی را برای شلیک کردن تعریف و نام مشخصی هم (مثلاً Fire را) برای این قابلیت انتخاب کرد.
با اجرای این قابلیت در یک شی کشتی جنگی، عملیات شلیک اجرا میشود و کشتی، موشک را شلیک میکند. قطعه کدی که برنامه نویس برای عملیات شلیک نوشته در تمام کشتیهای ساخته شده از روی نقشه ساخت مربوطه یکسان و مشترک است؛ یعنی کدهای مربوط به نحوه انجام شلیک فقط یک بار در کلاس کشتی نوشته میشوند و کشتیها برای اجرای این کدها به نقشهساخت مراجعه میکنند.
در واقع دیگر لازم نیست هر بار کدهای مربوطه دوباره نوشته شوند. این بزرگترین مزیت شی گرایی و استفاده از شی در برنامه نویسی به حساب میآید. با استفاده از آبجکت در برنامه نویسی نیاز به کدنویسی بسیار کمتری وجود دارد و از نوشتن کدهای تکراری اجتناب میشود.
مقاله مرتبط: مفهوم کلاس در برنامه نویسی — همراه با نمونه مثال عملی
شی گرایی در برنامه نویسی چیست ؟
برنامه نویسی شی گرا یا همان شی گرایی در برنامه نویسی بر اساس مفهوم آبجکت در برنامه نویسی شکل گرفته است. در برنامه نویسی شی گرا هر یک از ساختارهای داده یا همان اشیا به همراه ویژگیها و خصوصیات مخصوص به خودشان تعریف میشوند. علاوه بر این، هر شی میتواند شامل رویهها و متدهای مربوط به خودش هم باشد.
مفهوم شی در برنامه نویسی در واقع مشتق شده از بحث بسیار مهم و کلیدی «برنامه نویسی شی گرا» یا همان «شی گرایی در برنامه نویسی» (Object Oriented Programming | OOP) است. بنابراین بهتر است حالا که آشنایی کافی با مفهوم آبجکت در برنامه نویسی به وجود آمده، توضیحاتی کلی و مختصر هم پیرامون مفهوم شی گرایی در برنامه نویسی ارائه شود. پیرامون بحث شی گرایی در برنامه نویسی ، پیش از این مقالهای در مجله تم آف منتشر شده است که مطالعه آن به علاقهمندان توصیه میشود:
- مقاله پیشنهادی: برنامهنویسی شیگرا (OOP) چیست؟ — به زبان ساده
مزایای شی گرایی در برنامه نویسی چیست ؟
نرم افزار بهوسیله استفاده از اشیایی طراحی شده است که میتوانند با یکدیگر به تعامل بپردازند. این مسئله مزیتهای متعددی را به همراه دارد که برخی از آنها در ادامه فهرست شدهاند:
- اجرای سریعتر و سادهتر
- فراهم کردن ساختاری واضح برای یک برنامه
- سادهتر شدن تغییر کدها، عیبیابی و نگهداری از برنامه
- آسانتر شدن استفاده مجدد از کدها
کاربرد شی گرایی در برنامه نویسی چیست ؟
شی گرایی در برنامه نویسی برای ساختاردهی به برنامهای نرم افزاری و تبدیل آن به نقشه ساخت کدهایی ساده و قابل استفاده مجدد (یعنی همان کلاسها) کاربرد دارد که برای ایجاد نمونههایی مجزا از اشیا مورد استفاده قرار میگیرد.
شی گرایی در برنامه نویسی این امکان را به وجود میآورد تا بتوان برنامه را به مسائلی کوچکتر (یک شی در هر دفعه) تقسیم کرد. به طبع حل این مسائل کوچکتر، آسانتر است. فناوری شی گرایی بهرهوری بیشتر برنامه نویسان، کیفیت بهتر نرم افزار و هزینه نگهداری کمتر را تضمین میکند. سیستمهای شی گرا را میتوان به سادگی از سیستمهای کوچک به سیستمهای بزرگ بهروزرسانی کرد.
در ادامه تعدادی از کاربردهای اصلی شی گرایی در برنامه نویسی فهرست شدهاند:
- طراحی رابط کاربری (از جمله پنجرهها و منوها)
- سیستمهای کلاینت سروری
- ابرمتن و ابررسانه
- طراحی سیستمهای زمان واقعی
- سیستمهای شبیهسازی و مدلسازی
- پایگاههای داده شی گرا
- سیستمهای تخصصی هوش مصنوعی
- شبکههای عصبی و برنامه نویسی موازی
- سیستمهای پشتیبانی تصمیم
- سیستمهای خودکار دفترکار
فیلم های آموزش برنامه نویسی
آبجکت در برنامه نویسی زیرمجموعهای از مفاهیم شی گرایی محسوب میشود و برنامه نویسی شی گرا هم یکی از مهمترین مباحث و موضوعها در یادگیری مهارت برنامه نویسی است. حوزه برنامه نویسی هر روز محبوبیت بیشتری پیدا میکند و این حیطه یکی از پرتقاضاترین زمینههای شغلی در دنیای کسب و کار به حساب میآید. درآمد بالای برنامه نویسی و موقعیتهای شغلی زیادی که در این حوزه وجود دارند، باعث شده است افراد بسیاری به دنبال یادگیری برنامه نویسی بروند. یکی از بهترین و مقرون بهصرفهترین شیوههای یادگیری برنامه نویسی، استفاده از دورههای آموزش آنلاین است.
پلتفرم آموزش آنلاین تم آف یکی از بزرگترین مجموعههای دورههای برنامه نویسی را در وب سایت خود ارائه کرده است. دورههای آموزش برنامه نویسی تم آف بسیار متنوع هستند و برای اکثر زبانهای برنامه نویسی، شیوهها، رویکردها و ابزارهای مختلف برنامه نویسی، دورههای متعددی ارائه شدهاند. به ویژه، فیلمهای آموزشی رایگان و غیر-رایگان متعددی هم برای آموزش مفاهیم شیگرایی در وب سایت تم آف و صفحه مجموعه دورههای برنامه نویسی وجود دارند که علاقهمندان میتوانند علاوهبر مطالعه این مقاله، برای یادگیری بیشتر از این دورهها هم استفاده کنند.
- برای دسترسی به مجموعه فیلم های آموزش برنامه نویسی + اینجا کلیک کنید.
ویژگی های آبجکت در برنامه نویسی چیست ؟
تمام آبجکتها و اشیای منحصربهفرد دارای ۳ خصوصیت اساسی هستند:
- هویت (Identity)
- وضعیت (State)
- رفتار (Behavior)
درک این خصوصیتها برای شناخت نحوه عملکرد اشیا و کارکرد منطق شی گرا بسیار حیاتی و مهم است.
خصیصه هویت آبجکت در برنامه نویسی چیست ؟
هویت یا Identity به این معناست که هر شی دارای شناساننده شی مربوط به خودش است و میتواند از سایر اشیا متمایز شود. نام هر شی یا هویت آن منحصربهفرد است و از سایر اشیاء قابل متمایزسازی است.
خصیصه وضعیت شی در برنامه نویسی چیست ؟
وضعیت یا State به خصوصیتها (Propertyهای) شی مربوط میشود. برای مثال، مقادیر متغیرهای یک شی در برنامه نویسی حاوی دادههایی هستند که میتوان آنها را افزایش داد، تغییر داد یا حذف کرد.
خصیصه رفتار آبجکت در برنامه نویسی چیست ؟
رفتار یا Behavior به عملیاتی مربوط میشود که شی میتواند آنها را انجام دهد. برای مثال، یک شی میتواند برای اجرای توابع و عملکردهای نرم افزاری به شیئی دیگر پاسخ بدهد.
چه موجودیت هایی را می توان به عنوان آبجکت تعریف کرد؟
براخی از موجودیتهایی را که در برنامه نویسی میتوان به عنوان شی تعریف کرد در ادامه فهرست شدهاند:
- متغیرها (Variables): متغیرها مقادیری قابل تغییر را در خود نگهداری میکنند.
- ساختارهای داده (Data Structures): ساختارهای داده قالبهای تعمیمیافته و تخصصی هستند که برای سازماندهی و پردازش دادهها مورد استفاده قرار میگیرند.
- تابعها (Functions): توابع، روالها و رویههای نامگذاری شدهای هستند که وظیفه تعریف شدهای را اجرا میکنند.
- متُدها (Methods): متدها نیز رویههای برنامهنویسی شدهای هستند که به عنوان اجزای یک کلاس والد تعریف میشوند و در همه نمونههای آن کلاس یعنی اشیاء میتوان از متدها استفاده کرد.
میتوان به وسیله شی در برنامه نویسی کارهایی را انجام داد و همچنین امکان انجام عملیات روی اشیا در برنامه نویسی هم وجود دارد. برای مثال یک تابع یا متد را میتوان برنامه نویسی کرد تا محتوای ساختار داده یا متغیر شی را ویرایش کند.
زبان های شی گرا و شی محور در برنامه نویسی چه هستند ؟
زبانهای شی محور یا مبتنی بر آبجکت در برنامه نویسی از تمام ویژگیهای برنامه نویسی شی گرا بهطور کامل پشتیبانی میکنند. امروزه اکثر زبانهای برنامه نویسی قابلیتهای شیگرایی را پشتیبانی میکنند و زبانهایی شی گرا به حساب میآیند. اما برخی از زبانهای برنامه نویسی بسته به نحوه پیادهسازی اصول OOP و همچنین بسته به اینکه چگونه استفاده میشوند، نسبت به سایر زبانها قابلیتهای شی گرایی بیشتری دارند.
برخی از زبانهایی که در ابتدا به عنوان «زبانهای برنامه نویسی رویهای» (Procedural Programming Language) شناخته میشدند، بعداً قابلیتها و ویژگیهای برنامه نویسی شی گرا به آنها اضافه شده است. برخی از رایجترین زبانهای برنامه نویسی شناخته شده به عنوان زبانهای شی گرا در ادامه فهرست شدهاند:
- جاوا : مقالههای مرتبط:
- شیگرایی در جاوا چیست؟ — تعریف، مفهوم و تمرین به زبان ساده
- مفاهیم برنامهنویسی شیئگرا در جاوا — به زبان ساده
- پایتون: مقاله مرتبط: برنامهنویسی شیگرا در پایتون
- C++: مقاله مرتبط: برنامه نویسی شیگرا در C++ — آموزش رایگان، به زبان ساده و جامع
- سیشارپ (C#)
- روبی (Ruby)
- PHP: مقاله مرتبط: شیگرایی در PHP و توضیح مفهوم کلاس و شی — به زبان ساده
- لیسپ
- متلب
- زبان R
- داتنت (.NET)
- جاوا اسکریپت: مقاله مرتبط: شیگرایی در جاوا اسکریپت — به زبان ساده
فهرست برخی از زبانهایی که شی گرا نیستند یا در ابتدا شی گرا نبودهاند نیز به شرح زیر است:
- زبان C
- کوبول (COBOL)
- پاسکال
- فرترن (Fortran)
- اسمبلر (Assembler)
بهطور کلی، زبانهای برنامه نویسی مُدرن از برخی یا تمام ویژگیهای برنامه نویسی شی گرا پشتیبانی میکنند؛ برخلاف آن، زبانهای برنامه نویسی غیر شی گرا اکثراً قدیمیتر هستند یا در حوزه تخصصی خاصی از آنها استفاده میشود.
مقاله مرتبط: بهترین زبانهای برنامهنویسی سال ۱۴۰۱ یا ۲۰۲۲ + کاربردها و منابع یادگیری
زبان های برنامه نویسی شی محور چه هستند؟
آن دسته از زبانهای برنامه نویسی که از کپسولهسازی و حالت (State | وضعیت) استفاده میکنند به عنوان «زبانهای شی محور« (Object Based | مبتنی بر شی) شناخته میشوند. زبانهای برنامه نویسی شی گرا هم جزء زبانهای مبتنی بر شی یا همان شی محور به حساب میآیند. برخی از زبانهای شناخته شده مبتنی بر شی در ادامه فهرست شدهاند:
- نسخههای اولیه زبان Visual Basic
- نسخههای اولیه زبان جاوا اسکریپت
- فرترن ۹۰
- Ada
بسیاری از زبانهای برنامه نویسی در ابتدا زبانهای مبتنی بر شی بودهاند یا حتی به عنوان زبانهای غیر شی محور شناخته میشدند، اما کمکم در طول سالها، ویژگیها و قابلیتهایی مرتبط با شی گرایی به نحوی به آنها اضافه شده است. برای مثال، نسخههای اولیه Visual Basic و جاوا اسکریپت بهطور کامل شی گرا نبودند، اما از زمان معرفی آنها تا کنون، رفته رفته قابلیتهای کامل برنامه نویسی شی گرا به آنها اضافه شده است.
مزایای شی در برنامه نویسی چیست ؟
امروزه استفاده از اشیا در برنامه نویسی به امری رایج و فراگیر تبدیل شده است، بهگونهای که اکثر زبانهای برنامه نویسی مُدرن از برخی یا تمام اصول و قواعد برنامه نویسی شی گرا پشتیبانی میکنند. برخی از مهمترین مزایای شی در برنامه نویسی و استفاده از اشیا در توسعه نرم افزار در ادامه فهرست شدهاند:
- امکان استفاده مجدد از کدها با استفاده از آبجکت در برنامه نویسی بسیار سادهتر میشود. میتوان آبجکت در برنامه نویسی را همانطور که هست چندین بار در برنامه استفاده کرد؛ یا این امکان وجود دارد که کمی شی را تغییر دهیم تا بتوانیم قابلیتهای آن شی را ویرایش کنیم و آنها را بهبود دهیم.
- وقتی مشکلی در برنامه بهوجود میآید، در صورت استفاده از شی در برنامه نویسی عیبیابی (Debugging) بسیار آسانتر میشود؛ زیرا میتوان یک شی دردسرساز را با شیئی سادهتر جایگزین کرد.
- میتوان آبجکت در برنامه نویسی را بدون افشا کردن جزئیات پیادهسازی آن مستقر کرد.
- پیمانهمندی (Modularity) شی در برنامه نویسی به این معنی است که میتوان اشیاء را به راحتی توسعه داد، بهروزرسانی کرد یا بهاشتراک گذاشت.
معایب آبجکت در برنامه نویسی چیست ؟
شی در برنامه نویسی مزیتهای بسیار زیادی دارند، اما این بدین معنا نیست که استفاده از آبجکت در برنامه نویسی هیچ معایبی را به همراه نخواهد داشت. در ادامه این بخش برخی از معایب استفاده از آبجکت در برنامه نویسی فهرست شدهاند:
- درک و یادگیری مفاهیم شی گرایی ممکن است دشوارتر بهنظر برسد و یادگیری برنامه نویسی با اشیا میتواند بسیار پیچیدهتر از یادگیری برنامه نویسی با زبانهای رویهای باشد.
- معمولاً برنامههای نوشته شده بر اساس اصول شی گرایی میتوانند تا حدودی بزرگتر از برنامههای رویهای باشند.
- برنامههای مبتنی بر شی گرایی ممکن است نسبت به برنامههای نوشته شده با استفاده از زبانهای رویهای بسیار کندتر اجرا شوند.
تفاوتهای میان انواع زبانهای برنامه نویسی ممکن است در خصوص برنامههای ساده و کوچک چندان اهمیتی نداشته باشند، اما در خصوص پروژههای پیچیدهتر برنامه نویسی، تفاوتهایی در میان زبانهای مختلف وجود دارند که باعث میشوند یک زبان نسبت به دیگری برای آن پروژه خاص برتری داشته باشد.
انواع خاص آبجکت در برنامه نویسی چیست ؟
انواع شی در برنامه نویسی را میتوان بر اساس آنچه اشیا انجام میدهند یا نحوه عملکرد آنها دستهبندی کرد. برخی از پراستفادهترین انواع آبجکت در برنامه نویسی در ادامه این بخش فهرست شدهاند:
- شی تابعی (Function Object) شامل یک تابع ساده است و مشابه توابع سیستم عامل یا تابعهای یک زبان برنامه نویسی عمل میکند.
- اشیاء تغییرناپذیر (Immutable Objects) بعد از ایجاد قابل تغییر نیستند. دادهها و وضعیت شی ثابت هستند و با استفاده از توابع هم تغییر نمیکنند.
- شی درجه یک (First-Class Object) شیئی که میتوان از آن بدون محدودیت استفاده کرد.
- اشیای نگهدارنده (Container Objects) اشیای دیگری را در خود شامل میشوند.
- اشیای سازگاه (Factory Objects) برای ساخت سایر اشیا طراحی میشوند.
- شی برتر (Metaobject) شیئی است که سایر اشیاء را میتوان با استفاده از آن ایجاد کرد (در مقایسه با کلاس، این نوع آبجکت در برنامه نویسی خودش شی است، درحالیکه کلاس شی به حساب نمیآید).
- شی پیشنمونه (Prototype Object)، نوعی شی تخصصی برتر است که با استفاده از آن سایر اشیا را میتوان بهوسیله کپی کردن ایجاد کرد.
- شی خدا (God Object) شیئی است که بیش از حد آگاهی دارد یا بیش از حد کار انجام میدهد. این نوع از آبجکت در برنامه نویسی نمونهای از ضد الگو (Anti-Pattern) به حساب میآید.
- شی یگانه (Singleton Object) شیئی است که تنها نمونه کلاس خود در طول چرخه حیات برنامه به حساب میآید.
- شی فیلتر (Filter Object) شیئی است که جریانی از دادهها را به عنوان ورودی خود دریافت و آن را به خروجی یک شی تبدیل میکند. اغلب دادههای جریان ورودیها و خروجیها، جریانهایی از کاراکترها هستند، اما این دادهها ممکن است جریانهایی از اشیای دلخواه هم باشند. این موارد اغلب در داخل لفافها (Wrapper) مورد استفاده قرار میگیرند، زیرا آنها پیادهسازی فعلی را با انتزاع مورد نیاز در سمت توسعه دهنده پوشش میدهند.
این اشیا و سایر انواع شی در برنامه نویسی مبتنی بر الگوهای طراحی هستند که راهکارهای تکرارپذیری را برای وظیفههای رایج در برنامه نویسی ارائه میدهند. این الگوها خودشان شی به حساب نمیآیند، اما برای توسعه و ساخت اشیایی استفاده میشوند که قابلیتهای عملکردی آن الگوها را تامین میکنند.
مثال شی در برنامه نویسی پایتون
در این مقال فرض میشود کلاسی از نوع طوطی (Parrot) وجود دارد و میخواهیم شیئی را از این کلاس بسازیم:
obj = Parrot()
در خط کد بالا، obj شیئی از کلاس Parrot
به حساب میآید. فرض میشود جزئیاتی در مورد طوطیها وجود دارد. حال در این مثال نحوه ساخت کلاس و اشیای نوع طوطی آموزش داده شده است. در کدهای زیر ابتدا کلاس مورد نظر ایجاد و سپس اشیایی براساس آن ساخته شدهاند:
class Parrot:
# class attribute
species = "bird"
# instance attribute
def __init__(self, name, age):
self.name = name
self.age = age
# instantiate the Parrot class
blu = Parrot("Blu", 10)
woo = Parrot("Woo", 15)
# access the class attributes
print("Blu is a {}".format(blu.__class__.species))
print("Woo is also a {}".format(woo.__class__.species))
# access the instance attributes
print("{} is {} years old".format( blu.name, blu.age))
print("{} is {} years old".format( woo.name, woo.age))
خروجی کدهای فوق در ادامه آمده است:
Blu is a bird Woo is also a bird Blu is 10 years old Woo is 15 years old
در برنامه فوق، کلاسی با نام Parrot
ایجاد شده است. سپس، Attributeهای (صفتهای) مربوطه تعریف شدهاند. Attributeها خصوصیتهای یک آبجکت در برنامه نویسی به حساب میآیند.
این خصوصیتها در داخل متد __init__
در کلاس می شوند. این متدها Initializer (شروع کننده) است که به محض ایجاد شی ایجاد میشود.
سپس در کدهای بالا، نمونههایی از کلاس Parrot
ایجاد شدهاند. در اینجا blu
و woo
مرجعهایی (مقدارهایی) برای اشیا جدید مربوطه به حساب میآیند.
میتوان با استفاده از __class__.species
به صفتهای کلاس دسترسی پیدا کرد. صفتهای کلاس برای تمام نمونههای کلاس یکسان هستند. بهطور مشابه، میتوان به صفتهای نمونه مربوطه با استفاده از blu.name
و blu.age
دسترسی یافت. اگرچه، صفتهای نمونه برای هر نمونه از کلاس متفاوت هستند.
شی توزیع شده در برنامه نویسی چیست ؟
رویکرد برنامه نویسی شی گرا تنها یک مدل برنامه نویسی به حساب نمیآید. از این شیوه میتوان به خوبی به عنوان یک «زبان توصیف واسط» (Interface Description Language) یا به اختصار IDL برای «سیستمهای توزیع شده» (Distributed Systems) هم استفاده کرد. اشیای مورد استفاده در مدل محاسبات توزیع شده معمولاً دانهبندی بزرگتری دارند، دوامشان بیشتر است و نسبت به اشیای برنامه نویسی بیشتر خدمات محور هستند.
یک روش استاندارد برای بستهبندی اشیای توزیع شده از طریق یک زبان توصیف واسط یا همان IDL محقق میشود. با استفاده از IDL، تمام جزئیات مربوط به شی سرور توزیع شده از مشتری پنهان میشوند. این جزئیات مواردی نظیر این هستند که شی در کدام کامپیوتر قرار دارد، این شی از چه زبان برنامه نویسی استفاده میکند، سیستم عامل چیست و سایر موارد مربوط به پلتفرم چه هستند.
همچنین IDL نیز معمولاً بخشی از یک محیط توزیع شده به حساب میآید که سرویسهایی نظیر تراکنشها، ثًبات و پایداری را برای تمام اشیا به گونهای یکنواخت فراهم میکند. ۲ تا از محبوبترین استانداردها برای اشیای توزیع شده، استاندارد COBRA از جانب گروه مدیریت شی و DCOM ارائه شده توسط مایکروسافت به حساب میآیند.
سایر افزونه های مبتنی بر مفهوم پایه آبجکت در برنامه نویسی برای کمک به حیطه محاسبات توزیع شده
علاوهبر اشیای توزیع شده، تعدادی از افزونههای دیگر نیز براساس مفهوم پایهای آبجکت در برنامه نویسی برای تقویت محاسبات توزیع شده ارائه شدهاند که فهرستی از آنها در ادامه آمده است:
- اشیای پروتکل (Protocol Objects) اجزایی از یک مجموعه پروتکل (Protocol Stack) هستند که ارتباط شبکه را در داخل یک واسط شی گرا محصور میکنند.
- اشیای تکثیر شده (Replicated Objects) گروههایی از اشیای توزیع شده هستند که به آنها همتا یا ماکت (Replica) گفته میشود. این اشیا پروتکلی توزیع شده و چندجانبه را برای رسیدن به پایداری بالا میان حالتهای داخلی آنها و پاسخ به درخواستها بهگونهای منظم اجرا میکنند.
- اشیای توزیع شده زنده (Live Distributed Objects) یا بهطور خلاصهتر، «اشیای زنده»، مفهوم شی تکثیر شده را به گروهی از ماکتها بسط داده و عمومیسازی کرده است. این گروهها احتمالاً ممکن است از هر نوع پروتکل توزیع شدهای استفاده کنند که احتمالاً نتیجه آن تنها پایداری ضعیف میان وضعیتهای محلی آنها خواهد بود.
جمعبندی
آبجکت یا شی در برنامه نویسی یکی از مهمترین مفاهیم شی گرایی به حساب میآید. یکی از اولین مباحثی که در برنامه نویسی شی گرا مطرح میشود، مفهوم آبجکت در برنامه نویسی است. شی نمونهای از یک کلاس در برنامه نویسی است. مفهوم کلاس در برنامه نویسی هم یعنی نقشهساختی برای ایجاد موجودیتهایی با ویژگیها و رفتار یکسان که همان اشیا هستند.
در این مقاله بهطور جامع به موضوع آبجکت در برنامه نویسی پرداخته شد و ضمن پاسخ به این سوال که شی در برنامه نویسی چیست ، تفاوت آن با کلاس، مزیتهای استفاده از آن، ویژگیهای شی، انواع آبجکت در برنامه نویسی و بسیاری از موارد دیگر شرح داده شدند. امید است این مقاله مفید واقع شود.