协议 (面向对象编程)
面向对象编程中的结构类型
概述编辑
协议指示着在调用者和对象之间的交互链,在其他方面都类同于通信协议。使用术语“协议”的语言包括:Clojure、Elixir、Java 8、Logtalk、Objective-C[1]、Smalltalk-80、Swift、Python[2]。
在这些语言中,协议是离散的对象相互通信的常用方式。为了进行协作,将这些对象一致认可的方法和值的定义,作为API的一部份。协议/接口描述了:
- 对象所理解的消息。
- 这些消息可提供的实际参数。
- 这些消息返回的结果的类型。
- 不变量,即使对象状态被修改了而仍然保持。
- 异常情况,要求这个对象的客户处理。
- (只针对通信风格用途:)方法的调用序列和决定点,这些都会表示在UML交互图中:通信图、时序图、交互概述图/活动图、计时图。
如果对象是完全封装的,则协议将只描述对象能被其他对象访问的方式。例如Java中的接口,Comparable
接口指定了一个方法compareTo()
,实现类必须实现它。这意味着比如有一个独立的排序方法,可以排序实现了这个可比较接口的任何对象,而不用知道关于这个类的内部性质的任何事情(除了两个这种对象可以通过compareTo()
方式进行比较之外)。
一些编程语言提供对协议/接口的显式的语言支持:Ada、C#、D、Dart、Delphi、Go、Java、Logtalk、Object Pascal、Objective-C、PHP、Racket、Seed7、Swift。在C++中接口叫做抽象基础类,并被使用纯虚函数实现。Perl中的面向对象特征也支持接口。
非面向对象语言编辑
尽管Go编程语言一般不被认为是面向对象语言,它允许在用户定义类型上定义方法。Go有“接口”类型,兼容于支持给定方法集合的任何类型(这个类型不需要显式的实现这个接口)。空接口interface{}
兼容于所有类型。
注意函数式编程和分布式编程语言使用术语协议类似于通信用法(比如允许消息交换的规定强调了交换而非消息)。特别是在这些语言中如下这些被认为是协议的一部份:
- 允许的消息序列,
- 对通信任一参与者施加的限制,
- 处理消息时将会发生的预期效果。
参见编辑
- 概念 (泛型编程)
- 委托 (面向对象编程)
- Objective-C中的协议
- 公开接口
- 应用编程接口
引用编辑
- ^ The Objective-C programming Language:Protocols. Apple Inc. [7 October 2012]. (原始内容存档于2016-04-16).
- ^ Official Python 3 Documentation, Abstract Object Layer. [2021-03-28]. (原始内容存档于2021-05-18).
🔥 Top keywords: Baike: 首页Special:搜索毛泽东家族榮耀之繼承者天之驕女鐵拳英雄九龍城寨之圍城黃循財背着善宰跑篠崎泫妮妃雅新生 (网络剧)劉偉健斯洛伐克习近平劉俊謙 (香港)李显龙歌手2024佛誕淚之女王2024年泰國羽球公開賽新加坡總理邊佑錫新加坡Energy (組合)庆余年九龍寨城六四事件家族榮耀金智媛彌助菲律宾胖猫跳江事件劉寶傑DAY6林峯張文傑李光耀神耆小子張鳳妮黃世聰Seventeen (組合)维基百科願榮光歸香港中華民國鬼滅之刃 柱訓練篇2024年英雄联盟季中邀请赛中华人民共和国TripleS金秀賢 (男演員)罗伯特·菲佐井柏然2024年世界女排联赛黃偉哲怪獸8號佘詩曼Foodpanda金惠奫新加坡总统香緹·摩爾于北辰 (1968年)王嘉爾笑看風雲排球少年!!角色列表林飛帆郭葦昀馴鹿寶貝翁靜晶猩球崛起:王國誕生ILLIT尼古拉·約基奇春色寄情人周殷廷鬼滅之刃排球少年!!吳釗燮逆天奇案2不夠善良的我們BABYMONSTER李正皓尚达曼BOYNEXTDOOR胡子彤IVE (組合)陳靜 (香港)香港吴作栋黃道十二宮凡希亚·奥伊亚胡宇威長洲太平清醮張員瑛搜查班長1958伍允龍习明泽黄岩岛賴清德偶然遇見的你虽然不是英雄