کلاسها و شیءگرایی در C++
در این بخش به بررسی کلاسها و شیءگرایی در C++ می پردازیم، برنامهنویسی شیءگرا (Object-Oriented Programming یا OOP) یکی از مفاهیم اساسی و حیاتی در دنیای برنامهنویسی مدرن است. زبان C++ به عنوان یکی از زبانهای پیشرو در این حوزه، امکان ایجاد و استفاده از کلاسها و شیءها را به برنامهنویسان میدهد. این روش برنامهنویسی نه تنها کد را قابل خواندن و نگهداری میکند، بلکه امکان طراحی سیستمهای پیچیده و بزرگ را به صورت ماژولار فراهم میسازد.
در این مقاله، به بررسی اصول و مبانی برنامهنویسی شیءگرا در زبان C++ خواهیم پرداخت. ابتدا با مفهوم کلاسها و شیءها آشنا میشویم، سپس به بررسی مفاهیمی مانند وراثت (Inheritance)، چندریختی (Polymorphism)، انتزاع (Abstraction)، و محفظهبندی (Encapsulation) خواهیم پرداخت. هر بخش از مقاله شامل توضیحات تئوریک و مثالهای کاربردی برای فهم بهتر مفاهیم است.
کلاسها و شیءها در سی پلاس پلاس
کلاسها ساختارهایی هستند که به عنوان قالبهایی برای ایجاد شیءها (Objects) عمل میکنند. کلاسها میتوانند دادهها و توابع را درون خود داشته باشند. شیءها نمونههای واقعی از کلاسها هستند که به طور مستقل عمل میکنند. برای تعریف یک کلاس در C++، از کلمه کلیدی class
استفاده میشود.
در مثال بالا، یک کلاس Car
تعریف شده است که سه متغیر عضو (brand
، model
، و year
) و یک تابع عضو (displayInfo
) دارد. اکنون میتوانیم از این کلاس برای ایجاد شیءهای مختلف استفاده کنیم.
در اینجا، شیء car1
از کلاس Car
ایجاد شده و مقادیر آن تنظیم شده است. سپس، تابع displayInfo
فراخوانی شده تا اطلاعات خودرو نمایش داده شود.
محفظهبندی (Encapsulation)
محفظهبندی یکی از اصول کلیدی OOP است که به مخفیسازی جزئیات پیادهسازی یک کلاس و نمایش فقط رابطهای عمومی (Public Interfaces) اشاره دارد. این کار با استفاده از تعیین دسترسی اعضای کلاس انجام میشود: public
، private
، و protected
.
در مثال بالا، متغیرهای length
و width
به صورت خصوصی (private) تعریف شدهاند، بنابراین فقط از طریق توابع عمومی کلاس (setDimensions
و calculateArea
) قابل دسترسی هستند. این امر از دسترسی مستقیم به این متغیرها جلوگیری میکند و امنیت دادهها را افزایش میدهد.
وراثت (Inheritance)
وراثت یکی از ویژگیهای مهم OOP است که به یک کلاس اجازه میدهد تا خصوصیات و رفتارهای یک کلاس دیگر را به ارث ببرد. کلاس پایه (Base Class) و کلاس مشتق (Derived Class) مفاهیمی هستند که در وراثت به کار میروند.
در اینجا، کلاس Dog
از کلاس Animal
به ارث برده شده است و علاوه بر توابع و ویژگیهای کلاس پایه، ویژگیهای خاص خود را نیز دارد.
int main() {
Dog myDog;
myDog.eat(); // From Animal class
myDog.bark(); // From Dog class
return 0;
}
در این مثال، شیء myDog
از کلاس Dog
ایجاد شده و میتواند به توابع هر دو کلاس Animal
و Dog
دسترسی داشته باشد.
چندریختی (Polymorphism)
چندریختی به قابلیت یک شیء اشاره دارد که میتواند به چندین شکل مختلف عمل کند. در C++، چندریختی معمولاً با استفاده از کلاسهای پایه و مشتق و توابع مجازی (Virtual Functions) پیادهسازی میشود.
در این مثال، کلاس Shape
یک تابع مجازی draw
دارد که در کلاسهای مشتق Circle
و Square
بازتعریف شده است.
با استفاده از چندریختی، میتوان از یک اشارهگر کلاس پایه برای فراخوانی توابع مختلف در کلاسهای مشتق استفاده کرد.
انتزاع (Abstraction)
انتزاع به پنهانسازی جزئیات پیچیده و نمایش تنها جنبههای ضروری و مربوط به یک شیء اشاره دارد. این مفهوم از طریق کلاسها و توابع انتزاعی (Abstract Classes and Functions) در C++ پیادهسازی میشود.
در اینجا، AbstractShape
یک کلاس انتزاعی است که تابع مجازی خالص draw
را تعریف میکند. کلاس Triangle
این تابع را پیادهسازی میکند.
int main() {
AbstractShape* shape = new Triangle();
shape->draw(); // Calls Triangle's draw
delete shape;
return 0;
}
این مثال نشان میدهد که چگونه از انتزاع برای طراحی سیستمهای ماژولار و قابل توسعه استفاده میشود.
این مقاله سعی کرد تا به شکلی جامع و دقیق اصول برنامهنویسی شیءگرا در C++ را توضیح دهد و با مثالهای کاربردی به فهم بهتر این مفاهیم کمک کند. با توجه به اهمیت و گستردگی این موضوع، توصیه میشود که به منابع مرجع مراجعه کنید و به تمرین و تجربه بیشتری در این زمینه بپردازید.
آیا این مطلب برای شما مفید بود ؟