خوش آمدید.
در این ویدیو ما به بررسی ترویج قابلیت استفاده مجدد از کد و انعطاف‌پذیری خواهیم پرداخت.
ما به بررسی اینکه کجا، چرا و چگونه و همچنین چه زمانی باید از رابط‌ها برای دستیابی به این هدف استفاده کنیم، خواهیم پرداخت.
پس بیایید با کجا شروع کنیم، کجا باید از رابط‌ها استفاده کنیم.
خوب، زمانی که نیاز دارید کلاس‌های مختلف یک مجموعه یکسان از متدها یا ویژگی‌ها را پیاده‌سازی کنند،
این اطمینان را فراهم می‌کند و اجازه می‌دهد پیاده‌سازی‌های انعطاف‌پذیر داشته باشید.
چرا این کار را انجام می‌دهید؟
خوب، این باعث ترویج قابلیت استفاده مجدد از کد و انعطاف‌پذیری می‌شود.
کلاس‌های مختلف می‌توانند یک رابط یکسان را به روش‌های مختلف پیاده‌سازی کنند و رفتارهای متنوعی را فراهم کنند
در حالی که یک قرارداد مشترک را حفظ می‌کنند، سپس به زمان استفاده از رابط‌ها می‌رسیم، زمانی که چندین
کلاس وجود دارد که باید همان عملکرد را ارائه دهند، اما ممکن است آن را به طور متفاوتی پیاده‌سازی کنند.
حالا بیایید به یک مثال دنیای واقعی بپردازیم، یک سیستم پردازش پرداخت.
تصور کنید که شما در حال ساخت یک پلتفرم تجارت الکترونیک هستید که از چندین روش پرداخت مانند کارت‌های اعتباری،
پی‌پال و انتقال بانکی پشتیبانی می‌کند.
هر یک از این‌ها روش متفاوتی برای مدیریت پرداخت خواهد داشت.
پس بیایید این را به یک روش بسیار ساده بسازیم.
این یک نسخه بسیار، بسیار ساده خواهد بود.
پس من این رابط را ایجاد می‌کنم.
و به هر حال، منطقی است که این رابط‌ها را در فایل‌های جداگانه داشته باشید.
من فقط آن‌ها را در یک فایل قرار می‌دهم برای اهداف آموزشی، به این معنا که دیدن همه چیز در یک جا آسان‌تر است
بدون اینکه مجبور باشم بین فایل‌ها مدام جابجا شوم.
خوب، پس ما این رابط به نام I Payment Processor داریم.
و آنچه می‌خواهم داشته باشم این است که می‌خواهم پرداخت را پردازش کنم.
و چه چیزی نیاز دارم؟
من به مقدار نیاز دارم.
پس می‌گویم مقدار اعشاری.
پس این متد اکنون پیاده‌سازی نشده است، همانطور که می‌بینیم.
اما ما فقط می‌گوییم خوب، اگر می‌خواهید پرداخت را پردازش کنید، باید مقدار مورد نظر را به من بدهید
که می‌خواهید پردازش کنید.
پس مقدار پرداخت به اصطلاح.
خوب.
حالا بیایید پیش برویم و یک پردازشگر کارت اعتباری ایجاد کنیم.
پس کلاس عمومی credit card processor که قرار است I payment processor من را پیاده‌سازی کند.
و شاید باید آن را processor بنامم، فکر می‌کنم این انگلیسی صحیح است.
پس I payment processor.
و سپس باید متدهای آن را پیاده‌سازی کنم، خوب.
پس این process payment.
پس آنچه می‌گویم این است که public void process payment که نام آن متد است.
پس می‌توانم همچنین فقط کپی و پیست کنم.
واضح است که می‌توانستم از IDE برای قرار دادن آن استفاده کنم، اما می‌خواهم به صورت دستی این کار را انجام دهم.
و اینجا می‌گویم مقدار اعشاری و این مقدار خواهد بود، خوب.
حالا بیایید بگوییم در این مورد چه باید اتفاق بیفتد.
پس من فقط می‌گویم پردازش پرداخت کارت اعتباری به مقدار، هر مقدار که باشد، خوب.
هر مقدار اعشاری که قرار است منتقل کنیم.
و سپس باید منطق پرداخت کارت اعتباری را پیاده‌سازی کنم، خوب.
ما به واقع به پیاده‌سازی منطق پرداخت کارت اعتباری نمی‌پردازیم.
این واقعاً فقط درباره ایده درک این است که رابط‌ها چه کار می‌کنند و چرا قابلیت استفاده مجدد از کد اینجا بسیار مفید است.
خوب.
پس من یک کلاس دیگر خواهم داشت.
این بار پردازشگر پی‌پال خواهد بود.
خوب.
پس من فقط این کد را کپی می‌کنم و این را به پردازشگر پی‌پال تغییر نام می‌دهم که همچنین متد I payment processor را پیاده‌سازی می‌کند.
این همچنین از متد process payment استفاده می‌کند یا آن را پیاده‌سازی می‌کند.
اما حالا این خواهد بود پرداخت پی‌پال به مقدار و منطق پرداخت پی‌پال را پیاده‌سازی می‌کند.
پس این تقریباً کاری است که دو کلاس ما انجام می‌دهند.
پس می‌بینید که هر دو این رابط را پیاده‌سازی می‌کنند.
حالا واضح است که رابط ما می‌تواند متدهای بیشتری داشته باشد.
در مورد ما فقط یک متد دارد.
اما می‌تواند ده‌ها متد باشد، درست است؟
پس در مورد ما ساده است.
واقعاً فقط همین یک متد است.
و حالا می‌توانیم از آن دوباره استفاده کنیم.
و همیشه همان ساختار وجود دارد.
همیشه void برمی‌گرداند.
پس هیچ چیز.
و همیشه یک پارامتر می‌گیرد که مقدار اعشاری است.
پس حالا بیایید از آن رابط استفاده کنیم.
بنابراین من یک کلاس جدید ایجاد می‌کنم، کلاس عمومی.
و من این را سرویس پرداخت می‌نامم، خوب.
پس این سرویس پرداخت و شما خواهید دید که کلاس‌هایی که رابط‌ها را پیاده‌سازی می‌کنند، معمولاً
سرویس‌ها هستند.
پس این یکی یک I payment را به صورت خواندنی خواهد داشت.
پردازشگر.
و می‌بینید، چون خصوصی و فقط خواندنی است، یک پردازشگر زیرخط دارد.
خوب.
پس این قرار است I payment را پردازش کند، اما فقط در داخل این کلاس.
این از بیرون قابل خواندن نیست و همچنین پس از یک بار تنظیم، قابل تنظیم نیست زیرا یک روش فقط خواندنی است.
سپس من سازنده‌ای دارم و
من پردازشگر پرداخت را اینجا منتقل می‌کنم.
پس چرا این کار را انجام می‌دهم؟
خوب، تا بتوانم پردازشگر پرداخت فقط خواندنی خصوصی خود را اینجا تنظیم کنم، خوب.
پس در این مرحله می‌توانم یک متد ایجاد کنم که آن را پردازش پرداخت سفارش می‌نامم.
و این باید پردازش پرداخت سفارش باشد که من یک مقدار اعشاری را منتقل می‌کنم.
و اینجا من از پردازشگر پرداخت زیرخط استفاده می‌کنم.
و من پرداخت را با مقدار پردازش می‌کنم.
خوب.
پس حالا بیایید این متد را نیز عمومی کنیم تا بتوانیم از آن خارج از این کلاس استفاده کنیم، خوب.
پس همه چیز تا اینجا فکر می‌کنم هنوز خوب است.
حالا بیایید واقعاً از آن استفاده کنیم.
و اینجاست که واقعاً جالب می‌شود.
و اینجا همچنین خواهید دید که چرا این قابلیت استفاده مجدد از کد اینجا بسیار جالب است.
پس من یک AI payment processor credit card processor ایجاد می‌کنم که یک credit card processor جدید خواهد بود.
و سپس من یک سرویس پرداخت ایجاد می‌کنم که
پردازشگر کارت اعتباری را به عنوان آرگومان به سازنده منتقل می‌کنم.
و سپس می‌توانم از payment service dot process order payment با هر مقداری استفاده کنم.
پس بگذارید بگوییم 100.
و این M فقط اطمینان حاصل می‌کند که این یک مقدار اعشاری است، خوب.
این کاراکتر M.
پس می‌بینید که ما در حال پردازش پرداخت سفارش با کارت اعتباری هستیم.
حالا بیایید همین کار را با پی‌پال انجام دهیم.
پس دوباره این یک AI payment processor خواهد بود.
اما این بار یک پردازشگر پی‌پال با یک پردازشگر پی‌پال جدید خواهد بود.
پس می‌بینید که من از این رابط AI payment processor برای ایجاد یک شی از دو نوع مختلف یا دو کلاس مختلف استفاده می‌کنم.
پس اینجاست که جنبه وراثت وارد می‌شود.
درست است؟
پس اینجا می‌بینید که من آن را نامیدم یا این یک AI payment processor بود.
و ما گفتیم new PayPal processor.
پس ما مجبور نبودیم از AI payment processor در اینجا استفاده کنیم.
ما واقعاً می‌توانستیم یک شی جدید از آن کلاس PayPal processor ایجاد کنیم که AI payment processor را به ارث می‌برد،
که به ما اجازه می‌دهد اشیاء AI payment processor را ایجاد کنیم که در عین حال پردازشگر پی‌پال هستند.
زیرا پردازشگر پی‌پال در این مورد، رابط را پیاده‌سازی می‌کند.
این واقعاً وراثت نیست، اما رابط را پیاده‌سازی می‌کند.
پس این مشابه چیزی است که قبلاً با وراثت دیدیم.
و این یکی دیگر از بخش‌های چندشکلی است.
خوب.
پس خیلی چیزها در اینجا در حال وقوع است.
همانطور که گفتم، اگرچه فقط چند خط کد است، اما خیلی چیزها در اینجا در حال وقوع است.
و سپس من از سرویس پرداخت خود استفاده می‌کنم.
اما این بار من پردازشگر پی‌پال را منتقل می‌کنم و سپس می‌توانم از آن سرویس پرداخت برای
پردازش پرداخت سفارش با بگذارید بگوییم، 200 دلار استفاده کنم.
پس می‌بینید که کد یکسان است.
تنها چیزی که متفاوت است پارامتر است که به عنوان آرگومان به سازنده سرویس پرداخت منتقل می‌کنم.
و این واقعاً قدرت قابلیت استفاده مجدد است.
اینجا ما یک کلاس داریم که سرویس است و هر نوع پردازشگر پرداختی را می‌پذیرد، چه
پی‌پال باشد، چه کارت اعتباری، چه هر ابزار دیگری، پرداخت نقدی یا هر چیز دیگری،
حتی اگر شما به احتمال زیاد به کد نیاز نداشته باشید، زیرا کسی ممکن است با نقدی بیاید و
صندوق‌دار هنوز باید آن را به نوعی وارد کند و هنوز هم باید از نظر کد پردازش شود.
اما می‌توانید ببینید که این AI payment processor اهمیتی نمی‌دهد که چه نوع کلاسی پردازشگر خواهد بود،
تا زمانی که رابط خود را پیاده‌سازی کند.
پس می‌بینیم که پردازشگر پی‌پال رابط AI payment processor را پیاده‌سازی می‌کند و پردازشگر کارت اعتباری
همچنین رابط AI payment processor را پیاده‌سازی می‌کند، که به همین دلیل اکنون می‌توانیم از آن‌ها به صورت متقابل استفاده کنیم، که
به همین دلیل می‌توانیم هر یک از این دو را به عنوان آرگومان‌های سازنده سرویس پرداخت استفاده کنیم، که
فقط گفت، می‌دانید چه؟
در طول ایجاد سرویس من، بنابراین از کلاس من، از شیء من، از کلاس من، به من منتقل کنید.
کلاس I payment processor یا کلاسی که I payment processor را پیاده‌سازی می‌کند.
این شاید بهتر باشد که بگوییم.
و سپس می‌توانید از متدهای پیش‌فرضی که من باید ارائه دهم استفاده کنید، که به عنوان مثال، پردازش پرداخت سفارش است.
پس می‌بینید که اینجا نیز پردازش پرداخت سفارش درون سرویس پرداخت ما است.
ما هرگز به طور خاص مشخص نکردیم که این چگونه باید اتفاق بیفتد زیرا این چیزی است که درون
پردازشگر تعریف شده است.
پردازشگر کیست؟
پردازشگر هر کسی است که ما هنگام ایجاد شیء سرویس پرداخت به آن منتقل می‌کنیم.
پس اگر ما پردازشگر پی‌پال را منتقل کنیم، این متد فراخوانی خواهد شد.
و اگر ما پردازشگر کارت اعتباری را منتقل کنیم، پس این متد فراخوانی خواهد شد.
پس حالا می‌بینید که ما به اصطلاح خطوط بسیار کمی از کد داریم که کارهای مختلفی انجام می‌دهند، اما تقریباً
یکسان هستند.
پس می‌بینید که هر دو این‌ها پردازش پرداخت کارت اعتباری و پردازش پرداخت پی‌پال را پردازش می‌کنند.
پس این واقعاً مقدار زیادی برای مدیریت بود، درست است؟
زیرا ما دو مفهوم را با هم ترکیب کردیم.
نخست رابط‌ها.
و دیگری چندشکلی.
خوب.
پس رابط‌ها چه هستند و چندشکلی چیست؟
این چیزی است که ما در ویدیو بعدی به آن خواهیم پرداخت. ```