در برنامه نویسی شی گرا ، یک رابط یا پروتکل نوع [a] یک نوع داده است که به عنوان انتزاعی از یک کلاس عمل می کند . مجموعهای از امضاهای متد را توصیف میکند که پیادهسازیهای آن ممکن است توسط کلاسهای متعددی ارائه شوند که در غیر این صورت لزوماً به یکدیگر مرتبط نیستند. [1] کلاسی که متدهای فهرست شده در یک پروتکل را فراهم می کند، گفته می شود که پروتکل را می پذیرد ، [2] یا رابط را پیاده سازی می کند . [1]
اگر اشیا به طور کامل کپسوله شده باشند ، پروتکل تنها راهی است که از طریق آن ممکن است توسط اشیاء دیگر به آنها دسترسی پیدا کند. برای مثال، در جاوا ، Comparable
اینترفیس روشی را مشخص میکند compareTo()
که کلاسهای پیادهسازی باید آن را پیادهسازی کنند. این بدان معناست که برای مثال، یک روش مرتبسازی میتواند مجموعهای از هر نوع شی را که رابط Comparable را پیادهسازی میکنند، بدون نیاز به دانستن چیزی در مورد ماهیت داخلی کلاس مرتب کند (به جز اینکه دو مورد از این شیها را میتوان با استفاده از compareTo()
).
برخی از زبان های برنامه نویسی از پروتکل ها پشتیبانی زبان صریح می دهند ( Ada ، C# ، D ، Dart ، Delphi ، Go ، Java ، Logtalk ، Object Pascal ، Objective-C ، OCaml ، PHP ، Racket ، Seed7 ، Swift ، Python 3.8). در زبان هایی که از وراثت چندگانه پشتیبانی می کنند ، مانند C++ ، اینترفیس ها به عنوان کلاس های انتزاعی پیاده سازی می شوند .
در زبانهای بدون پشتیبانی صریح، پروتکلها اغلب به صورت قراردادی وجود دارند. این به عنوان تایپ اردک شناخته می شود . به عنوان مثال، در پایتون ، هر کلاسی می تواند یک متد را پیاده سازی کند و به عنوان یک مجموعه__iter__
استفاده شود . [3]
کلاسهای تایپ در زبانهایی مانند Haskell یا امضای ماژول در ML و OCaml برای بسیاری از مواردی که پروتکلها برای آنها استفاده میشوند استفاده میشوند. [ توضیح لازم است ]
در Rust ، اینترفیس ها را صفت s می نامند . [4]
هر نوع می تواند پروتکلی را برای کمک به ارائه عملکرد اضافی برای انجام مجموعه خاصی از وظایف اتخاذ کند .
{{cite book}}
: CS1 maint: مکان ناشر موجود نیست ( پیوند )