برنامه نویسی شی گرا در c++ چه اهمیتی دارد؟
برنامه نویسی شی گرا در c++
C++ یک زبان برنامه نویسی محبوب است. این زبان برنامه نویسی برای ایجاد برنامه های رایانه ای استفاده میشود. زبان برنامه نویسی c++ یک زبان برنامه نویسی شی گرا است و برخی از مفاهیم ممکن است جدید باشد. برای آموختن بیشتر این زبان برنامهنویسی باید مرور کرد و تمرین نمود. در ادامه برنامه نویسی شی گرا در c++ را بهتر میشناسیم.
از سوی دیگر ویژگیهای دیگر زبان برنامهنویسی c++ کراس پلتفرم بودن آن است که برای زبانهایی با کارایی بالا مورد استفاده باشد. این زبان برنامهنویسی کنترل زیادی بر منابع سیستم و حافظه به برنامهنویسان و توسعهدهندگان میدهد. در سالهای 2011، 2014 و 2017 این زبات چند بار به روز شده است.
از جمله دلیلهای استفاده از زبان برنامهنویسی c++ آن است که ساختار روشنی به برنامهها داده و استفاده مجدد از کدها را فراهم میسازد و به این سبب کاهش هزینهها را به همراه دارد. این زبان برنامهنویسی portable است و میتوان از آن برای توسعه برنامههایی استفاده کرد که میتوانند برای چند سیستم عامل سازگار شوند.
یادگیری آن آسان است و میتواند سرگرمکننده نیز باشد. این زبان برنامهنویسی به زبانهای برنامهنویسی c# و جاوا نزدیک است. لذا امکان تغییر کد به سایر برنامههای مشابه را فراهم میکند.
شروع زبان C++
برای شروع استفاده از برنامه c++ دو مورد را نیاز دارید:
- یک ویرایشگر متن مانند دفترچه یادداشت برای نوشتن کد c++
- یک کامپایلر مانند GCC برای ترجمه کدهای C++ به زبانی که برای کامپیوتر قابل فهم است.
برای استفاده از زبان C++ نیازمند آن هستیم که کامپایلر مربوطه نصب شده باشد. با این فرض به دنبال آموزش برنامه نویسی شی گرا در C++ خواهیم رفت. اما قبل از آن باید بیاموزیم که برنامه نویسی شی گرا در C++ چیست؟ برای استفاده از برنامه نویسی شی گرا باید وارد کلاسها شده و با مفاهیم آنها آشنا شویم. تابع سازنده کلاس را بشناسیم و با تابع عضو خصوصی در برنامهنویسی شیگرا آشنا شویم.
کسانی که در حوزه برنامهنویسی فعالیت دارند با واژه OOP مخفف عبارت Object-Oriented Programming آشنا هستند. این کلمه همان چیزی است که آن را برنامه نویسی شی گرا در C++ مینامیم. این نوع برنامهنویسی بر خلاف برنامهنویسی رویهای در مورد ایجاد اشیایی است که هم میتوانند داده باشند و هم شامل توابع میشود. یعنی در برنامهنویسی شیگرا با دستهها و گروهها در قالب انواع توابع در ارتباط هستیم. از جمله مزیتهای برنامه نویسی شی گرا در c++ و شاید در تمام برنامههایی که این قابلیت را دارند میتوان به موارد زیر اشاره نمود:
- سرعت در اجرای برنامه
- فراهم آوردن ساختار روشن برای نرم افزار
- اصلاح و اشکالزایی از کدهای نوشته شده آسان است و از تکرار مکررات در کدنویسی جلوگیری میکند. این فرآیند را DRY نگهداشتن برنامه مینامند که مخفف Don’t Repeat Yourself است.
- امکان ایجاد برنامههای کامل قابل استفاده مجدد با کد کمتر و زمان توسعه کوتاهتر
کلاس و شی در برنامه نویسی شی گرا در c++
کلاسها و اشیا دو جنبه اصلی برنامهنویسی شیگرا هستند. در تصویر زیر میتوان تفاوت این دو را به وضوح درک نمود:
بنابراین یک کلاس به عنوان الگوی اشیا بوده و یک شی یک نمونه از اجزای کلاس است. وقتی اشیا به صورت منفرد ایجاد میشوند تمام متغیرها و توابع را از کلاس خود به ارث میبرند. در ادامه با مفاهیم بیشتری در این خصوص و مثالهای متنوع آشنا خواهیم شد.
کلاسها و اشیا در c++
C++ یک زبان برنامه نویسی شیگرا میباشد. همه چیز در c++ همراه با ویژگیها و روشهای آن با کلاس و اشیاء مرتبط است. به عنوان یک مثال ساده در زندگی معمولی میتوان به این مثال اشاره کرد که ماشین یک شی است. این خودرو دارای خصوصیاتی مانند وزن، رنگ و خصوصیات دیگر است.
رانندگی و نحوه ترمز گرفتن به عنوان روش و سبک به حساب میآیند. در برنامهنویسی نیز میتوان مفاهیم را به همین سادگی فهمید و تعمیم داد. ویژگیها و روشها عموما متغیرها و توابه متعلق به کلاس هستند. اینها اغلب اعضای کلاس نامیده میشوند. کلاس یک نوع داده تعریف شده توسط کاربر است که از آن در برنامه خود استفاده مینماید و به عنوان سازنده شی یا طرح اصلی برای ایجاد اشیاء کار میکند.
ساخت کلاس در c++
برای ایجاد کلاس نیازمند کلید واژه مرتبط هستیم. با یک مثال ساخت یک کلاس را با هم مرور میکنیم.
class MyClass { // The class
public: // Access specifier
int myNum; // Attribute (int variable)
string myString; // Attribute (string variable)
};
در این کد نوشته شده کلید واژه class برای ایجاد کلاس MyClass به کار برده شده است. کلید واژه public به عنوان دسترس مشخص کننده است که برای قابل دسترس شدن اعضای کلاس حارج از کلاس به کار میرود. در این کدهای نوشته شده، متغیر صحیح myNum و متغیر رشتهای myString وجود دارند که درون کلاس تعریف شدهاند. وقتی متغیرها در یک کلاس معرفی میشوند آنها را صفت مینامیم. پایان هر کلاس نیز با یک ; بسته خواهد شد.
ساخت یک شی
در زبان برنامهنویسی شیگرای c++، یک شی از یک کلاس ایجاد میشود. در مثال قبل کلاس MyClass ایجاد شده است. لذا برای ایجاد اشیاء از این کلاس استفاده خواهیم کرد. برای ایجاد یک شی از MyClass نام کلاس را مشخص کنید و سپس نام آن را دنبال نمایید. برای دستیابی به صفات کلاس (myNum و myString) از نقطه در شی (.) استفاده مینماییم. در این خصوص به مثال زیر توجه نمایید:
#include <iostream>
#include <string>
using namespace std;
class MyClass { // The class
public: // Access specifier
int myNum; // Attribute (int variable)
string myString; // Attribute (string variable)
};
int main() {
MyClass myObj; // Create an object of MyClass
// Access attributes and set values
myObj.myNum = 15;
myObj.myString = "Some text";
// Print values
cout << myObj.myNum << "\n";
cout << myObj.myString;
return 0;
}
خرجی این برنامه شامل موارد زیر است:
15
Some text
همانطور که مشاهده شد با ساخت شی مورد نظر خروجی استخراج گردید. برای تفهیم بیشتر با چند مثال دیگر، تابع و اشیاء را با هم مرور مینماییم. در مثال زیر مشاهده خواهد شد که چند شی درون یک کلاس ایجاد شدهاند:
#include <iostream>
#include <string>
using namespace std;
class Car {
public:
string brand;
string model;
int year;
};
int main() {
Car carObj1;
carObj1.brand = "BMW";
carObj1.model = "X5";
carObj1.year = 1999;
Car carObj2;
carObj2.brand = "Ford";
carObj2.model = "Mustang";
carObj2.year = 1969;
cout << carObj1.brand << " " << carObj1.model << " " << carObj1.year << "\n";
cout << carObj2.brand << " " << carObj2.model << " " << carObj2.year << "\n";
return 0;
}
خروجی این برنامه عبارت است از:
BMW X5 1999
Ford Mustang 1969
توابع سازنده کلاس در c++
توابع سازنده کلاس در C++ به عنوان روشهای خاصی هستند که به صورت اتوماتیک فراخوانی شده زمانی که شیای از کلاس ایجاد میشود. برای ایجاد توابع سازنده کلاس از نام مشابه همان کلاس استفاده نموده و به دنبال آن () را اضافه مینماییم. در مثال زیر با این مفهوم آشنا خواهیم شد:
#include <iostream>
using namespace std;
class MyClass { // The class
public: // Access specifier
MyClass() { // Constructor
cout << "Hello World!";
}
};
int main() {
MyClass myObj; // Create an object of MyClass (this will call the constructor)
return 0;
}
خروجی این برنامه عبارت است از:
Hello World!
توابع سازنده کلاس همنام کلاس بوده و همیشه به صورت عمومی به کار رفته و مقدار بازگشت نخواهند داشت. در ادامه با هم پارامترهای توابع سازنده کلاس را بررسی مینماییم.
پارامترهای توابع سازنده کلاس
توابع سازنده کلاس میتوانند پارامترهایی را بگیرند. این پارامترها برای تنظیم مقادیر اولیه برای ویژگیها مفید هستند. در مثال زیر کلاسی در نظر گرفته شده که برخی ویژگیها مانند مارک، مدل سال و برخی مقادیر دیگر را در نظر گرفته است. در داخل سازنده، صفات را برابر با پارامترهای سازنده قرار میدهیم. زمانی که سازنده کلاس فراخوانی میشود، پارامترها به سازنده کلاس منتقل شده و مقادیر با توجه به ویژگیها با هم هماهنگ میشوند. به مثال زیر توجه نمایید و خروجی برنامه را در نظر بگیرید:
#include <iostream>
using namespace std;
class Car { // The class
public: // Access specifier
string brand; // Attribute
string model; // Attribute
int year; // Attribute
Car(string x, string y, int z) { // Constructor with parameters
brand = x;
model = y;
year = z;
}
};
int main() {
// Create Car objects and call the constructor with different values
Car carObj1("BMW", "X5", 1999);
Car carObj2("Ford", "Mustang", 1969);
// Print values
cout << carObj1.brand << " " << carObj1.model << " " << carObj1.year << "\n";
cout << carObj2.brand << " " << carObj2.model << " " << carObj2.year << "\n";
return 0;
}
خروجی برنامه عبارت است از:
BMW X5 1999
Ford Mustang 1969
دقیقا به مانند توابع میتوان سازنده کلاس را خارج از کلاس نیز تعریف نمود. ابتدا سازنده را در داخل کلاس معرفی مینماییم و سپس آن را خارج از کلاس با مشخص کردن نام کلاس تعریف نموده و به دنبال آن، عملگر پس زمینه را وارد نمایید. به مثال زیر در این خصوص توجه نمایید:
#include <iostream>
using namespace std;
class Car { // The class
public: // Access specifier
string brand; // Attribute
string model; // Attribute
int year; // Attribute
Car(string x, string y, int z); // Constructor declaration
};
// Constructor definition outside the class
Car::Car(string x, string y, int z) {
brand = x;
model = y;
year = z;
}
int main() {
// Create Car objects and call the constructor with different values
Car carObj1("BMW", "X5", 1999);
Car carObj2("Ford", "Mustang", 1969);
// Print values
cout << carObj1.brand << " " << carObj1.model << " " << carObj1.year << "\n";
cout << carObj2.brand << " " << carObj2.model << " " << carObj2.year << "\n";
return 0;
}
خروجی این برنامه به مانند قبل خواهد بود. این برنامه به مانند برنامه قبل بوده و فقط سازنده کلاس خارج از کلاس در برنامه کدنویسی شده است.
تابع عضو خصوصی در برنامه نویسی شی گرا
در زبان برنامه نویسی c++ با واژه کلیدی عمومی یا public آشنا هستید. این واژه تقریبا در همه نمونههای کلاس وجود دارد. به مثال زیر توجه نمایید:
#include <iostream>
using namespace std;
class MyClass { // The class
public: // Public access specifier
int x; // Public attribute (int variable)
};
int main() {
MyClass myObj; // Create an object of MyClass
// Access attributes and set values
myObj.x = 15;
// Print values
cout << myObj.x;
return 0;
}
خروجی این برنامه عدد 15 است.
کلید واژه عمومی یک مشخص کننده دسترسی است. این مشخص کنندهها نحوه دسترسی به ویژگیها و روشها را مشخص میکنند. در مثال قبل اعضاء به صورت عمومی تعریف شدهاند. این بدان معناست که از خارج از کد میتوان به آنها دسترسی پیدا کرد و اصلاحاتی انجام داد. در c++ سه مشخصکننده دسترسی داریم.
- اول حالت عمومی که اعضای خارج از کلاس قابل دسترس خواهند بود.
- حالت خصوصی که از خارج کلاس نمیتوان به اعضاء دسترسی داشت.
- حالت محافظت شده که در این حالت اعضاء از خارج کلاس قابل دسترس نبوده اما از طریق ارثبری در کلاسهای دیگر میتوان به اعضاء دسترسی داشت. در بحث ارثبری به این موضوع اشاره خواهد شد.
در مثال زیر به تفاوت حالت عمومی و خصوصی اشاره شده است:
#include <iostream>
using namespace std;
class MyClass {
public: // Public access specifier
int x; // Public attribute
private: // Private access specifier
int y; // Private attribute
};
int main() {
MyClass myObj;
myObj.x = 25; // Allowed (x is public)
myObj.y = 50; // Not allowed (y is private)
return 0;
}
خروجی برنامه شامل خطاهایی است که دلیل آن متغیری است که در محیط خصوصی تعریف شده است.
In function 'int main()':
Line 8: error: 'int MyClass::y' is private
Line 14: error: within this context
با ما در آموزش زبان برنامه نویسی c++ همراه باشید که شامل بخشهای متنوع دیگری از برنامه نویسی شی گرا در c++ بوده و نیازهای کدنویسی افراد را مرتفعتر خواهد نمود.