کپسوله کردن (Encapsulation)
کپسوله کردن (تلفیق دادهها با یکدیگر) یا مخفی کردن اطلاعات فرایندی است که طی آن اطللاعات حساس یک موضوع از دید کاربر مخفی میشود و فقط اطلاعاتی که لازم باشد برای او نشان داده میشود.
وقتی که یک کلاس تعریف میکنیم معمولاً تعدادی فیلد برای ذخیره مقادیر مربوط به شی نیز تعریف میکنیم. لازم نیست که کاربر به تمام فیلدها یا متدهای کلاس دسترسی داشته باشد. اینکه فیلدها را طوری تعریف کنیم که در خارج از کلاس قابل دسترسی باشند بسیار خطرناک است چون ممکن است کاربر رفتار و نتیجه یک متد را تغییر دهد. به برنامه ساده زیر توجه کنید :
1: class Test 2: { 3: public var five :Int = 5 4: 5: func AddFive(_ number:Int) -> Int 6: { 7: let number = number + five 8: return number 9: } 10: } 11: 12: var x = Test() 13: 14: x.five = 10 15: print(x.AddFive(100))
110
متد داخل کلاس Test به نام AddFive دارای هدف سادهای است و آن اضافه کردن مقدار 5 به هر عدد میباشد. در خط 12 یک نمونه از کلاس Test ایجاد کردهایم و مقدار فیلد آن را از 5 به 10 تغییر میدهیم (در اصل نباید تغییر کند چون ما از برنامه خواستهایم هر عدد را با 5 جمع کند ولی کاربر به راحتی آن را به 10 تغییر میدهد). همچنین متد AddFive() را فراخوانی و مقدار 100 را به آن ارسال میکنیم (خط 15). مشاهده میکنید که قابلیت متد AddFive() به خوبی تغییر میکند و شما نتیجه متفاوتی مشاهده میکنید. اینجاست که اهمیت کپسوله سازی مشخص میشود. اینکه ما فیلدها را به صورت public تعریف کنیم و به کاربر اجازه بدهیم که در خارج از کلاس به آنها دسترسی داشته باشد کار اشتباهی است. فیلدها باید همیشه به صورت private تعریف شوند.