تعداد بازدید:

شی گرایی در php (قسمت سوم)

در این مقاله قصد داریم تا مباحث زیر رو بررسی کنیم:

  • Polymorphism
  • Abstract
  • Interface

مباحث encapsulation , polymorphism , abstrac , interface تکنیک هایی هستند جهت استفاده هر چه بهتر شی گرایی در پی اچ پی.(و همه موارد به از مبحث وراثت کمک می گیرند).

چندریختی یا Polymorphism

یعنی استفاده از وراثت برای پیاده سازی ساختار های مشابه و با تفاوت های کوچک . مثلا حیوان ، گربه ، سگ

به طور کلی چند ریختی میگه به جای اینکه بخوای برای هر کدوم از حیوانات متد جداگانه ای بنویسی یک متد واحد بنویس و پیاده سازی های متفاوتی انجام بده.

در مثال بالا می تونستیم در کلاس Animal یک متد برای صدای گربه ، یک متد برای صدای سگ بنویسیم که این کار پلشتی هست و بهتره برای هر حیوان یک کلاس فرزند بسازیم و با یک متد واحد اون رو مدیریت کنیم.

این مفهوم در ادامه مفهوم وراثت می آید یعنی override کردن متد ها در کلاس های فرزند.

انتزاع یا Abstract

معنی کلمه لغوی abstrac یعنی چکیده . خوب از معنیش میشه حدس زد در چه رابطه ای است.

در abstract ما یه سری متدها رو نامشون رو می نویسیم و از کاربر می خوایم که توی کلاس فرزندی که میسازه بیاد و متدهای خلاصه ما رو تکمیل کنه.

در abstract (بر خلاف interface) هم میتونیم متد کامل (همراه با بدنه ) داشته باشیم و هم متد خلاصه .

همون طور که در کد مشخصه :

  • تمامی متدهای خلاصه ای که در کلاس والد abstract نوشته شده باید در کلاس های فرزندش تعریف بشه (اگر نشه خطا میده)
  • شما می تونید پارامتر های جدیدی برای متد تکمیل شده در کلاس فرزند تعریف کنید.

نکات syntax :

  • قبل از کلاس باید کلمه کلیدی abstract باشه.
  • قبل از متدهای مربوطه باید کلمه کلیدی abstract باشه.

interface

interface ماهیتی شبیه به abstract داره با این تفاوت که در interface ها نمیتونیم متد با بدنه تعریف کنیم و باید تمامی متدهامون به صورت خلاصه باشند.

interface method can not have body

نکته : یکی از مهم ترین استفاده های abstract و  interface پیاده سازی سیستم های ماژولار هست. بهترین راه برای این که ما یه سری قوانین وضع کنیم تا برنامه نویسان سوم شخص که میان برای نرم افزار ما ماژول می نویسند راحت تر باشند اینه که از این ساختمان داده ها استفاده کنیم.

به طور مثال ما پلاگین نوشتیم برای پرداخت دلخواه . در اون میخواهیم یه روال بنویسیم که برنامه نویسای دیگه بیان و سایر درگاه ها رو براش پیاده سازی کنن.

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

مثلا متد start برای ارسال کاربر به درگاه و متد verify برای تایید پرداخت و متغیر amount برای مبلغ و …. که باید با توجه به پلاگین تعیین بشه(نوع پیاده سازی هم خیلی مهمه).

نکاتی در رابطه با syntax

  • ما در abstract از کلمه کلیدی extends برای ساخت فرزند استفاده می کنیم.
  • در interface ها ما کلمه کلیدی interface رو جایگزین کلمه کلیدی class می کنیم .(کلمه کلیدی class نداریم)
  • در interface ها از کلمه کلیدی implements برای ساخت فرزندان تکمیل کننده استفاده می کنیم.

نتیجه گیری : abstract و interface تقریبا یه نوع وراثت ساختاربندی شده هستند ، یعنی کاربری که کلاس فرزند رو میسازه مجبور به انجام یه سری کارها می کنه . همچنین میشه با تبدیل یه کلاس بزرگ به کلاس های کوچیک با interface ساختار کدمون رو قابل فهم تر کنیم. (که یکی از رسالت های شی گرایی هم همین قابل فهم تر کردن کدها برای ماست)

مطالب مشابه

کار با تاریخ و زمان در php

تاریخ و زمان در php

در ابتدا به دو مفهوم مهم در تاریخ و زمان در زبان پی اچ پی اشاره می کنیم : Greenwich Mean Time (GMT) زمان گرینویچ یا...

کوکی ها و نشست ها و راه های ذخیره سازی داده د ر php

Cookie و Session در php

زمانی که بحث ذخیره اطلاعات که مطرح میشه ما امکاناتی برای ذخیره اطلاعاتمون داریم: پایگاه داده (DataBase) فایل ها...

امنیت و رمزنگاری در پی اچ پی

امنیت و رمزنگاری در php

امنیت و رمز نگاری دو مبحث مهم در برنامه ها به شمار میره. به طور کلی ما باید برای حفاظت باید برنامه هامون در برابر حملات...

اشتراک گذاری :

ابوالفضل صباغ

برنامه نویسی رو با زبان C در هفده سالگی شروع کردم . در حال حاضر به برنامه نویسی php برپایه معماری MVC , HMVC و همچنین سیستم مدیریت محتوای WordPress علاقه مند هستم و دوست دارم اطلاعاتم رو با شما به اشتراک بگذارم.

۰ دیدگاه برای شی گرایی در php (قسمت سوم)

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *