جامعه گیک‌های کامپیوتر

شی گرایی - قسمت اول

وب و نرم افزار/ توسعه نرم افزار شنبه, 01 آذر 1399 سپهر بیات نژاد

 

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

 

 

شی گرایی (object oreinted programming) :

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

به طور کلی شی مورد نظر دارای خصوصیت(Atribute) و رفتار(Behavior) است که خصوصیت ها را در قالب متغیر و رفتارهارا در قالب متد(method) تعریف میکنیم.و اما یک نکته،در دنیای واقعی زمانی که ما کار و یا رفتاری را انجام میدهیم ممکن است به طور مستقیم بر روی ما تاثیر بگذارد،به طور مثال اگر ورزش کنیم سطح افسردگی پایین می آید یا بدن احساس خستگی می کند،این یعنی رفتار مستقیما بر روی خصوصیت ما تاثیر میگذارد پس متقابلا همچین قانونی در شی گرایی هم وجود دارد.در برنامه نویسی،کلاس(class)بستری است برای جمع آوری و نگهداری خصوصیات و رفتارها که میتواند تمامی این اطلاعات را در کنار یک دیگر قرار دهد و شی مورد نظر را تولید کند.به هر شی ، یک نمونه از آن کلاس گفته می‌شود و هر زمان که یک شی از کلاسی ایجاد می‌گردد در واقع یک نمونه از آن کلاس ساخته شده است. 

برنامه ‌نویسی شی‌گرا object oriented programming یا به اختصار OOP یک الگو یا شیوه تفکر در برنامه ‌نویسی است که برگرفته از دنیای واقعی بوده و از دهه ۱۹۶۰ میلادی مطرح گشته است. به زبانی که از این الگو پشتیبانی کند، «زبان شی‌گرا» گفته می‌شود؛ Simula 67 و Smalltalk نخستین زبان‌های برنامه‌نویسی شی‌گرا هستند،برای درک بیشتر شی گرایی لازم است با مفاهیم زیر بیشنر آشنا بشویم :

  • کپسوله سازی (encapsulation)
  • انتزاع (abstraction)
  • وراثت(inheritance)
  • چند ریختی(polymorphism)

 

 

کپسوله سازی (encapsulation):

زمانی که میگوییم میخواهیم کپسوله سازی کنیم درواقع میخواهیم خصوصیات را فشرده سازی کنیم و از آن یک شی در بیاوریم.میخواهیم یک گربه را  کپسوله سازی کنیم یعنی تمام خصوصیات و رفتار های گربه را تنها درون یک شی جای دهیم (لازم به ذکر است که هر زبان برنامه نویسی با تعریف یک کلاس این کار را برای شما انجام میدهد.)اما نکته ای را در کپسوله سازی جا انداختیم این است که،کپسوله سازی داده ها را پنهان سازی میکند و مانع دسترسی یک شی به خصوصیات یک شی دیگر میشود.میداینم که یک گربه دارای صفات و خصوصیات زیادی است،درواقع هر شی که تولید میشود خصوصیات مخصوص خود را دارد و شی های دیگر نمی توانند به خصوصیات آن دسترسی داشته باشند اما می توانند با آن شی ارتباط برقرار کنند یا به اصطلاح متد های آن شی را صدا (call) بزنند.

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

 

 

همانطور که میبینید جدول گربه که به معنای کلاس گربه است شامل یک سری خصوصیات مانند حالت روحی و انرژي و گرسنگی است و رفتارهایی مانند بازی کردن ،خوابیدن و غذا خوردن دارد که خود آن رفتارها به جدول های دیگری تجزیه میشوند،این رفتارها میتوانند روی حالت روحی(mood) و ... تاثیر بگذارند .در واقع علامت ++ یعنی مود را بهتر میکند و ــ مود یا هر صفت دیگری را تنزل میدهد و اوضاع را برای گربه بدتر میکند.در واقع ما یک گربه کپسول سازی کردیم و تمام خصوصیات آنرا کنار یک دیگر آوردیم.پس گردآوری خصوصیات و شخصی سازی آنها مفاهیم کپسوله سازی را برای ما تعریف میکند.

 

انتزاع (abstraction) :

انتزاع در واقع یک افزونه طبیعی است که به کپسوله سازی اضافه میشود فکر کنید ما برای کار با موبایل هایی که هر روز به راحتی از آنها استفاده میکنیم باید برای استفاده از آنها تمام جزییات کارکرد و تمام قطعات رو میشناختیم،اما امروزه کافی است تا صفحه را لمس کنید یا دکمه ها را فشار بدهید تا با موبایل به راحتی کار کنید.در واقع در پروژه هایی که مخصوصا بزرگ هستند،اگر انتزاع وجود نداشت یک شی برای استفاده از شی دیگر باید تمام جزییات آن شی را میدانست که این کار پیچیدگی برنامه را بالا میبرد،در واقع انتزاع میکوید هر شی باید یک مکانیسم سطح بالا(high-level) برای استفاده داشته باشد.

 

   

 میتوان راجب یک قهوه ساز هم همچین ذهنیتی داشت،که آب و قهوه را اضافه میکنیم و فقط دکمه قهوه ساز را میزنیم و منتظر قهوه خود میمانیم.

 

وراثت(inheritance):

تا اینجای کار با کپسوله سازی و انتزاع آشنا شدیم اما وراثت چیست؟ و چه مشکلی را از روی دوش ما برمیدارد ؟

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

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

 

 

چند ریختی(polymorphism) :

polymorphism یک کلمه یونانی است که poly به معنی خیلی(many) و phorm به معنی فرم (form) است به معنی چند فرمی.به این مثال توجه کنید که انسان یک رفتار به نام دویدن دارد و گربه هم یک رفتار به نام دویدن دارد،اما کارکرد هر کدام از این رفتار ها متفاوت است.مثلا انسان با دو پا میدود و گربه به صورت چهارپا، به این مثال هم توجه کنید،فکر کنید که یک کلاس دایره و یک کلاس مستطیل و یک کلاس مثلث داریم.قاعدتا هر کدام از این سه شکل راهی متفاوت برای محاسبه مساحت خود دارند.پس در هر کدام از کلاس ها رفتار(method)  محاسبه خودش را تعریف میکنیم.اما نکته اینجاست که تمام این رفتار ها اسم های یکسانی دارند ولی هر کدام محاسبه خود را انجام میدهند. به این معنی که این شکل ها  اسم رفتار یکسان"محاسبه مساحت"دارند اما هر کدام کاری متفاوت انجام میدهند.درواقع جوری بنظر میرسد که یک رفتار (method) در کلاس های متفاوت،ساختار منحصر به فرد خود را دارند.

 

به این شکل توجه کنید هر سه کلاس به دو عملیات (method) به نام های ()CalculateSurface() , CalculatePerimeter اشاره میکنند .شما انتظار دارید که این متد ها یک کار مشابه را برای شما انجام دهند اما اینطور نیست و هر کدام در کلاس جوری دیگر تعریف شده اند و تنها اسمی مشابه هم دارند .

 

 خلاصه و جمع بندی:

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

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


ذخیره مقاله:

اشتراک گذاری:





مطالب پیشنهادی



              
                 انواع پردازنده
انواع پردازنده(CPU)

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


              
                 امنیت شبکه لایه بندی شده
امنیت شبکه لایه بندی شده (قسمت دوم)

پیش از این در مورد امنیت شبکه لایه بندی صحبت کردیم. در این مطلب موارد باقی مانده را ذکر میکنیم و با تکنولوژی‌های IDS و IPS آشنا خواهیم شد. اگر به شبکه علاقه مند هستید این مطلب را پیشنهاد می‌کنیم.


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

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


نظری برای نمایش وجود ندارد. شما اولین نظر باشید.


ارسال دیدگاه

برای ثبت دیدگاه باید ابتدا وارد شوید