سلام دوستان! توی این مقاله میخوایم در مورد یه مفهوم خیلی مهم توی برنامهنویسی شیءگرا (Object-Oriented Programming) به اسم متغیر جهشدهنده (Mutator) صحبت کنیم. شاید اسمش یکم ترسناک به نظر برسه، ولی قول میدم خیلی ساده و قابل فهم توضیحش بدم. فکر کنین شما یه کلاس (Class) دارین که یه سری اطلاعات رو نگه میداره. متغیر جهشدهنده یه جور روش (Method) هست که به شما اجازه میده این اطلاعات رو تغییر بدین. به همین سادگی!
برای اینکه بهتر متوجه بشین، بیایید یه مثال ساده رو با هم بررسی کنیم. فرض کنید ما یه کلاس به اسم Dog
(سگ) داریم. این کلاس یه سری ویژگیها مثل اسم (name) و سن (age) رو نگه میداره.
حتما میپرسین چرا نمیتونیم مستقیماً به اسم و سن سگ دسترسی داشته باشیم و اونها رو تغییر بدیم؟ جواب اینه که این کار ممکنه باعث بشه که اطلاعات کلاس ما به صورت ناخواسته تغییر کنه و برنامه دچار مشکل بشه. متغیرهای جهشدهنده به ما کمک میکنن تا با دقت بیشتری اطلاعات رو تغییر بدیم و مطمئن بشیم که هیچ اتفاق بدی نمیافته. این به principle of encapsulation کمک میکنه.
به عبارت دیگه، متغیر جهشدهنده یه جور دروازهبان برای اطلاعات کلاس ماست. اون اجازه نمیده هر کسی هر جور که دلش خواست اطلاعات رو تغییر بده. فقط از طریق این دروازهبان میتونیم اطلاعات رو تغییر بدیم و مطمئن بشیم که همه چیز تحت کنترله.
بیایید کد کلاس Dog
رو ببینیم:
#include <iostream>
#include <string>
class Dog {
private:
std::string name;
int age;
public:
// سازنده (Constructor)
Dog(std::string dogName, int dogAge) : name(dogName), age(dogAge) {}
// متد دسترسی (Accessor) برای اسم
std::string getName() const {
return name;
}
// متد دسترسی (Accessor) برای سن
int getAge() const {
return age;
}
// متغیر جهشدهنده (Mutator) برای اسم
void setName(std::string newName) {
name = newName;
}
// متغیر جهشدهنده (Mutator) برای سن
void setAge(int newAge) {
if (newAge >= 0) { // چک کردن اینکه سن معتبر باشه
age = newAge;
} else {
std::cout << "سن نمی تونه منفی باشه!" << std::endl;
}
}
// یه متد دیگه
void bark() {
std::cout << "Woof! Woof!" << std::endl;
}
};
int main() {
Dog myDog("Buddy", 3);
std::cout << "اسم سگ: " << myDog.getName() << std::endl;
std::cout << "سن سگ: " << myDog.getAge() << std::endl;
myDog.setName("Max");
myDog.setAge(4);
std::cout << "اسم جدید سگ: " << myDog.getName() << std::endl;
std::cout << "سن جدید سگ: " << myDog.getAge() << std::endl;
myDog.setAge(-1); // تلاش برای تنظیم سن به مقدار منفی
return 0;
}
توی این کد، متغیرهای جهشدهنده setName
و setAge
وظیفه تغییر اسم و سن سگ رو بر عهده دارن. همونطور که میبینین، ما توی متغیر جهشدهنده setAge
یه شرط گذاشتیم که اگه کسی بخواد سن سگ رو به یه مقدار منفی تغییر بده، یه پیغام خطا نشون داده بشه. این یه مثال ساده از اینه که چطور میتونیم با استفاده از متغیرهای جهشدهنده از اطلاعات کلاس خودمون محافظت کنیم.
به متدهایی که برای گرفتن (read) مقادیر متغیرهای یک کلاس استفاده میشن، متدهای دسترسی (Accessor Methods) میگن. مثالهای getName()
و getAge()
در کلاس Dog
متدهای دسترسی هستن. به این متدها، Getter هم گفته میشه.
متدهایی که برای تغییر (write) مقادیر متغیرهای یک کلاس استفاده میشن، متدهای جهشدهنده (Mutator Methods) میگن. مثالهای setName()
و setAge()
در کلاس Dog
متدهای جهشدهنده هستن. به این متدها، Setter هم گفته میشه.
متغیر جهشدهنده یه روش مهم برای کنترل دسترسی به اطلاعات کلاسهاست. اون به ما کمک میکنه تا اطلاعات رو به صورت امن و کنترلشده تغییر بدیم و از بروز مشکلات احتمالی جلوگیری کنیم. با استفاده از متغیرهای جهشدهنده، میتونیم کدهای قویتر و قابل اطمینانتری بنویسیم. به این توجه کنید که متدهای دسترسی (Accessor) و متغیرهای جهشدهنده (Mutator) به همراه هم کار میکنن و encapsulation رو در برنامه نویسی شی گرا فراهم میکنند.
ویژگی | متغیر دسترسی (Getter) | متغیر جهشدهنده (Setter) |
---|---|---|
وظیفه | خواندن مقدار یک متغیر | تغییر مقدار یک متغیر |
پارامتر ورودی | ندارد (معمولا) | دارد (مقدار جدید) |
نوع مقدار برگشتی | نوع متغیری که داره خونده میشه | ندارد (void) |
مثال | getName(), getAge() | setName(), setAge() |
امیدوارم این مقاله تونسته باشه مفهوم متغیر جهشدهنده رو به خوبی توضیح بده. اگه سوالی داشتین، حتما بپرسین!
یادتون باشه که توی طراحی کلاسها، استفاده درست از متدهای دسترسی و جهشدهنده خیلی مهمه. با این کار میتونین کدهای تمیزتر، امنتر و قابل نگهداریتری داشته باشید. در ضمن، همهی فیلدهای یک کلاس نباید حتما Getter و Setter داشته باشند. فقط اونهایی که نیاز دارید دسترسی داشته باشید یا مقدارشون تغییر کنه، کافیه.
اینجا یه اشتباه تایپی وجود داره. پیداش کردی؟ یه سوتی دیگه هم تو این متن هست. لطفا بهم بگو کدوم قسمت ها اشتباه نوشته شده. موفق باشی!
موفق باشین و کدنویسی خوبی داشته باشید!
امتیاز شما به این مطلب
امتیاز: 5 از 5 (مجموع 1 رای)
اولین نفری باشید که در مورد این مقاله نظر می دهید!
techfeed.ir© 2024 All rights reserved