معرفی
همانطور که می دانید چهار ویژگی اصلی برنامه نویسی شی گرا (OOPs) وجود دارد. اینها هستند،
- انتزاع - مفهوم - برداشت
- کپسوله سازی
- وراثت
- پلی مورفیسم
از میان این چهار ویژگی یا ویژگی، در این پست به دو مورد اول (Abstraction و Encapsulation) خواهیم پرداخت. این یکی از سوالات رایج مصاحبه برای تمام سطوح توسعه دهندگان C# بدون در نظر گرفتن شرکت ها است.
اغلب، ما از یک مثال کتابی برای یادگیری تفاوت ها استفاده می کنیم. با این حال، ما به راحتی فراموش می کنیم. در این مقاله از یک مثال واقعی استفاده خواهیم کرد تا بتوانیم تفاوت را برای همیشه به خاطر بسپاریم.
شرح
بنابراین، در واقع Abstraction و Encapsulation چیست؟ اجازه دهید با یک مثال متوجه شویم.
انتزاع - مفهوم - برداشت
انتزاع فرآیندی است برای انتزاع یا پنهان کردن عملکرد و ارائه به کاربران یا سایر برنامه نویسان برای استفاده از آن. مانند روش Console.WriteLine()، هیچ کس نمی داند که واقعاً در پشت فراخوانی تابع چه اتفاقی می افتد. ما فقط با فراخوانی و ارسال آرگومان ها از آن استفاده می کنیم. این چیزی است که انتزاع نامیده می شود.
کپسوله سازی
کپسولاسیون به معنای کپسوله کردن یا قرار دادن همه چیز در یک چیز و فراهم کردن امکان استفاده دیگران از آن است. مانند یک کیت اصلاح، همه چیزهای لازم در دسترس هستند. و همچنین این محصولات به صورت آزاد در بازار موجود هستند. اما کیت اصلاح هر مورد دیگر را در یک کیسه کوچک محصور می کند و به طور کلی در اختیار کاربر قرار می گیرد.
تفاوت
امیدواریم اکنون یک ایده اولیه از هر دوی این ویژگی ها داشته باشید. بیایید یک مثال واقعی از کپسولاسیون و انتزاع را ببینیم.
بیایید فرض کنیم باید روشی برای درج دادههای کاربران ایجاد کنید و آن را به سایر توسعهدهندگان منتقل کنید تا استفاده کنند. ابتدا یک کلاس ایجاد کنید و یک متد برای وارد کردن داده ها در پایگاه داده با اعتبارسنجی اضافه کنید.
سه فیلد وجود دارد.
- نام
- پست الکترونیک
- شماره تلفن
بنابراین، این ورودی ها باید ابتدا اعتبارسنجی شوند و سپس در پایگاه داده وارد شوند.
ابتدا یک کلاس با تمام متدها ایجاد کنید.
- // Users class to add new users
- public class Users
- {
- #region Public methods
- // Add new user
- // Input takes Name & phone number
- public bool AddUser(UsersEnity userEntity)
- {
- var isSuccess = false;
- if (ValidateUser(userEntity))
- {
- if (Save(userEntity) > 0)
- {
- isSuccess = true;
- }
- }
- return isSuccess;
- }
- #endregion
- #region Private methods
- // Validate whether user data is perfect or not
- private bool ValidateUser(UsersEnity userEntity)
- {
- var isValidate = false;
- // do your validation for userEntity.Name
- // do your validation for userEntity.Email
- // do your validation for userEntity.PhoneNo
- return isValidate;
- }
- // add new users to DB
- private int Save(UsersEnity userEntity)
- {
- var rowsAffected = 0;
- // write the DB code to insert the data (Linq or ADO.NET)
- return rowsAffected;
- }
- #endregion
- }
- public class UsersEnity
- {
- public string Name {get;set;}
- public string Email {get;set;}
- public string PhoneNo {get;set;}
- }
همانطور که می بینید سه متد در این کلاس Users نوشته شده است.
- AddUser
برای تماس از خارج از کلاس. به همین دلیل است که اصلاح کننده دسترسی عمومی است. - ValidateUser
برای تایید اطلاعات کاربر. امکان دسترسی از خارج از کلاس وجود ندارد. این خصوصیه. - ذخیره
برای درج داده در جدول پایگاه داده و دوباره خصوصی است، از خارج از کلاس نمی توان به آن دسترسی داشت.
اکنون کاربر دیگری فقط متد AddUser را با پارامترها فراخوانی می کند. و آن کاربر هیچ ایده ای ندارد که واقعاً در داخل متد چه اتفاقی می افتد. من کدی را برای اعتبارسنجی و درج آن در DB ننوشتم، همانطور که می توانید آن را از نمونه های دیگر دریافت کنید. بعداً در مورد آن بحث خواهیم کرد.
برای فراخوانی متد AddUser مانند زیر عمل کنید.
- public class Program
- {
- static void Main(string[] args)
- {
- User objUser = new User();
- bool f = objUser.AddUser(new UsersEnity()
- {
- Name = "XYZ",
- Email = "xyz@gmail.com",
- PhoneNo = "9876543210"
- });
- }
- }
حالا به بحث اصلی برگردید.
در اینجا، ما روند اضافه کردن داده ها به پایگاه داده از سایر کاربران را پنهان می کنیم. این انتزاع است. و قرار دادن هر سه روش در یک کلاس Users و ارائه سایر کاربران برای استفاده. به آن کپسولاسیون می گویند.
بنابراین، رویه پنهان کردن، انتزاع است و قرار دادن هر چیز ضروری در یکی، کپسوله سازی است.
امیدوارم ابهامات شما را در مورد مفاهیم کپسولاسیون و انتزاع برطرف کرده باشم.