برنامه نویسی شی گرا

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

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

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

برنامه نویسی شی گرا توسط «Alan Kay» در طول سال‌های ۱۳۳۹ تا ۱۳۴۶ شمسی (۱۹۶۰ تا ۱۹۶۷ میلادی) معرفی شده است. اما امروزه وظایف نرم افزاری بسیار محبوب هستند و اندازه نرم افزارها هم افزایش پیدا کرده‌اند. بنابراین، مدیریت رویکردهای «برنامه نویسی رویه‌ای» (Procedural Programming) یا «برنامه نویسی تابعی» (Functional Programming) به دلیل وجود حجم بالای کدها بسیار دشوار خواهد بود. رویکرد وراثت در برنامه نویسی شی گرا دارای انواع مختلفی است که در زبان‌های برنامه نویسی استفاده می‌شوند. در ادامه انواع وراثت فهرست شده‌اند و پس از آن هر یک از آ‌ن‌ها بررسی خواهند شد.

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

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

در این نوع وراثت یک کلاس مشتق شده، ویژگی‌ها و رفتارهایی را از یک کلاس پایه به ارث می‌برد، به همین دلیل به آن وراثت منفرد گفته می‌شود. در مثال زیر، کلاس A والد یا پایه و کلاس B فرزند یا مشتق شده است و کلاس B ویژگی‌ها و رفتارهای کلاس والد A را به ارث می‌برد. اگر قصد برداشت پول از این دستگاه وجود داشته باشد، به راحتی می‌توان با استفاده از جزئیات موجود در ویژگی‌های ارائه شده آن‌ها، برداشت پول را انجام داد. دستگاه‌های ATM فقط یک «رابط کاربری گرافیکی» (Graphical User Interface | GUI) ساده برای تعامل کاربران با آن ارائه می‌دهند و نیازی نیست که کاربر از همه پیاده‌سازی‌های داخلی دستگاه آگاه باشد. اگر می‌خواهید در مورد تاریخچه شکل‌گیری زبان‌های برنامه نویسی شئ گرا بخوانید، در ویکی‌پدیا اطلاعات مختصر و مفیدی ارائه داده است.

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

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

در دات نت، کلیه نوع های داده و کلاس ها، چه آنهایی که به صورت دستی می نویسیم و چه آنهایی که در کتابخانه دات نت وجود دارند، از کلاس object مشتق شده اند، به جز کلاس هایی که برای آنها کلاس والد را مشخص کرده ایم. دقت کنید بدنه get حتماً باید مقداری را با دستور return بر گرداند. همچنین این بدنه می تواند دارای access-modifier باشد، یعنی سطح دسترسی خواندن مقدار را مشخص می کند. در صورتی که سطح دسترسی را مشخص نکنید به صورت پیش فرض public در نظر گرفته می شود. به نام گذاری فیلدها دقت کنید، زمانی که فیلدها به private تغییر کردند، نام گذاری بر اساس قاعده camelCase انجام می شود. البته الزامی به این کار نیست، اما برای رعایت اصول کد نویسی بهتر است از این قواعد پیروی کنیم.

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

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

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

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

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

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

وراثت به کلاس‌ها امکان می‌دهد تا ویژگی‌های کلاس‌های دیگری را به‌ارث ببرند. وراثت در OOP برای طبقه‌بندی آبجکت‌ها در برنامه‌ها بر‌اساس ویژگی‌ها و عملکردهای مشترک استفاده می‌شود. بدین‌ترتیب، شما می‌توانید ویژگی‌های کلی را در Object والد قرار دهید و آن‌ها را به Object‌های زیرمجموعه موسوم به «فرزند» به‌عنوان ارث بدهید. متدها را می‌توان توابعی نامید که در یک کلاس تعریف و رفتار آبجکت بر‌اساس آن‌ها تعیین می‌شود. در اینجا، پدر می‌تواند ویژگی‌ها و خصوصیت‌های خود را به فرزند ارث بدهد.

این رویکرد به برنامه‌نویسان این امکان را می‌دهد که نرم‌افزارهایی طراحی کنند که هم قابل استفاده مجدد باشند و هم به راحتی توسعه و نگهداری شوند. در این زبان مفاهیم شی و کلاس همانند سایر زبان‌های برنامه نویسی شی گرا وجود ندارد. با این حال، در این زبان یک سری ساختارهای خاصی وجود دارد که مفاهیم و کارایی شی و کلاس را پوشش می‌دهند. زبان Go دارای کامپایلر بسیار سریعی است که به توسعه دهندگان این امکان را می‌دهد تا چندین «وظیفه» (Task) را به‌طور همزمان پیش ببرند. زبان برنامه نویسی C#‎ نیز یکی دیگر از زبان‌های برنامه نویسی شی گرا به شمار می‌رود. این زبان همه‌منظوره، برای ساخت برنامه‌های مبتنی بر پایگاه داده، وب، دسکتاپ و شبکه استفاده می‌شود.

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

برنامه‌نویسی شی‌گرا یکی از محبوب‌ترین رویکردها در صنعت نرم‌افزار است و در زبان‌های مختلفی مانند جاوا، پایتون، C++ و C# پیاده‌سازی شده است. در ادامه، به بررسی ویژگی‌ها، اصول و مزایای برنامه‌نویسی شی‌گرا می‌پردازیم. در سال 2002 و همزمان با انتشار فریم ورک دات نت (.net)، شرکت مایکروسافت یک زبان جدید بر مبنای فریم ورک به نام سی شارپ (#C) را به جهانیان معرفی نمود. این زبان برنامه نویسی اغلب به عنوان قوی ترین زبان در بین برنامه نویسان شناخته می‌شود. تلاش ، تجربه و مشتری مداری از سرمایه های اصلی ما در جهت کسب اعتماد مشتریان است به عقیده ما از اصول مهم یک تجارت ، رضایت مشتری است. OOP یک پارادایم برنامه‌نویسی است که بر اساس استفاده از اشیاء و کلاس‌ها برای سازمان‌دهی کدها عمل می‌کند.

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

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

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

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

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

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

در دهه 80 و در سرمقاله ای که توسط دیوید رابینسون نگارش شده بود که جهانیان را با این رویکرد در برنامه نویسی آشنا گردانید. مفاهیم شی گرایی در برنامه نویسی در دهه 60 با زبان برنامه نویسی به نام Simula شروع به ظهور کردند. اولین زبان برنامه نویسی که به طور گسترده به عنوان “شی گرا” شناخته شد، Simula بود که در سال 1965 مشخص شد. Simula مانند Sketchpad، می توانست اشیاء را به نمایش گذاشته و آن ها را در دسته بندی و زیرگروه ها مختلفی دسته بندی نمود. اگرچه Simula اولین زبان برنامه‌نویسی بود که از OOP در ساختار خود استفاده کرد، امروزه بسیاری از زبان‌های برنامه‌نویسی از این مفهوم استفاده می‌کنند. برخی از این زبان‌ها شیء گرایی را به‌صورت خالص (Pure) ایجاد می‌کنند و همه‌چیز را به‌صورت Object در نظر می‌گیرند؛ اما عمده آن‌ها با برخی از فرایندهای رویه‌ای طراحی شده‌اند.

سیمولا یک نام برای دو زبان برنامه‌نویسی سیمولا ۱ و سیمولا ۶۷ است. این زبان ها در ۱۹۶۰ در مرکز محاسبات نروژی در اسلو، توسط اوله-یوهان دال و کریستین نیگارد توسعه یافتند. نحو آن نسبتاً به الگول ۶۰ وفادار است و همان‌طور که از نام آن پیداست، برای انجام شبیه‌سازی طراحی شده‌است. بوها طبقه به عنوان یک طرح برای ایجاد اشیاء ، در حالی که اعتراض نمونه ای از کلاس با داده ها و رفتار منحصر به فرد خود است. در این بخش روش تعریف کلاس ها ، ایجاد اشیاء و کار با ویژگی ها و روش ها برای محاصره عملکرد در اشیاء توضیح داده شده است.

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

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

همچنین می‌توان با استفاده از رابط یا اینترفیس در جاوا به آن دسترسی پیدا کرد. برنامه نویسی شی گرا به عنوان یکی از روش‌های برنامه نویسی کامپیوتری در طراحی نرم افزار امکان تعریف کردن انواع داده و عملیات‌های مدنظر در ساختار داده را در اختیار برنامه نویسان و توسعه دهندگان نرم افزار قرار می‌دهد. با این روش، ساختار داده به یک شی تبدیل می‌شود که داده‌ها و توابع را در بر می‌گیرد. می‌توان به منظور نوشتن دستورات یک زبان برنامه نویسی، از کد ادیتور یا «محیط توسعه یکپارچه» (Integrated Development Environment | IDE) استفاده کرد. دستورات نوشته شده در این محیط‌ها، با استفاده از کامپایلر، به زبانی ترجمه می‌شوند که برای کامپیوتر قابل فهم باشند.

با اینکه هدف این زبان‌ها از شی گرایی یک مساله است اما رویکرد متفاوتی دارند. به عنوان مثال بعضی از زبان‌ها به صورت خالص OOP می‌باشند، در این زبان‌ها همه چیز به عنوان یک شی در نظر گرفته می‌شود. در حالی که بعضی از زبان ها عمدتا برای OOP ساخته شده اند و یا بعضی دیگر از زبان‌ها به صورت غیر شی گرا هم وجود داشتن که OOP را هم وارد زبان خود کرده‌اند. در زبان برنامه نویسی شی گرا با استفاده از شی می‌توان «نمونه‌های» (Instance) مختلفی از یک کلاس ایجاد کرد. اشیای ساخته شده، دارای رفتارها و مشخصه‌های کلاس هستند و هر یک از اشیا می‌توانند مقدار مشخصه یا رفتار خاصی را داشته باشند. برنامه‌نویسی شی‌گرا مانند برنامه‌نویسی رویه‌ای، تابعی، دستوری و غیره یکی از شیوه‌هایی است که برای توسعه نرم‌افزارها مورد استفاده قرار می‌گیرد.

زمانی که نیاز است یک فنجان قهوه را آماده کنیم، صرفاً کافی است مقداری آب و پودر قهوه در دستگاه قهوه‌ساز ریخته شود و سپس دستگاه را روشن کرده و نوع قهوه خود را انتخاب کنیم. در این رویکرد از برنامه نویسی، به نمونه‌های مفهوم کلی خودرو، شی گفته می‌شود. به عبارتی، در مثال قبل، بنز و ماشین، شی هستند که هر کدام مشخصه‌ها و رفتارهای خاص خود را دارند. Poly به معنی «چندین» است و Morph هم به معنی «شکل» است که روی هم رفته می‌توان آن را به «چند شکلی» ترجمه کرد. این اصل در مقایسه با سه اصل اول اصول شیء گرایی کمی پیچیده‌تر است اما سعی می‌کنیم با مثال‌هایی ملموس، مفهوم Polymorphism را برای برنامه نویسان مبتدی روشن کنیم.


برنامه نويسي موبايل