برنامه نویسی شی گرا در c++

سیمولا ویکی‌پدیا، دانشنامهٔ آزاد

آزمایشگاه تحقیقات سیمولا یک مؤسسه تحقیقاتی است که بخاطر زبان سیمولا نامگذاری شده‌است، و نیگارد یک موقعیت کاری پاره وقت از سال بازگشایی در۲۰۰۱ آنجا داشت. یعنی سی‌شارپ یکی از زبان‌هایی بود که برای ساخت سیستم‌عامل ویندوز ازش استفاده شد. هر کسی باید یاد بگیره که چه‌طور کد بزنه چرا که برنامه‌نویسی به شما یاد می‌ده که چه‌طور فکر کنید. سطوح دسترسی کلمات رزرو شده ای هستند که بر روی اعلان یک کلاس ، متد ، صفت ، فیلد و دیگر اعضای یک کلاس میتوانند اعمال شوند. برای دریافت نرم افزار های مورد نیاز مطالعه کتاب ها با لینک مستقیم بر روی اینجا کلیک کنید. متد overriding یعنی با داشتن دو یا چند متد با یک نام و یک مشخصه یکسان ولی با پیاده سازی متفاوت می باشد.

فایل‌های سربرگ باید حاوی مقادیر ثابت، نمونه‌های اولیه تابع و تعریف‌های کلاس یا سازه باشند. حال ممکن است در یک ماه خاص، وضعیتی به وجود بیاید که به هر دلیلی یکی مسئولین بخش مالی نیاز به همه داده‌های مربوط به فروش داشته باشد. در چنین موردی، این فرد اجازه دسترسی مستقیم به داده‌های بخش فروش را نخواهد داشت. او ابتدا باید با مسئول دیگری در بخش فروش در ارتباط باشد و اجازه دسترسی به داده‌ها را درخواست کند. در اینجا، داده‌های بخش فروش و کارمندانی که می‌توانند این داده‌ها را دستکاری کنند، همگی تحت نام «بخش فروش» بسته‌بندی شده‌اند. نام یک عضو داده باید یک اسم یا عبارت اسمی باشد که از چند کلمه تشکیل شده است.

این کلاس شامل دو عضو داده radius (از نوع داده double) و متغیر color (از نوع رشته‌ای) است. سیمولا تأثیرگذار در توسعه صحبت کوتاه و بعد زبان‌های برنامه‌نویسی شی گرا بود. آن همچنین کمک به الهام بخشی مدل عملگر از محاسبات هم‌زمان کرد، هر چند سیمولا تنها از همکاری و روال (و نه همزمانی) پشتیبانی می‌کند. در این مثال یک شیء با نام تلویزیون تعریف شده که از نوع کلاس تلویزیون است. سپس «ویژگی‌های» (Property) تلویزیون ازجمله انواع کانال‌ها، میزان صدای مختلف و سایر موارد در آن تعریف شده‌اند که به عنوان نمونه‌های کلاس در نظر گرفته می‌شوند. می‌توان توابعی ایجاد کرد که این ویژگی‌ها را تغییر بدهند و این توابع به عنوان متدهای تلویزیون شناخته شده‌اند.

در ادامه این بخش برخی از ویژگی‌ها و مزایای مهم Abstraction در برنامه نویسی شی گرا شرح داده شده‌اند. یکی از مفاهیم اصلی زبان‌های برنامه نویسی پرکاربرد، مفهوم شی گرایی است که برنامه نویسان و توسعه دهندگان پروژه‌های نرم‌افزاری در اکثر برنامه‌های خود از آن استفاده می‌کنند. افراد تازه‌کاری که علاقه‌مند به حوزه برنامه نویسی هستند، می‌توانند با مطالعه مطلب حاضر به پرسش‌هایی پیرامون «شی گرایی چیست»، پاسخ دهند و با مفاهیم اصلی و کلیدی این رویکرد از برنامه نویسی آشنا شوند. با توجه به مشکلات دو رویکرد برنامه نویسی ساختار یافته و رویه‌گرا، رویکرد جدیدی با نام رویکرد برنامه نویسی شی گرا به وجود آمد تا بر روی مفاهیم دنیای واقعی، یعنی داده‌ها، تمرکز داشته باشد. همچنین، در شی گرایی ساختاری از برنامه نویسی ارائه شدکه در آن دسترسی از خارج به داده امکان‌پذیر نیست و به دنبال آن سطح امنیت برنامه بسیار افزایش پیدا می‌کند.

این به این معنی است که در مثال بالا همه کلاس‌ها می‌توانند نمونه شوند، هرچند فراخواندن یک روش مجازی خالص خطای زمان اجرا تولید می‌کند. برای اینکه بتوانیم یک شی از نوع مورد نظر خود بسازیم نیاز به یک الگو داریم و در برنامه‌نویسی شی‌گرا به این الگو، Class گفته می‌شود. در واقع، این کلاس است که مشخص می‌کند یک شی، چه نوع خصوصیات و رفتارهایی داشته باشد. به‌طور مثال، اگر کلاس «وسیله نقلیه چهار چرخ» داشته باشیم، آنگاه بیشتر خودروهای اطراف ما می‌توانند شیئی از این کلاس باشند. بدین منظور، می‌توان برای رسیدن به پاسخ پرسش «شی در شی گرایی چیست»، از مثالی قابل لمس در دنیای واقعی نظیر خودرو استفاده کرد. خودرو را می‌توان به عنوان یک مفهوم کلی در نظر گرفت که دارای ویژگی‌هایی مانند نام، رنگ، سال تولید، اندازه و تعداد چرخ‌ها است.

یک سازنده Copy شی جدیدی را به وسیله کپی کردن یک شی فعلی از همان نوع می‌سازد. به بیان دیگر، یک سازنده Copy آرگومانی را می‌گیرد که شیئی از همان کلاس است. برای کلاس Circle که در مثال بالا تعریف شد، یک سازنده به صورت زیر تعریف می‌شود. فراخوانی تابع getArea()‎ بدون مشخص کردن نمونه (شی) بی‌معنی است، چرا که شعاع (در مثال فوق) مشخص نخواهد بود. زیرا ممکن است نمونه‌های بسیاری از دایره وجود داشته باشد که هر کدام شعاع مربوط به خود را داشته باشند.

برای درک بهتر موضوع، قطعه کد مثال Upcasting در ادامه ارائه شده است. ازجمله #C# ،F و سایر موارد از ترکیب وراثت چندتایی و چندمسیره پشتیبانی نمی‌کنند. بنابراین، وراثت ترکیبی توسط این زبان‌های برنامه نویسی پشتیبانی نمی‌شود. به عنوان مثال در تصویر زیر یک وراثت ترکیبی از ترکیب وراثت سلسله‌مراتبی و چندتایی ارائه شده است. این فرآیند با متصل کردن داده‌ها و کدها به یکدیگر و ایجاد یک واحد منفرد، امنیت آن‌ها را تأمین و از سوء‌استفاده و دخالت عوامل خارجی جلوگیری می‌کند.

سپس، کلاس جدیدی به عنوان کلاس «فرزند» (Child) اعلان می‌شود که متدهایی مرتبط به خودش دارد. بنابراین، زمانی که کلاس فرزند از کلاس والد ارث بری می‌کند، کلاس فرزند می‌تواند از متدهای موجود در کلاس والد در کنار متدهایی استفاده کند که خودش در کلاس دارد. به این رویکرد ارث بری یا وراثت یا همان Inheritance در برنامه نویسی شی گرا گفته می‌شود. برای مثال، رنگ خودرو، نوع موتور خودرو و سایر موارد مثال‌هایی از کلاس هستند. طبق تعاریف بیان شده، می‌توان هر تعداد کلاسی که مورد نیاز برنامه است را تولید کرد و محدودیتی در ایجاد کلاس‌ها برای یک برنامه وجود ندارد. در بخش بعدی از مقاله «اصول برنامه نویسی شی گرا» به بررسی «متُدها» پرداخته شده است.

در این روش، سورس‌کد برنامه‌ را در قالب قطعه کدهایی کوچک یا همان «اشیا» (Objects) می‌نویسند. شما می‌توانید هر یک از این مؤلفه‌ها را به دفعات در طول برنامه خود استفاده کنید. متد Overriding با استفاده از متغیر مرجع (Reference Variable) کلاس پایه انجام می‌شود. اینکه کدام متد باید فراخوانی شود، بر اساس شیء مشخص شده است که توسط متغیر مرجع به آن ارجاع داده می‌شود. Upcasting زمانی انجام می‌شود که متغیر مرجع کلاس والد به شی کلاس فرزند اشاره کند.

در بخش بعدی از این مقاله، به بررسی مؤلفه‌های اصول برنامه نویسی شی گرا پرداخته شده است. کپسوله سازی یا همان «Encapsulation» یکی از اصول مهم برنامه نویسی شی گرا به حساب می‌آید و به معنی قرار دادن داده‌ها و ویژگی‌ها یا متدها و اعضای داده‌ها در یک واحد است. در کلاس‌های یک برنامه شی گرا، داده و ویژگی‌هایی وجود دارند و عملیاتی روی داده‌ها انجام می‌شود. کپسوله سازی باعث افزایش امنیت برنامه می‌شود؛ زیرا هر چیزی مربوط به یک کار واحد در آن گروه‌بندی شده است و دسترسی به داده‌ها بر اساس نیاز انجام خواهد شد. «برنامه نویسی شی گرا» (Object-Oriented Programming | OOP) به عنوان یکی از اصلی‌ترین رویکردهای برنامه نویسی محسوب می‌شود. تقریباً تمامی برنامه نویسان و توسعه دهندگان با این مفهوم آشنا هستند و در توسعه پروژه‌های نرم‌افزاری خود از آن استفاده می‌کنند.

یک شی در حافظه فضا اشغال می‌کند و دارای یک نشانی شبیه به یک رکورد در زبان پاسکال یا ساختار (Structure) یا انجمن (Union) در زبان C است. وقتی که یک برنامه اجرا می‌شود، اشیا از طریق ارسال پیام با یکدیگر ارتباط برقرار می‌کنند. برای تقویت مهارت‌های خود در زمینه برنامه‌نویسی شی گرا می‌توانید از آموزش‌های آورده شده در ادامه استفاده کنید. قرار است تا کلاس‌های SportsCar و SUV  به‌عنوان کلاس‌های فرزند، خصوصیاتی را از این کلاس والد به ارث ببرند. هر کدام از این زیرکلاس‌ها در عین حال که خصوصیات و متدهای مخصوص به خود را می‌توانند داشته باشند، متد start و خصوصیات برند و رنگ را نیز از کلاس والد به ارث می‌برند. اکنون، می‌خواهیم ۲ مفهوم کلاس و شی را با مثالی جالب برایتان توضیح دهیم.

مشخصه‌ها یا «متغیرها» (Variables) به عنوان «ویژگی‌های» (Characteristics) شی تلقی می‌شوند. زمانی که شی جدیدی ساخته می‌شود، می‌توان اطلاعات آن شی را با استفاده از مشخصه‌ها ذخیره کرد. در مثال قبل، ماشین بنز، شی جدیدی است که مشخصه‌های مختلفی نظیر نام، رنگ، تعداد چرخ‌ها، تعداد پنجره‌ها و سایر ویژگی‌ها دارد. فراگیری مرجع آموزش های برنامه نویسی است و همیشه در تلاش است تا با ارائه محتوای باکیفیت و آموزشی، به شما کمک کند تا مهارت های خود را ارتقا دهید. سازنده استاتیک باعث می شود بلافاصله قبل از اولین متد استاتیک در کلاس را فراخوانی کند یا بلافاصله قبل از اولین نمونه ای که در کلاس ایجاد می شود .

در ادامه، برخی از اصطلاحاتی معرفی شده‌اند که در مضمون ارث‌بری به کار برده می‌شوند. کتابراه مرجع قانونی دانلود کتاب الکترونیکی و دانلود کتاب صوتی است که امکان دسترسی به هزاران کتاب، رمان، مجله و کتاب صوتی و همچنین خرید کتاب الکترونیک از طریق موبایل تبلت و رایانه برای شما فراهم می‌کند. شما با استفاده از کتابراه همیشه و همه جا به کتاب‌ها و کتابخانه خود دسترسی دارید و می‌توانید به سادگی از هر فرصتی برای مطالعه استفاده کنید. در کتابراه برای همه سلیقه‌ها از داستان، رمان و شعر تا روانشناسی، تاریخی، علمی، موفقیت و... اپلیکیشن کتابخوان کتابراه برای اندروید، IOS و ویندوز در دسترس است.

برنامه منبع برای ابزار جنسن به همین خاطر باید فراخوانی با نام را برای پارامترها هنگامی که توسط یک گردآور سیمولا گردآوری شده را مشخص کند. ایشان علاقه زیادی به تکنولوژی  دارد و بیش از سه سال است که درحال یادگیری برنامه‌نویسی است و در حال حاضر چند تا بازی ساخته و در مایکت و بازار به فروش می‌رود. وی از ابتدای سال 1403 شروع به تدریس کرده و ضبط دوره‌های آموزشی کرده است.مهارت ایشان در سی شارپ و یونیتی و فلاتر و وردپرس است. مفهوم «کپسوله‌سازی» (Encapsulation) به این معنی است که داده‌ها و متدها در محفظه‌ای امن قرار گرفته‌اند و تنها به‌واسطه یک اینترفیس یا رابط عمومی می‌توان به آن‌ها دسترسی داشت. به‌عنوان مثالی دیگر، اگر بخواهیم انتزاع داده‌ها را در مورد اتومبیل‌ها بیان کنیم، پنهان‌سازی جزئیات داخلی خودرو از جمله موتور خودرو، جعبه‌دنده، لنت‌‌ها و غیره، این مفهوم را به‌خوبی نشان می‌دهد. به بیان دیگر، انتزاع داده‌ها در مثال خودرو یعنی اینکه ما بدون اطلاع ازجزئیات فنی آن، از خودرو استفاده می‌کنیم.

بنابراین، این ویژگی‌ها و اشیا باعث به وجود آمدن شی خودرو می‌شوند. در بخش بعدی از این مقاله به بررسی مؤلفه کلاس در برنامه نویسی شی گرا پرداخته شده است. در این نوع از وراثت، کلاس والد شامل بیش از یک کلاس پایه می‌شود، ارث بری چندتایی توسط برخی از زبان‌های فریم ورک NET. ازجمله #C# ،F و سایر موارد و زبان برنامه نویسی جاوا پشتیبانی نمی‌شود. در مثال زیر، کلاس C، ویژگی‌ها و رفتارهای کلاس B و A را در یک سطح به ارث می‌برد.

به بیان دقیق‌تر، اشیای زبان برنامه نویسی شی گرا ماهیت‌های دنیای واقعی را تعریف می‌کنند و می‌توانند اطلاعاتی را با یکدیگر رد و بدل کنند. «متدها» (Method) توابعی هستند که داخل یک کلاس تعریف می‌شوند و رفتارهای اشیا را توصیف می‌کنند. استفاده از هر متد موجود در تعریف کلاس، با ارجاع به شی نمونه شروع می‌شود. به علاوه «زیر روال‌های» (Subroutine) موجود در اشیا، «متدهای نمونه» (Instance Method) نامیده می‌شوند. برنامه نویس‌ها از متدها به منظور استفاده مجدد از کدها یا حفظ عملکرد کپسوله‌سازی درون یک شی در یک زمان استفاده می‌کنند.

البته خود کلاس یک نوع داده (data type) نیست اما یک طرح کلی بوده از این که شی ساخته شده از کلاس شامل چه عملیات‌هایی(Function) بوده و چه اطلاعاتی در آن ذخیره می‌شود. همانطور که اشیا در دنیای واقعی رفتار میکنند، در دنیای نرم افزار نیز همانگونه اند. به عنوان مثال ماشین ها شتاب میگیرند یا انسان ها راه میروند(انسان نیز یک شی است) یا هواپیماها پرواز میکنند و ماهی ها شنا میکنند. به طور مشابه ما در نرم افزار نیز ما اشیایی میسازیم که رفتاری خاص را انجام میدهند. و ما از آن برنامه انتظار داریم که رفتارهای اشیا را انجام دهند(راه رفتن، پرواز کردن …).

کلاس Car در کد‌های برنامه‌ زیر، ویژگی‌هایی نظیر برند، رنگ بدنه و میزان سوخت خودرو را محصور یا به اصطلاح کپسوله می‌کند. در این حالت، با اینکه می‌توان عمل سوخت‌گیری و رانندگی را انجام داد اما اطلاع از میزان سوخت، به متدهای تعریف شده محدود شده است. خوب است بدانید که به این فرایند، نمونه‌سازی می‌گویند و ما در حقیقت یک «نمونه» (Instance) از کلاس مورد نظر ساخته‌ایم. نمونه جدید از کلاس «گربه» می‌تواند خصوصیات مخصوص به خود را داشته باشد و رفتارهای مشخص شده را انجام دهد. به بیان دقیق‌تر، یک Class تعیین می‌کند که ماشین اسباب‌بازی ما، «۴ عدد چرخ» و ویژگی «رنگ بدنه» را به‌عنوان خصوصیات خود داشته باشد و از سویی دیگر به‌عنوان قابلیت‌هایش می‌تواند «به سمت جلو یا عقب حرکت کند».

یک عضو داده (متغیر) دارای یک نام (یا شناسه) و یک نوع است که مقداری از آن نوع خاص را نگهداری می‌کند. همچنین، یک عضو داده می‌تواند نمونه‌ای از یک کلاس خاص باشد که در ادامه پیرامون آن بحث خواهد شد. در ادامه، نکاتی در مورد قرارداد نام‌گذاری (Naming Convention) عضو داده شرح داده شده است. بر خلاف سخت‌افزار، سر‌هم‌بندی یک نرم‌افزار با ادغام قطعات نرم‌افزاری کار بسیار دشواری است. از زمان ظهور کامپیوتر تا کنون، برنامه‌های نرم‌افزاری بسیاری نوشته شده‌اند. اما، برای هر برنامه جدید، لازم بود چرخ را دوباره اختراع کرد و همه چیز را از اول نوشت.

این رویکرد از برنامه نویسی برای برنامه‌های بزرگ، پیچیده و فعال در بروزرسانی و «نگهداری» (Maintain) آن‌ها مناسب است. این برنامه‌ها شامل روش‌هایی برای ساخت و طراحی ازجمله برنامه‌ها و اپلیکیشن‌های موبایل هستند، برای مثال می‌توان از برنامه نویسی شی گرا در تولید نرم افزارهای شبیه‌سازی سیستم استفاده کرد. برای پیاده‌سازی شی گرایی در پروژه‌های خود لازم است از زبان‌های برنامه نویسی دارای قابلیت شی گرایی استفاده شود که به آن‌ها زبان برنامه نویسی شی گرا می‌گویند. پیش از پرداختن به موضوع زبان برنامه نویسی شی گرا، در ابتدا بهتر است به‌طور مختصر و به بیان ساده به توضیح مفهوم زبان برنامه نویسی پرداخته شود. زبان برنامه نویسی شامل مجموعه‌ای از دستورات است که این دستورات مشخص می‌کنند کامپیوتر چه وظیفه‌ای را باید انجام دهد.

به طور کلی، اصطلاح شی به شکل آزادانه‌تر و گاهی برای اشاره به کلاس هم استفاده می‌شود. در بخش بعدی مقاله برنامه نویسی شی گرا در C++‎ توضیحات بیشتری راجع به اشیا در C++‎ ارائه شده است. کلاس یک نوع داده تعریف شده توسط کاربر است که داده‌ها و توابع عضو مربوط به خودش را نگهداری می‌کند. می‌توان به این داده‌ها و توابع از طریق ایجاد یک نمونه (Instance) از آن کلاس دسترسی پیدا کرد. سازماندهی یک برنامه به صورت شی گرا، آن را برای توسعه با روش‌های گروهی و مشارکتی نیز سودمند می‌کند. از مزایای کلی برنامه نویسی شی گرا می‌توان به «قابلیت استفاده مجدد از کدها» (Code Reusability)، «مقیاس‌پذیری» (Scalability) و «کارایی» (Efficiency) بالا اشاره کرد.

یک زبان برنامه نویسی شی گرا دارای چهار خصوصیت یا مشخصه بسته‌بندی (کپسوله‌سازی)، ارث‌بری، چندریختی و انتزاع است. ضمن اینکه، مفاهیم کلاس و شی نیز از جمله موجودیت‌های کلیدی در شی گرایی به حساب می‌آیند. سیمولا ۶۷ اشیاء، کلاس‌ها، زیر کلاس‌ها، متدهای مجازی، هم‌روال، شبیه‌سازی رویداد گسسته و ویژگی‌های جمع‌آوری زباله را معرفی کرد. سیمولا اولین زبان برنامه‌نویسی شی گرا در نظر گرفته شده‌است و چارچوبی برای بسیاری از ویژگی‌های زبان‌های شی گرای امروزی تهیه کرده‌است. یکی دیگر از دلایل اهمیت آن این است که سیمولا هنوز هم برای انواع مختلف از درس‌های دانشگاه استفاده می‌شود. دانستن اینکه برنامه نویسی شی گرا چیست، از این بابت حائز اهمیت است که مزایای متعددی را برای شما فراهم می‌کند.

می توان از هر کلاس یا متد تعریف شده با برنامه ای که در آن عضو تعریف شده دسترسی داشت . کلمه کلیدی متد internal اجازه می دهد برای کلاس ها به مقادیر توابع دسترسی داشته باشند.کلاس ها برای مقادیر و اعضای خود می تواند قابل رویت باشد. کلیدواژه سطح دسترسی عمومی یک کلاس متغیر یا تابع است و می تواند توسط هر شی دیگر یا تابع دسترسی داشته باشد. اولی نقطه ورود در برنامه و دیگری اطلاعات می باشد که دارای دو پارامتر نام و شهر می باشد . اشیا در کلاس ها استفاده می شوند، در اینجا یک متغیر اعلان می شود که بر ایجاد یک شی یا نمونه ای از کلاس اشاره دارد.یک متغیر توسط کلیدواژه var شناسایی می شود. زیرا وقتی که یک شی با مقدار به یک تابع ارجاع داده می‌شود، سازنده Copy برای ایجاد یک همتا (Clone) از آرگومان به کار می‌رود.

زبان‌های اسمبلی به منظور طراحی «ریزپردازنده‌ها» (Microprocessors) استفاده می‌شدند. به عبارتی، با اختراع ریزپردازنده‌ها، به مراتب از زبان‌های اسمبلی در صنعت بیش از پیش استفاده شد. با این حال، این زبان‌ها پاسخ‌گوی طراحی و توسعه نرم‌افزارهای کاربردی امروزی نبودند. همین امر سبب شد تا انواع رویکردهای برنامه نویسی «ساختاریافته» (Structured Programming) و «رویه‌گرا» (Procedural Programming) در اواخر دهه 1970 و اوایل دهه 1980 ظهور پیدا کنند. طراحی شده است که همین امر برنامه نویسی را برای پلتفرم‌های مایکروسافت نظیر ASP ساده‌تر می‌کند. افراد مبتدی می‌توانند برای شروع کار خود در حوزه برنامه نویسی، از این زبان استفاده کنند، زیرا یادگیری آن ساده است و بسیاری از شرکت‌ها بر روی توسعه پروژه‌های نرم‌افزاری به زبان C#‎ تمرکز دارند.

کلاس‌ها در گروه‌بندی اعضای داده و توابع عضو با استفاده از مشخص کننده‌های دسترسی (Access Specifier) به برنامه‌نویس کمک می‌کنند. یک کلاس می‌تواند تصمیم بگیرد که کدام عضو داده برای جهان بیرونی قابل مشاهده خواهد بود. سیمولا یک نام برای دو زبان برنامه‌نویسی سیمولا ۱ و سیمولا ۶۷ است. این زبان ها در ۱۹۶۰ در مرکز محاسبات نروژی در اسلو، توسط اوله-یوهان دال و کریستین نیگارد توسعه یافتند. نحو آن نسبتاً به الگول ۶۰ وفادار است و همان‌طور که از نام آن پیداست، برای انجام شبیه‌سازی طراحی شده‌است. پلی مورفیسم زمان اجرا با نام مقیدسازی پویا (Dynamic Binding) نیز معرفی شده است.

یک اصلاح کننده کنترل دسترسی (Access Control Modifier) را می‌توان برای کنترل رویت‌پذیری یک عضو داده یا تابع عضو در داخل یک کلاس مورد استفاده قرار داد. نحوه تعریف یک کلاس شرح داده شد، حال در ادامه به نحوه ایجاد یک شی در C++‎ پرداخته شده است. برای مثال، در صورتی که هر یک از حیواناتی مثل سگ، گربه و گاو به عنوان یک کلاس در نظر گرفته شوند، می‌توان گفت که همه این کلاس‌ها از کلاسی به نام حیوان مشتق شده‌اند. به عنوان یک مثال جهان واقعی از کپسوله‌سازی، می‌توان یک شرکت تجاری را در نظر گرفت. در یک شرکت، بخش‌های مختلفی مثل بخش حسابداری، بخش مالی، بخش فروش و سایر بخش‌ها وجود دارد. در بخش مالی تمام تراکنش‌های مالی مدیریت و همه اسناد و داده‌های مربوط به دارایی نگهداری می‌شوند.

بدین‌ترتیب، دیگر نیاز نیست اطلاعاتی از نحوه پیاده‌سازی عملکرد تابع و انجام محاسبات آن به منظور بازگرداندن در اختیار داشته باشیم. در تصویر فوق تنها تعداد محدودی از دوره‌های موجود در این پلتفرم آموزشی به عنوان نمونه نشان داده شده‌اند. زیرا صفت‌ها یا متغیرهای ایستا در تمام برنامه و فایل‌های سربرگ پخش شده‌اند. نمی‌توان بخشی از یک برنامه C را بُرید، آن را به برنامه دیگر اضافه کرد و از برنامه انتظار داشت بدون نیاز به تغییرات گسترده و به راحتی اجرا شود. عضو داده یک کلاس معمولاً با اصلاح کننده دسترسی خصوصی از جهان خارج پنهان می‌شود.

انتخاب زبان برنامه نویسی مناسب به عنوان یکی از مهم‌ترین مسئولیت‌های برنامه نویسان به شمار می‌رود، زیرا بخشی از موفقیت محصول نهایی به انتخاب زبان بستگی دارد. پیش از انتخاب زبان برنامه نویسی شی گرا برای یادگیری، باید هدف خود را در حوزه برنامه نویسی مشخص کرد. هر یک از حوزه‌های برنامه نویسی، نیازمند مهارت‌های خاص خود هستند و باید مسیرهای جداگانه‌ای را برای رسیدن به جایگاه شغلی مرتبط با آن‌ها طی کرد. از زبان روبی برای ساخت برنامه‌های مبتنی بر وب و پویا استفاده می‌شود. این زبان علاوه بر برنامه نویسی شی گرا، از رویکرد برنامه نویسی تابعی نیز پشتیبانی می‌کند.

برای مثال، متد راندن یک خودرو، حالت خودرو را از پارک شده به در حال حرکت تغییر می‌دهد. در بخش بعدی از مقاله «اصول برنامه نویسی شی گرا» به تعریف نمونه در این نوع برنامه نویسی پرداخته شده است. در مطلب حاضر، پس از معرفی مختصری از مفاهیم و ویژگی‌های رویکرد برنامه نویسی شی گرا، به رایج‌ترین زبان های برنامه نویسی شی گرا و کاربردهای آن‌ها پرداخته خواهد شد. با استفاده از اصول برنامه نویسی شی گرا همه این موارد با کمک کلاس‌ها و اشیا مدیریت می‌شوند. می‌توان در این مثال بخش وام، بیمه و هر بخش دیگری را به عنوان یک کلاس در نظر گرفت و از این موضوع مطمئن بود که اگر خطایی مثلاً برای بخش وام ایجاد شد، کلاس‌های دیگر تحت تأثیر آن قرار نمی‌گیرند.

ممکن است کمی تعریف‌های شی و کلاس گیج کننده باشد اما با دیدن مثال‌های این آموزش براحتی به سادگی مطلب پی می‌برید. مطالعه این کتاب به شما کمک می‌کند برای ادامه‌ی مسیر آموزش برنامه‌نویسی بدون ترس، (که یک مجموعه‌ی هدف‌دار برای آموزش جدیدترین مفاهیم برنامه‌نویسی است) آماده شوید. از زبان Go برای توسعه برنامه‌های تحت وب، برنامه نویسی شبکه و سیستم، سرویس‌های میکرو، «داده‌های حجیم» (Big Data) و یادگیری ماشین و ویرایش ویدئو و صوت و سایر سرویس‌های توزیع شده استفاده می‌شود. به عبارتی، مشخصه‌ها و رفتارهای هر شی، با شی دیگر از کلاس متفاوت است. چنانچه مثال مربوط به کلاس اتومبیل را در نظر بگیرید که در بخش قبل به آن اشاره شد، می‌توان از این کلاس، اشیای مختلفی ساخت که هر کدام به انواع ماشین‌های مختلف مانند بنز، رنو، پراید و کامیون اشاره دارند. تمامی این شی‌ها نمونه‌ای از کلاس اتومبیل محسوب می‌شوند که تمامی مشخصه‌ها و رفتارهای این کلاس را با مقادیر منحصربفرد خود دارا هستند.

این زبان در طیف وسیعی از کاربردها مانند شبیه‌سازی طرح‌های VLSI، مدل‌سازی فرایند، پروتکل‌ها، الگوریتم‌ها و برنامه‌های کاربردی دیگر مانند حروفچینی، گرافیک کامپیوتری، و آموزش و پرورش استفاده شده‌است. از آنجا که منظق شئ گرایی و برخی ویژگی های دیگر در ++C، جاوا و #C بر اساس این زبان اما به طور بازسازی شده طراحی شده اند، نفوذ سیمولا اغلب کم بیان می‌شود. در این مدرسه، کارگاهی به‌نام Wand وجود دارد که تمام عصاهای جادویی در آن ساخته می‌شوند. می‌توانیم کارگاه Wand را به عنوان یک Class در نظر بگیریم که نحوه ساخت این عصاهای جادویی را در اختیار دارد. بنابراین، اکنون می‌دانیم که یک Class، الگو یا ارائه دهنده قوانینی برای ساخت اشیا است. در مثالی که بیان کردیم، کلاس «Wand» در واقع، قوانین یا دستورات مربوط به ساخت آبجکت‌ها یا عصاهای جادویی را بیان می‌کند و می‌دانیم که هر عصا، ویژگی‌ها و عملکردهای مخصوص به خود را دارد.

زبان‌های برنامه نویسی نظیر زبان C و پاسکال از این رویکرد استفاده می‌کنند. زبان PHP از دو رویکرد برنامه نویسی رویه‌ای و شی گرایی پشتیبانی می‌کند. قابلیت مهم دیگر زبان PHP این است که می‌توان برنامه ساخته شده به این زبان را به صورت «محلی» (Locally) بر روی سیستم تست کرد و پس از بررسی کارایی و عملکر برنامه، آن را بر بستر اینترنت مستقر ساخت. اکنون در ادامه پرداختن به برنامه نویسی شی گرا در C++‎‌ ، نوبت به شرح یکی دیگر از پایه‌های اساسی شی گرایی در C++‎ یعنی ارث‌بری رسیده است. در ادامه این بخش از نوشته برنامه نویسی شی گرا در C++‎ ، مثالی برای درک بهتر مفهوم سربار تابع ارائه شده است. با بیان این مثال‌ها، اکنون می‌دانیم که رویکرد برنامه‌نویسی شی‌گرا، کدهای برنامه‌مان را به‌شکلی نظم می‌دهد که در آن هر شی، ویژگی‌های خود را دارد و اَعمال مشخصی را می‌تواند انجام دهد.

این اصول برنامه نویسی به تقویت و امنیت اشیا برنامه با استفاده از اصول قدرتمند انتزاع و کپسوله سازی کمک می‌کند. معروف‌ترین زبان‌های برنامه نویسی شی گرا شامل پایتون، جاوا، روبی و سایر موارد می‌شوند. در این مطلب سعی شد به طور کامل و همراه با مثال‌های کاربردی و شبه‌کدها انواع اصول برنامه نویسی شی گرا توصیف و مورد بررسی قرار بگیرد. همچنین در این مقاله برخی از آموزش‌هایی که با شی گرایی در ارتباط هستند، به علاقه‌مندان و دانشجویان معرفی شده‌اند. از طرف دیگر شی گرای دارای اصلی به نام «وراثت» است که قابلیت استفاده مجدد از کدها را افزایش می‌دهد و بروزرسانی کدها را بسیار ساده می‌کند.

موضوعات بعدی که در این برنامه قرار دارند شامل آموزش EntityFrameWork برای کا با پایگاه داده‌ها، MVC ،WCF و هر آنچه که یک برنامه‌نویس دات‌نت در بازار ایران به آن احتیاج دارد، است. عموما فیلد ها در کلاس دارای سطح دسترسی private (فقط قابل دسترسی در محدوده ی همان کلاس ) هستند و در صفت ها (property) استفاده میشوند. این اشیا هر کدام درون حافظه، متغیر‌ها و توابع خود را دارند و در حافظه‌ به صورت جداگانه ذخیره می‌شوند. و در پایان این برنامه پس از آشنایی خواننده با مفاهیم و ابزار‌های برنامه‌نویسی به بررسی بازار کار برنامه‌نویسی در ایران و جهان خواهیم پرداخت و آموخته‌هایمان را در قالب پروژه‌های عملی به کار خواهیم بست. موضوعات بعدی که در این برنامه قرار دارند شامل آموزش EntityFrameWork برای کا با پایگاه داده‌ها،MVC ، WCF و هر آنچه که یک برنامه‌نویس دات‌نت در بازار ایران به آن احتیاج دارد، است.

اما امروزه وظایف نرم افزاری بسیار محبوب هستند و اندازه نرم افزارها هم افزایش پیدا کرده‌اند. بنابراین، مدیریت رویکردهای «برنامه نویسی رویه‌ای» (Procedural Programming) یا «برنامه نویسی تابعی» (Functional Programming) به دلیل وجود حجم بالای کدها بسیار دشوار خواهد بود. کلاس انتزاعی نوعی کلاس است که یک یا چند متد انتزاعی در آن تعریف می‌شود. متد انتزاعی دارای تعریف متدها است و پیاده‌سازی متدها شامل آن نمی‌شود. در ادامه مثال‌هایی برای درک بهتر انتزاع در شی گرایی ارائه شده است. در این رویکرد، برنامه نویسان، نوع داده، ساختار نوع داده و عملیاتی را تعریف می‌کنند که روی ساختار داده‌ها انجام می‌شوند.

با این حال، اطلاعات دمای موتور یا وضعیت آن جزء اطلاعات خصوصی ماشین است که سایر رانندگان در مورد آن اطلاعی ندارند. برای متغیر faradars، تابع تنظیم کننده به صورت setFaradars()‎ خواهد بود. یک تابع setter می‌تواند اعتبارسنجی داده (مثل بررسی دامنه) انجام دهد و داده‌های خام را به نمایش داخلی تبدیل کند. برای مثال، در کلاس Circle، اعضای داده radius و color به صورت خصوصی تعریف شده‌اند. انتزاع را می‌توان با استفاده از کلاس‌ها در C++‎‌ پیاده‌سازی کرد.

سازنده خصوصی نمی تواند ارث بری کند و کلاس سازنده خصوصی با سطح دسترسی خصوصی قابل دسترسی می باشد. در مثال قبلی می بینید که شی از کلاس Maths1 فراخوانی نمی کند اما کلاس Maths1 از Maths2 ارث برده است. در اینجا با توجه به خط خطا به دلیل J می باشد که به عنوان Protected شناسایی نشده است . بنابراین عضو protected نمیتواند خارج از فرزند دسترسی داشته باشد بلکه تنها فقط به داخل فرزند دسترسی دارد. کپسوله سازی یک نوع سطح دسترسی است که برای دسترسی و قابلیت رویت بودن برای اعضای یک کلاس است .کپسوله سازی در #C لیستی که در ادامه به آنها اشاره شده است  را پشتیبانی نمیکند. در صورتی که یک سازنده تعریف نشود، کامپایلر یک مخرب پیش‌فرض فراهم می‌کند که کاری انجام نمی‌دهد.

بنابراین، علاوه بر کلاس‌ها و اشیا، برای بهره‌مندی از مزیت‌های شی‌گرایی در برنامه نویسی، لازم است چهار اصل فوق نیز در برنامه پیاده‌سازی و برقرار شوند. پیش از پرداختن به هر یک از اصول برنامه نویسی شی شی گرا بهتر است ابتدا مفهوم برنامه نویسی شی گرا به طور خلاصه و به بیان ساده شرح داده شود. به عبارتی، نوشتن قطعه کدها در قالب تابع به نوشتن تمیز کدها و خطایابی آن‌ها کمک به‌سزایی کرد. این سبک از برنامه نویسی بر مفهوم و کاربرد تابع (نسبت به مفهوم داده) تاکید زیادی دارد. از رویکرد برنامه نویسی ساختاریافته می‌توان برای توسعه پروژه‌های بزرگ نرم‌افزاری استفاده کرد.

در این رویکرد از برنامه نویسی، به نمونه‌های مفهوم کلی خودرو، شی گفته می‌شود. به عبارتی، در مثال قبل، بنز و ماشین، شی هستند که هر کدام مشخصه‌ها و رفتارهای خاص خود را دارند. در این ویدیو، شما با کاربردهای برنامه نویسی شی گرا در توسعه بازی های رومیزی آشنا خواهید شد. این بخش شامل مثال های عملی از چگونگی استفاده از OOP برای طراحی و پیاده سازی منطق بازی های رومیزی است که می تواند به شما کمک کند تا بازی های خود را به شیوه ای کارآمد و ساختاریافته توسعه دهید. در این قسمت، تفاوت های بین تئوری و عملی برنامه نویسی شی گرا مورد بررسی قرار می گیرد. شما خواهید دید که چگونه مفاهیم تئوری در دنیای واقعی به کار گرفته می شوند و با مثال های عملی، کاربردهای واقعی این مفاهیم را مشاهده خواهید کرد.

در این نوع از وراثت، یک کلاس والد دارای چند کلاس مشتق شده یا همان زیر کلاس است، به عبارت دیگر چندین کلاس فرزند یک کلاس والد دارند. همچنین کلاس‌های فرزند نیز به عنوان کلاس والد دارای کلاس‌های فرزند دیگری هستند. به عنوان مثال، در تصویر زیر کلاس والد A دارای دو فرزند کلاس B و کلاس C است. کلاس‌های D و E فرزندان کلاس C و کلاس‌های G و F فرزندان کلاس B به حساب می‌آیند. در قطعه کد فوق، یک کلاس پایه وجود دارد که دارای داده‌ها و ویژگی‌هایی است. سپس کلاس مشتق شده یا همان فرزند کلاس پایه را پیاده‌سازی می‌کند و در کنار ویژگی که خودش دارد از ویژگی‌ها و داده‌های آن نیز استفاده می‌کند.


برنامه نویسی لدر plc