
WEBVTT

00:00.140 --> 00:01.070
خوش آمدید.

00:01.070 --> 00:06.980
در این ویدیو ما به بررسی ترویج قابلیت استفاده مجدد از کد و انعطاف‌پذیری خواهیم پرداخت.

00:06.980 --> 00:14.330
ما به بررسی اینکه کجا، چرا و چگونه و همچنین چه زمانی باید از رابط‌ها برای دستیابی به این هدف استفاده کنیم، خواهیم پرداخت.

00:14.330 --> 00:18.050
پس بیایید با کجا شروع کنیم، کجا باید از رابط‌ها استفاده کنیم.

00:18.050 --> 00:25.670
خوب، زمانی که نیاز دارید کلاس‌های مختلف یک مجموعه یکسان از متدها یا ویژگی‌ها را پیاده‌سازی کنند، 

00:25.670 --> 00:30.050
این اطمینان را فراهم می‌کند و اجازه می‌دهد پیاده‌سازی‌های انعطاف‌پذیر داشته باشید.

00:30.050 --> 00:31.310
چرا این کار را انجام می‌دهید؟

00:31.310 --> 00:35.060
خوب، این باعث ترویج قابلیت استفاده مجدد از کد و انعطاف‌پذیری می‌شود.

00:35.060 --> 00:41.450
کلاس‌های مختلف می‌توانند یک رابط یکسان را به روش‌های مختلف پیاده‌سازی کنند و رفتارهای متنوعی را فراهم کنند

00:41.450 --> 00:49.190
در حالی که یک قرارداد مشترک را حفظ می‌کنند، سپس به زمان استفاده از رابط‌ها می‌رسیم، زمانی که چندین

00:49.190 --> 00:54.470
کلاس وجود دارد که باید همان عملکرد را ارائه دهند، اما ممکن است آن را به طور متفاوتی پیاده‌سازی کنند.

00:54.470 --> 01:00.830
حالا بیایید به یک مثال دنیای واقعی بپردازیم، یک سیستم پردازش پرداخت.

01:00.830 --> 01:06.800
تصور کنید که شما در حال ساخت یک پلتفرم تجارت الکترونیک هستید که از چندین روش پرداخت مانند کارت‌های اعتباری،

01:06.800 --> 01:09.230
پی‌پال و انتقال بانکی پشتیبانی می‌کند.

01:09.260 --> 01:14.900
هر یک از این‌ها روش متفاوتی برای مدیریت پرداخت خواهد داشت.

01:14.900 --> 01:18.230
پس بیایید این را به یک روش بسیار ساده بسازیم.

01:18.230 --> 01:21.170
این یک نسخه بسیار، بسیار ساده خواهد بود.

01:21.170 --> 01:23.780
پس من این رابط را ایجاد می‌کنم.

01:23.780 --> 01:27.680
و به هر حال، منطقی است که این رابط‌ها را در فایل‌های جداگانه داشته باشید.

01:27.680 --> 01:33.080
من فقط آن‌ها را در یک فایل قرار می‌دهم برای اهداف آموزشی، به این معنا که دیدن همه چیز در یک جا آسان‌تر است

01:33.080 --> 01:37.070
بدون اینکه مجبور باشم بین فایل‌ها مدام جابجا شوم.

01:37.070 --> 01:43.160
خوب، پس ما این رابط به نام I Payment Processor داریم.

01:43.160 --> 01:49.010
و آنچه می‌خواهم داشته باشم این است که می‌خواهم پرداخت را پردازش کنم.

01:49.010 --> 01:50.480
و چه چیزی نیاز دارم؟

01:50.510 --> 01:51.830
من به مقدار نیاز دارم.

01:51.830 --> 01:54.620
پس می‌گویم مقدار اعشاری.

01:54.620 --> 01:58.940
پس این متد اکنون پیاده‌سازی نشده است، همانطور که می‌بینیم.

01:58.940 --> 02:05.630
اما ما فقط می‌گوییم خوب، اگر می‌خواهید پرداخت را پردازش کنید، باید مقدار مورد نظر را به من بدهید

02:05.630 --> 02:06.530
که می‌خواهید پردازش کنید.

02:06.530 --> 02:08.570
پس مقدار پرداخت به اصطلاح.

02:08.570 --> 02:09.080
خوب.

02:09.110 --> 02:13.850
حالا بیایید پیش برویم و یک پردازشگر کارت اعتباری ایجاد کنیم.

02:13.850 --> 02:23.420
پس کلاس عمومی credit card processor که قرار است I payment processor من را پیاده‌سازی کند.

02:23.420 --> 02:29.360
و شاید باید آن را processor بنامم، فکر می‌کنم این انگلیسی صحیح است.

02:29.360 --> 02:32.150
پس I payment processor.

02:32.150 --> 02:35.450
و سپس باید متدهای آن را پیاده‌سازی کنم، خوب.

02:35.450 --> 02:37.580
پس این process payment.

02:37.580 --> 02:44.870
پس آنچه می‌گویم این است که public void process payment که نام آن متد است.

02:44.870 --> 02:46.700
پس می‌توانم همچنین فقط کپی و پیست کنم.

02:46.700 --> 02:51.590
واضح است که می‌توانستم از IDE برای قرار دادن آن استفاده کنم، اما می‌خواهم به صورت دستی این کار را انجام دهم.

02:51.590 --> 02:56.180
و اینجا می‌گویم مقدار اعشاری و این مقدار خواهد بود، خوب.

02:56.180 --> 02:59.060
حالا بیایید بگوییم در این مورد چه باید اتفاق بیفتد.

02:59.060 --> 03:09.050
پس من فقط می‌گویم پردازش پرداخت کارت اعتباری به مقدار، هر مقدار که باشد، خوب.

03:09.050 --> 03:11.060
هر مقدار اعشاری که قرار است منتقل کنیم.

03:11.060 --> 03:18.470
و سپس باید منطق پرداخت کارت اعتباری را پیاده‌سازی کنم، خوب.

03:18.470 --> 03:22.280
ما به واقع به پیاده‌سازی منطق پرداخت کارت اعتباری نمی‌پردازیم.

03:22.280 --> 03:28.760
این واقعاً فقط درباره ایده درک این است که رابط‌ها چه کار می‌کنند و چرا قابلیت استفاده مجدد از کد اینجا بسیار مفید است.

03:28.760 --> 03:29.270
خوب.

03:29.270 --> 03:30.080
پس من یک کلاس دیگر خواهم داشت.

03:30.080 --> 03:35.180
این بار پردازشگر پی‌پال خواهد بود.

03:35.180 --> 03:39.350
خوب.

03:39.350 --> 03:50.540
پس من فقط این کد را کپی می‌کنم و این را به پردازشگر پی‌پال تغییر نام می‌دهم که همچنین متد I payment processor را پیاده‌سازی می‌کند.

03:50.540 --> 03:51.890
این همچنین از متد process payment استفاده می‌کند یا آن را پیاده‌سازی می‌کند.

03:51.950 --> 03:56.870
اما حالا این خواهد بود پرداخت پی‌پال به مقدار و منطق پرداخت پی‌پال را پیاده‌سازی می‌کند.

04:09.470 --> 04:13.880
پس این تقریباً کاری است که دو کلاس ما انجام می‌دهند.

04:13.880 --> 04:17.750
پس می‌بینید که هر دو این رابط را پیاده‌سازی می‌کنند.

04:17.750 --> 04:21.530
حالا واضح است که رابط ما می‌تواند متدهای بیشتری داشته باشد.

04:21.530 --> 04:23.330
در مورد ما فقط یک متد دارد.

04:23.330 --> 04:25.400
اما می‌تواند ده‌ها متد باشد، درست است؟

04:25.400 --> 04:27.170
پس در مورد ما ساده است.

04:27.170 --> 04:28.610
واقعاً فقط همین یک متد است.

04:28.610 --> 04:29.750
و حالا می‌توانیم از آن دوباره استفاده کنیم.

04:29.750 --> 04:31.910
و همیشه همان ساختار وجود دارد.

04:31.910 --> 04:33.770
همیشه void برمی‌گرداند.

04:33.770 --> 04:34.550
پس هیچ چیز.

04:34.550 --> 04:38.450
و همیشه یک پارامتر می‌گیرد که مقدار اعشاری است.

04:38.450 --> 04:41.000
پس حالا بیایید از آن رابط استفاده کنیم.

04:41.000 --> 04:44.450
بنابراین من یک کلاس جدید ایجاد می‌کنم، کلاس عمومی.

04:44.450 --> 04:47.540
و من این را سرویس پرداخت می‌نامم، خوب.

04:47.540 --> 04:53.210
پس این سرویس پرداخت و شما خواهید دید که کلاس‌هایی که رابط‌ها را پیاده‌سازی می‌کنند، معمولاً

04:53.210 --> 04:54.020
سرویس‌ها هستند.

04:54.020 --> 04:59.420
پس این یکی یک I payment را به صورت خواندنی خواهد داشت.

04:59.690 --> 05:00.530
پردازشگر.

05:00.530 --> 05:05.930
و می‌بینید، چون خصوصی و فقط خواندنی است، یک پردازشگر زیرخط دارد.

05:05.960 --> 05:06.290
خوب.

05:06.290 --> 05:10.460
پس این قرار است I payment را پردازش کند، اما فقط در داخل این کلاس.

05:10.460 --> 05:16.670
این از بیرون قابل خواندن نیست و همچنین پس از یک بار تنظیم، قابل تنظیم نیست زیرا یک روش فقط خواندنی است.

05:16.670 --> 05:17.270
سپس من سازنده‌ای دارم و

05:17.270 --> 05:22.400
من پردازشگر پرداخت را اینجا منتقل می‌کنم.

05:22.400 --> 05:23.750
پس چرا این کار را انجام می‌دهم؟

05:23.750 --> 05:29.780
خوب، تا بتوانم پردازشگر پرداخت فقط خواندنی خصوصی خود را اینجا تنظیم کنم، خوب.

05:29.780 --> 05:38.690
پس در این مرحله می‌توانم یک متد ایجاد کنم که آن را پردازش پرداخت سفارش می‌نامم.

05:39.080 --> 05:45.830
و این باید پردازش پرداخت سفارش باشد که من یک مقدار اعشاری را منتقل می‌کنم.

05:45.830 --> 05:51.050
و اینجا من از پردازشگر پرداخت زیرخط استفاده می‌کنم.

05:51.050 --> 05:55.610
و من پرداخت را با مقدار پردازش می‌کنم.

05:55.610 --> 05:56.300
خوب.

05:56.300 --> 06:03.230
پس حالا بیایید این متد را نیز عمومی کنیم تا بتوانیم از آن خارج از این کلاس استفاده کنیم، خوب.

06:03.290 --> 06:04.160
پس همه چیز تا اینجا فکر می‌کنم هنوز خوب است.

06:04.160 --> 06:08.000
حالا بیایید واقعاً از آن استفاده کنیم.

06:08.000 --> 06:12.770
و اینجاست که واقعاً جالب می‌شود.

06:12.770 --> 06:18.440
و اینجا همچنین خواهید دید که چرا این قابلیت استفاده مجدد از کد اینجا بسیار جالب است.

06:18.440 --> 06:28.040
پس من یک AI payment processor credit card processor ایجاد می‌کنم که یک credit card processor جدید خواهد بود.

06:28.040 --> 06:29.120
و سپس من یک سرویس پرداخت ایجاد می‌کنم که

06:29.120 --> 06:36.350
پردازشگر کارت اعتباری را به عنوان آرگومان به سازنده منتقل می‌کنم.

06:36.350 --> 06:40.280
و سپس می‌توانم از payment service dot process order payment با هر مقداری استفاده کنم.

06:40.280 --> 06:51.140
پس بگذارید بگوییم 100.

06:51.140 --> 06:56.900
و این M فقط اطمینان حاصل می‌کند که این یک مقدار اعشاری است، خوب.

06:56.900 --> 06:57.980
این کاراکتر M.

06:57.980 --> 07:03.530
پس می‌بینید که ما در حال پردازش پرداخت سفارش با کارت اعتباری هستیم.

07:03.560 --> 07:06.800
حالا بیایید همین کار را با پی‌پال انجام دهیم.

07:06.800 --> 07:10.010
پس دوباره این یک AI payment processor خواهد بود.

07:10.010 --> 07:14.090
اما این بار یک پردازشگر پی‌پال با یک پردازشگر پی‌پال جدید خواهد بود.

07:14.090 --> 07:24.500
پس می‌بینید که من از این رابط AI payment processor برای ایجاد یک شی از دو نوع مختلف یا دو کلاس مختلف استفاده می‌کنم.

07:24.500 --> 07:25.790
پس اینجاست که جنبه وراثت وارد می‌شود.

07:25.790 --> 07:28.160
درست است؟

07:28.160 --> 07:28
پس اینجا می‌بینید که من آن را نامیدم یا این یک AI payment processor بود.

07:34.040 --> 07:37.310
و ما گفتیم new PayPal processor.

07:37.310 --> 07:40.940
پس ما مجبور نبودیم از AI payment processor در اینجا استفاده کنیم.

07:40.940 --> 07:49.430
ما واقعاً می‌توانستیم یک شی جدید از آن کلاس PayPal processor ایجاد کنیم که AI payment processor را به ارث می‌برد،

07:49.430 --> 07:56.810
که به ما اجازه می‌دهد اشیاء AI payment processor را ایجاد کنیم که در عین حال پردازشگر پی‌پال هستند.

07:56.810 --> 08:03.290
زیرا پردازشگر پی‌پال در این مورد، رابط را پیاده‌سازی می‌کند.

08:03.290 --> 08:06.350
این واقعاً وراثت نیست، اما رابط را پیاده‌سازی می‌کند.

08:06.350 --> 08:10.040
پس این مشابه چیزی است که قبلاً با وراثت دیدیم.

08:10.040 --> 08:13.370
و این یکی دیگر از بخش‌های چندشکلی است.

08:13.370 --> 08:13.940
خوب.

08:13.940 --> 08:15.800
پس خیلی چیزها در اینجا در حال وقوع است.

08:15.800 --> 08:19.880
همانطور که گفتم، اگرچه فقط چند خط کد است، اما خیلی چیزها در اینجا در حال وقوع است.

08:19.880 --> 08:23.090
و سپس من از سرویس پرداخت خود استفاده می‌کنم.

08:23.090 --> 08:31.250
اما این بار من پردازشگر پی‌پال را منتقل می‌کنم و سپس می‌توانم از آن سرویس پرداخت برای

08:31.250 --> 08:35.510
پردازش پرداخت سفارش با بگذارید بگوییم، 200 دلار استفاده کنم.

08:35.510 --> 08:39.890
پس می‌بینید که کد یکسان است.

08:39.890 --> 08:47.390
تنها چیزی که متفاوت است پارامتر است که به عنوان آرگومان به سازنده سرویس پرداخت منتقل می‌کنم.

08:47.390 --> 08:50.390
و این واقعاً قدرت قابلیت استفاده مجدد است.

08:50.390 --> 08:57.170
اینجا ما یک کلاس داریم که سرویس است و هر نوع پردازشگر پرداختی را می‌پذیرد، چه

08:57.170 --> 09:03.080
پی‌پال باشد، چه کارت اعتباری، چه هر ابزار دیگری، پرداخت نقدی یا هر چیز دیگری،

09:03.080 --> 09:08.780
حتی اگر شما به احتمال زیاد به کد نیاز نداشته باشید، زیرا کسی ممکن است با نقدی بیاید و

09:08.780 --> 09:14.570
صندوق‌دار هنوز باید آن را به نوعی وارد کند و هنوز هم باید از نظر کد پردازش شود.

09:14.570 --> 09:16.700
اما می‌توانید ببینید که این AI payment processor اهمیتی نمی‌دهد که چه نوع کلاسی پردازشگر خواهد بود،

09:16.700 --> 09:24.500
تا زمانی که رابط خود را پیاده‌سازی کند.

09:24.500 --> 09:27.950
پس می‌بینیم که پردازشگر پی‌پال رابط AI payment processor را پیاده‌سازی می‌کند و پردازشگر کارت اعتباری

09:27.950 --> 09:34.550
همچنین رابط AI payment processor را پیاده‌سازی می‌کند، که به همین دلیل اکنون می‌توانیم از آن‌ها به صورت متقابل استفاده کنیم، که

09:34.550 --> 09:40.850
به همین دلیل می‌توانیم هر یک از این دو را به عنوان آرگومان‌های سازنده سرویس پرداخت استفاده کنیم، که

09:40.850 --> 09:51.020
فقط گفت، می‌دانید چه؟

09:51.020 --> 09:59.360
در طول ایجاد سرویس من، بنابراین از کلاس من، از شیء من، از کلاس من، به من منتقل کنید.

09:59.910 --> 10:05.040
کلاس I payment processor یا کلاسی که I payment processor را پیاده‌سازی می‌کند.

10:05.040 --> 10:06.480
این شاید بهتر باشد که بگوییم.

10:06.480 --> 10:11.520
و سپس می‌توانید از متدهای پیش‌فرضی که من باید ارائه دهم استفاده کنید، که به عنوان مثال، پردازش پرداخت سفارش است.

10:11.520 --> 10:12.480
پس می‌بینید که اینجا نیز پردازش پرداخت سفارش درون سرویس پرداخت ما است.

10:12.480 --> 10:18.420
ما هرگز به طور خاص مشخص نکردیم که این چگونه باید اتفاق بیفتد زیرا این چیزی است که درون

10:18.420 --> 10:29.250
پردازشگر تعریف شده است.

10:29.250 --> 10:30.960
پردازشگر کیست؟

10:30.960 --> 10:37.710
پردازشگر هر کسی است که ما هنگام ایجاد شیء سرویس پرداخت به آن منتقل می‌کنیم.

10:37.710 --> 10:43.680
پس اگر ما پردازشگر پی‌پال را منتقل کنیم، این متد فراخوانی خواهد شد.

10:43.680 --> 10:48.240
و اگر ما پردازشگر کارت اعتباری را منتقل کنیم، پس این متد فراخوانی خواهد شد.

10:48.240 --> 10:56.370
پس حالا می‌بینید که ما به اصطلاح خطوط بسیار کمی از کد داریم که کارهای مختلفی انجام می‌دهند، اما تقریباً

10:56.370 --> 10:57.270
یکسان هستند.

10:57.270 --> 11:02.850
پس می‌بینید که هر دو این‌ها پردازش پرداخت کارت اعتباری و پردازش پرداخت پی‌پال را پردازش می‌کنند.

11:02.850 --> 11:05.550
پس این واقعاً مقدار زیادی برای مدیریت بود، درست است؟

11:05.550 --> 11:08.430
زیرا ما دو مفهوم را با هم ترکیب کردیم.

11:08.430 --> 11:09.690
نخست رابط‌ها.

11:09.690 --> 11:11.640
و دیگری چندشکلی.

11:11.640 --> 11:12.390
خوب.

11:12.390 --> 11:16.200
پس رابط‌ها چه هستند و چندشکلی چیست؟

11:16.200 --> 11:18.600
این چیزی است که ما در ویدیو بعدی به آن خواهیم پرداخت.
```
