برنامه نویسی شی گرایی
آموزش سی شارپ C#
Encapsulation امنیت را به کد اضافه می کند و همکاری با توسعه دهندگان خارجی را آسان تر می کند. وقتی در حال برنامه نویسی برای به اشتراک گذاشتن اطلاعات با یک شرکت خارجی هستید، نمی خواهید الگوها یا داده های خصوصی کلاس ها را افشا کنید زیرا شرکت شما دارای آن مالکیت معنوی است. اگر ویژگی ها و رفتارهای اساسی در کلاس والد تعریف شود، می توان کلاس های فرزند ایجاد کرد که عملکرد کلاس والد را گسترش داده و ویژگی ها و رفتارهای اضافی را اضافه می کند. در این کلاس ما میتوانیم ویژگیهای مشترک بین پرندگان مانند نام، رنگ، وزن و… را ارائه دهیم و جزئیاتی مانند نحوه پرواز یا نوع تغذیه را پنهان کنیم. این امر به ما کمک میکند که یک مدل ساده و قابل فهم از پرندگان ارائه دهیم و همچنین فرصتی برای افزودن انواع مختلف پرندگان به کدمان را فراهم میکند.
قابلیت مهم دیگر زبان PHP این است که میتوان برنامه ساخته شده به این زبان را به صورت «محلی» (Locally) بر روی سیستم تست کرد و پس از بررسی کارایی و عملکر برنامه، آن را بر بستر اینترنت مستقر ساخت. زبان PHP یک زبان برنامه نویسی شی گرا است که از آن برای ساخت صفحات وب پویا استفاده میشود. استفاده از این زبان در بین توسعه دهندگان وب بک اند رایج است زیرا کتابخانههای وسیع متن باز دارد و از آن میتوان به سادگی برای توسعه پروژههای تحت وب استفاده کرد. فلسفهای که منجر به شکلگیری زبانهای شیءگرا شد، عبارت بود از این واقعیت که نحوه عملکرد مغز و شیوهٔ دریافت اطلاعات از محیط پیرامون و پردازش آن اطلاعات (اندیشیدن)، شیوهای شیءگراست. امروزه اکثر زبانهای دستوری برنامهنویسی از فنون شیءگرایی پشتیبانی میکنند.
این زبان برای توسعه پروژههای نرمافزاری پیچیده مناسب است و کدهای نوشته شده به این زبان، به زبان استاندارد جاوا اسکریپت کامپایل میشوند که در این حالت میتوان کدهای حاصل شده را بر روی هر مرورگری اجرا کرد. شرکت در دورههای آموزش آنلاین بستری را فراهم میکند تا افراد بتوانند در هر مکان و در هر ساعت از شبانه روز به یادگیری مهارتهای جدید بپردازند. شرکتکنندگان در این دورهها میتوانند فیلمهای آموزشی را چندین بار مشاهده کنند تا به درک جامعی از مفاهیم برسند. به عبارتی، اصل چندریختی این امکان را برای کاربر ایجاد میکند تا کلاس فرزندی مشابه با کلاس والد ایجاد شود، به نحوی که عملکرد متدهای آن با عملکرد متدهای کلاس والدش متفاوت باشد. در مثالی که برای اصل ارثبری ارائه شد، وسایل نقلیه میتوانند شامل دو دسته وسایل نقلیه چرخدار و وسایل نقلیه غیرچرخدار باشد. تصویر بالا، مثالی از کلاس خودرو را نشان میدهد که دارای مفهومی انتزاعی است و به گروهی از اشیاء اشاره دارد که دارای مشخصهها و متدهای مشابهی هستند.
امروز یکی از آخرین مائستروها را میتوان در موزه فناوری اطلاعات در آرلینگتون یافت. همچنین به ساختار برنامهنویسی ساخت یافته از IBM (1974) مراجعه کنید. از کپسولهسازی برای مخفی کردن جزئیات پیادهسازی و ارائه یک رابط کاربری مشخص استفاده کنید. توضیحات کامل در مورد تستهایی که برای کامپوننتها نوشته شدهاند، باعث میشود توسعهدهندگان بتوانند به راحتی کامپوننتها را بررسی و تست کنند. وابستگیهای کامپوننتها به دیگر بخشهای سیستم را به حداقل برسانید. استفاده از یک سبک کدنویسی یکسان در کل پروژه باعث هماهنگی و یکپارچگی کدها میشود و نگهداری آنها را آسانتر میکند.
به عنوان مثال، در تصویر زیر کلاس والد A دارای دو فرزند کلاس B و کلاس C است. کلاسهای D و E فرزندان کلاس C و کلاسهای G و F فرزندان کلاس B به حساب میآیند. حال تمامی رفتارهای مشترک را در کلاس حیوانات (انتزاعی) قرار میدهیم و هرجا که نیاز بود سگ، گربه و فیل از این رفتارها استفاده (ارثبری) میکنند. یعنی بدون اینکه جزئیات این رفتارها را بهصورت تک به تک در کلاس سگ، گربه و فیل بنویسیم یکبار در کلاس حیوانات (انتزاعی) مینویسیم و هرجا که نیاز بود در کلاس واقعی (Concrete) از آن استفاده میکنیم. همانطور که تا کنون گفته شد، می توانیم بوسیله کلاس نوع های داده مورد نظر خود را تعریف کنیم.
این کلاس علاوه بر این دارای یکسری Behavior نیز هست که از آن جمله میتوان به متدهایی همچون ()open و ()close و یا ()withdraw به ترتیب به معنی «باز کردن حساب»، «بستن حساب» و «برداشتن موجودی» می باشد. در سادهترین شکل ممکن، Inheritance را میتوان به «استفاده ی مجدد از کدهای از قبل نوشته شده» ترجمه کرد. این کلاس دارای یکسری عملکرد نیز هست که به طور مثال میتوان به متدی تحت عنوان ()changeEmail یا قابلیت «تغییر آدرس ایمیل» اشاره کرد. اکنون قصد داریم اقدام به ساخت کلاس جدیدی کنیم مثلاً تحت عنوان Customer به معنی «مشتری» که این کلاس دقیقاً شبیه به کلاس Person است. به عبارت دیگر دارای خصوصیاتی مثل name, phoneNumber و email است و همچنین عملکردی تحت عنوان ()changeEmail نیز دارا است.
با استفاده از اصول برنامه نویسی شی گرا همه این موارد با کمک کلاسها و اشیا مدیریت میشوند. میتوان در این مثال بخش وام، بیمه و هر بخش دیگری را به عنوان یک کلاس در نظر گرفت و از این موضوع مطمئن بود که اگر خطایی مثلاً برای بخش وام ایجاد شد، کلاسهای دیگر تحت تأثیر آن قرار نمیگیرند. در بخش بعدی از این مقاله، به بررسی مؤلفههای اصول برنامه نویسی شی گرا پرداخته شده است. در کدهای مثال فوق،method1 در کلاس مشتق شده رونویسی میشود و زمانی که شی کلاس مشتق شده ایجاد شده شود،method1 فراخوانی و سپس کلاس مشتق شدهmethod1 فراخوانی میشود. به این روش مقیدسازی پویا نیز گفته میشود؛ زیرا زمانی که شئی حافظه را در حین اجرا برنامه دریافت میکند، بر اساس شی، متد رونویسی شده فراخوانی میشود.
با استفاده از این ساختارها و اصول برنامهنویسی شیءگرا، برنامهنویسان قادرند برنامههای پیچیده و بزرگی را با استفاده از اشیاء و کلاسها به صورت منظم و سازمان یافته ایجاد کنند. حالا که با ساختار برنامهنویسی شیء گرا آشنا شدهاید، طبیعی است که هنوزهم این مفهوم برایتان کمی گنگ باشد. این روند ادامه یافت تا در سال ۲۰۰۲ و همزمان با معرفی .Net Framework، مایکروسافت زبان برنامهنویسی C# را نیز معرفی کرد که شیء گرایی در آن رعایت شده بود. جوانههای شیء گرایی در برنامهنویسی در دهه ۱۹۶۰ و زبان Simula ظهور کرد. اگرچه توسعهدهندگان در آن زمان روی خوشی به OOP نشان ندادند، این روش تا دهه ۱۹۸۰ و به رشته تحریر درآمدن سرمقاله دیوید رابینسون همچنان به تکامل خود ادامه داد. این سرمقاله را میتوان اولین رونمایی رسمی OOP دانست؛ زیرا در آن زمان هنوز بسیاری از توسعهدهندگان از وجود آن اطلاعی نداشتند.
توی دوره آموزش سیشارپ چه چیزهایی گفته میشه؟ - نصب و راه اندازی کامپایلر - انواع متغیرهای سی شارپ - اپراتورها - تبدیل متغیرها - حلقهها - شرطها -شی گرایی و خیلی چیزهای دیگه با ... روبی یک زبان برنامهنویسی پویا و شیگرا است که در دهه ۱۹۹۰ توسط یوکیهیرو ماتسوموتو (معروف به Matz) ایجاد شد. این زبان با شعار "خوشحال کردن برنامهنویسان" طراحی شده و بهدلیل سینتکس ساده و نزدیک به زبان انگلیسی، یادگیری آن برای افراد مبتدی بسیار آسان است. روبی بهطور گستردهای در توسعهی وب، بهویژه با فریمورک Ruby on Rails، استفاده میشود. این فریمورک یکی از محبوبترین ابزارها برای ساخت وباپلیکیشنهای مدرن و مقیاسپذیر است.
تغییرات و بهروزرسانیها میتوانند به صورت محلی و محدود به کامپوننتهای خاص انجام شوند، بدون اینکه تأثیری بر سایر بخشهای سیستم داشته باشند. این امکان باعث میشود که شناسایی و رفع اشکالات سریعتر انجام شود و زمان کلی تست کاهش یابد. در پروژههای بزرگ که چندین تیم بر روی بخشهای مختلف کار میکنند، استفاده از کامپوننتها باعث میشود تا هر تیم بتواند بر روی یک بخش خاص تمرکز کند. در پروژههایی که از تعداد زیادی کامپوننت مختلف استفاده میکنند، یکپارچهسازی این کامپوننتها ممکن است دشوار باشد. اطمینان از اینکه تمامی کامپوننتها به درستی با یکدیگر کار میکنند، نیازمند زمان و تلاش بیشتری است. هر کسی باید یاد بگیره که چهطور کد بزنه چرا که برنامهنویسی به شما یاد میده که چهطور فکر کنید.
با این روش میتوانید مهارت مورد نظر خود نظیر شیگرایی را از هر موقعیت مکانی که لازم باشد یاد بگیرید و در کنار آن، بهطور عملی تمرین کنید. همچنین در صورت نیاز میتوانید بارها و بارها مفاهیم گفته شده را مرور کنید. فرادرس به عنوان یکی از بزرگترین پلتفرمهای آموزشی کشور، فیلمهای آموزشی متعددی را در رابطه با اینکه برنامه نویسی شی گرا چیست، منتشر کرده است. با بیان این مثالها، اکنون میدانیم که رویکرد برنامهنویسی شیگرا، کدهای برنامهمان را بهشکلی نظم میدهد که در آن هر شی، ویژگیهای خود را دارد و اَعمال مشخصی را میتواند انجام دهد. این رویکرد باعث میشود تا سایر توسعهدهندگان، کدهای ما را راحتتر بفهمند و فرایند تغییر و بهروزرسانی سورسکدها نیز سادهتر شود. به عبارتی، نوشتن قطعه کدها در قالب تابع به نوشتن تمیز کدها و خطایابی آنها کمک بهسزایی کرد.
این برنامه نویسی کلی را ساده می کند، زیرا به جای بازسازی چند باره ساختار کلاس Dog، کلاس های فرزند به طور خودکار به قابلیت های درون کلاس والد خود دسترسی پیدا می کنند. برنامه نویسی شی گرا (OOP) یک الگوی برنامه نویسی اساسی است که تقریباً همه توسعه دهندگان در مقطعی از حرفه خود از آن استفاده می کنند. OOP محبوب ترین الگوی برنامه نویسی است و به عنوان روش استاندارد کدگذاری برای اکثر حرفه های برنامه نویسان استفاده می شود. C++ یکی از زبانهای قدیمی و قدرتمند است که امکانات برنامهنویسی شیء گرا را به همراه سایر قابلیتهای برنامهنویسی رویهای (Procedural Programming) ارائه میدهد. C++ به عنوان یک زبان چندپارادایمی شناخته میشود که ترکیبی از ویژگیهای شیء گرا و برنامهنویسی ساختاریافته (Structured Programming) را در خود جای داده است. در شی گرایی، تمامی اجزای یک برنامه به عنوان اشیائی در نظر گرفته میشوند که هر یک ویژگیها و عملکردهای خاص خود را دارند.
در قسمت پارامترهای متد، ما دو پارامتر به عنوان ورودی دریافت می کنیم که برای پارامتر اولی، مقدار سمت چپ عملگر و پارامتر دوم قسمت سمت راست عملگر قرار می گیرد. در بدنه متد نیز، شی جدیدی از نوع ValueHolder ایجاد شده و به عنوان مقدار پارامتر Constructor، حاصل جمع مقادیر Value برای دو پارامتر ورودی دریافت می شود. یکی از مهمترین کاربردهای interface پیاده سازی IoC یا Inversion of Control و DI یا Dependency Injection در برنامه ها می باشد که در بخش بعدی با این تکنیک آشنا می شویم. حال حافظه stack خالی شده و کامپایلر متوجه می شود که روند اجرای برنامه به پایان رسیده و کنترل به سیستم عامل باز می گردد. روند خروج متغیرها و متدها از حافظه stack در سریعترین زمان ممکن اتفاق می افتد.
Encapsulation پیاده سازی کد داخلی نرم افزار را در داخل یک کلاس پنهان می کند و داده های داخلی اشیاء داخلی را مخفی می کند. کپسوله کردن شامل همه اطلاعات مهم داخل یک شیء است و فقط اطلاعات انتخاب شده را در معرض دید جهان خارج قرار می دهد. C# زبانی شیء گرا است که توسط مایکروسافت توسعه یافته و یکی از زبانهای اصلی برای توسعه نرمافزارهای مبتنی بر پلتفرم .NET محسوب میشود. C# از مفاهیم پیشرفته OOP بهره میبرد و به دلیل سادگی و قدرت، در توسعه برنامههای ویندوز و اپلیکیشنهای وب کاربرد گستردهای دارد. در نهایت، انتخاب بین این پارادایمها بستگی به نیازهای خاص پروژه و تواناییهای تیم برنامهنویسی دارد.
یکی از موارد جالبی که در رویکرد برنامهنویسی شیگرا شاهد آن هستیم، پلیمورفیسم یا «چندریختی» (Polymorphism) است که طبق آن، اشیا میتوانند شکلهای گوناگونی بهخود بگیرند. به بیان دیگر، اگر چندین کلاس با کلاس والد یکسانی داشته باشیم، آنگاه اشیای آنها میتوانند بهجای یکدیگر استفاده شوند. فرض کنید یک «عصای جادویی» (Magic Wand) شبیه به آنچه که در فیلمهای هریپاتر دیدهاید به شما دادهاند و این وسیله با قدرت جادویی خود میتواند کارهای خارقالعادهای را انجام دهد. اکنون میخواهیم از این مثال برای توضیح مفاهیم کلاس و اشیا در برنامهنویسی شیگرا استفاده کنیم. شی یا آبجکت را میتوانیم بهعنوان یک عصای جادویی در نظر بگیریم که خصوصیات و قابلیتهایی دارد. بهطور مثال، این عصا «۱۰۰ سانتیمتر طول دارد» و میتواند «چیزهای گوناگونی را ناپدید کند».
این مفاهیم شامل کلاسها و اشیاء (Classes and Objects)، وراثت (Inheritance)، پنهانسازی دادهها (Encapsulation) و چندریختی (Polymorphism) هستند. یکی از ساختارهای اصلی برنامهنویسی شیءگرا، ترکیب چند کلاس با یکدیگر است. این به ما امکان میدهد که روابط بین اشیاء را بسیار سادهتر و قابل فهمتر ایجاد کنیم. به عنوان مثال، یک کلاس “ماشین” میتواند شامل اشیاء مربوط به “موتور”، “چرخ”، و “درب” باشد، که هر کدام ویژگیها و عملیاتهای خود را دارند. ایده اصلی این است که هر شیء دارای ویژگیها و عملیات مشخصی است که میتوانید بر روی آن انجام دهید. این ایده در برنامهنویسی به ما کمک میکند تا برنامهها را به صورت منظم و سازمان یافته طراحی و توسعه دهیم.
این اشیاء میتوانند با یکدیگر ارتباط برقرار کنند و در کنار هم به هدف نهایی برنامه خدمت کنند. به عنوان مثال، تصور کنید در حال ساخت یک نرمافزار برای مدیریت کتابخانه هستید؛ هر کتاب یک شیء است که دارای ویژگیهایی مانند عنوان، نویسنده، و سال انتشار است. همچنین میتواند عملکردهایی مانند «امانت گرفتن» یا «برگرداندن» داشته باشد. با استفاده از اصل پلیمورفیسم در برنامهنویسی شیءگرا، میتوانیم کد برنامهی خود را به شکلی انعطافپذیر و تغییر پذیر طراحی کنیم و به راحتی ویژگیها و عملیاتهای جدید را بر اساس نیازهای جدید اضافه کنیم. زبان برنامه نویسی TypeScript زبانی است که برای تکمیل زبان جاوا اسکریپت ارائه شده است و دارای قابلیتهای بیشتری نظیر رابطها، کلاسها و «تایپینگ» (Typing) پویا است.
این به ما امکان میدهد که یک کلاس جدید را از یک کلاس موجود به ارث ببریم و ویژگیها و عملیات آن را ارث بری کنیم. به عنوان مثال، اگر یک کلاس “خودرو” داریم، میتوانیم یک کلاس “اتوبوس” را از آن ارث ببریم و ویژگیها و عملیات خاص خودرو را بازنویسی کنیم. در دنیای فناوری و برنامهنویسی، یکی از مفاهیم اساسی و حیاتی، شی گرایی یا OOP است. این روش برنامهنویسی به ما امکان میدهد تا کدهایمان را به شیءها یا Objects تقسیم کنیم و ارتباطات بین آنها را مدل کنیم. اصول شی گرایی، از جمله انتزاع، پلیمورفیسم، وراثت، و یکپارچگی، به ما کمک میکنند تا بهتر و قابلتوسعهتر برنامه نوشته و مدیریت کنیم. پیش از آغاز معرفی هر یک از زبان های برنامه نویسی شی گرا، ابتدا به معرفی مجموعه دورههای آموزش برنامه نویسی فرادرس معرفی شدهاند که در آنها دورههای بسیاری هم با محوریت شی گرایی ارائه شده است.
به طور کلی در توسعه نرم افزار، هدف اصلی آن کار بر روی دادهها است. اگر هر تابعی بر روی دادهها اجرا شود، ممکن است این احتمال وجود داشته باشد که در آینده نیز همان عملیات را بتوان به همان روش یا به روشی اصلاح شده روی دادهها انجام داد. بنابراین روشی برای این استفاده مجدد به وجود آمده است که از اصول برنامه نویسی شی گرا به حساب میآید، در بخشهای بعدی این اصول شرح داده میشوند. ابتدا به شرح اصل «تجرید» یا «انتزاع» (Abstraction) پرداخته شده است. برنامه نویسی شی گرا مستلزم تفکر در مورد ساختار برنامه و برنامه ریزی در ابتدای کدگذاری است.
زبانهای زیادی وجود دارد که یا به طور خالص OOP هستند و یا میتوان به وسیلهی آنها برنامهی شی گرا نوشت. کلاس Car در کدهای برنامه زیر، ویژگیهایی نظیر برند، رنگ بدنه و میزان سوخت خودرو را محصور یا به اصطلاح کپسوله میکند. در این حالت، با اینکه میتوان عمل سوختگیری و رانندگی را انجام داد اما اطلاع از میزان سوخت، به متدهای تعریف شده محدود شده است. برنامهنویسی شیگرا، دارای چندین مفهوم پایهای است که در ادامه فهرست کردهایم. استفاده از رویکرد برنامهنویسی شیگرا مزایای زیادی را برای برنامهنویس بهدنبال خواهد داشت که در ادامه به چند مورد اشاره کردهایم. به بیان دقیقتر، یک Class تعیین میکند که ماشین اسباببازی ما، «۴ عدد چرخ» و ویژگی «رنگ بدنه» را بهعنوان خصوصیات خود داشته باشد و از سویی دیگر بهعنوان قابلیتهایش میتواند «به سمت جلو یا عقب حرکت کند».
روشهای توسعه نرم افزار بسیاری وجود دارند، اما میتوان گفت که شی گرایی معروفترین روش به حساب میآید. در ادامه این مقاله، به بررسی اصول برنامه نویسی شی گرا پرداخته میشود. برنامه نویسی شی گرا (Object-Oriented Programming) روشی برای ساختاردهی و طراحی نرمافزار است که در آن دادهها و توابع مرتبط با آن دادهها در قالب اشیاء سازماندهی میشوند. بهجای آنکه دادهها و عملکردها به صورت جداگانه در کد تعریف شوند، OOP آنها را در یک ساختار واحد به نام “شیء” قرار میدهد. این رویکرد به برنامهنویسان این امکان را میدهد که نرمافزارهایی طراحی کنند که هم قابل استفاده مجدد باشند و هم به راحتی توسعه و نگهداری شوند. دانستن اینکه برنامه نویسی شی گرا چیست، از این بابت حائز اهمیت است که مزایای متعددی را برای شما فراهم میکند.
پشتیبانی از زبانهای جایگزین اغلب توسط افزونهها ارائه میشود و به آنها امکان میدهد همزمان در همان IDE نصب شوند. به عنوان مثال، Flycheck یک برنامه مدرن چک کردن نحو در پرواز برای GNU Emacs 24 با پشتیبانی از ۳۹ زبان است. برخی از IDEها به یک زبان برنامهنویسی اختصاصی اختصاص داده شده است؛ این امکان را میدهد که مجموعهای از ویژگیها که بیشترین تطابق را با الگوی برنامهنویسی زبان دارد. مرز بین IDE و سایر قسمتهای وسیعتر از توسعهٔ نرمافزار کاملاً مشخص نیست. گاهی یک سیستم کنترل نسخه یا ابزارهای مختلف برای سادهسازی یک رابط کاربری گرافیکی (GUI) یکپارچه شده است.
این شی ویژگیهایی مانند رنگ بدنه، اتومات یا دستی بودن گیربکس، حداکثر سرعت و غیره را دارد و در کنار آن، رفتارها یا «متدهایی» (Methods) مانند روشن شدن، تغییر دنده، شتاب گرفتن و غیره را فراهم میکند. به منظور درک بهتر مفهوم کپسولهسازی، میتوان از مثال خودرو استفاده کرد. چراغ راهنمای ماشین و موتور ماشین میتوانند بهترتیب، به عنوان رابط خارجی و رابط داخلی در نظر گرفته شوند. به عبارتی، زمانی که راننده ماشین قصد دارد در حین رانندگی، از جاده اصلی خارج شود، با استفاده از چراغ راهنمای ماشین، سایر رانندگان را از این موضوع مطلع میکند. بدینترتیب، اطلاعات مربوط به چراغ راهنمای ماشین بهصورت عمومی در اختیار سایر افراد قرار میگیرد و راننده با استفاده از آن با سایر رانندگان ارتباط برقرار میکند. با این حال، اطلاعات دمای موتور یا وضعیت آن جزء اطلاعات خصوصی ماشین است که سایر رانندگان در مورد آن اطلاعی ندارند.
با این حال، متد “محاسبه مساحت” برای دایره و مستطیل به شکلهای متفاوتی پیادهسازی میشود، زیرا فرمول محاسبه مساحت این دو شکل متفاوت است. در اینجا شیء همان کتاب واقعی در کتابخانه است که ممکن است عنوان خاصی مانند “جنگ و صلح” داشته باشد. این قابلیت کلاسها و اشیاء باعث میشود که برنامهنویسان بتوانند بارها و بارها از یک الگو (کلاس) استفاده کنند و اشیاء متعددی بسازند که هر کدام ویژگیهای خاص خود را دارند، اما در قالب کلی شباهت دارند. است، ممکن است نیاز به اضافه کردن ویژگیها یا عملیات خاص به این کلاس داشته باشیم، که با استفاده از اصل وراثت، میتوانیم این تغییرات را اعمال کنیم بدون تکرار کد. استفاده از OOP در زبانهای برنامهنویسی مزایای زیادی دارد؛ ازجمله قابلیت استفاده مجدد از کد، دیباگکردن سادهتر کدها، توسعه سادهتر در آینده و صرفهجویی در زمان. OOP مخفف عبارت Object Oriented Programming و بهمعنای برنامهنویسی شیء گراست.
این کار باعث افزایش امنیت برنامه و جلوگیری از دسترسی غیرمجاز میشود. هنگام استفاده از شی ساخته شده، تنها خصوصیات و رفتارهایی هایی قابل استفاده هستند که در کلاس والد تعریف شده اند. به عنوان مثال، کد زیر صحیح نمی باشد، به این خاطر که Item3 داخل کلاس C تعریف شده و ما تنها به Item1 و Item2 که داخل A تعریف شده اند دسترسی داریم. به کمک ۲ اصل بعدی در برنامه نویسی شئ گرا میتوانیم این تفاوتهای جزئی را پیادهسازی کنیم. جاوا یکی از محبوبترین زبانهای شیء گرا است که بهطور کامل بر اساس مفاهیم OOP طراحی شده است.
برای مثال، یک خودرو شیئی همراه با ویژگیهایی مانند رنگ، مدل، برند، نام، نوع سوخت و سایر موارد است و همچنین رفتارهایی مانند حرکت کردن دارد. بنابراین، این ویژگیها و اشیا باعث به وجود آمدن شی خودرو میشوند. در بخش بعدی از این مقاله به بررسی مؤلفه کلاس در برنامه نویسی شی گرا پرداخته شده است. در روشهای برنامه نویسی شی گرا وظایف برای توسعه میتوانند به راحتی بین توسعه دهندگان تقسیم شوند، همچنین میتوان از کدها و وظایف قبلی به راحتی در کدهای فعلی استفاده کرد و نرم افزار را توسعه داد. در بخش بعدی به علت پیدایش و ایجاد برنامه نویسی شی گرا پرداخته شده است. رویکرد وراثت در برنامه نویسی شی گرا دارای انواع مختلفی است که در زبانهای برنامه نویسی استفاده میشوند.
مفهوم Abstraction به ما می گوید زمان بررسی یک موجودیت، تنها خصوصیات و رفتارهایی باید در تعریف موجودیت لحاظ شوند که مستقیماً در سیستم کاربرد دارند. در حقیقت Abstraction مانند فیلتری عمل می کنند که تنها خصوصیات و رفتارهای مورد استفاده در برنامه ای که قصد نوشتن آن را داریم از آن عبور می کنند. اما چون مدلسازی آن به دنیای واقعی شبیه است، درک مفاهیم شئ گرایی ساده میشود. مشابه دنیای واقعی که هر فرزند تقریباً همه ویژگیهای والدین خود را به ارث میبرد، در برنامهنویسی نیز به همین شکل است. برخی از ویژگیهای ارث گرفته در فرزند ممکن است تقویت یا تضعیف شده باشد و همچنین یک فرزند خصوصیات غیر مشترکی هم با والدین خود دارد. در یک پیادهسازی خیلی ساده، محل مهره را با یک متغیر (ویژگی در کلاس) از نوع عدد مشخص میکنیم.
هدف اصلی شی گرایی پیادهسازی موجودیتهای دنیای واقعی در برنامه نویسی است. اصول برنامه نویسی شی گرا روشها و متغیرهایی را برای استفاده مجدد از کدها در برنامه، همراه با سازگاری کامل ایجاد میکنند. اصول برنامه نویسی شی گرا شامل چهار اصل است که در این مطلب به طور جامع به آنها پرداخته میشود. همانطور که در کد بالا مشاهده می کنید، متد Draw در کلاس Rectangle از نوع sealed تعریف شده. در بخش های بعدی با تکمیلی برنامه نویسی شی گرا آَشنا شده و مباحث Casting را با هم بررسی خواهیم کرد. در قسمت قبلی آموزش زبان سی شارپ، به بررسی مفاهیم اولیه برنامه نویسی شی گرا پرداختیم.
سازماندهی یک برنامه به صورت شی گرا، آن را برای توسعه با روشهای گروهی و مشارکتی نیز سودمند میکند. از مزایای کلی برنامه نویسی شی گرا میتوان به «قابلیت استفاده مجدد از کدها» (Code Reusability)، «مقیاسپذیری» (Scalability) و «کارایی» (Efficiency) بالا اشاره کرد. اولین مرحله استفاده از شی گرایی جمعآوری همه اشیا مورد نیاز برنامه و ارتباطات میان آنها است. نمونههایی از یک شی میتواند شامل برخی موجودیتهای فیزیکی ازجمله یک انسان با ویژگیهایی مانند نام و آدرس یا برنامههای رایانهای کوچک مانند ویجتها باشد. بر اساس اصل وراثت، کلاس فرزند میتواند متدها و مشخصههای کلاس والد را به ارث ببرد. به عبارتی، شی گرایی این امکان را به برنامهنویسان میدهد تا با تعریف اشیای مختلف، به مدلسازی سیستم نرمافزاری بپردازند، به گونهای که هر یک از این اشیا ساخته شده، بخش خاصی از نرمافزار را بازنمایی میکنند.
کلاسها اغلب دسته های وسیعی را نشان می دهند ، مانند ماشین یا سگ که ویژگی ها را به اشتراک می گذارند. این کلاس ها مشخص می کنند که یک نمونه از این نوع چه ویژگی هایی خواهد داشت مانند رنگ، اما مقدار آن ویژگی ها برای یک شیء خاص را مشخص نمی کند. فریمورکهای محبوبی مانند Django و Ruby on Rails از شیگرایی بهرهبرداری میکنند تا ساختارهای پیچیده را بهخوبی مدیریت کنند. در حالی که OOP به مدیریت پیچیدگیها کمک میکند، خود این پارادایم ممکن است برای پروژههای کوچک و ساده بیش از حد پیچیده و سنگین باشد. برنامهنویسان باید وقت زیادی را برای طراحی مناسب کلاسها و ساختارها صرف کنند که ممکن است در پروژههای کوچک غیرضروری به نظر برسد.
دورههای گردآوری شده در پلتفرم فرادرس، شامل دورههای مقدماتی تا پیشرفته و پروژهمحور برنامه نویسی هستند که در تصویر فوق تنها برخی از این دورهها مشاهده میشوند. در این رویکرد از برنامه نویسی، به نمونههای مفهوم کلی خودرو، شی گفته میشود. به عبارتی، در مثال قبل، بنز و ماشین، شی هستند که هر کدام مشخصهها و رفتارهای خاص خود را دارند. Poly به معنی «چندین» است و Morph هم به معنی «شکل» است که روی هم رفته میتوان آن را به «چند شکلی» ترجمه کرد. این اصل در مقایسه با سه اصل اول اصول شیء گرایی کمی پیچیدهتر است اما سعی میکنیم با مثالهایی ملموس، مفهوم Polymorphism را برای برنامه نویسان مبتدی روشن کنیم.
این قابلیت ها بخصوص در مواقعی که در تیم شما، افرادی از کدهای نوشته شده توسط شما استفاده می کنند یا کدی را برای استفاده از سایر برنامه نویس ها بر روی اینترنت منتشر می کنید کاربرد دارند. راه حل برای این شرایط استفاده از کلاس های abstract و کلاس های sealed می باشد. همانطور که گفتیم یکی از روش های پیاده سازی Polymorphism استفاده از متدهای virtual و override کردن آنها در کلاس فرزند است. برای مثال، فرض کنیم کلاس پایه ای داریم با عنوان Shape که در آن رفتاری با نام Draw تعریف کردیم. زبانهای معروفی چون جاوا، پایتون، C++، C# و Ruby از برنامهنویسی شیء گرا پشتیبانی میکنند و هر یک از این زبانها ویژگیهای خاص خود را دارند. در برنامهنویسی تابعی، برنامهها به توابع خالص تقسیم میشوند که هیچ حالتی را نگه نمیدارند.
در کد بالا یک Abstract Class با نام Animal ساختیم که یک متد با نام ()walking برای راه رفتن دارد. و دو کلاس معمولی دیگر با نام Cat و Dog ساختیم که از کلاس Animal ارثبری کردهاند. سپس در بیرون کلاس با کلمه کلیدی new یک شیء جدید از کلاس Cat و یک شیء جدید از کلاس Dog ساختیم. اکنون در کلاس Cat و Dog میتوانیم از متد ()walking که در کلاس انتزاعی Animal بود استفاده کنیم چون از آن ارثبری کردهایم. تنها تفاوتی که وجود دارد، به جای کلمه کلیدی implicit در تعریف متد، از کلمه کلیدی explicit استفاده شده است. در این بخش با مفاهیم operator overloading و تعریف cast ها به دو صورت implicit و explicit آشنا شدیم.در قسمت بعدی سری آموزشی، با مفهوم boxing و unboxing در زمان تبدیل کردن نوع ها آشنا خواهیم شد.
این اصل بیان میکند که داده و عملیات مرتبط باید در یک واحد منطقی ترکیب شوند. به عبارت دیگر، اطلاعات و روشهای پردازش این اطلاعات باید در یک کلاس یا شیء قرار بگیرند. این باعث میشود که اطلاعات محافظت شوند و فقط از طریق روشهای مشخصی به آنها دسترسی داشته باشیم. در این مقاله از سبز لرن، به بررسی مفهوم شی گرایی، اصول و مزایای آن، و کاربردهای مختلف در صنعت و توسعه نرمافزار خواهیم پرداخت. متدها را میتوان توابعی نامید که در یک کلاس تعریف و رفتار آبجکت براساس آنها تعیین میشود. بهطور مثال، برای دریافت وجه نقد به دستگاه ATM مراجعه میکنید و کارهایی مانند ارائه کارت خود به دستگاه، وارد کردن رمز عبور، وارد کردن مبلغ درخواستی و غیره را انجام میدهید.
این روش به حفظ امنیت دادهها کمک میکند و اطمینان میدهد که هیچ کس به صورت مستقیم و بدون استفاده از متدهای مشخص، نمیتواند دادههای داخلی یک شیء را تغییر دهد. به عنوان مثال، در یک سیستم بانکی، شما نمیخواهید که کاربران بتوانند بهطور مستقیم موجودی حساب خود را تغییر دهند. در عوض، کاربران تنها از طریق متدهایی مانند “برداشت” یا “واریز” میتوانند این تغییرات را انجام دهند. اگرچه Simula اولین زبان برنامهنویسی بود که از OOP در ساختار خود استفاده کرد، امروزه بسیاری از زبانهای برنامهنویسی از این مفهوم استفاده میکنند. برخی از این زبانها شیء گرایی را بهصورت خالص (Pure) ایجاد میکنند و همهچیز را بهصورت Object در نظر میگیرند؛ اما عمده آنها با برخی از فرایندهای رویهای طراحی شدهاند. رویکرد شی گرایی در برنامه نویسی یکی از معروف ترین و پرکاربرد ترین رویکردها در صنعت ساخت نرم افزار است.
در این حالت، کلاس والد بهعنوان «Superclass» یا کلاس اصلی شناخته میشود و به کلاسی که از والد، خصوصیات یا متدهایی را به ارث میبرد نیز «Subclasses» یا زیرکلاس یا کلاس فرعی میگویند. به فرایند که طی آن یک کلاس جدید ساخته میشود و در واقع، خصوصیات یا متدهایی را از کلاس موجود به ارث میبرد، Specialization میگویند. برنامهنویسی شیگرا مانند برنامهنویسی رویهای، تابعی، دستوری و غیره یکی از شیوههایی است که برای توسعه نرمافزارها مورد استفاده قرار میگیرد. بهطور مثال در برنامهنویسی رویهای، برنامه در قالب «رویههایی» (Procedures) نوشته میشود که یکدیگر را فراخوانی میکنند. در برنامهنویسی تابعی نیز برنامه در قالب ترکیب توابع توسعه داده میشود. برنامهنویسی شی گرا که در این مطلب مورد بحث قرار گرفته است، یکی از شیوههای توسعه برنامههای مدرن بهشمار میرود و مزایای گوناگونی را در اختیار ما قرار میدهد.
برنامه نویسی متلب