
```
WEBVTT

00:00.110 --> 00:02.390
به فصل رابط‌ها خوش آمدید.

00:02.390 --> 00:09.590
در این ویدیو به این می‌پردازیم که رابط چیست و چگونه به نظر می‌رسد، و همچنین چرا رابط‌ها اهمیت دارند.

00:09.590 --> 00:10.280
خوب.

00:10.310 --> 00:10.880
بیایید با این آغاز کنیم که رابط چیست.

00:10.880 --> 00:14.660
خوب، یک رابط در C# نوع مرجعی است که قرارداد روش‌ها و ویژگی‌ها (properties) را تعریف می‌کند

00:14.660 --> 00:21.920
که یک کلاس باید پیاده‌سازی کند.

00:21.920 --> 00:23.960
این فقط شامل امضاهای روش‌ها، ویژگی‌ها، رویدادها یا ایندکس‌ها است، نه پیاده‌سازی خودشان.

00:23.960 --> 00:30.650
پس چرا باید از رابط‌ها استفاده کنید؟

00:30.650 --> 00:31.250
خوب، دلیل اول، انتزاع است.

00:31.250 --> 00:33.530
پس رابط‌ها مشخص می‌کنند که یک کلاس چه روش‌هایی باید پیاده‌سازی کند

00:33.800 --> 00:35.510
بدون اینکه مشخص کنند که چگونه باید پیاده‌سازی شوند.

00:35.510 --> 00:43.280
دلیل دوم چندشکلی (polymorphism) است که به کلاس‌های مختلف اجازه می‌دهد به عنوان نمونه‌هایی از نوع رابط

00:43.280 --> 00:50.240
در نظر گرفته شوند.

00:50.240 --> 00:50.840
پس ما در فصل‌های بعدی بیشتر به چندشکلی خواهیم پرداخت.

00:50.840 --> 00:54.740
سپس کاهش وابستگی (decoupling) وجود دارد که وابستگی‌ها را بین کلاس‌ها کاهش می‌دهد،

01:01.370 --> 01:02.720
کد را ماژولارتر و استفاده از آن را آسان‌تر می‌کند.

01:02.720 --> 01:05.720
و ما همچنین به عمق بیشتری در مورد کاهش وابستگی خواهیم پرداخت.

01:05.720 --> 01:07.370
سپس قابلیت استفاده مجدد وجود دارد.

01:07.370 --> 01:14.600
پس رابط‌ها اطمینان حاصل می‌کنند که کلاس‌های مختلف می‌توانند از روش‌های مشترک استفاده کنند که قابلیت استفاده مجدد کد را افزایش می‌دهد.

01:14.600 --> 01:16.160
سپس تست‌پذیری وجود دارد.

01:16.160 --> 01:21.680
پس این امکان را برای تست واحد فراهم می‌کند، با اجازه دادن به پیاده‌سازی‌های تقلبی از رابط‌ها.

01:21.680 --> 01:29.300
و یک فصل کامل مختص به توسعه مبتنی بر تست و تست واحد با یانیک در فصل‌های بعدی داریم.

01:29.300 --> 01:31.880
بیایید به یک مثال عملی نگاه کنیم.

01:31.880 --> 01:34.640
پس من در یک پروژه جدید هستم که آن را اپلیکیشن رابط‌ها نامیده‌ام.

01:34.640 --> 01:39.230
و اولین چیزی که می‌خواهم به شما نشان دهم این است که کد یا نحو یک رابط چگونه است.

01:39.230 --> 01:45.200
پس شما با کلیدواژه public شروع می‌کنید، سپس کلیدواژه interface و سپس نام رابط خود را می‌دهید.

01:45.200 --> 01:51.200
پس می‌بینید که با I بزرگ شروع می‌کنم، سپس حرف بزرگ برای کلمه‌ای که می‌خواهم استفاده کنم یا نامی که می‌خواهم برای آن رابط استفاده کنم.

01:51.200 --> 01:52.520
پس I بیانگر این است که این یک رابط خواهد بود.

01:52.520 --> 01:59.930
و می‌توانید ببینید که سبز است.

01:59.930 --> 02:01.610
پس این یک سبز روشن است.

02:01.610 --> 02:05.270
این مانند یک سبز فیروزه‌ای برای کلاس‌ها و برای رابط‌ها است.

02:05.270 --> 02:07.160
شما همیشه خواهید دید که دست‌کم در ویژوال استودیو،

02:07.160 --> 02:08.720
آن‌ها با این رنگ سبز روشن نمایش داده می‌شوند.

02:08.720 --> 02:13.550
پس هر وقت این را دیدید می‌دانید که یک رابط است، یا هر وقت که I را در ابتدای نام یک کلاس یا نام چیزی دیدید،

02:13.550 --> 02:19.910
پس باید یک رابط باشد.

02:19.910 --> 02:25.130
پس به اینجا می‌رویم و مشخص می‌کنیم چه روش‌هایی باید در کلاسی که این رابط را پیاده‌سازی می‌کند باشد.

02:25.130 --> 02:39.470
برمی‌گردیم به مثالی که قبلاً با حیوانات استفاده کردیم.

02:39.470 --> 02:42.470
پس من این رابط IAnimal را دارم که در آن می‌گویم

02:42.470 --> 02:49.790
به عنوان مثال، یک روش به نام MakeSound وجود دارد که هیچ چیزی باز نمی‌گرداند.

02:49.790 --> 02:50.660
بنابراین void است.

02:50.660 --> 02:51.860
سپس نام متد را دارم، پرانتزهای باز و بسته و همچنین یک نقطه‌ویرگول.

02:51.860 --> 02:59.420
پس می‌بینید که در اینجا هیچ آکولادی وجود ندارد.

02:59.420 --> 03:02.210
بنابراین هیچ پیاده‌سازی برای این روش به طور مستقیم در رابط وجود ندارد.

03:02.210 --> 03:07.370
من می‌توانم در رابط‌ها این کار را انجام دهم.

03:07.370 --> 03:09.410
می‌توانم بگویم که می‌دانید، این روش پیاده‌سازی ندارد.

03:09.410 --> 03:13.640
اما هر کسی که این رابط را پیاده‌سازی می‌کند باید این روش را به روش خود پیاده‌سازی کند.

03:13.640 --> 03:19.520
و این همان چیزی است که من قبلاً درباره قابلیت استفاده مجدد و همچنین داشتن یک قرارداد مشترک صحبت می‌کردم.

03:19.520 --> 03:25.370
پس یک نمونه دیگر would be eat.

03:25.370 --> 03:28.370
خوب.

03:28.370 --> 03:33.260
پس این یک مثال دیگر از آنچه که یک روش می‌تواند به نظر برسد است.

03:33.260 --> 03:35.060
می‌بینید که دوباره یک نوع بازگشتی وجود دارد.

03:35.060 --> 03:36.800
نوع بازگشتی می‌تواند چیز دیگری باشد.

03:36.800 --> 03:37.910
لازم نیست که void باشد.

03:37.910 --> 03:40.760
می‌تواند یک رشته (string) باشد، می‌تواند یک عدد صحیح (int) باشد، می‌تواند هر چیزی باشد.

03:40.880 --> 03:43.430
و ما می‌توانیم پارامترهایی هم داشته باشیم.

03:43.430 --> 03:47.480
پس می‌توانید بگویید که حیوان باید چه چیزی بخورد.

03:47.480 --> 03:54.710
پس غذا به عنوان مثال، string food می‌تواند هر چیزی باشد که یک حیوان باید بخورد.

03:54.710 --> 03:58.700
و می‌توانیم بگوییم که در پیاده‌سازی باید کاری انجام شود.

03:58.700 --> 04:03.110
و قطعاً می‌توانید بگویید که خوب، eat یک رشته باز می‌گرداند.

04:03.110 --> 04:09.740
به عنوان مثال، سگ خورده‌است یا گربه خورده‌است یا چیزی شبیه به این، اما من فقط می‌خواهم آن را void بگذارم

04:09.740 --> 04:13.910
چون فقط باید یک بیانیه باشد که چیزی را روی صفحه نمایش دهد.

04:13.910 --> 04:14.630
خوب.

04:14.630 --> 04:22.430
پس این فقط مثالی از نحوه نگارش رابط بود، شامل رویه نام‌گذاری و شامل اعلامیه‌های متد بدون پیاده‌سازی ما.

04:22.430 --> 04:25.970
راستی، در مورد رویه نام‌گذاری، IAnimal یک مثال است.

04:25.970 --> 04:31.280
اما اگر این IAnimalFood بود، به عنوان مثال، پس من حرف اول در کلمه بعدی را نیز بزرگ می‌کردم.

04:31.280 --> 04:39.140
پس ما هنوز از حالت camelCase اینجا استفاده می‌کنیم، خوب؟

04:39.140 --> 04:42.260
پس بیایید ببینیم که چگونه می‌توان یک رابط را در یک کلاس پیاده‌سازی کرد در ویدیوی بعدی میبینمتان.
```
