WEBVTT

00:00.140 --> 00:06.380
خب، یه مثال خیلی پیچیده از کد داشتیم، درسته؟ جایی که سرورهای پرداخت رو داشتیم.

00:06.380 --> 00:11.060
پردازشگر PayPal رو داشتیم که در واقع یه AI payment processor بود یا اون رو پیاده‌سازی می‌کرد.

00:11.060 --> 00:12.860
برای پردازشگر کارت اعتباری هم همین‌طور.

00:12.860 --> 00:16.370
بعدش هم یه AI payment processor داشتیم و بعد بحث چندریختی یا polymorphism پیش اومد.

00:16.370 --> 00:20.840
و همه اینا با هم ترکیب شدن و واقعاً... وای، خیلی سنگین شد!

00:20.840 --> 00:26.690
فکر کنم از نظر حجم مفاهیم، اون سخت‌ترین ویدیو تا الان بود.

00:26.690 --> 00:29.720
پس بیایم حالا به‌صورت تصویری درکش کنیم.

00:29.720 --> 00:29.930
باشه؟

00:29.930 --> 00:33.710
بیایم دقیق‌تر بازش کنیم و ببینیم این اجزا چطور به هم وصل شدن.

00:33.710 --> 00:37.880
ما اینجا interfaceها و polymorphism رو توی فرآیند پرداخت داریم.

00:37.880 --> 00:39.590
پس سه بخش داریم.

00:39.590 --> 00:42.170
یه interface به نام AI payment processor داریم.

00:42.170 --> 00:47.720
یه کلاس به نام payment service داریم و یه کلاس program.

00:47.720 --> 00:50.840
پس بیایم به AI payment processor نگاه کنیم.

00:50.840 --> 00:57.860
ما از AI payment processor استفاده کردیم و دو کلاس براش ساختیم، یا دو کلاسی که اون رو پیاده‌سازی کردن.

00:57.860 --> 01:03.470
یکی credit card processor هست که پرداخت با کارت اعتباری رو پردازش می‌کنه.

01:03.470 --> 01:08.990
و یکی PayPal processor که پرداخت‌های PayPal رو انجام میده.

01:08.990 --> 01:16.970
بعد یه payment service داریم که از AI payment processor برای انجام پرداخت استفاده می‌کنه.

01:16.970 --> 01:20.480
اون AI payment processor همین اینجاست، درسته؟

01:20.480 --> 01:22.580
همین‌جا.

01:22.580 --> 01:28.820
اون اهمیتی نمیده که چه نوع AI payment processorی بهش داده میشه.

01:28.940 --> 01:36.470
یعنی می‌تونه credit card processor باشه یا PayPal processor.

01:36.470 --> 01:40.070
و کاری که می‌کنه اینه که پرداخت سفارش‌ها رو پردازش می‌کنه.

01:40.070 --> 01:43.490
پس در واقع کار رو به AI payment processor می‌سپره.

01:43.490 --> 01:51.050
یعنی اجرای واقعی پرداخت توسط payment service انجام نمیشه، بلکه

01:51.050 --> 01:56.960
توسط کلاسی که AI payment processor رو پیاده‌سازی کرده انجام میشه.

01:56.960 --> 02:04.460
پس payment service خودش کاری نداره، فقط بهش می‌گه "پرداخت رو انجام بده".

02:04.460 --> 02:07.310
و براش مهم نیست کدوم یکی از اون دوتاست.

02:07.310 --> 02:15.170
بعد هم یه کلاس program داریم که این payment service رو می‌سازه و استفاده می‌کنه،

02:15.170 --> 02:16.100
همین یکی اینجا.

02:16.100 --> 02:20.180
و بعد فرآیند پرداخت رو با پردازشگرهای مختلف راه می‌ندازه.

02:20.180 --> 02:24.920
یعنی یا با credit card processor یا با PayPal processor.

02:24.920 --> 02:31.700
این یه تصویر کلی از چیزیه که داخل پروژه ما اتفاق میفته.

02:31.700 --> 02:36.380
ما یه AI payment processor داریم که میگه خب ببین،

02:36.380 --> 02:44.510
اگه می‌خوای منو پیاده‌سازی کنی، باید از یه چارچوب خاصی پیروی کنی و متدهایی با ساختار مشخص داشته باشی.

02:44.510 --> 02:49.400
مثلاً یه متد که چیزی برنمی‌گردونه و یه عدد اعشاری (decimal) می‌گیره.

02:49.400 --> 02:56.840
پس هر کلاسی که این interface رو پیاده‌سازی کنه، باید اون متد رو هم پیاده‌سازی کنه.

02:56.840 --> 02:58.370
ولی به روش خودش.

02:58.370 --> 03:00.080
ما دوتا نوع ازش داریم.

03:00.110 --> 03:04.700
PayPal processor و credit card processor که هر دوشون AI payment processor رو پیاده‌سازی کردن.

03:06.230 --> 03:10.490
بعد یه payment service داریم که خیلی مهمه.

03:10.490 --> 03:10.940
درسته؟

03:10.940 --> 03:18.020
چون یه فیلد خصوصی و فقط‌خواندنی داره که مطمئن میشه ما یه AI payment processor گرفتیم.

03:18.020 --> 03:18.860
و اون از طریق constructor داده میشه.

03:18.860 --> 03:24.650
پس هر وقت یه کلاس پیاده‌سازی‌شده از AI payment processor بهش بدیم،

03:24.650 --> 03:32.870
براش مهم نیست که اون کدومه — PayPal یا credit card یا هر نوع دیگه.

03:32.870 --> 03:37.400
مهم اینه که اون interface رو پیاده‌سازی کرده.

03:37.400 --> 03:38.960
چون در اون صورت مطمئنه که اون کلاس می‌تونه پرداخت رو انجام بده.

03:38.960 --> 03:41.120
انگار یه قرارداد امضا کرده.

03:41.120 --> 03:49.310
یعنی هر کسی که این interface رو پیاده‌سازی کنه، متعهد شده که متد مربوط به پرداخت رو داشته باشه.

03:49.310 --> 03:53.900
پس payment service فقط به اون اعتماد می‌کنه.

03:53.900 --> 03:57.320
اون خودش کاری انجام نمیده، فقط مسئولیت رو می‌سپره به processor.

03:57.350 --> 04:02.930
و می‌دونه هر کسی که اون interface رو پیاده‌سازی کرده، طبق قرارداد باید درست کار کنه.

04:02.930 --> 04:09.530
و این‌طوری مشخص میشه که پرداخت چطور انجام میشه.

04:10.850 --> 04:19.220
بعد هم یه متد داریم به نام process order payments که یه مقدار اعشاری می‌گیره.

04:19.220 --> 04:20.270
ولی نحوه واقعی پردازش پرداخت

04:20.270 --> 04:27.230
به processor سپرده میشه، ما خودمون انجامش نمی‌دیم.

04:27.230 --> 04:28.790
فقط می‌گیم: "هی processor! می‌دونم یه متدی داری به نام process payment."

04:28.790 --> 04:33.350
و حالا بسته به نوع processor — چه PayPal چه credit card — خودش می‌دونه چطور انجام بده.

04:33.350 --> 04:38.510
ما فقط مقدار مورد نیازش رو (یعنی amount) می‌فرستیم و اون بقیه رو خودش انجام میده.

04:50.450 --> 04:53.030
پس حالا شاید این ساختار انتزاعی به‌نظر بیاد،

04:53.030 --> 04:56.480
ولی در عوض بهمون اجازه میده از polymorphism استفاده کنیم.

05:01.390 --> 05:03.640
اینجاست که چندریختی وارد ماجرا میشه.

05:03.640 --> 05:06.040
اینجا خط مربوط به polymorphism ماست.

05:06.040 --> 05:16.240
جایی که با credit card processor مثل یه AI payment processor رفتار می‌کنیم،

05:16.240 --> 05:19.930
چون اون interface رو پیاده‌سازی کرده.

05:19.930 --> 05:20.980
همین کلاس، credit card processor.

05:26.560 --> 05:31.180
مثل مثالی که قبلاً با animal و dog داشتیم.

05:31.180 --> 05:36.610
اونجا dog از animal ارث‌بری می‌کرد.

05:36.610 --> 05:40.330
اینجا credit card processor ارث‌بری نمی‌کنه، بلکه interface رو پیاده‌سازی می‌کنه.

05:40.330 --> 05:48.160
و بعد می‌تونیم اون رو به payment service پاس بدیم که فقط یه AI payment processor می‌خواست.

05:48.160 --> 05:52.660
اونم داخل constructor خودش وقتی object ساخته میشه.

05:52.660 --> 06:01.000
پس وقتی از این کلاس یه object ساخته میشه، فقط کار رو می‌سپره به کسی که می‌دونه باید چی کار کنه.

06:01.000 --> 06:08.620
که توی یه حالت credit card processor هست و در حالت دیگه PayPal processor.

06:14.920 --> 06:20.440
توضیحش از خود کد نوشتن طولانی‌تر شد، ولی اشکالی نداره چون این موضوع خیلی مهمه.

06:20.440 --> 06:29.380
خود منم اولش سخت درکش می‌کردم چون مفهومی انتزاعی و پیشرفته‌ست.

06:31.600 --> 06:32.170
خب،

06:32.170 --> 06:34.030
همین برای این ویدیو کافیه.

06:34.030 --> 06:35.230
می‌بینمتون تو ویدیوی بعدی.
