سفر به اعماق کامپیوتر(شئ گرایی)

.سلاام

امروز حالتون چطوره؟

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

https://castbox.fm/episode/سفر-به-اعماق-کامپیوتر-(شئ-گرایی)-id2716424-id362795547?utm_source=website&utm_medium=dlink&utm_campaign=web_share&utm_content=%D8%B3%D9%81%D8%B1%20%D8%A8%D9%87%20%D8%A7%D8%B9%D9%85%D8%A7%D9%82%20%DA%A9%D8%A7%D9%85%D9%BE%DB%8C%D9%88%D8%AA%D8%B1%20(%D8%B4%D8%A6%20%DA%AF%D8%B1%D8%A7%DB%8C%DB%8C)-CastBox_FM


سلام.حالتون چطوره؟

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

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

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

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

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

خب ، دیدین بعضی موقع ها وقتی برای توضیح یه قضیه از متضاد یا مخالفش استفاده میکنن که بهتر جا بیوفته؟ مثلا اینکه تاریکی چیه؟ جوابشو میشه اینطوری داد جایی که نور نباشه تاریکیه :))

الان منم میخوام همین روش رو در پیش بگیرم

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

حالا مشکل چیه؟

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

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

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

حالا اینجاست که شی گرایی وارد میشه

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

خب عملکرد مغز ما چجوریه:

اینجوریه که هرچی دور و برمون هست رو به صورت یه شیء میشناسیم مثلا: درخت، میز، پرتقال، شیشه پاک کن و … این اشیاء الان تو محدوده‌ی دید من بود.

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

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

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

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

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

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

یعنی اینجا میتونیم بگیم که کلاس مثل دستور پخت غذاست و ابجکت یا شی مثل خود غذاست.

حالا این کلاس که گفتیم چه شکلیه؟

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

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

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

تا الان به صورت کلی فهمیدید که چیه داستان ولی شی گرایی بر پایه ی چهار تا مفهوم اصلیه:

Abstraction, انتزاع

Inheritance, ارث بری

Encapsulation, مخفی سازی

polymorphism چندریختی

حالا بریم ببینیم حرف حسابشون چیه.

انتزاع (Abstraction)

اول میریم سراغ abstraction که از همه باحال تره به حالتی میگن که یه کلاس <مکث> کد ها و پیچیدگی های توی خودش رو از دید شما که از بیرون کلاس میخواید ازش استفاده کنید مخفی میکنه

که به این کار میگن abstraction

یه مثال خیلی کلیشه ای و معروف در مورد abstraction وجود داره که میریم با هم برسیش کنیم.

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

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

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

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

شما در نهایت یه پدال گاز و ترمز رو میبینید

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

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

یعنی شما یه کلاس مینویسی و کلی توش پیچیدگی داری.

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

وراثت (inheritance)

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

فهمیدید دیگه اسمش برای چی ارث بریه دیگه چون در دنیای واقعی هم فرزند ها ویژگیهای پدر و مادرشون رو به ارث میبرن.

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

مخفی سازی (encapsulation)

حالا میریم سراغ مخفی‌سازی یا encapsulation که میتونیم با این قابلیت بعضی از ویژگی‌ها یا رفتار‌های کلاس رو از بیرون کلاس غیر قابل دستیابی کنیم.

تو زبون جاوا مثلا سه تا کلمه کلیدی هست به اسم: public, private, protected

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

ا public ها که از اسمش معلومه دسترسی رو برای عموم آزاد میزاره. یعنی از بیرون کلاس هم میشه یه تابع public رو صدا زد یا یه متغیر public رو مقدارش رو ریخت تو یه متغیر دیگه و یا مقدارش رو تغییر داد

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

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

اما مفهوم چهارم و اخر


چند ریختی یا polymorphism

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

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

و به جز اینا شی گرایی باعث میشه که کد هاتون دسته بندی بهتر و مرتب تری داشته باشه و وقتی میخواید یه بخشی رو تغییر بدید با توجه به اینکه هر کلاسی مربوط به یه کاری میشه راحت تر اون بخشی که میخواید رو میتونید پیدا کنید

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

بین این چهار تا به نظرم این abstraction مهم ترین چیزیه که برنامه نویسی شی گرا به شما میده.

شی گرایی با توجه به زبون های برنامه نویسی مختلف فرق داره واسه همین دیگه بیشتر از این هم توضیح دادن در موردش سخت میشه.

مخصوصا توی پادکست.

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

حالا بریم ببینیم رابطه ی زبان های برنامه نویسی با شی گرایی چجوریاس:

بعضی زبونا از شی گرایی پشتیبانی نمی کنن مثل:

C , pascal

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

Java , c#

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

Python , javascript و اکثر زبان های مدرن

اینم از شی گرایی.

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

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

ما به این حمایت شما نیاز داریم تا بتونیم با قدرت تر ادامه بدیم.

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

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

و آدرس همه اینا توی سایت ما به ادرس internplusplus.ir هست.

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

تا اپیزود بعدی و یه آموزش دیگه خدافظ.