بنام خدا
بهنام صباغی هستم
در خدمتتونم با جلسه ی ششم از اموزش مقدماتی پایتون
این جلسه میخوام برم سراغ مباحث شی گرایی
بنا به درخواست اعضای کانال سعی میکنم بیشتر توضیح بدم این قسمت رو خب ببینید شما پراید رو در نظر بگیرید
پراید توی برنامه نویسی شیگرا معادل کلاس هستش دقت کنید منظورم یک پراید خاص نیست کلا نوع ماشین پراید رو میگم خب حالا پراید صغرا خانوم میشه یک شی از کلاس پراید یعنی درسته پراید یه سری خواص داره مثلا این که چهارتا چرخ داره راه میره توان موتورش مشخصه و همچین چیزهایی که توی هر پرایدی هست حالا وقتی ما یک شی داریم شی ما توی یه سری خصوصیات داره که توی پراید مشخص نمیشه مثلا درسته که پراید صغرا خانوم قرمز هستش ولی هر پرایدی قرمز نیست میخوام بگم رنگ چیزیه که توی کلاس پراید هست ولی مقدار دهیش موقع ساخت یک پراید خاص انجام میشه حالا خود پراید از یه کلاس دیگه به ارث میبره یعنی از کلاس ماشین به این معنی که پراید نوعی ماشینه حالا خصوصیات ماشین چیه ؟ چهارتا چرخ داره یه موتور داره که اونو به راه میندازه نوع سوختش میتونه متغیر باشه هرچی توی کلاس ها پایین تر میایم خصوصیات دقیقتر میشه مثلا اگر انواع پراید رو هم کلاس های زیر کلاس پراید در نظر بگیریم مثلا پراید 141 زیر کلاس پراید هست و خود پراید زیر کلاس ماشین سواری هست و ماشین سواری زیر کلاس ماشین هست و ماشین زیر کلاس وسیله نقلیه و ...
این توی دنیای واقعی ست و ما چون دارم برای دنیای واقعی برنامه مینویسیم و نیاز داریم مدلش کنیم باید به همین روش پیش بریم بذارید یه مثال دیگه بزنم موجودات یه کلاس هستند حالا یه کلاس دیگه هست که از کلاس موجودات به ارث میبره یعنی جانداران و کلاس جانوران از اون به ارث میبرند کلاس پستان داران از جانوران به ارث میبره انسان از پستان داران به ارث میبره زن ها از کلاس انسان به ارث میبرند و صغرا خانوم به عنوان اخرین حلقه یک شی حساب میشه حالا این شی یه سری خصوصیات داره (مثلا خیلی عصبانیه و صداش خیلی بلنده و بد اخلاقه و دست پختش خوب نیست و دست بزن داره ) و یه سری کار ها هم میتونه انجام بده (مثلا میتونه شوهرش رو کتک بزنه اب رو باز بذاره و در همون زمان با زن همسایه دو ساعت صحبت کنه یا مثلا میتونه دوساعت با تلفت حرف بزنه و بعد دوساعت با وساطت بچش که جیش داره تلفن رو قطع کنه و به بچش کلی غر بزنه که نذاشته چیزی که براش زنگ زده بوده رو بگه و میتونه نیشو کنایه بزنه به زنهای فامیل و ...)
به اون خصوصیاتی که داشت میگند attribute یا صفات و به کارهایی که میتونه انجام بده میگند توابع مثلا توی مثال بالایی یکی ازتوابعی که در واقه برای کلاس ماشین سواری هست و به ارث برده شده حرکت کردنه حالا ماشین سواری چه پیکان باشه چه پراید چه ماشین خارجی میتونه حرکت کنه در واقع این کاریه که هر ماشینی میتونه انجام بده اگر یک نگاه دقیق به اطرفتون بندازید میبینید همه چیز رو میشه اینطور در نظر گرفت و بدونید که اینهایی که من گفتم مدل کردن جهان از دیدگاه منه و ممکنه از دیدگاه شما فرق داشته باشه مثلا پراید رو ماشین ندونید ( مثلا ابزاری برای جابجایی بدونیدش که زیر کلاس ابزار هاست ) منظورم اینه که از نگاه من تا نگاه شما فاصلست خب فکر کنم دیگه مفهوم کلاس براتون جا افتاده باشه حالا یه سری ویژگی از کلاس ها بگم :
1 - وراثت(برنامهنویسی شیگرا)
وراثت یا ارث بری (Inheritance) از مفاهیم اساسی برنامه نویسی شیءگراست. هر شیء یک نمونه از یک کلاس است و هر کلاس میتواند از کلاس یا کلاسهای دیگری مشتق شده باشد (خواص متدها یا رویدادهای کلاسهای دیگر را به ارث ببرد). در یک مثال ساده میتوان اتومبیلی را در نظر گرفت که برای جلوگیری از بازنویسی خواص عمومی اتومبیل شامل: چهار چرخ، متدهای حرکت چرخ، متد چرخاندن فرمان، فرمان، بدنه، در و غیره، میتوان یک کلاس پایه از اتومبیل ایجاد کرد سپس مثلاً برای اتومبیل سیتروئن مدل C۵ یک کلاس جدید ایجاد کرده که خواص، متدها و رویدادهای عمومی اتومبیل را داشته باشد و فقط برای خواص، متدها و رویدادهای جدید این اتومبیل کد نوشته شود. این ویژگی باعث صرفهجویی در نوشتن کد و تا حدودی تضمین صحت کد موجود میشود. به عنوان مثال اگر کلاس پایه مشکلی داشته باشد فقط کافی است کلاس پایه تغییر داده شود و در تمامی کلاسهایی که از این کلاس پایه ویژگیای ا به ارث بردهاند این تغییر اعمال خواهد شد.
2 - مخفیسازی
کپسوله سازی، مخفیسازی (Encapsulation)، یا لفافهبندی، به این مفهوم اشاره دارد که باید بعضی خصوصیات یا رفتارهای شیء را از دید دیگران پنهان کرد. فرض کنید شما به عنوان یک راننده میخواهید اتومبیل شخصی تان را روشن کنید و به محل کارتان عزیمت کنید سوییچ را بر میدارید، استارت میزنید و با فشار آوردن به پدالهای گاز و ترمز و چرخش فرمان و ... به محل کارتان خواهید رسید. در طول این مسیر در اتومبیل شما به عنوان یک شیء اعمال مختلفی در حال انجام بود. مثلاً لنت ترمز به دیسک چرخ برخورد میکرد و باعث کم شدن سرعت میشد یا شمعها شروع به جرقه زدن در زمانی بخصوصی میکردند. حال فرض کنید که عمل مخفی سازی وجود نداشت و شما مجبور بودید که جرقه زدن شمعها را کنترل میکردید و به سیستم سوخت رسانی در موقع لزوم دستور میدادید که سوخت را بداخل سیلندرها ارسال کند و... یا هیچگاه به مقصد نمیرسیدید! یا سالم نمیرسیدید!
عمل مخفی سازی باعث میشود که اشیاء بدون آنکه از چگونگی کارکرد یکدیگر اطلاع داشته باشند با هم کار کنند.
مثلا برای صغرا خانوم مهم نیست ماشینش با چند درجه حرارت بنزین رو میسوزونه فقط این براش مهمه که کلا بذاره جلوی دوستاش و اصلا علاقه ای نداره درجه حرارت سوختن بنزین رو بدونه
3 - چندشکلی
چند ریختی(Polymorphism) چند ریختی، کمیتی است که به یک رابط امکان میدهد تا از عملیات یکسانی در قالب یک کلاس عمومی استفاده کند. عمل خاص کلاس را ذات حقیقی شیء تعیین میکند. مثال سادهای از چند ریختی، فرمان اتومبیل است. عمل فرمان اتومبیل برای تمام اتومبیلها بدون توجه به ساز و کاری که دارند، یکسان است. فرمان برای اتومبیل که به طور مکانیکی کار میکند یا با نیروی برق یا هر چیز دیگری، عمل یکسانی را انجام میدهد؛ بنابراین، پس از اینکه شما عملکرد فرمان را یاد گرفتید، میتوانید فرمان هر اتومبیلی را کنترل کنید. همین هدف در برنامه نویسی نیز اعمال میشود. به طور کلی، مفهوم چند ریختی، اغلب با عبارت ((یک رابط، چندین روش))بیان میشود. این بدین معنی است که امکان طراحی رابط عمومی برای گروهی از عملیات مرتبط وجود دارد. چند ریختی یا چندشکلی (Polymorphism) به این معنا است که اشیاء میتوانند در موقعیتهای مختلف، رفتارهای متفاوتی بروز دهند. مثلاً یک تابع در صورتی که بر روی نمونهای از کلاس آ فراخوانی شود، رفتار ب را بروز دهد در حالی که اگر بر روی کلاس ج (که فرزند کلاس آ است) فراخوانی شود، رفتاری متفاوت انجام دهد.
4 - انتزاع / تجرید
به این معنا است که بخشی از یک موجودیّت یک مفهوم را که میان همهٔ وارثان مشترک است، پیش تعریف کنیم. این توانایی منجر به داشتن نگاه مشابه به موجودیّتهای مشابه میگردد.و این دید به دست نمیاد مگر با تمرین زیاد و دقت به ساختار ها
مدیونید فکر کیند از ویکی پدیا کپی کردم ویژگی ها رو اخه دیدم اگر بخوام خودم توضیح بدم بدتر گیج میشید خب این مفاهیم شی گرایی بود کد زدنش رو بذاریم برای بعدا چون الان دستم بند اون دوزعصر پادشاهانه که قول دادم اموزشش رو بدم
تمرینم نمیدم دیگه چون نمیفرستید اما بدونید پایان هر دوره یه پروژه میدم اگر بخواید مثا لان تنبل بازی در بیارید و انجام ندید دوره ی جدید رو شروع نمیکنم حالا خود دانید (دوره ای که قراره بعد پایتون شروع بشه برنامه نویسی اندروید با زبان بیسیک فور اندروید هست که یکی از اساتید گرامی زحمتش رو میکشه )
راستی اینو یادم رفت کپی کنم
ارتباط اشیاء
مجدداً به مثال ماشین باربری بر میگردیم و این بار، یک ماشین سواری را تعریف میکنیم. ماشین سواری شیئی است که چهار چرخ، یک ترمز، یک پدال گاز و یک صندوق عقب دارد. این تعریف به تعریف ماشین باربری بسیار شبیهاست. به عبارت دیگر ما به یک تعریف جدید میرسیم: خودرو. خودرو وسیلهای است که چهار چرخ، یک ترمز، یک پدال گاز دارد. پس از این به بعد تعریف ماشین باربری و ماشین سواری خیلی سادهتر میشود.
ماشین باربری، خودرویی است که محلی برای قرار دادن بار داشته باشد و ماشین سواری خودروییاست که صندوق عقب داشته باشد.
-اگر کسی به درب کارخانه مراجعه کند و بگوید که 'خودرو' میخواهد، چیزی دریافت نمیکند. خودرو یک تعریف انتزاعی است، برای تعریف خودرو شیء وجود ندارد پس مشتری تنها میتواتند ماشین باربری یا ماشین سواری بخواهد.
-کارواش را در نظر میگیریم. این کارواش خودرو را تمیز میکند و دیگر به طور جزئی عنوان نمیکند که کدام نوع خودرو را تمیز میکند. به عبارت دیگر نوع خودرو برای کارواش مهم نیست.
-وقتی شخصی قصد اجاره خودرویی دارد، و میخواهد جنسی را حمل کند در هنگام تماس با متصدی کرایه ماشین میگوید: «اگر خودرو شمااز نوع باربری است، برای من ارسال کنید»، ولی اگر قصد جابجا شدن را دارد میگوید: «برای من یک ماشین سواری بفرستید.»
در زبانهای برنامه نویسی شیءگرا نیز اشیاء مختلفی وجود دارند که تعریف آنها تکمیل کننده یکدیگر است، به عبارت دیگر اشیا از یکدیگر ارث بری میکنند. برخی از تعاریف کاملاً عام است و نمیتوان از آنها نمونه شیئی ساخت و تنها تعریف هستند. به این تعاریف Interface گفته میشود.