وقتی در دنیای واقعی به دور و بر خودمون نگاه کنیم ، می تونیم یه سری موجودیت پیدا کنیم که بخشی از اونها با هم مشترک هست و یک مفهوم کلی و انتزاعی رو به ذهن میاره.
"اسب" ، "شتر" ، "فیل" موجودیت هایی هستند ، که بهشون می گیم "حیوان". (چرا؟)
چون وقتی می گیم "حیوان" ، یعنی یه سری ویژگی و رفتار مشترک هم در "اسب" ، هم در "شتر" و هم در "فیل" وجود دارد.
"ماشین سواری" و "ماشین باربری" موجودیت هایی هستند ، که بهشون می گیم "خودرو". (چرا؟)
چون وقتی می گیم "خودرو" ، یعنی یه سری ویژگی و رفتار مشترک هم در "ماشین سواری" و هم در "ماشین باربری" وجود دارد.
مثلا در دنیای واقعی هر موجودیتی که در ویژگی ها (Attributes) و رفتارهای (Behaviors) زیر مشترک باشند ، به عنوان "خودرو" می شناسیم.
ویژگی ها (Attributes) :
رفتارها (Behaviors) :
نکته اینجاست که در انتزاع کردن (Abstraction) ، بسته به نیاز فقط اون مواردی که می خوایم قابل مشاهده باشه رو بیان می کنیم و مواردی که از نظر ما مهمه و نباید قابل مشاهده باشه رو ذکر نکرده تا پنهان بمونن.
مثلا راننده نیاز داره بدونه که سرعت خودرو چقدره ، اما به دلیل اتوماتیک بودن خودرو نمی خوایم بدونه که تعداد دور در دقیقه موتور (RPM) چقدره!
پس در بین ویژگی های مفهوم "خودرو" ، ویژگی RPM رو بیان نکردیم تا پنهان باشه.
این ها مفاهیمی ذهنی و کلی هستند که در دنیای واقعی ، به خودی خود وجود ندارند و قابل پیاده سازی نیستند.
اگر به کسی بگین که "من حیوان دیدم" ، بهتون می گه چه نوع حیوانی؟ یا اینکه "من خودرو خریدم" ، می گه چه نوع خودرویی؟
چون مفهومی ذهنی ، طرحی کلی ، و الگویی هستند که انواعی از آن ها در دنیای واقعی پیاده سازی شده اند نه خود آن ها.
آنچه در دنیای واقعی می بینیم ، انواعی از خودرو یا انواعی از حیوان هستند که پیاده سازی شده اند.
در برنامه نویسی شی گرا کلاس های Abstract یی داریم که به خودی خود اجازه نمونه سازی (Instantiate) ندارن ؛ ولی می تونیم از کلاس هایی دیگه که ازشون ارث بری کردن نمونه (Instance) بگیریم.
به کلاس های قابل نمونه سازی می گن Concrete Classes و به کلاس هایی که نمی شه ازشون نمونه گرفت می گن Abstract Classes
اینترفیس ها و کلاس های Abstract ، ابزارهایی هستند برای تعریف مفاهیم انتزاعی.
برگرفته از :
Beginning C# Object-Oriented Programming (Apress - Dan Clark)
C# 8.0 in a Nutshell The Definitive Reference (OReilly - Joseph Albahari & Eric Johannsen)