مقدمه
در فصل دوم، چند برنامه ساده ایجاد کردیم که میتوانستند پیغامهای را به کاربر نشان داده، اطلاعاتی از وی دریافت نمایند، محاسباتی انجام داده و تصمیمگیری کنند. در این فصل، شروع به نوشتن برنامههایی میکنیم که مفاهیم پایه برنامهنویسی شیگرای معرفی شده در بخش ۱۷-۱ را بکار میگیرند. یکی از ویژگیهای مشترک در هر برنامه فصل دوم این است که تمام عبارات که کاری انجام میدهند در تابع
main جای داده شدهاند. بطور کلی، برنامههایی که در این کتاب ایجاد میکنید، متشکل از تابع
main و یک یا چند کلاس که هر یک حاوی اعضای داده و توابع عضو هستند، خواهند بود. اگر شما عضوی از تیم توسعه (طراحی) در یک مجموعه حرفهای هستید، احتمال دارد بر روی سیستمهای نرمافزاری که حاوی صدها، یا هزاران کلاس است، کار کنید. در این فصل، هدف ما توسعه یک چهارچوب کاری ساده خوشفرم به لحاظ مهندسی نرمافزار به منظور سازماندهی برنامههای شیگرا در C++ است.
ابتدا توجه خود را به سمت کلاسهای موجود در دنیای واقعی متمرکز میکنیم. سپس به آرامی به سمت دنبالهای از هفت برنامه کامل میرویم که به توصیف نحوه ایجاد و استفاده از کلاسهای متعلق به خودمان میپردازند. این مثالها با مبحث آموزشی هدفمند که بر توسعه کلاس
grade-book تمرکز دارد، شروع میشود و مربی میتواند از آن برای نگهداری امتیازات دانشجو استفاده کند. این مبحث آموزشی در چند فصل آتی بهبود خواهد یافت و در فصل هفتم بحد اعلی خود خواهد رسید.
2-3 کلاسها، شیها، توابع عضو و داده
اجازه دهید بحث را با یک مقایسه ساده که در افزایش درک شما از مطالب بخش ۱۷-۱ موثر است آغاز کنیم. فرض کنید که میخواهید با اتومبیلی رانندگی کرده و با فشردن پدال گاز آن را سریعتر به حرکت در آورید. چه اتفاقی قبل از اینکه بتوانید اینکار را انجام دهید، باید رخ دهد؟ بسیار خوب، قبل از اینکه بتوانید با اتومبیلی رانندگی کنید، باید کسی آن را طراحی و ساخته باشد. معمولاً ساخت اتومبیل، با ترسیم یا نقشهکشی مهندسی شروع شود. همانند طراحی صورت گرفته برای خانه. این ترسیمات شامل طراحی پدال گاز است که راننده با استفاده از آن سبب میشود تا اتومبیل سریعتر حرکت کند. تا حدی، پدال سبب «پنهان» شدن پیچیدگی مکانیزمی میشود که اتومبیل را سریعتر بحرکت در میآورد، همانطوری که پدال ترمز سبب «پنهان» شدن مکانیزمی میشود که از سرعت اتومبیل کم میکند، فرمان اتومبیل سبب «پنهان» شدن مکانیزمی میشود که اتومبیل را هدایت میکند و موارد دیگر. با انجام چنین کارهایی، افراد عادی میتوانند به آسانی اتومبیل را هدایت کرده و براحتی از پدال گاز، ترمز و فرمان، مکانیزم تعویض دنده و سایر «واسطهای» کاربرپسند و ساده استفاده کنند تا پیچیدگی مکانیزمهای داخلی اتومبیل برای راننده مشخص نباشد.
متاسفانه، نمیتوانید با نقشههای ترسیمی یک اتومبیل رانندگی کنید، قبل از اینکه با اتومبیلی رانندگی کنید باید، آن اتومبیل از روی نقشههای ترسیمی ساخته شود. یک اتومبیل کاملاً ساخته شده دارای پدال گاز واقعی برای به حرکت درآوردن سریع اتومبیل است. اما این هم کافی نیست، اتومبیل بخودی خود شتاب نمیگیرد، از اینرو لازم است راننده بر روی پدال گاز فشار آورد تا به اتومبیل دستور حرکت سریعتر را صادر کند.
حال اجازه دهید تا از مثال اتومبیل مطرح شده برای معرفی مفاهیم کلیدی برنامهنویسی شیگرا در این بخش استفاده کنیم. انجام یک وظیفه در یک برنامه مستلزم یک تابع (همانند
main که فصل دوم توضیح داده شده) است. تابع، توصیفکننده مکانیزمی است که وظیفه واقعی خود را به انجام میرساند. تابع پیچیدگی وظایفی که قرار است انجام دهد از دید کاربر خود پنهان میسازد، همانند پدال گاز در اتومبیل که پیچیدگی مکانیزم شتابگیری را از دید راننده پنهان میکند. درC++ ، کار را با ایجاد واحدی بنام کلاس که خانه تابع محسوب میشود، آغاز میکنیم، همانند نقشه ترسیمی اتومبیل که طرح پدال گاز نیز در آن قرار دارد. از بخش ۱۷-۱ بخاطر دارید که به تابع متعلق به یک کلاس، تابع عضو گفته میشود. در یک کلاس میتوان یک یا چند تابع عضو داشت که برای انجام وظایف کلاس طراحی شدهاند. برای مثال، یک کلاس میتواند نشاندهنده یک حساب بانکی و حاوی یک تابع عضو برای میزان سپرده در حساب، تابع دیگری برای میزان برداشت پول از حساب و تابع سومی هم برای نمایش میزان پول موجود در حساب باشد.
همانطوری که نمیتوانید با نقشه ترسیمی اتومبیل رانندگی کنید، نمیتوانید کلاسی را مشتق کنید. همانطوری که باید قبل از اینکه بتوانید با اتومبیلی رانندگی کنید، شخص از روی نقشه ترسیمی مبادرت به ساخت اتومبیل کرده باشد، شما هم باید قبل از اینکه برنامه بتواند وظایف توصیفی در کلاس را بدست آورد، باید یک شی از کلاس را ایجاد کرده باشید. این یکی از دلایل شناخته شدن C++ بعنوان یک زبان برنامهنویسی شیگرا است. همچنین توجه نمائید که همانطوری که میتوان از روی نقشه ترسیمی اتومبیلهای متعددی ساخت، میتوان از روی یک کلاس، شییهای متعددی ایجاد کرد.
زمانیکه رانندگی میکنید، با فشردن پدال گاز، پیغامی به اتومبیل ارسال میشود که وظیفهای را انجام دهد، که این وظیفه افزودن سرعت اتومبیل است. به همین ترتیب، پیغامهایی را به یک شی ارسال میکنیم، هر پیغام بعنوان فراخوان یک تابع عضو شناخته میشود و به تابع عضو از شیی اعلان میکند که وظیفه خود را انجام دهد. اینکار غالباً بعنوان تقاضای سرویس از یک شی شناخته میشود.
تا بدینجا، از مقایسه اتومبیل برای توضیح کلاسها، شیها و توابع عضو استفاده کردیم. علاوه بر قابلیتهای اتومبیل، هر اتومبیلی دارای چندین صفت است، صفاتی همانند رنگ، تعداد درها، ظرفیت باک، سرعت جاری و مسافت طی شده. همانند قابلیتهای اتومبیل، این صفات هم بعنوان بخشی از طراحی اتومبیل در نقشه ترسیمی دیده میشوند. همانطوری که رانندگی میکنید، این صفات همیشه در ارتباط با اتومبیل هستند. هر اتومبیلی، حافظ صفات خود است. برای مثال، هر اتومبیلی از میزان سوخت موجود در باک خود مطلع است، اما از میزان سوخت موجود در باک سایر اتومبیلها مطلع نیست. به همین ترتیب، یک شی دارای صفاتی است که به همراه شی بوده و در برنامه بکار گرفته میشوند.
این صفات به عنوان بخشی از کلاس شی تصریح میشوند. برای مثال، یک شی حساب بانکی دارای صفت موجودی است که نشاندهنده مقدار پول موجود در حساب میباشد. هر شی حساب بانکی از میزان موجودی در حساب خود مطلع است، اما از موجودی سایر حسابها در بانک اطلاعی ندارد. صفات توسط اعضای داده کلاس مشخص میشوند.
۳-۳ نگاهی بر مثالهای این فصل
در مابقی این فصل مبادرت به معرفی هفت مثال ساده میکنیم که به توصیف مفاهیم معرفی شده در ارتباط با قیاس اتومبیل میپردازند. خلاصهای از این مثالها در زیر آورده شده است. ابتدا مبادرت به ایجاد کلاس
GradeBook میکنیم تا قادر به توصیف این مفاهیم باشیم:
۱- اولین مثال نشاندهنده کلاس
GradeBook با یک تابع عضو است که فقط یک پیغام خوشآمدگویی را در زمان فراخوانی به نمایش در میآورد. سپس شما را با نحوه ایجاد یک شی از این کلاس و فراخوانی تابع عضو که پیغام خوشآمدگویی را ظاهر میسازد، آشنا خواهیم کرد.
۲- دومین مثال، اصلاح شده مثال اول است. در این مثال به تابع عضو اجازه داده میشود تا نام دوره را به عنوان یک آرگومان قبول کند. سپس، تابع عضو مبادرت به نمایش نام دوره بعنوان بخشی از پیغام خوشآمدگویی میکند.
۳- سومین مثال نحوه ذخیرهسازی نام دوره در یک شی
GradeBook را نشان میدهد. برای این نسخه از کلاس، شما را با نحوه استفاده از توابع عضو به منظور تنظیم نام دوره در شی و بدست آوردن نام دوره از شی آشنا میکنیم.
۴- چهارمین مثال به توصیف نحوه مقداردهی اولیه داده در شی
GradeBook به هنگام ایجاد شی میپردازد. مقداردهی اولیه توسط یک تابع عضو بنام سازنده کلاس صورت میگیرد. همچنین این مثال نشان میدهد که هر شی
GradeBook از نام دورة خود نگهداری میکند.
۵- مثال پنجم اصلاح شده مثال چهارم است که به توصیف نحوه قرار دادن کلاس
GradeBook در یک فایل مجزا به منظوراستفاده مجدد از نرمافزار، میپردازد.
۶- مثال ششم، تغییریافته مثال پنجم است که حاوی یک اصل مهندسی نرمافزار در جداسازی بخش واسط کلاس از بخش پیادهسازی آن است. با انجام اینکار فرآیند اصلاح و تغییر آسانتر میشود بدون اینکه در سرویسگیرندههای کلاس تاثیرگذار باشد.
۷- آخرین مثال قابلیت کلاس
GradeBook را با معرفی اعتبارسنجی داده افزایش خواهد داد. اعتبارسنجی ما را از فرمت صحیح داده در یک شی مطمئن میسازد. برای مثال یک شی
Date نیازمند یک مقدار در محدودة ۱ الی ۱۲ است. در این مثال
GradeBook، تابع عضوی که مبادرت به تنظیم نام دورة برای یک شی
GradeBook میکند، سبب میشود تا نام دوره ۲۵ کاراکتر یا کمتر باشد. اگر طول نام دوره بیش از ۲۵ کاراکتر باشد، تابع عضو فقط از ۲۵ کاراکتر اول استفاده کرده و یک پیغام خطا به نمایش در میآورد.
توجه کنید که مثالهای
GradeBook در این فصل فرآیند واقعی ذخیرهسازی را انجام نمیدهند. در فصل چهارم، فرآیند پردازش امتیازات را با
GradeBook و در فصل هفتم مبادرت به ذخیرهسازی اطلاعات در یک شی
GradeBook خواهیم کرد.
۴-۳ تعریف کلاس با یک تابع عضو
کار را با مثالی آغاز میکنیم (شکل ۱-۳) که حاوی کلاس
GradeBook است و میتوان از آن برای نگهداری امتیازات دانشجویان استفاده کرد. تابع
main در خطوط ۲۰-۲۵ مبادرت به ایجاد یک شی
GradeBook کرده است. این برنامه نسخه اول بوده و نسخه کامل آن در فصل هفتم ایجاد خواهد شد. تابع
main از این شی و تابع عضو آن برای نمایش پیغام بر روی صفحه نمایش (پیغام خوشآمدگویی) استفاده میکند.
شکل ۱-۳ | تعریف کلاس GradeBook با یک تابع عضو، ایجاد یک شی GradeBook و فراخوانی تابع عضو آن.
ابتدا به توصیف نحوه تعریف یک کلاس و تابع عضو میپردازیم. سپس به توضیح نحوه ایجاد یک شی و نحوه فراخوانی تابع عضو یک شی میپردازیم. چند مثال اول حاوی تابع
main و کلاس
GradeBook است که از آن در همان فایل استفاده میکند. در انتهای این فصل، به معرفی روشهای خبره در ساختارمند کردن برنامهها به منظور افزایش کارایی و انجام بهتر مهندسی نرمافزار خواهیم پرداخت.
کلاس GradeBook
قبل از اینکه تابع
main (خطوط ۲۰-۲۵) بتواند شی از کلاس
GradeBook ایجاد کند، بایستی به کامپایلر توابع عضو و اعضای داده متعلق به کلاس را اعلان کنیم. این کار بنام تعریف کلاس شناخته میشود. تعریف کلاس
GradeBook (خطوط ۹-۱۷) حاوی تابع عضوی بنام
displayMessage است (خطوط ۱۳-۱۶) که پیغامی بر روی صفحه نمایش چاپ میکند (خط ۱۵). بخاطر دارید که یک کلاس همانند یک نقشه ترسیمی است، از اینرو نیاز داریم که یک شی از کلاس
GradeBook ایجاد کنیم (خط ۲۲)، و تابع عضو
displayMessage آن را فراخوانی نمایم (خط ۲۳) تا خط ۱۵ را به اجرا درآورده و پیغام خوشآمدگویی را به نمایش درآورد. بزودی به توضیح دقیقتر خطوط ۲۲-۲۳ خواهیم پرداخت.
تعریف کلاس از خط ۹ و با کلمه کلیدی
class و بدنبال آن نام کلاس
GradeBook آغاز شده است. بطور قراردادی، نام کلاسهای تعریف شده توسط کاربر با حروف بزرگ شروع میشوند و در صورت وجود کلمات بعدی، ابتدای آنها هم با حروف بزرگ آغاز میگردد. به این روش غالباً روش
camel case میگویند.
بدنه هر کلاسی در بین جفت براکت باز و بسته (
} و
{) محدود میشود، همانند خطوط ۱۰ و۱۷٫ تعریف کلاس با یک سیمکولن خاتمه میپذیرد (خط ۱۷).
بخاطر دارید که تابع
main همیشه و بصورت اتوماتیک به هنگام اجرای برنامه فراخوانی میشود. اکثر توابع بصورت اتوماتیک فراخوانی نمیشوند. همانطوری که مشاهده خواهید کرد، بایستی تابع عضو
displayMessage را بطور صریح فراخوانی کنید تا وظیفه خود را انجام دهد.
خط ۱۴ حاوی برچسب تصریحکننده دسترسی
public: است. کلمه کلیدی
public، تصریحکننده دسترسی نامیده میشود. خطوط ۱۳-۱۶ تعریفکننده تابع عضو
displayMessage هستند. این تابع عضو پس از
public: قرار دارد تا نشان دهد که تابع «بصورت سراسری در دسترس است»، به این معنی که میتواند توسط سایر توابع موجود در برنامه و توسط توابع عضو کلاسهای دیگر فراخوانی گردد. همیشه در مقابل تصریحکنندههای دسترسی یک کولن (
:) قرار داده میشود. برای مابقی متن، زمانیکه به تصریحکننده دسترسی
public اشاره میکنیم، کولن آن را در نظر نمیگیریم. در بخش ۶-۳ به معرفی دومین تصریحکننده دسترسی بنام
private خواهیم پرداخت.
هر تابعی در برنامه وظیفهای را انجام داده و امکان دارد مقداری را پس از کامل کردن وظیفه خود برگشت دهد. برای مثال، تابعی میتواند یک محاسبه انجام داده و سپس نتیجه آن محاسبه را برگشت دهد. زمانیکه تابعی تعریف میشود، باید نوع برگشتی آن را مشخص سازید، تا تابع پس از اتمام کار، آن نوع را برگشت دهد. در خط ۱۳، کلمه کلیدی
void قرار گرفته است (در سمت چپ نام تابع
displayMessage) و نشاندهندة نوع برگشتی از سوی تابع است. نوع برگشتی
void بر این نکته دلالت دارد که
displayMessage وظیفهای را انجام خواهد داد، اما دادهای را به فراخوان خود (در این مثال، تابع فراخوان،
main میباشد) پس از اتمام وظیفه خود برگشت نخواهد داد. (در شکل ۵-۳ مثالی را مشاهده میکنید که تابع در آن مقداری را برگشت داده است).
نام تابع عضو
displayMessage بوده و قبل از آن نوع برگشتی قرار دارد. بطور قراردادی، اسامی توابع با یک حرف کوچک شروع شده و تمام کلمات متعاقب آن با حرف بزرگ شروع میشوند. پرانتزهای قرار گرفته پس از نام تابع عضو، بر این نکته دلالت دارند که این یک تابع است. یک جفت پرانتز خالی، همانند خط ۱۳، نشان میدهد که این تابع عضو، نیازی به داده اضافی برای انجام وظیفه خود ندارد. در بخش ۵-۳ شاهد تابع عضوی خواهید بود که برای انجام وظیفه خود نیازمند داده اضافی است. معمولاً به خط ۱۳،
سرآیند تابع گفته میشود. بدنه هر تابعی با براکتهای باز و بسته مشخص میشود (
} و
{)، همانند خطوط ۱۴ و ۱۶٫
بدنه تابع حاوی عباراتی است که وظیفه تابع را به انجام میرسانند. در این مورد، تابع عضو displayMessage حاوی یک عبارت است (خط ۱۵) که پیغام “Welcome to the Grade Book!” را به نمایش در میآورد. پس از اجرای این عبارت، تابع وظیفه خود را به انجام رسانده است.
تست کلاس GradeBook
در این مرحله میخواهیم که از کلاس
GradeBook در برنامه استفاده کنیم. همانطوری که در فصل دوم آموختید، تابع
main با اجرای هر برنامهای شروع بکار میکند. خطوط ۲۰-۲۵ از برنامه شکل ۱-۳ حاوی تابع
main هستند، که اجرای برنامه را تحت کنترل دارد.
در این برنامه، مایل هستیم تابع عضو
displayMessage از کلاس
GradeBook برای نمایش پیغام خوشآمدگویی اجرا گردد (فراخوانی شود). اصولاً تا زمانیکه شیی از یک کلاس ایجاد نکرده باشید، نمیتوانید تابع عضو کلاس را فراخوانی نمائید (در بخش ۷-۱۰ با تابع عضو
static، آشنا خواهید شد که در این مورد یک استثناء میباشد.) خط ۲۲ یک شی از کلاس
GradeBook بنام
myGradeBookGradeBook است، کلاس تعریف شده در خطوط ۹-۱۷٫ زمانیکه متغیرهایی از نوع
int اعلان میکنیم، همانند کاری که در فصل دوم انجام دادیم، کامپایلر از مفهوم
intGradeBook اطلاعی ندارد و آن را نمیشناسد، این نوع یک نوع تعریف شده توسط کاربر است. از اینرو، باید به کامپایلر، با قرار دادن تعریف کلاس همانند کاری که در خطوط ۹-۱۷ انجام دادهایم،
GradeBook را معرفی کنیم. اگر این خطوط را حذف کنیم، کامپایلر پیغام خطایی همانند ”
‘GradeBook’ : undeclared identifier” را در GNU C++ صادر میکند. هر کلاس جدیدی که ایجاد میکنید، تبدیل به یک نوع جدید میشود که میتواند برای ایجاد شیها بکار گرفته شود. برنامهنویسان میتوانند در صورت نیاز مبادرت به تعریف کلاسهای با نوع جدید نمایند، و این یکی از دلایل شناخته شدن C++ بعنوان یک زبان بسطپذیر است. ایجاد میکند.
خط ۲۳ مبادرت به فراخوانی تابع عضو
displayMessage (تعریف شده در خطوط ۱۳-۱۶) با استفاده از متغیر
myGradeBook و بدنبال آن عملگر نقطه (
.)، سپس نام تابع
displayMessage و یک جفت پرانتز خالی میکند. این فراخوانی موجب میشود که تابع
displayMessage برای انجام وظیفه خود فراخوانی شود. در ابتدای خط ۲۳، عبارت “
myGradeBook.” بر این نکته دلالت دارد که
main بایستی از شی
GradeBook که در خط ۲۲ ایجاد شده است، استفاده نماید. پرانتزهای خالی در خط ۱۳ نشان میدهند که تابع عضو
displayMessage نیازی به داده اضافی برای انجام وظیفه خود ندارد. (در بخش ۵-۳، با نحوه ارسال داده به تابع آشنا خواهید شد) زمانیکه
displayMessage وظیفه خود را انجام داد، تابع
main به اجرای خود از خط ۲۴ ادامه خواهد داد، که نشان میدهد
main وظیفه خود را به بدرستی انجام داده است. با رسیدن به انتهای
main، برنامه خاتمه میپذیرد.
دیاگرام کلاس UML برای کلاس GradeBook
از بخش ۱۷-۱ بخاطر دارید که UML یک زبان گرافیکی بکار رفته توسط برنامهنویس برای نمایش سیستمهای شیگرا به یک روش استاندارد است. در UML، هر کلاس در یک دیاگرام کلاس و بصورت یک مستطیل با سه قسمت (بخش) مدلسازی میشود. شکل ۲-۳ نشاندهنده یک دیاگرام کلاس UML برای کلاس
GradeBook معرفی شده در برنامه ۱-۳ است. بخش فوقانی حاوی نام کلاس است، که در وسط قرار گرفته و بصورت توپر نوشته میشود. بخش میانی، حاوی صفات کلاس است که مرتبط با اعضای داده در C++ است. در شکل ۲-۳ بخش میانی خالی است، چرا که این نسخه از کلاس
GradeBook در برنامه ۱-۳ دارای صفات نیست. (در بخش ۶-۳ نسخهای از کلاس
GradeBook عرضه شده که دارای یک صفت است.) بخش تحتانی حاوی عملیات کلاس است، که متناظر با توابع عضو در C++ میباشد.
شکل ۲-۳ | دیاگرام کلاس UML نشان میدهد که کلاس GradeBook دارای یک عملیات سراسری بنام displayMessage است.
UML مبادرت به مدلسازی عملیاتها با لیست کردن نام عملیات و بدنبال آن مجموعه پرانتزها میکند. کلاس
GradeBook فقط دارای یک تابع عضو بنام
displayMessage است، از اینرو بخش تحتانی در شکل ۲-۳ فقط یک عملیات با این نام را لیست کرده است. تابع عضو
displayMessage برای انجام وظیفه خود نیازی به اطلاعات اضافی ندارد، از اینرو پرانتزهای قرار گرفته پس از
displayMessage در این دیاگرام کلاس خالی هستند، همانند سرآیند تابع عضو قرار گرفته در خط ۱۳ برنامه۱-۳٫ علامت جمع (
+) که قبل از نام عملیات آورده شده، نشان میدهد که
displayMessage یک عملیات سراسری در UML است (یک تابع عضو
public در C++). به دفعات از دیاگرامهای کلاس UML برای خلاصه کردن صفات و عملیات کلاسها استفاده خواهیم کرد.
۵-۳ تعریف تابع عضو با پارامتر
در مثال قیاس اتومبیل در بخش ۲-۳ خاطرنشان کردیم که فشردن پدال گاز سبب ارسال پیغامی به اتومبیل میشود تا وظیفهای را به انجام برساند، که در این مورد افزودن سرعت اتومبیل است. اما اتومبیل باید چقدر سرعت بگیرد؟ همانطوری که میدانید، با فشردن هر چه بیشتر پدال، سرعت اتومبیل افزایش پیدا میکند. بنابر این پیغام ارسالی به اتومبیل هم حاوی وظیفه بوده و همچنین حاوی اطلاعات دیگری است که به اتومبیل در انجام وظیفه کمک میکند. این اطلاعات اضافی بنام پارامتر شناخته میشوند، مقدار پارامتر به اتومبیل کمک میکند تا میزان افزایش سرعت را تعیین کند. به همین ترتیب، یک تابع عضو میتواند نیازمند یک یا چندین پارامتر بعنوان داده اضافی برای انجام وظیفه خود باشد. فراخوان تابع مقادیری بنام آرگومان، برای هر پارامتر تابع تدارک میبیند. برای مثال، در سپردهگذاری در حساب بانکی، فرض کنید تابع عضو
deposit از کلاس
Account پارامتری که نشاندهنده مقدار سپرده است، مشخص کرده باشد. زمانیکه تابع عضو
deposit فراخوانی شود، مقدار آرگومان که نشاندهنده مقدار سپرده است به پارامتر تابع عضو کپی میشود. سپس تابع عضو این مقدار سپرده را به میزان موجودی اضافه میکند.