موضوع مقاله: برنامه‌نویسی شیءگرا | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # برنامه‌نویسی شیءگرا | مقدمه: برنامه‌نویسی شیءگرا (به‌اختصار: OOP) یک شیوهٔ برنامه‌نویسی است که ساختار یا بلوک اصلی اجزای آن اشیاء می‌باشند. | ## بخش 1: برنامه‌نویسی شیءگرا | در این شیوه برنامه‌نویسی، برنامه به شیء گرایش پیدا می‌کند، به این معنا که داده‌ها و توابعی که بر روی این داده‌ها عمل می‌کنند، تا حد امکان در قالبی به نام شیء و در کنار یکدیگر قرار گرفته، جمع‌بندی شده و یک واحد (یا یک شیء) را تشکیل می‌دهند و نسبت به محیط بیرونِ خود، کپسوله می‌شوند. از این طریق، توابع خارج از آن شیء، امکان ایجاد تغییر در داده‌های درون شیء را نخواهند داشت. شکل‌گیری فلسفه‌ای که منجر به شکل‌گیری زبان‌های شیءگرا شد، عبارت بود از این واقعیت که نحوه عملکرد مغز و شیوهٔ دریافت اطلاعات از محیط پیرامون و پردازش آن اطلاعات (اندیشیدن)، شیوه‌ای شی‌ءگراست. Auflage, تا به این شکل، برنامه‌نویس بتواند با بهره‌گیری از زبانی که به روش اندیشیدنش نزدیکی بیشتری دارد؛ شی‌ءهای مختلفی را تعریف نموده، این شی‌ءها را در ارتباط با یکدیگر قرار داده و از شی‌ءهای پویای تولید شده برای حل مسئلۀ پیش روی استفاده نماید. زبان‌هایی مانند جاوا، سی پلاس پلاس(++c)، سی شارپ، دلفی و پایتون از جمله زبان‌های شی‌ءگرا هستند. حتی بسیاری از زبان‌های روال‌گونه که ساختار برنامه‌ها در آن‌ها بلوک‌هایی با نام پروسیجر است، امروزه از فنون شی‌گرایی نیز پشتیبانی می‌کنند. در این پارادایم برنامه‌نویسی، دید برنامه‌نویس به سیستم، دید شخصی است که سعی می‌نماید با پیدا کردن اشیاء مختلف در سیستم و برقراری ارتباط بین آن‌ها، سیستم را تولید نماید. مقایسه لازم است ذکر شود که تکنیک برنامه‌نویسی شی‌گرا به مراتب کارا و پیچیده‌تر از سبک برنامه‌نویسی مبتنی بر تابع است. دلایل برتری برنامه‌نویسی شی‌گرا: قابلیت سازمان‌دهی بهینه‌تر کدها قابلیت تقسیم برنامه به برنامه‌های کوچک‌تر اما مستقل: برنامهٔ اصلی به صورت یک EXE در می‌آید که دیگر قسمت‌های مستقل برنامه را فراخوانی می‌کند. با این وجود؛ بسیاری از توسعه دهندگان سعی می‌کنند در پروژه‌های کوچک و ساده خود از سبک برنامه‌نویسی مبتنی بر تابع بهره بگیرند. کلاس کلاس نوع خاصی از آرایه است که امکان ذخیره و جمع‌بندی تعداد زیادی المان را (که شامل داده‌ها و توابع هستند) برای یک شی جدید فراهم آورده و تحت یک نام مشترک ذخیره می‌کند؛ اما برخلاف آرایه که تنها قادر به ذخیرهٔ داده‌هایی هم جنس است، کلاس می‌تواند داده‌هایی از جنس‌های مختلف را ذخیره نماید.Prof. این بدان معنی ست که می‌بایستی به تعداد n بار، سه متغیر بالا، جداگانه تعریف شوند و تعریفِ تک تک و پیاپی متغیرها، نه فقط از لحاظ زمانی بسیار وقت گیر می‌نماید، بلکه از لحاظ میزان کد مورد نیاز نیز بسیار غیر عملی ست. چرا که هربار باید نام جدیدی برای متغیرها در نظر گرفته شود (دو متغیر متفاوت نمی‌توانند هم‌نام باشند). هر شیء یک نمونه از یک کلاس است و هر کلاس می‌تواند از کلاس یا کلاس‌های دیگری مشتق شده باشد (خواص متدها یا رویدادهای کلاس‌های دیگر را به ارث ببرد). | ## بخش 2: برنامه‌نویسی شیءگرا | در یک مثال ساده می‌توان اتومبیلی را در نظر گرفت که برای جلوگیری از بازنویسی خواص عمومی اتومبیل شامل: چهار چرخ، متدهای حرکت چرخ، متد چرخاندن فرمان، بدنه، در و غیره؛ می‌توان یک کلاس پایه از اتومبیل ایجاد کرد، سپس مثلاً برای اتومبیل سیتروئن مدل C۵ یک کلاس جدید ایجاد کرده که خواص، متدها و رویدادهای عمومی اتومبیل را داشته باشد و فقط برای خواص، متدها و رویدادهای جدید این اتومبیل کد نوشته شود. به عنوان مثال اگر کلاس پایه مشکلی داشته باشد فقط کافی است کلاس پایه تغییر داده شود و در تمامی کلاس‌هایی که از این کلاس پایه ویژگی‌ای را به ارث برده‌اند این تغییر اعمال خواهد شد. فرض کنید شما به عنوان یک راننده می‌خواهید اتومبیل شخصی‌تان را روشن کنید و به محل کارتان عزیمت کنید؛ سوییچ را برمی‌دارید، استارت می‌زنید و با فشار آوردن به پدال‌های گاز و ترمز و چرخش فرمان و … به محل کارتان خواهید رسید. مثلاً لنت ترمز به دیسک چرخ برخورد می‌کرد و باعث کم شدن سرعت می‌شد یا شمع‌ها شروع به جرقه زدن در زمانی به‌خصوصی می‌کردند. حال فرض کنید که عمل مخفی‌سازی وجود نداشت و شما مجبور بودید که جرقه زدن شمع‌ها را کنترل می‌کردید و به سیستم سوخت‌رسانی در موقع لزوم دستور می‌دادید که سوخت را به داخل سیلندرها ارسال کند و غیره! عمل مخفی‌سازی باعث می‌شود که اشیاء بدون آنکه از چگونگی کارکرد یکدیگر اطلاع داشته باشند با هم کار کنند. چندریختی چند ریختی، کمیتی است که به یک رابط امکان می‌دهد تا از عملیات یکسانی در قالب یک کلاس عمومی استفاده کند. عمل فرمان اتومبیل برای تمام اتومبیل‌ها بدون توجه به ساز و کاری که دارند، یکسان است. فرمان برای اتومبیل که به‌طور مکانیکی کار می‌کند یا با نیروی برق یا هر چیز دیگری، عمل یکسانی را انجام می‌دهد؛ بنابراین، پس از اینکه شما عملکرد فرمان را یادگرفتید، می‌توانید فرمان هر اتومبیلی را کنترل کنید. این بدین معنی است که امکان طراحی رابط عمومی برای گروهی از عملیات مرتبط وجود دارد. مثلاً یک تابع در صورتی که با ۳ متغیر اجرا شود متفاوت تر از حالتی که ۲ متغیر دریافت میکند کار کند یا در مثالی دیگر زمانی که نوع‌داده های متغیر ها متفاوت هست برای هر کدام عملکرد متفاوت داشته باشد. به عبارت دیگر فرآیندی برای انتزاع یا پنهان‌سازی عملکردها می‌باشد و فقط امکان استفاده از آن‌ها را برای کاربران یا برنامه نویسان فراهم می‌کند. هیچ کس نمی‌داند چه عملیاتی در تابع اتفاق می‌افتد و ما فقط با صدا زدن و ارسال پارامتر از آن استفاده می‌کنیم. مثال کاربردی در اطراف ما اشیاء زیادی وجود دارد و می‌توان تمام مفاهیم موجود در طبیعت را با اشیاء تقلیل داد. | ## بخش 3: برنامه‌نویسی شیءگرا | این ماشین یک سری خصوصیات دارد: چهار چرخ، یک پدال ترمز، یک پدال گاز، یک فرمان و یک محل بزرگ برای قرار دادن اشیاء در آن و… این ماشین در صورتی که ما پدال گاز آن را فشار دهیم، حرکت می‌کند. پس این شیء علاوه بر یک سری خصوصیات، یک سری رفتار مشخص هم به ما نشان می‌دهد؛ ولی فقط این یک ماشین نیست که این کار را انجام می‌دهد. پس می‌توانیم این ماشین را 'تعریف' کنیم و بگوییم: ماشین باربری وسیله‌ای است که چهار چرخ، یک گاز، یک ترمز، یک فرمان و یک محل برای حمل بار دارد و اگر پدال گاز آن فشار داده شود حرکت می‌کند. هر زمانی چنین ماشینی بخواهیم به کارخانه تولید آن می‌رویم و از فروشندگان می‌خواهیم تا با توجه به این تعریف یک ماشین به ما بدهند. در این زبان‌ها، اشیاء زیادی از پیش وجود دارند که برنامه‌نویسان می‌توانند از آن‌ها استفاده کنند. ارتباط اشیاء مجدداً به مثال ماشین باربری بر می‌گردیم و این بار، یک ماشین سواری را تعریف می‌کنیم. ماشین باربری، خودرویی است که محلی برای قرار دادن بار داشته باشد و ماشین سواری، خودرویی است که صندوق عقب داشته باشد. اگر کسی به در کارخانه مراجعه کند و بگوید که «خودرو» می‌خواهد، چیزی دریافت نمی‌کند. خودرو یک تعریف انتزاعی است، برای تعریف خودرو شیء وجود ندارد؛ پس مشتری تنها می‌تواند خودرو باربری یا خودرو سواری بخواهد. این کارواش خودرو را تمیز می‌کند و دیگر به‌طور جزئی عنوان نمی‌کند که کدام نوع خودرو را تمیز می‌کند. وقتی شخصی قصد اجاره خودرویی دارد، و می‌خواهد جنسی را حمل کند در هنگام تماس با متصدی کرایه ماشین می‌گوید: «اگر خودرو شما از نوع باربری است، برای من ارسال کنید»، ولی اگر قصد جابجا شدن را دارد می‌گوید: «برای من یک ماشین سواری بفرستید.» در زبان‌های برنامه‌نویسی شیءگرا نیز اشیاء مختلفی وجود دارند که تعریف آن‌ها تکمیل‌کننده یکدیگر است، به عبارت دیگر اشیا از یکدیگر ارث بری می‌کنند. برخی از تعاریف کاملاً عام است و نمی‌توان از آن‌ها نمونه شیئی ساخت و تنها تعریف هستند. | ## جمع‌بندی | مدیریت پیچیدگی اعمال شیوه‌های مدیریتی با محوریت اشیاء در مطالعه، طراحی، ایجاد، و اجراء پروژه‌های مهندسی نرم‌افزار و مهندسی دانش.