تعریف شئ گرایی و برنامه نویسی شئ گرا

قبل از هر کاری، بهتر است با مفهوم برنامه نویسی شئ گرا و این که به چه زبانی شئ گرایی گفته می شود آشنا شویم. برنامه نویسی شئ گرا، بر خلاف زبان های Procedural که همه چیز در آن بر اساس روال ها تعریف می شدند، مدل سازی نرم افزار بر اساس اشیاء انجام می شود. بهتر است با یک مثال ادامه دهیم، در دنیایی که ما در آن زندگی می کنیم تمام موجودیت های اطراف ما تحت عنوان شئ شناخته می شوند، خانه هایی که در آن زندگی می کنیم، وسایل داخل خانه مانند یخچال، تلویزیون، مانیتور کامپیوتری که با آن کار می کنیم، ماشینی که سوار می شویم و هر چیزی که در دنیا وجود دارد تحت عنوان یک شئ شناخته می شود.

اما هر شئ که ما به عنوان یک موجودیت به آن نگاه می کنیم شامل یکسری خصوصیات و رفتارها می باشد. در زیر به تعریف خصوصیات و رفتارهای یک شئ می پردازیم:

  • خصوصیات یا Properties: خصوصیات مجموعه ای از صفات هستند که یک شئ را توصیف می کنند. برای مثال شئ ای با نام انسان را در نظر بگیرید، این شئ یکسری خصوصیات دارد مانند رنگ مو، قد، وزن، رنگ چشم و غیره. تمامی این پارامترها که به توصیف یک شئ می پردازند تحت عنوان خصوصیت یا Property شناخته می شوند.
  • رفتارها یا Behaviors: هر شئ علاوه بر خصوصیات، شامل یکسری رفتارها می باشد، این رفتارها در حقیقت کاریست که یک شئ می تواند انجام دهد. دوباره شئ انسان را در نظر بگیرید، این شئ می تواند نگاه کند، صحبت کند یا بشنود. رفتارها با خصوصیات تفاوت دارند و به کاری گفته می شوند که یک شئ می تواند انجام دهد.


در زبان های برنامه نویسی شئ گرا نیز ما باید به شناسایی موجودیت ها و اشیاء مورد استفاده در برنامه بپردازیم و خصوصیات و رفتارهای آن را تعریف کنیم. فرض کنید تصمیم داریم برنامه ای برای مدیریت یک کتابخانه بنویسیم. برنامه کتابخانه شامل یکسری اشیاء می باشد مانند:

  1. عضو کتابخانه
  2. اپراتور نرم افزار کتابخانه
  3. دسته بندی کتاب (که همان قفسه هایی که کتاب ها در آن دسته بندی می شوند می باشد)
  4. کتاب


پس از شناسایی موجودیت ها باید خصوصیت ها و رفتارهای آن ها را شناسایی کنیم. برای مثال شئ عضو کتابخانه را در نظر بگیرید. این شئ شامل یکسری خصوصیت ها به شرح زیر می باشد:

  1. کد عضویت
  2. نام
  3. نام خانوداگی
  4. شماره ملی
  5. نام پدر
  6. جنسیت


همچنین هر عضو یکسری رفتارهایی دارد که مختص به عملیات های کتابخانه می باشد. برای مثال عضو کتابخانه می تواند رفتارهای زیر را داشته باشد:

  1. دریافت کتاب
  2. پس دادن کتاب
  3. ورود به کتابخانه
  4. خروج از کتابخانه


مفاهیم اساسی در برنامه نویسی شئ گرا

Abstraction

زمانی که تصمیم داریم برنامه ای را به صورت شئ گرا بنویسیم، باید شروع به تحلیل سیستم و شناسایی موجودیت های آن کنیم. در بالا مثالی را در مورد برنامه کتابخانه بررسی کردیم. شئ عضو را در نظر بگیرید، شاید این عضو خصوصیت های بسیاری داشته باشد، مانند رنگ چشم، رنگ مو، قد، وزن، رنگ پوست و ... . اما آیا تمامی این خصوصیات در سیستم به کار می آید؟ در مورد رفتارهای یک شئ نیز همین موضوع صدق می کند. مفهوم Abstraction به ما می گوید زمان بررسی یک موجودیت، تنها خصوصیات و رفتارهایی باید در تعریف موجودیت لحاظ شوند که مستقیماً در سیستم کاربرد دارند. در حقیقت Abstraction مانند فیلتری عمل می کنند که تنها خصوصیات و رفتارهای مورد استفاده در برنامه ای که قصد نوشتن آن را داریم از آن عبور می کنند.

Encapsulation

فرض کنید ماشین جدیدی خریداری کرده اید، پشت فرمان ماشین می نشینید و ماشین را استارت می زنید. استارت زدن ماشین خیلی ساده است، قرار دادن سوئیچ و چرخاندن آن و روشن شدن ماشین. اما آیا پروسه ای که داخل ماشین طی شده برای روشن شدن نیز همینقدر ساده است؟ صد در صد، عملیات های بسیار دیگری اتفاق می افتد تا ماشین روشن شود. اما شما تنها سوئیچ را چرخانده و ماشین را روشن میکنید. در حقیقت پیچیدگی عملیات روشن شدن ماشین از راننده ماشین پنهان شده است. به این عملیات Encapsulation یا پنهان سازی پیچیدگی پیاده سازی عملیات های درون یک شئ می گویند.

Inheritance

می توان گفت Inheritance یا وراثت اصلی ترین مفهوم در برنامه نویسی شئ گرا است. زمانی که شما خوب این مفهوم را درک کنید 70 درصد از مفاهیم برنامه نویسی شئ گرا را درک کرده اید. برای درک بهتر این مفهوم مثالی میزنیم. تمامی انسان های متولد شده بر روی کره خاکی از یک پدر و مادر متولد شده اند. در حقیقت این پدر و مادر والدین انسان هستند. زمانی که انسانی متولد می شود یکسری خصوصیات و ویژگی ها را از والدین خود به ارث می برد، مانند رنگ چشم، رنگ پوست یا برخی ویژگی های رفتاری. در برنامه نویسی شئ گرا نیز به همین صورت می باشد. زمانی که شما موجودیت را طراحی می کنید، می توانید برای آن یک کلاس Base یا والد در نظر بگیرید که شئ فرزند تمامی خصوصیات و رفتارهای شئ والد را به ارث خواهد برد. مهمترین ویژگی وراثت، استفاده مجدد از کدهای نوشته شده است که حجم کدهای نوشته شده را به صورت محسوسی کاهش می دهد. در بخش های بعدی در مورد این ویژگی به صورت کامل توضیح خواهیم داد.

Polymorphism

در فرهنگ لغت این واژه به معنای چند ریختی ترجمه شده است. اما در برنامه نویسی شئ گرا چطور؟ خیلی از افراد با این مفهوم مشکل دارند و درک صحیحی از آن پیدا نمی کنند. مفهوم Polymorphism رابطه مستقیمی با Inheritance دارد. یعنی شما ابتدا نیاز دارید مفهوم وراثت را خوب درک کرده و سپس به یادگیری Polymorphism بپردازید. باز هم برای درک مفهوم Polymorphism یک مثال از دنیای واقعی میزنیم. در کره خاکی ما انسان های مختلفی در کشور های مختلف و شهر های مختلف با گویش های مختلف زندگی می کنند. اما تمامی این ها انسان هستند. در اینجا انسان را به عنوان یک شئ والد و انسان چینی، انسان ایرانی و انسان آمریکایی را به عنوان اشیاء فرزند که از شئ انسان مشتق شده اند یا والد آنها کلاس انسان می باشد را در نظر بگیرید. کلاس انسان رفتاری را تعریف می کند به نام صحبت کردن. اما اشیاء فرزند آن، به یک صورت صحبت نمی کنند، انسان ایرانی با زبان ایرانی، چینی با زبان چینی و آمریکایی با زبان آمریکایی صحبت می کند. در حقیقت رفتاری که در شئ والد تعریف شده، در شئ های فرزند مجدد تعریف می شود یا رفتار آن تغییر می کند. این کار مفهوم مستقیم Polymorphism می باشد. در زبان های برنامه نویسی شئ گرا، Polymorphism به تغییر رفتار یک شئ در اشیاء فرزند آن گفته می شود. در زبان سی شارپ این کار با کمک تعریف متدها به صورت virtual و override کردن آنها در کلاس های فرزند انجام می شود. همچنین Polymorphism با کمک Interface ها قابل پیاده سازی است که در بخش های بعدی در مورد این ویژگی ها به صورت کامل صحبت خواهیم کرد.

در این بخش مقدمه ای بر مفاهیم اولیه برنامه نویسی شئ گرا داشتیم، در لیست زیر مباحثی که در طول دوره برنامه نویسی شئ گرا با آنها آشنا خواهیم شد را مشاهده می کنید:

  1. آشنایی با class ها و object ها
  2. تعریف فیلد ها و Property ها در کلاس ها
  3. نحوه تعریف رفتار ها برای کلاس ها با کمک متدها
  4. تعریف سازنده ها یا Constructor برای کلاس ها
  5. فیلد های readonly
  6. نوع های بدون نام (Anonymous Types)
  7. آشنایی با structs و تفاوت آن با کلاس
  8. آشنایی با Reference Types و Value Types تفاوت آنها و حافظه های Stack و Heap
  9. وراثت و کاربرد آن در برنامه نویسی شئ گرا
  10. انواع مختلف وراثت (Is-A و Has-A)
  11. کلمات کلیدی this و base
  12. متدهای virtual و مبحث Polymorphism
  13. کلاس های Abstract و Sealed
  14. آشنایی با Access Modifiers
  15. تعریف Interface ها و کاربرد آنها در برنامه نویسی شئ گرا
  16. بررسی برخی از Interface های موجود در کتابخانه دات نت
  17. سایر مباحث (Indexer ها، Extension Method ها، بررسی کلاس Object و آشنایی با مفاهیم Boxing و UnBoxing)

 

منبع : Computerhosseini |مقدمه ای بر برنامه نویسی شی گرا در زبان سی شارپ
برچسب ها : برنامه ,نویسی ,انسان ,تعریف ,خصوصیات ,کتابخانه ,برنامه نویسی ,شناسایی موجودیت ,اشیاء فرزند ,برای مثال ,صورت کامل ,تصمیم داریم برنامه