وقتی برای اولین بار شروع به یادگیری برنامه نویسی شی گرا کردم، یاد گرفتم که سه اصل OOP وجود دارد - Encapsulation، Inheritance و Polymorphism. با این حال، من نویسندگان دیگری را نیز دیده ام که معتقدند در واقع چهارمی وجود دارد - انتزاع. اکنون یک سوال به ذهن خطور می کند: آیا کپسوله سازی همان انتزاع است؟
من تصمیم گرفتم کمی عمیق تر کاوش کنم و متوجه شدم که تفاوت ظریفی بین این دو مفهوم وجود دارد و این همان چیزی است که در این مقاله به طور خلاصه ارائه کرده ام.
ویکیپدیا کپسولهسازی را اینگونه تعریف میکند: «Encapsulation به مجموعه دادهها با روشهایی که بر روی آن دادهها کار میکنند، یا محدود کردن دسترسی مستقیم به برخی از اجزای یک شی اشاره دارد.»
کپسوله سازی به ما کمک می کند وضعیت واقعی یک شی را از دنیای بیرون پنهان کنیم**. دنیای خارج تنها قادر به دسترسی به روش های عمومی است که وضعیت شی را تغییر می دهند. به عنوان مثال به مثال زیر نگاه کنید.
شی سگ دارای یک میدان خصوصی – hungerLevel، و دو روش عمومی – Feed و Abandon است. در حالت ایده آل، ما نمی توانیم مستقیماً به سطح گرسنگی سگ دسترسی داشته باشیم. ما فقط میتوانیم سطح گرسنگی را با غذا دادن به آن یا با ترک آن برای چند روز تغییر دهیم.
در سی شارپ، وقتی به خصوصیات عمومی یک کلاس دسترسی پیدا می کنیم، در واقع به دریافت کننده ها و تنظیم کننده ها که متدهای خاصی هستند دسترسی داریم. گیرنده ها و تنظیم کننده ها اکنون فیلدهای خصوصی را تغییر می دهند. بنابراین، به همین ترتیب، زمینه های خصوصی (تعریف وضعیت جسم) نمی توانند مستقیماً توسط دنیای خارج اصلاح شوند.
از سوی دیگر انتزاع به پنهان کردن پیاده سازی های پیچیده اشاره دارد. به عنوان مثال به تلفن خود فکر کنید. شما فقط چند دکمه دارید که می توانید آنها را فشار دهید تا اقدامات خاصی را انجام دهید. اینکه چگونه این اقدامات انجام می شود، واقعاً برای شما مهم نیست. نیازی نیست بدانید که چگونه با فشار دادن یک دکمه سیگنال هایی را می فرستید که به بیت ها و بایت هایی تبدیل می شوند که رایانه می تواند آنها را بفهمد. تنها چیزی که می خواهید عملکرد است. به طور مشابه، ما میتوانیم ویژگیها و متدها را از دنیای خارج پنهان کنیم (با خصوصی کردن آنها فقط برای کلاس)، و سپس فقط روشهای خاصی را در معرض دید قرار میدهیم که تمام آن پیچیدگی را برای دسترسی مشتری «محفظهبندی» میکنند.
قطعه کد بالا نمونه ای از انتزاع را نشان می دهد. صاحب سگ به دخترش دستور می دهد که به سگ غذا بدهد. دختر می داند که باید به بازار برود و غذای سگ بخرد، اما تنها چیزی که صاحب سگ نیاز دارد این است که به سگ غذا بدهند. سایر فعالیت ها به سادگی در زیر روش FeedDog "انتزاعی" می شوند.
بنابراین میتوان قاطعانه گفت که انتزاع را میتوان به معنایی خاص بهعنوان بسط مفهوم کپسولهسازی، اما از منظری وسیعتر دید.
ممنون که خواندید. لطفاً نظرات خود را در بخش نظرات به من بگویید. همچنین مقالات قبلی من در مورد الگوی مشخصات در سی شارپ و مشخصات ترکیبی را بررسی کنید .
** وضعیت یک شی با مقدار تمام فیلدهای خصوصی آن در هر نمونه تعریف می شود.