09120368440

برنامه نویسی شی گرا چیست و چطور در برنامه نویسی از آن استفاده می شود؟

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

این همان تعریف کلیشه ای از شی گرایی است که به تو می گویند تا مثلا بتوانی برنامه هایت را به بهترین شکل ممکن بنویسی.

اگر بخواهم اهمیت شی گرایی را به تو نشان دهم باید بگویم که در برخی از پلتفرم ها مانند برنامه نویسی موبایل، تا زمانی که شی گرایی را به خوبی ندانی نمی توانی اپلیکیشن های موبایلت را بنویسی.

پس یک برنامه نویس حتما باید شی گرایی را بداند.

 

ولی وقتی در کتاب ها یا سایت های مختلف به سراغ این مبحث می روی آنقدر آن را خشک و بی روح تعریف کرده اند که با خودت می گویی:

واااااای خدای من شی گرایی چه چیز عجیب و غریبی است .

و فکر می کنی که یادگرفتنش کار حضرت فیل است.

فقط یک تعریف از شی گرایی و چند مثال به تو می گویند و بحث را تمام می کنند.

در صورتی که خیلی مهم است که بدانی چطور باید از شی گرایی در ساخت برنامه هایت استفاده کنی!

به تو قول می دهم با خواندن این مقاله مفهوم شی گرایی را یکبار برای همیشه درک کنی و متوجه بشی که چطور باید از آن در ساخت نرم افزارت استفاده کنی.

 

آیا می دانستی هر روز مفاهیم شی گرایی را در زندگی اطرافت میبینی ؟

شی گرایی در حقیقت همان چیزی است که همیشه در زندگی ات استفاده می کنی ولی احتمالا به آن دقت نکرده ای.

احتمالا تا الان در محیط اطرافت میزهای زیادی دیده ای.

از زمانی که این دنیا بوجود آمده چیزهای زیادی در طبیعت وجود داشته است و وجود دارد. اما چیزی به نام میز به صورت طبیعی وجود نداشته.

برای همین انسان با توجه به نیازی که داشته چیزی به نام میز ساخته است.

این میز به طور کلی یک سری ویژگی دارد. مثل:

·        ارتفاع

·        طول

·        عرض

·        جنس

·        شکل

بی آنکه کار عجیب و غریبی انجام بدهی ویژگی های میز را می شناسی و درک می کنی.

تو از میز برای کارهای مختلف استفاده می کنی که باعث بوجود آمدن انواع میز می شود:

مثلا غذاهایت را روی میزی به نام میز غذاخوری قرار می دهی

از میز کامپیوتر استفاده می کنی تا کامپیوترت را روی آن قرار بدهی

و بقیه میزها مثل میز اداری، میز مدیریتی، میز تحریر که خودت بهتر می دانی.

مقایسه اشیا دنیای واقعی و دنیای برنامه نویسی

خب احتمالا سوالی که الان از خودت می پرسی این است که این حرف ها چه ربطی به برنامه نویسی دارد.

اتفاقی که افتاده این است : میز چیزی بود که در دنیای واقعی وجود نداشت و انسان برای رفع نیاز خودش آن را ساخت.

در برنامه نویسی هم همین اتفاق می افتد.

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

اما اگر تو در برنامه نویسی به مفهومی نیاز داشته باشی و از قبل در برنامه نویسی وجود نداشته باشد چکار خواهی کرد ؟

درست است. خودت باید آن مفهوم را بوجود بیاوری.

بگذار برایت مثالی بزنم. تصور کن می خواهی یک برنامه برای بیمارستان بسازی.

مشخص است که قرار است توسط نرم افزار تو اطلاعات یک بیمار ذخیره شود. اما مساله این است که در زبان های برنامه نویسی چیزی به نام “بیمار” وجود ندارد. پس باید آن را خودت تعریف کنی .

کلاس یا class در برنامه نویسی شی گرا چیست ؟

در برنامه نویسی باید کمی ریزبینانه به آن نگاه کنیم. بیمار تنها یک نقش از نقش های موجود در بیمارستان است. ممکن است نقش دکتر و پرستار هم بخواهی در برنامه ات تعریف کنی. دکتر، بیمار و پرستار همه انسان هستند.

در حقیقت نوع انسان نقش مهمی در برنامه ات دارد و از قبل توسط زبان برنامه نویسی تعریف نشده است.

پس چیزی که باید در برنامه ات تعریف کنی “انسان” است.

ورودت به دنیای شی گرایی را تبریک می گویم.

در واقع انسان یک مفهوم است که در برنامه نویسی وجود ندارد و برای تعریف آن در برنامه نویسی از کلاس استفاده می کنیم.

می دانی که در دنیای واقعی برای انسان یک ویژگی در نظر می گیریم، مثل:

·        اسم و فامیل

·        سن

·        جنسیت

·        قد

·        وزن

حالا همین ویژگی ها را در کلاس انسان تعریف می کنیم.

در برنامه نویسی به این ویژگی ها Property می گویند.

در زبان های برنامه نویسی وقتی یک مفهوم وجود ندارد و باید آن را بسازی، آن را در قالب یک کلاس به برنامه ات معرفی می کنی.

الان می خواهم کلاس انسان را در سی شارپ تعریف کنم:

نحوه تعریف یک کلاس در برنامه نویسی

به همین آسانی بود.

حالا این را باید در نظر بگیرم که یک انسان فقط شامل ویژگی ها نمی شود. بلکه رفتار هایی را هم از خود نشان می دهد.

و حتی نسبت به محرک های خارجی هم از خودش واکنش هایی نشان می دهد.

برای مثال تصور کن خوابت می آید یا اینکه بدنت به اکسیژن بیشتری نیاز دارد. چکار میکنی؟

خوب معلوم است خمیازه می کشی.

وقتی گرسنه می شوی، سراغ غذا می روی و شروع می کنی به خوردن غذا.

وقتی تشنه می شوی آب می خوری.

این ها همه متدهای تو یا همان متدهای یک انسان هستند.

در این رفتارهایی که تو از خودت نشان می دهد هیچ محرک خارجی وجود ندارد بلکه اینها رفتارهای ذاتی هستند که از خودت نشان می دهی.

به رفتار های ذاتی که یک شی از خودش نشان می دهد متد می گویند.

حالا می خواهم متد خمیازه کشیدن را برای انسان بنویسم:

تعریف کلاس انسان با property ها و method

پس یک کلاس در برنامه نویسی از متد و property تشکیل شده است.

 

مفهوم وراثت یا Inheritance در شی گرایی

برگردیم به داستان میزها.

یک میز با توجه به کاربردهایی که دارد شکل های مختلفی دارد.

میز غذاخوری همان ویژگی های اصلی میز را دارد اما کاربرد متفاوتی دارد.

میز تحریر هم همان ویژگی های اصلی میز را به ارث برده است اما ویژگی های خاص خودش را هم دارد که باعث می شود کاربرد متفاوتی داشته باشد.

همین طور میزهای دیگر.

ویژگی هایی وجود دارد که باعث تفاوت میزها با هم می شود. مثل:

·        تعداد کشوها

·        یک میز جای کامپیوتر دارد، یک میز دیگر جای پرینتر.

·        یک میز کمد دارد و یک میز نه

یک میز کامپیوتر در حقیقت همان میز است اما با ویژگی های بیشتر و فقط شامل ویژگی های کلی نمی شود.

همینطور یک میز غذا خوری که از میز کامپیوتر بسیار متفاوت است و کاربرد دیگری دارد اما همان ویژگی های کلی میز را هم شامل می شود.

این اتفاق در مثال بیمارستان هم برای بیمار، وجود دارد.

بیمار، پرستار، و دکتر  همه ویژگی های یک انسان را دارند (به ارث می برند) اما هر کدام ویژگی های مخصوص به خودشان را هم دارند که باعث می شود آنها را بشناسیم و با هم تفاوت داشته باشند.

به این عملیات که یک کلاس در کنار ویژگی های خاص خود، ویژگی های کلی و عمومی را از یک کلاس دیگر می گیرد،  ارث بری یا inheritance گفته می شود.

مثل پرستار، بیمار و دکتر که ویژگی های کلی شان را از کلاس انسان می گیرند.

مفهوم وراثت یا Inheritance در برنامه نویسی شی گرا

در سی شارپ برای اینکه تعیین کنی که این کلاس از کلاس دیگری ارث برده به این صورت عمل می کنی:

بعد از اینکه اسم دلخواهی برای کلاست گذاشتی از علامت ” : ” استفاده می کنی و بعد، از کلاسی که می خواهی از آن ارث بری کنی را می نویسی.

به همین سادگی!

این کاری است که من برای کلاس بیمار انجام دادم. کلاس بیمار از کلاس انسان ارث بری می کند.

وراثت یا همان Inheritance را در سیشارپ به این شکل پیاده سازی می کنیم:

مثال وراثت یا inheritance در برنامه نویسی شی گرا

به این روش می توانی انواع کلاس ها بسازی و از آن ها ارث بری کنی.

هر چقدر که دلت می خواهد .

اما یک نکته را به خاطر داشته باش، کلاسی که می سازی فقط می تواند از یک کلاس ارث بری کند.

خیلی خوب تا اینجا توانستی مفهوم کلاس را متوجه شوی.

می توانی با استفاده از شی گرایی کلاس ها را تعریف کنی و از آنها ارث بری کنی.

 

چطور از یک کلاس  (Class)استفاده می کنیم ؟ (مفهوم شی و object)

ما برای اینکه مفهوم بیمار را به دنیای برنامه نویسی بیاوریم یک کلاس ساختیم.

احتمالا در نرم افزار بیمارستان این مساله پیش خواهد آمد که نیاز باشد اطلاعات یک یا چند بیمار ذخیره شود. چطور این کار را باید انجام بدهیم؟.

ساخت شی یا object در برنامه نویسی شی گرا

همانطور که در تصویر بالا میبینی، چند بیمار متفاوت داریم.

هر کدام از این بیمارها در واقع یک شی (object) از کلاس بیمار هستند که در نام و نام خانوادگی و سایر ویژگی ها با هم تفاوت دارند.

حالا برای ایجاد یک شی از یک کلاس به شکل زیر عمل می کنیم.

مفهوم نمونه گیری یا Instantiation

به این کار نمونه گیری یا instantiation می گویند.

بنابراین یک شی در واقع یک نمونه از کلاس است که با عملیات   instantiation  یا نمونه گیری بوجود می آید.

چند ریختی یا polymorphism در شی گرایی

آیا می شود یک قطعه کد بنویسیم که می تواند داده های متفاوت را پردازش کند ؟

تصور کن در خانه نشسته ای و یک لیوان داری.

حالا یک بار در این لیوان چای می ریزی و می خوری و بار دیگر در این لیوان آب می ریزی و بار دیگر نوشابه.

این همان لیوان است اما هر بار در آن چیز متفاوتی می ریزی و می خوری.

در شی گرایی هم همینطور است.

یک متد داری اما هر بار ممکن است ورودی های متفاوتی داشته باشد.

برای مثال تصور کن متدی برای بیمار داری که در آن اطلاعات یک بیمار را جستجو می کنی.

حالا گاهی نیاز داری این جستجو را بر اساس نام و نام خانوادگی انجام دهی و گاهی نیاز داری بر اساس کد ملی یا گاهی هم بر اساس شماره پرونده .

این همان جستجو است اما هر بار این جستجو بر اساس پارامتر های متفاوتی انجام می شود.

یک متد با شکل های متفاوت یا ریخت های متفاوت.

به این کار که یک متد چند ریخت متفاوت دارد را در شئ گرایی polymorphism می گویند.

در اینجا می خواهم یک متد با چند ریخت متفاوت را طراحی کنم:

مثال چند ریختی و polymorphism در شی گرایی

اگر برای ورودی متد از دو رشته استفاده شود، برنامه به صورت اتوماتیک به سراغ متد جستجو بر اساس نام و فامیل می رود و اگر ورودی فقط یک عدد باشد متد جستجو بر اساس شماره پرونده اجرا می شود.

مفهوم انتزاع یا Abstraction در شی گرایی

برای درک مفهوم انتزاع یا Abstraction بهتر است یک لحظه از برنامه نویسی بیرون بیاییم و ساده تر به مسائل نگاه کنیم.

احتمالا به چیزهایی که تنها در حد یک مفهوم هستند و عملا به چشم دیده نمیشوند چیزهای انتزاعی می گویند. بگذار یک مثال بزنم :

نوشیدنی یک مفهوم انتزاعی است چون قابل لمس و دیده شدن نیست.

اما وقتی از نوشیدنی صحبت می شود متوجه می شویم که در مورد یک مایع که ممکن است رنگ ، بو ، غلظت داشته باشد صحبت می کنیم.

حتی می توانی انواع نوشیدنی را نام ببری :

  • نوشابه
  • چای
  • دوغ
  • شربت
  • آب

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

که هرکدام نمونه ای نوشیدنی هستند که با چشم قابل دیدن و با دست قابل لمس کردن هستن.

حالا اگر همین مساله را وارد دنیای برنامه نویسی کنیم و مفهوم نوشیدنی را به صورت یک کلاس تعریف کنیم این کلاس Abstract خواهد بود.

همچنین که در دنیای واقعی دوغ و نوشابه به نوعی زیر مجموعه هایی از نوشیدنی هستند و ویژگی های کلی نوشیدنی را دارند، در برنامه نویسی هم از کلاس انتزاعی نوشیدنی ارث بری کرده اند.

نکته مهم این است که یک کلاس از نوع Abstract قابل نمونه گیری نیست ولی برای وراثت می توان از آن استفاده کرد.

مفهوم Encapsulation یا کپسوله سازی در شی گرایی

اگر لازم باشد تا دسترسی به متدها و پراپرتی بعضی از کلاس ها را چیزی غیر از public بگذاریم این کار را با استفاده از کلماتی که به آنها Access Modifier می گویند این کار را انجام می دهیم.

Access Modifier ها عبارتند از:

  • دسترسی Public
  • دسترسی Protected
  • دسترسی Internal
  • دسترسی Protected Internal
  • دسترسی Private
  • private protected

Access modifiers

 

زمانی که نوع دسترسی به متدها و پراپرتی ها را با استفاده از Access Modifier ها تعیین کنیم در واقع مفهوم Encapsulation را اجرا کرده ایم.

مثل عکس زیر :

مثالی از Encapsulation

دیدگاه کاربران
  • شاهین 17 دسامبر 2019

    خیلی خوب و جامع بود با تشکر از مقاله خوب شما

  • عباس ندری 28 دسامبر 2019

    دمت گرم عالی عالی

  • فاطمه 3 مارس 2020

    سلام خیلی ممنون از توضیحات کاربردی و جامعی که دادید.
    خیلی خوبه که باز هم راجع به قواعد پرکاربرد زبان ها برامون توضیح بذارید.
    سپاس فراوان

    • مریم عمرانی 3 مارس 2020

      سلام فاطمه عزیز
      خوشحالم که آموزش های ما رو دنبال می کنی و واستون مفید بوده
      🌹🌹🌹

  • الماس فخری 8 مارس 2020

    سلام و درود درخصوص آموزش و مطالب اموزشی برنامه نویسی c#
    ممنون و متشکر فخری

    • مریم عمرانی 11 مارس 2020

      سلام دوست عزیز
      دوست دارید چه مطالبی از سی شارپ بگیم ؟

  • پیمان 6 آوریل 2020

    بسیار عالی

ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

برنامه نویسی یا کد بازی ؟

بیش از 10000 نفر در خانواده آکادمی برنامه نویسی مدحج عضو شده اند و بجای کدبازی، میخواهند ماهیانه سفارش پروژه بگیرند و درآمد داشته باشند.
دوست داری وارد خانواده ما شوی ؟

.