بایگانی برچسب‌ها : کلاس

وراثت Inheritance

وراثت یا Inheritance چیست؟

وراثت (Inheritance) اصطلاحی در حوزه برنامه‌نویسی شئ‌گراست که در آن یک کلاس یا شئ بر مبنای یک کلاس یا شئ دیگر ساخته می‌شود و ویژگی‌ها و رفتارهای آن را به ارث می‌برد. در حوزه‌ی کلاس‌ها، به کلاس مبنا که از آن ارث برده می‌شود ابرکلاس (Super Class)، کلاس پایه (Base Class) یا کلاس والد (Parent Class) گفته می‌شود و به کلاسی که از ابرکلاس ارث می‌برد زیرکلاس (Subclass)، کلاس فرزند (Child Class) یا کلاس مشتق شده (Derived Class) اطلاق می‌شود.

انواع مختلفی از وراثت وجود دارد که بسته به زبان‌های گوناگون ممکن است برخی از آن‌ها پشتیبانی نشود. در وراثت یگانه (Single Inheritance)، زیرکلاس ویژگی‌ها را تنها از یک ابرکلاس به ارث می‌برد، اما در وراثت چندگانه (Multiple Inheritance) هر زیرکلاس می‌تواند چندین ابرکلاس داشته باشد و ویژگی‌ها و رفتارها را از تمام آن ابرکلاس‌ها به ارث ببرد. وراثت چندسطحی (Multilevel Inheritance) نیز نوع دیگری از وراثت است که در آن یک کلاس (مانند C) از کلاس دیگری (مانند B) ارث می‌برد که آن کلاس (در اینجا B) خودش فرزند کلاس دیگری (مانند A) می‌باشد.

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

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

پیوندهای پیشنهادی تک دیک

لینک واژه در ویکیپدیا

کپسوله سازی Encapsulation

کپسوله سازی یا Encapsulation چیست؟

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

بر اساس مفهوم دوم کپسوله سازی می‌توان برخی از عناصر (فیلدها) و توابع (متدها) را از خارج از قلمرو تعریف کلاس پنهان نمود به طوری که تغییر مقدار و دسترسی به فیلدها و استفاده از متدهای یک شئ تنها توسط خود شئ امکان‌پذیر باشد. به این ترتیب برنامه نویس می‌تواند بدون درگیر شدن با اعمال و رفتار داخلی و پیچیدگی‌های این اعمال در کلاس، به اهداف خود دست پیدا کند و در عین حال از دسترسی غیرمجاز به مقادیر و اعمال خصوصی کلاس نیز جلوگیری به عمل می‌آید. گفتنی است محدودسازی سطح دسترسی در زبان‌های برنامه‌نویسی معمولا توسط تعدادی کلمه کلیدی (نظیر Private و Public) انجام می‌شود که به تغییردهنده‌های دسترسی (Access Modifier) موسوم می‌باشند.

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

پیوندهای پیشنهادی تک دیک

لینک واژه در ویکیپدیا

کلاس Class

کلاس یا Class چیست؟

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

شئ (یا آبجکت Object) هایی که از روی کلاس ساخته می‌شوند را یک نمونه (Instance) از آن کلاس می‌نامند. به عنوان مثالی ساده می‌توان کلاسی تحت عنوان Circle را در نظر گرفت که خصوصیات و اعمال (یا رفتار) اشیائی به نام دایره را تعریف می‌کند. با کمک این کلاس، برنامه‌نویس می‌تواند اشیاء (دایره‌های) مختلفی با خصوصیات (مرکز و شعاع) متفاوت ایجاد کند و اعمالی نظیر محاسبه شعاع و مساحت یا ترسیم دایره را روی هرکدام انجام دهد در حالی که تعریف و پیاده‌سازی تمامی این خصوصیات و اعمال یک بار حین تعریف کلاس صورت گرفته است.

آبجکت‌ها معمولا با کمک زیرروال خاصی به نام تابع سازنده‌ (Constructor) ایجاد می‌شوند. این تابع در بسیاری از زبان‌های برنامه نویسی هم نام خود کلاس بوده و وظیفه آماده‌سازی اولیه آبجکت و تعیین مقادیر اولیه متغیرها را برعهده دارد.

متغیرهایی که برای هر آبجکت متمایز و متفاوت هستند متغیرهای نمونه (Instance Variable) نامیده می‌شوند و وضعیت و خواص آن آبجکت را مشخص می‌کنند. متغیرهای دیگری نیز در Class ها تعریف می‌شوند که برای تمام اشیاء به اشتراک گذاشته می‌شود و به آن‌ها متغیرهای کلاس (Class Variable) می‌گویند (طبیعتا با تغییر مقدار این متغیرها توسط یک آبجکت مقدار آن در تمام آبجکت‌ها به همان صورت تغییریافته مشاهده می‌شود).

رفتار یک Class یا نمونه‌های آن توسط متدها (Method) یا توابع عضو (Member Function) مشخص می‌شود. متدها را نیز می‌توان به دو گروه متدهای نمونه و متدهای کلاس دسته‌بندی نمود. در واقع متدها عملی را روی آبجکت یا کلاس انجام می‌دهند.

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

نمونه‌ای از تعریف یک Class ساده با دو متغیر عضو و تابع سازنده آن به زبان Visual Basic .Net:

Public Class Employee
    Public FirstName As String
    Public LastName As String
       
    Public Sub New(ByVal f_name As String, ByVal l_name As String)
        FirstName = f_name
        LastName = l_name
    End Sub
End Class   

تغییردهنده‌های سطح دسترسی امکان کنترل سطح دسترسی به کلاس‌ها، متدها و اعضای آن‌ها را فراهم می آورد. به عنوان مثال تنها متدهای یک کلاس می‌توانند به اعضای خصوصی (Private) آن کلاس دسترسی داشته باشند.

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

از مزایای استفاده از کلاس‌ها و برنامه‌نویسی شئ گرا می‌توان به قابلیت استفاده‌ی مجدد، عیب‌یابی و نگه‌داری ساده‌تر، توسعه‌پذیری و کارایی بالاتر اشاره کرد.

پیوندهای پیشنهادی تک دیک

لینک واژه در ویکیپدیا

برنامه نویسی شئ گرا Object-Oriented Programming

برنامه نویسی شئ گرا یا Object-Oriented Programming چیست؟

برنامه نویسی شئ گرا (Object-Oriented Programming) یا به اختصار OOP، یک مدل برنامه‌نویسی بر پایه‌ی مفهوم اشیاء (Object ها) می‌باشد. در مدل رایج این مفهوم، متغیرها و عملیات مرتبط با یک موضوع مشخص با کمک مفهوم کلاس‌ها به صورت کپسوله، در کنار یکدیگر و در قالب یک بسته‌بندی قرار می‌گیرد.

در برنامه‌نویسی شئ گرای مبتنی بر کلاس، هر شئ نمونه‌ای است از یک کلاس و داده‌های مربوط به هر شئ، ممکن است وابسته به خود آن شئ باشد (متغیرهای نمونه) یا برای تمامی اشیاء از همان نوع، ثابت و یکسان باشد (متغیرهای کلاس). از این متغیرها در برنامه‌نویسی شئ گرا تحت عنوان فیلد (field)، ویژگی یا خصوصیت (Attribute/Property) یاد می‌شود. رویه‌هایی که رفتار یا عملیات مرتبط با اشیاء را پیاده‌سازی می‌کنند معمولا متد (method) نامیده می‌شوند و همانند متغیرها به دو دسته‌ی متدهای نمونه و متدهای کلاس دسته‌بندی می‌شوند.

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

در سایه‌ی برنامه‌نویسی شئ گرا می‌توان مفاهیمی چون وراثت و چندریختی را نیز تعریف نمود. اکثر زبان‌های برنامه نویسی امروزی نظیر C#، Visual Basic، PHP، C++، Java و … از شئ گرایی پشتیبانی می‌کنند. از مزایای استفاده از این مدل برنامه‌نویسی می‌توان به قابلیت استفاده‌ی مجدد، عیب‌یابی و نگه‌داری ساده‌تر، توسعه‌پذیری و کارایی بالاتر اشاره کرد.