برنامه نویس - اسکرام مستر - DevOps

مقایسه Interface و Abstract Class و زمان استفاده از آن

 مقایسه Interface و Abstract Class و زمان استفاده از آن 

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

Interface   چیست ؟


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

در حالت عادی ارث بری از چند کلاس به طور هم زمان امکان پذیر نیست ولی Interface ها این مزیت را دارند که به هر تعداد که لازم است ، کلاسهای مشتق شده  از آنها ارث بری کنند . این موضوع یکی از مهم ترین مزایای Interface می باشد .

هم چنین با استفاده از Interface کد ها قبلیت بهتری در نگهداری ، انعطاف و استفاده مجدد پیدا میکنند .

Abstract Class  چیست ؟


کلاس Abstract  یکی از ابزارهای  مهم OOP  می باشد که نمیتوان از آنها نمونه ای ساخت . به عبارتی دیگر نمی توانیم متغیری از کلاس Abstract  تعریف کنیم .

یک کلاس Abstract  شبیه Interface میباشد ولی با دیدی وسیعتر . این کلاسها می تواند دارای متدهای Abstract  باشد که شبیه Interface فقط اعلام میشوند و باید در کلاسهای مشتق شده ، بازنویسی شوند . البته میتوان در این کلاسها متد هائی داشت که Abstract نیستند و احتیاجی به پیاده سازی آنها در کلاسهای مشتق شده ندارند .

با توجه به تعاریف ذکر شده کلاس Abstract  حالتی بین کلاسهای معمولی و Interface ها میباشد و کلاسی میباشد که غیر قطعی و ناتمام میباشد که باید در سطح فرزندانش تکمیل شود .
 مزایای کلاسهای Abstract  چیست ؟

یکی از مزیت های کلاس Abstract  فراهم نمودن کلاس پایه برای  دیگر کلاسهای مشتق شده  می باشد با این توضیح متدهای آن می توانند کد نویسی شده باشند یا نه . از طرفی پیاده سازی تمام متدهای Abstract  در کلاس مشتق شده اجباری نیست .(برخلاف Interface)  .

تعریف سطوح دسترسی برای متدها و خصوصیتها مانند کلاسهای معمولی نیز یکی دیگر از مزیت های این کلاسها می باشد .
 تفاوت بین کلاسهای Abstract و Interface

1-      یک کلاس معمولی می تواند از یک کلاس Abstract ارث بری کند ولی همان کلاس میتواند از چندین Interface ارث ببرد .

2-      یک Interface  فقط میتواند اعلان متدها و خصوصیتها را داشته باشد اما یک کلاس Abstract  علاوه بر آنها میتوانید متدها و خصوصیتهایی با کدهای کامل داشته باشد .

3-      عناصر موجود در کلاس Abstract میتوانند مانند یک کلاس معمولی دارای سطح دسترسی باشند  ولی Interface  ها فاقد این امکان می باشند .

4-      وقتی شما متدی را به کلاس Abstract اضافه می کنید ، اگر این متد Abstract  نباشد به طور خودکار به همه زیر کلاسها اعمال می شود اما در Interface اگر متدی اضافه کنید باید در تمام زیر کلاسها آن را اعمال کنید .

5-      کلاس Abstract   مانند کلاسهای معمولی می توانند دارای فیلد و عناصر دیگری باشند در حالی که Interface  فاقد این امکان می باشد .

6-      Abstract  یکی از انواع کلاس است ولی Interface   کلاس نیست .

 
چه زمانی از Interface  ها یا کلاسهای Abstract استفاده کنیم ؟

با توجه به توضیحات ذکر شده  مواقعی که نیاز به وراثت چند گانه داریم باید از Interface استفاده کنیم ، به دلیل اینکه این امکان در کلاس های Abstract  وجود ندارد .

زمانی که بخواهیم تمام متدهای معرفی شده در کلاس پایه به طور کامل در کلاس مشتق شده پیاده شود باید از Interface   استفاده کنیم.

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

با توجه به اینکه به غیر از اعلان متدها و خصوصیتها امکان تعریف عناصر دیگر در Interface  ها وجود ندارد ، در صورتی که ملزم به استفاده  از این عناصر باشیم ، استفاده از کلاسهای Abstract  ضروری می باشد .

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

به طور کلی Interface ها چارچوب و قابلیتهای کلاس را مشخص میکند و یک قرارداد است  ولی کلاس Abstract  نوع کلاس را معین می کند . این تفاوت کمک بسیاری برای تشخیص زمان استفاده از این دو را  ، به برنامه نویسان میدهد .
۰ نظر موافقین ۰ مخالفین ۰
محمدحسین عزتی

آموزش حذف و اضافه کردن فیلد های ووکامرس

اگر قصد حذف فیلد های اضافی در صفحه ی تسویه حساب رو دارید این کار به دو روش انجام می شود.

۱٫میتونید براحتی با افزودن کد های زیر در functions.php قالبتون این کار رو انجام بدید.

این کد برای حذف تمامی فیلد ها هست. اگر قصد حذف نکردن فیلدی دلخواه رو دارید از لیست زیر میتونید حذفش کنید.

RemoveCeckoutFildeWordPress

لینک دانلود کد فوق

۰ نظر موافقین ۰ مخالفین ۰
محمدحسین عزتی

مسنجر تحت شبکه بیگانت (BigAnt)

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

۱ – قابلیت جدید ارسال نشریه و اطلاعیه
ادامه مطلب...
۰ نظر موافقین ۰ مخالفین ۰
محمدحسین عزتی

اسکرام در یک نگاه بر اساس mm1

mm1_Scrum_Poster

۰ نظر موافقین ۰ مخالفین ۰
محمدحسین عزتی

How to Lay out SCRUM Cards

How to Lay out SCRUM Cards

۰ نظر موافقین ۰ مخالفین ۰
محمدحسین عزتی

نصب mongoDB بروی ویندوز

نصب mongoDB بروی ویندوز
در این آموزش ما نشان خواهیم داد چگونه MongoBD را بروی ویندز نصب کنید

  1. MongoDB 2.2.3
  2. Windows 8.1

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

ادامه مطلب...
۰ نظر موافقین ۱ مخالفین ۰
محمدحسین عزتی

پیاده سازی Dependency Injection در ASP.NET Web API

Dependency Injection (به اختصار DI، ترجمه فارسی : تزریق وابستگی) الگویی است که جهت پیاده سازی اصل Dependency Inversion در طراحی شی گراء مطرح شده است. در صورتی که با مفاهیم Dependency Injection و IoC Container آشنایی ندارید، می توانید به مطالعه ی این مقاله از آقای Martin Fowler بپردازید. Castle Windsor یکی از  IoC Container های معروف، رایگان و متن باز نوشته شده برای NET. می باشد. در این مقاله به پیاده سازی این الگو در ASP.NET Web API با کتابخانه ی Castle Windsor میپردازیم.
 
پیاده سازی Controller ها و Service ها
ابتدا Controller ها و کلاس های سرویس مورد نظر را خود را پیاده سازی کنید. سپس با استفاده از Constructor Injection کلاس های سرویس خود را به داخل Controller ها Inject کنید. مثال ساده ی زیر را در نظر بگیرید :
ادامه مطلب...
۰ نظر موافقین ۱ مخالفین ۰
محمدحسین عزتی

نصب / حذف سرویس های دات نتی ویندوز

در این مثال میخواهم نحوه ننصب / حذف سرویس های دات نتی ویندوز را توضیح دهم


جهت نصب سرویس مورد نظر خود باید از فایل اجرایی InstallUtil.exe استفاده کنید

جهت استفاده از این ابزار درصورتی که ویژوال استودیو را نصب دارید ویژوال استودیو کامندپرامپت برای برنامه نویسان یا (Developer Command Prompt for Vs) را باز کنید و دستور فوق را در آن اجرا کنید نام فایل اجرایی که بصورت سرویس نوشته اید و میخواهید از این به بعد بصورت سرویسی اجرا شود را با ذکر آدرس آن مانند دستور زیر وارد نماید در این مثال فرض من بر این است که فایلی که قصد سرویس کردن آن را دارم در درایو D سیستمم قرار دارد

InstallUtil.exe "D:\myService.exe"

جهت حذف همین سرویس عینا دستور فوق را با سویچ u/ اجرا میکنیم مانند زیر:

InstallUtil.exe /u "D:\myService.exe"


توجه: در صورتی که فایل InstallUtil.exe را قبلا ریجستر نکرده باشید دستور فوق را میتوانید بصورت زیر بنویسید:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe "D:\myService.exe"

و همچنین برای حذف داریم:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe "D:\myService.exe"

۰ نظر موافقین ۱ مخالفین ۰
محمدحسین عزتی

تفکر شیء گرا

تاریخچه برنامه نویسی شیءگرا
چرا از OOP استفاده کنیم؟
مشخصات برنامه نویسی شیء گرا 
شناسایی ساختار کلاس
شناسایی تعاملات بین اشیاء
ادامه مطلب...
۰ نظر موافقین ۱ مخالفین ۰
محمدحسین عزتی