برنامه نویسی شی گرا چیست؟

شی گرایی چیست؟ مفهوم شیءگرایی با مثال ساده️

به‌عبارت‌دیگر، Object‌ها حاوی داده‌های ذخیره‌‌شده‌ای هستند که در فیلد Attribute قرار گرفته‌اند. در این مرحله، پای مفهوم بلوک سازنده (Building Block) به‌میان می‌آید تا با استفاده از کلاس‌ و آبجکت و اتریبیوت، کاری کند تا برنامه‌نویسی برای شما به تجربه‌‎ای جذاب و شیرین تبدیل شود. در تصویر بالا، کلاس وسایل نقلیه، یک کلاس انتزاعی یا Abstract است که تعاریف وسایل نقلیه در آن قرار گرفته است. یعنی داشتن چرخ برای یک وسیله‌ی نقلیه تعریف شده اما چه تعداد چرخ داشته باشد مشخص نشده. کلاس ماشین، یک کلاس انتزاعی مشتق شده از کلاس وسایل نقلیه است که بعضی از موارد تعریف شده در کلاس وسایل نقلیه در آن پیاده سازی شده است. به‌عنوان مثالی دیگر، اگر بخواهیم انتزاع داده‌ها را در مورد اتومبیل‌ها بیان کنیم، پنهان‌سازی جزئیات داخلی خودرو از جمله موتور خودرو، جعبه‌دنده، لنت‌‌ها و غیره، این مفهوم را به‌خوبی نشان می‌دهد.

برای اینکه با خودرو خود از نقطه A به B بروید، تنها کاری که باید انجام دهید، این است که مختصات نقطه مقصد را به خودرو بدهید و تمام! در این مثال، شما نیازی ندارید از الگوریتم‌های مسیریابی و… اطلاع داشته باشید. آبجکت‌ها نمونه‌هایی از یک کلاس هستند که با داده‌های خاصی تعریف شده‌اند. هنگامی‌که یک کلاس تعریف می‌شود و هنوز آبجکتی در آن قرار نگرفته است، توضیحات کلاس به‌عنوان تنها Object تعریف‌شده در کلاس تلقی خواهد شد. برای اینکه مفهوم موارد ذکر شده را دقیق تر متوجه شوید، تصویر بالا را در نظر بگیرید.

حال اگر فرض کنیم که گوشی همراه یک شیء است، اصل کپسوله‌سازی بیان می‌کند که باید این داده‌ها و عملیات‌های مرتبط به صورت منطقی درون این شیء ترکیب شوند. فریم‌ورک‌های محبوبی مانند Django و Ruby on Rails از شی‌گرایی بهره‌برداری می‌کنند تا ساختارهای پیچیده را به‌خوبی مدیریت کنند. اگر به دنبال هاست قدرتمند و بهینه برای اجرای پروژه‌های پایتونی خود هستید، هاست پایتون ایران سرور بهترین انتخاب برای شماست! با پشتیبانی از جدیدترین نسخه‌های Python، سرعت بالا، منابع اختصاصی، و امنیت بی‌نظیر، این سرویس محیطی مناسب برای توسعه و میزبانی برنامه‌های وب، APIها و پروژه‌های علمی فراهم می‌کند. روبی یک زبان شیء گرا و سطح بالا است که به‌طور خاص برای توسعه وب با استفاده از فریم‌ورک معروف Ruby on Rails شناخته می‌شود.

OOP این مشکل را با معرفی مفهومی به نام کلاس و شیء حل می‌کند که به‌تبع آن، داده‌ها و رفتارها در یک واحد به نام شیء ترکیب می‌شوند. OOP به شما اجازه می‌دهد برنامه‌ها را به بخش‌های کوچک‌تر و قابل مدیریت‌تر تقسیم کنید. این قابلیت به دلیل استفاده از کلاس‌ها و اشیاء فراهم می‌شود، که هر یک از بخش‌های مختلف برنامه را به شیء‌های جداگانه و مستقلی تبدیل می‌کنند. این ویژگی باعث می‌شود که درک، توسعه و نگهداری سیستم‌ها راحت‌تر شود. به عنوان مثال، در یک نرم‌افزار مدیریت کتابخانه، می‌توان کلاسی به نام “کتاب” تعریف کرد که دارای ویژگی‌هایی مانند عنوان، نویسنده، و سال انتشار باشد. سپس هر کتابی که ایجاد می‌شود، یک شیء (Object) از کلاس “کتاب” است.

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

در برنامه نویسی شی گرا همه اعضایی (Member) که با نوع اصلی تعریف می‌شوند، اعضای داده به حساب می‌آیند. در ادامه این مطلب برای درک بهتر روش کپسوله سازی در برنامه نویسی شی گرا، مثال‌هایی برای آن ارائه می‌شود. همچنین، یکی از ویژگی‌های اصلی برنامه‌نویسی شیءگرا، وراثت (Inheritance) است. این به ما امکان می‌دهد که یک کلاس جدید را از یک کلاس موجود به ارث ببریم و ویژگی‌ها و عملیات آن را ارث بری کنیم. به عنوان مثال، اگر یک کلاس “خودرو” داریم، می‌توانیم یک کلاس “اتوبوس” را از آن ارث ببریم و ویژگی‌ها و عملیات خاص خودرو را بازنویسی کنیم.

در ادامه انواع وراثت فهرست شده‌اند و پس از آن هر یک از آ‌ن‌ها بررسی خواهند شد. برنامه‌نویسی شی‌گرا نوعی رویکرد برنامه‌نویسی است که در آن نرم‌افزارها بر اساس اشیاء (Objects) و کلاس‌ها (Classes) طراحی می‌شوند. هر شیء می‌تواند نمایانگر یک موجودیت واقعی یا مفهومی باشد که دارای ویژگی‌ها (Attributes) و رفتارها (Methods) است. برنامه نویسی شیءگرا حول محور اشیاء ساخته شده است؛ اشیاء ساختارهای داده‌ ای هستند که هم شامل داده ها (خصوصیات یا ویزگی ها) و هم شامل کدها (رویه ها یا روش ها) هستند. اشیاء قادر هستند خودشان را با «این» یا «خود» تغییر دهند و مطابقت دهند.

همیشه بروزرسانی‌هایی وجود دارند که روی سخت افزار و نرم افزار سیستم‌ها اعمال می‌شوند. تعیین کننده‌های سطح دسترسی دارای کلمات کلیدی هستند که تعیین می‌کنند از کجا می‌توان به ویژگی‌ها و متدهای کلاس دسترسی داشت. جاوا، پایتون، سی پلاس پلاس، لیسپ و پرل نمونه‌هایی از زبان های محبوب برای برنامه نویسی شیءگرا هستند. این زبان ها با استفاده از پارادایم اشیاء و کلاس ها، از برنامه نویسی پشتیبانی می کنند. این چهار اصل، ویژگی های مشترکی هستند که زبان های شیءگرا را تعریف می کنند و به طور قابل توجهی آنها را کارآمد می سازند. زبان‌های معروفی چون جاوا، پایتون، C++، C# و Ruby از برنامه‌نویسی شیء گرا پشتیبانی می‌کنند و هر یک از این زبان‌ها ویژگی‌های خاص خود را دارند.

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

در برخی از منابع نمونه و شی را با یکدیگر هم‌معنی نیز در نظر می‌گیرند. در بخش بعدی از مقاله «اصول برنامه نویسی شی گرا» تعریف «ویژگی» (Attribute) در این نوع برنامه نویسی را یاد می‌گیریم. به دلیل وجود رویکرد پلی مورفیسم در این مثال می‌توانTV را همانTelevision در نظر گرفت؛ زیراTelevision دارای همه متدهای مرتبط به آن است و زمانی کهTelevision.on() فراخوانی شود، سپسTV نیز روشن خواهد شد. متدها می‌توانند انواع مختلفی داشته باشند که باعث می‌شود انواع پلی مورفیسم ایجاد شوند. در ادامه مطلب «اصول برنامه نویسی شی گرا» به بررسی انواع پلی مورفیسم پرداخته شده است. بنابراین استفاده از توابع آماده در برنامه نویسی را هم می‌توان نوعی انتزاع در نظر گرفت.

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

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

برنامه نویسی دستوری یک رویکرد برنامه نویسی رویه ای است که بر مشخص کردن صریح مراحل یا رویه ها برای حل یک مشکل تمرکز دارد. زبان هایی مانند C++ و جاوا از برنامه نویسی ضروری پشتیبانی می کنند و می توانند در کنار برنامه نویسی شی گرا استفاده شوند. بلوک اصلی با شبیه‌سازی برای قادر کردن شبیه‌سازی پیشوند دار شده‌است. هنگامی که کسی درخواست اتاق پرو می‌کند و آن اشغال است، آن‌ها را باید در این صف منتظر (صبر (درب)) بمانند. برنامه اصلی برای ۱۰۰ دقیقه از زمان شبیه‌سازی می‌ماند قبل ازاینکه برنامه پایان یابد.

برای Object پراید ابتدا یک متغیر با نام pride$ می‌سازیم و سپس با ()new car یک شیء جدید از کلاس Car نمونه‌گیری می‌کنیم و در این متغیر ذخیره می‌کنیم. در قسمت بالا یک کلاس Car داریم که دارای سه Property با نام‌های model ،color و speed هستند و سه Method با نام‌های setModel ،setColor و setSpeed داریم. اکنون می‌خواهیم دو نمونه شیء از این کلاس Car با نام‌های Pride و Benz بسازیم. تمام منابع سرور در اختیار شماست و به راحتی می‌توانید تغییرات مدنظرتان را اعمال کنید.امنیت، سرعت و پایداری بالا برای میزبانی پروژه‌های بزرگ. شما وقتی می‌خواهید متنتان را چاپ کنید، باید روی آیکون پرینتر کلیک یا از کلیدهای ترکیبی صفحه‌کلید استفاده کنید.

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

به بیان دیگر، انتزاع داده‌ها در مثال خودرو یعنی اینکه ما بدون اطلاع ازجزئیات فنی آن، از خودرو استفاده می‌کنیم. به زبان ساده، «انتزاع داده‌ها» (Data Abstraction) را می‌توان مخفی‌سازی جزئیات غیرضروری از کاربر دانست. به‌صورتی‌که تنها اطلاعات مهم برای او نمایش داده شود و از این طریق، از پیچیدگی‌های سیستم دور بماند و روی قسمت‌های مهم‌تر تمرکز کند. این کلاس خصوصیاتی مانند سن، نژاد، نام و غیره دارد که ویژگی‌های آن محسوب می‌شوند. از سوی دیگر متدهایی نظیر صدای میو، خوابیدن، غذا خوردن و غیره را در بر می‌گیرد. کپسوله سازی یا Encapsulation به دسته بندی داده ها و روش هایی اشاره دارد که روی آن داده ها در یک جزء واحد که همان شی است عمل می کنند.

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

منظورمان از شئ دقیقا همان چیزهایی است که ما در دنیای واقعی با آن‌ها سر و کار داریم. یک موجودیت منحصر به فرد مانند ماشین، دوچرخه، کامیون و… می‌توانند شئ باشند. حال منظورمان از کنار همدیگر در جمله قبلی این است که معمولا این اشیاء در یک یا چند ویژگی مشترک هستند. قبل از ظهور شیءگرایی از برنامه نویسی رویه‌ای (Procedural programming) استفاده می‌شد. در این روش، کدها به‌صورت خط به خط از ابتدا تا انتها نوشته می‌شدند. این روش بسیار قدیمی بود و کدهای اضافی و تکراری در برنامه زیاد می‌شد و کدنویسی تمیز از بین می‌رفت.

در دنیای واقعی تمام موجودیت‌های برنامه می‌توانند به صورت شی دیده شوند. حتی می‌توان هر رکورد از جداول پایگاه داده را به صورت شی دید (ORM). مثل کلاس پیام یا Message که انواع مختلف کلاس Message مانند BroadcastMessage و PrivateMessage از آن به ارث می‌برند و... با استفاده از Contain و Delegate می‌توان تا حدودی این مسئله را حل کرد. برای اینکه بهتر بدانیم شی گرایی چیست باید با مفاهیم بنیادین و اساسی آن آشنا شویم. در ادامه به توضیح مفاهیم شی، صفت، روش و کلاس در برنامه‌نویسی شی گرایی می‌پردازیم.

هنگامی که شی، مشخص شد، کلاس (Class) یا طبقه‌ای از اشیا را به آن اختصاص می‌دهیم. شی‌ها می‌توانند با رابط‌های مناسب تحت عنوان پیام‌ها (messages) تعامل برقرار کنند. اگر به شروع مسیر یادگیری پایتون علاقه‌مندید، در نظر داشتن این نکات به شما کمک می‌کند تا پیشرفت بیشتری داشته باشید و تمرکز خود را حفظ کنید. یکی از موثرترین روش‌ها برای یادگیری پایتون، استفاده عملی از آن است. شما می‌خواهید زمان کمتری را صرف یادگیری نحو کنید و هرچه زودتر شروع به کار بر روی پروژه‌ها کنید.

همان‌طور که پیش‌تر هم توضیح دادیم، «کلاس» (Class) در برنامه‌نویسی شی‌گرا مانند یک طرح کلی یا یک الگو عمل کرده و شی از روی آن ساخته می‌شود. به بیان دقیق‌تر، یک کلاس بیان می‌کند که یک شی چه نوع خصوصیات و متدهایی داشته باشد. به زبانی که برای برقراری ارتباط با کامپیوتر از آن استفاده می‌شود و دارای الگوریتم‌ها و ساختار مخصوص به خود است زبان برنامه‌نویسی گفته می‌شود. زبان‌های برنامه‌نویسی را می‌توان از جنبه‌های مختلف طبقه‌بندی کرد. انتزاع یا Abstraction شامل ساده سازی سیستم های پیچیده با تجزیه آنها به نمایش های قابل مدیریت و انتزاعی است. انتزاع به برنامه نویسان اجازه می دهد تا بر روی ویژگی های ضروری تمرکز کنند در حالی که جزئیات غیر ضروری را پنهان می کنند.

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

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

بنابراین روشی برای این استفاده مجدد به وجود آمده است که از اصول برنامه نویسی شی گرا به حساب می‌آید، در بخش‌های بعدی این اصول شرح داده می‌شوند. ابتدا به شرح اصل «تجرید» یا «انتزاع» (Abstraction) پرداخته شده است. اصل وراثت (Inheritance) در برنامه نویسی شیءگرا چیست؟ به طور کلی «Inheritance» به معنای «وراثت» در برنامه نویسی شبیه وراثت بیولوژیکی است که در آن فرزندان صفاتی را از والدین به ارث می‌برند. در برنامه‌نویسی شیءگرا می‌توان با وراثت از کلاس موجود کلاسی را ایجاد کرد که داده‌ها و متدهای کلاس قبلی را به ارث ببرد. برنامه نویسی شی گرا مستلزم تفکر در مورد ساختار برنامه و برنامه ریزی در ابتدای کدگذاری است.

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

شی گرایی به توسعه دهندگان این امکان را می‌دهد تا با تعریف آبجکت‌ها یا شی‌های مختلف، سیستم‌های نرم افزاری را مدل سازی کنند. یک آبجکت (Object) می‌تواند از هر نوع داده‌ای تشکیل شده و شامل یک یا چند ویژگی باشد. اشیایی که دارای شباهت هستند را در کلاس‌هایی قرار داده و کلاس‌های دیگر را بر اساس همین ویژگی از آن مشتق می‌کنند. این هم یکی از اصول اساسی در برنامه‌نویسی شی گرایی است که می‌تواند داده‌ها و اشیا را با قاعده وراثت‌پذیری مرتب کند. همچنین قابلیت دسترسی و اضافه‌ کردن ویژگی‌های جدید را بدون تکرار موارد مشابه در کلاس‌های مشتق‌شده از کلاس اصلی، می‌توان با استفاده از وراثت‌پذیری انجام داد. با به کارگیری اصول بالا، هدف OOP ارائه رویکردی ساختاریافته و ماژولار برای توسعه نرم افزار است که مدیریت و نگهداری پروژه های در مقیاس بزرگ را آسان تر می کند.

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

در کدهای مثال فوق،method1 در کلاس مشتق شده رونویسی می‌شود و زمانی که شی کلاس مشتق شده ایجاد شده شود،method1 فراخوانی و سپس کلاس مشتق شدهmethod1 فراخوانی می‌شود. به این روش مقیدسازی پویا نیز گفته می‌شود؛ زیرا زمانی که شئی حافظه را در حین اجرا برنامه دریافت می‌کند، بر اساس شی، متد رونویسی شده فراخوانی می‌شود. در بخش بعدی به صورت خلاصه برخی از مزایای اصول برنامه نویسی شی گرا بررسی شده‌اند. به عبارت ساده‌تر، اگر کلاس فرزند تعریف خود را برای متدی ارائه دهد که از پیش در کلاس والد موجود است، سپس می‌توان گفت که آن تابع در کلاس پایه یا والد رونویسی شده است. باید به این نکته توجه داشت که چند شکلی زمان اجرا تنها از طریق توابع قابل دستیابی است و از طریق اعضای داده (Data Member) قابل دسترسی نیست.

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

در حقیقت همه‌ی خودروها (Class) دارای یک سری ویژگی‌ها مانند رنگ، مدل، سرعت و... هستند و یک سری رفتارهایی مانند قابلیت تعویض دنده، گازدادن و ترمز زدن را دارا هستند. وقتی یک شیء مانند پراید از این Class می‌سازیم، از این ویژگی‌ها تبعیت می‌کند ولی می‌توانیم ویژگی‌ها و رفتارهای آن را شخصی سازی کنیم. استفاده از OOP در زبان‌های برنامه‌نویسی مزایای زیادی دارد؛ از‌جمله قابلیت استفاده مجدد از کد، دیباگ‌کردن ساده‌تر کدها، توسعه ساده‌تر در آینده و صرفه‌جویی در زمان. این رویکرد از برنامه نویسی مناسب پروژه‌های نرم‌افزاری با حجم متوسط است. در این نوع برنامه نویسی، می‌توان آزادانه به داده‌ها دسترسی داشت.

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

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

در OOP، اشیاء موجودیت های دنیای واقعی یا مفاهیم انتزاعی را نشان می دهند و داده ها (ویژگی ها) و رفتارها (روش ها) مربوط به آن موجودیت ها را محصور می کنند. در این رویکرد از وراثت، کلاس مشتق شده با استفاده از کلاس‌های مشتق شده دیگر ایجاد می‌شود و آن کلاس‌های مشتق شده دیگر دارای یک کلاس والد یکسان هستند. در مثال زیر، کلاس D، ویژگی‌ها و رفتارهای کلاس C و B و همچنین کلاس A را به ارث می‌برد. بنابراین، کلاس A والد هر دو کلاس B و C و همچنین D به حساب می‌آید. از این‌رو، می‌توان گفت در این مثال ارث بری چندمسیره انجام شده است.


برنامه نویسی لاراول چیست