偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

淺析面向過(guò)程、面向?qū)ο蠛兔嫦騾f(xié)議編程

開(kāi)發(fā) 前端
本文簡(jiǎn)單分析面向過(guò)程,面向?qū)ο?,面向協(xié)議三種編程方式。前面兩種方式很多人都講過(guò),這里不再重復(fù)講,更多地介紹面向協(xié)議編程。

?面向過(guò)程編程

面向過(guò)程編程是以過(guò)程為中心的編程方式。具體來(lái)說(shuō),一個(gè)系統(tǒng)或業(yè)務(wù),從頭到尾按照步驟,用函數(shù)的形式來(lái)實(shí)現(xiàn)。

面向過(guò)程主要是分析出系統(tǒng)或業(yè)務(wù)所需要的步驟,關(guān)注的是處理好系統(tǒng)或業(yè)務(wù)的哪些步驟。

這種編程方式,典型的,也是最具代表性的就是C語(yǔ)言。

面向?qū)ο缶幊?/h4>

面向過(guò)程編程是以對(duì)象為中心的編程方式。全稱Object Oriented Programming。簡(jiǎn)稱OOP,其核心思想就是“萬(wàn)事萬(wàn)物皆為對(duì)象”,一切從對(duì)象的角度出發(fā),設(shè)計(jì)和開(kāi)發(fā)系統(tǒng),用對(duì)象來(lái)管理系統(tǒng)。這種思維方式符合人的思維,很容易被人們所理解。

面向?qū)ο笾饕前严到y(tǒng)或業(yè)務(wù)拆解成各個(gè)對(duì)象;關(guān)注的是處理好系統(tǒng)或業(yè)務(wù)中哪些對(duì)象。

它起初的編程語(yǔ)言是Small talk(Small talk是所有OOP語(yǔ)言的鼻祖), 后來(lái)是著名的是C++語(yǔ)言,當(dāng)然把OOP思想發(fā)揮到極致并讓大多數(shù)熟知的是Java語(yǔ)言。

面向協(xié)議編程

面向協(xié)議編程,全稱Protocol Oriented Programming,簡(jiǎn)稱POP, 是 Apple 在 WWDC2015 上提出的一種編程范式,其已成為 Swift 的基礎(chǔ)庫(kù)。

在講面向協(xié)議之前,介紹下協(xié)議的概念。

關(guān)于協(xié)議的概念,在蘋果的官網(wǎng)是如下定義的:“協(xié)議定義了適合特定任務(wù)或功能的方法、屬性和其他需求的藍(lán)圖。然后,類、結(jié)構(gòu)體或枚舉可以遵循該協(xié)議來(lái)提供這些需求的實(shí)際實(shí)現(xiàn)。任何滿足協(xié)議要求的類型都被稱為遵循該協(xié)議。”見(jiàn) Swift 編程語(yǔ)言(Swift 4.0.3)部分。

這個(gè)比較難理解。我就結(jié)合個(gè)人經(jīng)驗(yàn),從幾個(gè)方面理解下:

協(xié)議即Protocol,類似Java語(yǔ)言中Interface(接口),用于模塊間通訊。但是又不完全類似接口。

協(xié)議在Object-C中使用的比較多,一般是結(jié)合delegate(委托),實(shí)現(xiàn)一個(gè)VC對(duì)另一個(gè)VC傳遞數(shù)據(jù)或響應(yīng)事件。在此場(chǎng)景中的協(xié)議很像接口,定義好的一個(gè)規(guī)范。

和繼承的關(guān)系,在Object-C和Swift語(yǔ)言中,我們知道是不支持多重繼承的,然而可以通過(guò)協(xié)議來(lái)實(shí)現(xiàn)多重繼承。

協(xié)議與多態(tài),本來(lái)與多態(tài)扯不上關(guān)系,但是Swift4.0.3版本之后的協(xié)議擴(kuò)展(Protocol extension)又可以實(shí)現(xiàn)多態(tài)功能。

總得來(lái)說(shuō),協(xié)議是綜合有接口、繼承,多態(tài)三個(gè)概念。如果一定給個(gè)概念的話,那協(xié)議更像定義了一套規(guī)范,讓類,結(jié)構(gòu)體和枚舉遵循規(guī)范。

面向協(xié)議的編程又是怎么回事呢?

首先面向協(xié)議的開(kāi)發(fā)語(yǔ)言,目前來(lái)說(shuō),就只有Swift這一門語(yǔ)言, Object-C和Java等其他語(yǔ)言都不不支持。

面向協(xié)議的編程,其實(shí)就是使用Swift語(yǔ)言進(jìn)行開(kāi)發(fā)。那協(xié)議的思想又如何在Swift上體現(xiàn)呢?

未使用協(xié)議思想的方式(即平常使用的方式):

我們首先創(chuàng)建一個(gè)ViewController并生成一個(gè)實(shí)例vc,這個(gè)vc最終也會(huì)AddSubView到父類上。然后在ViewCongroller上添加自己的視圖,如UIView,UILabel或UIButton等等操作。這些控件都會(huì)生成對(duì)應(yīng)的對(duì)象。然后由這些對(duì)象來(lái)管理各個(gè)界面。

還有一種沒(méi)有界面,我們會(huì)先創(chuàng)建一個(gè)個(gè)的類。例如在學(xué)校管理系統(tǒng)中,建立Teacher、Student等類,然后在業(yè)務(wù)層創(chuàng)建Teacher,Student對(duì)應(yīng)的實(shí)例。通過(guò)操作實(shí)例來(lái)實(shí)現(xiàn)業(yè)務(wù)邏輯。

總之,首先創(chuàng)建類,然后生成對(duì)應(yīng)的實(shí)例,用實(shí)例管理業(yè)務(wù)。這個(gè)就是OOP的實(shí)現(xiàn)方式。

若采用協(xié)議思想來(lái)做的話,那首先不是建立一個(gè)個(gè)的類了,而是建立一整套協(xié)議(或者叫規(guī)范)。例如上例中的老師和學(xué)生,就有可能建立性別(Sex)、語(yǔ)言(language)、人(person)這些協(xié)議(規(guī)范)。在這些協(xié)議規(guī)范中定義屬性和方法。定義好之后,就可以針對(duì)原來(lái)的Teacher類按協(xié)議的多繼承來(lái)規(guī)范來(lái)。

例如定義一個(gè)Teacher類, 繼承Sex,language和person協(xié)議。這樣也可以實(shí)現(xiàn)Teacher類的功能。當(dāng)然在實(shí)例化上Set有男女,language上有語(yǔ)文,數(shù)學(xué),英語(yǔ)之類的,至于person就是個(gè)人的基本屬性(如姓名,地址,聯(lián)系方式)。這樣生成的Teacher實(shí)例,就可以搭配多種不同的Teacher實(shí)例。例如教英語(yǔ)的女老師,教體育的男老師。

從本質(zhì)來(lái)說(shuō),定義一整套規(guī)范(協(xié)議),如Sex,language,person等等。這些規(guī)范可以是最小原子的,例如Sex,就一個(gè)屬性(sex,1表示男,0:表示女)。這一套通用的規(guī)范定義好之后,給類,結(jié)構(gòu)體或枚舉 等類型去遵守。這就是完全不同之前的面向?qū)ο蟮姆绞健?/p>

它的好處:

1.協(xié)議可以任意擴(kuò)展,不會(huì)影響現(xiàn)有系統(tǒng)。

2.協(xié)議可以復(fù)用。更好地利用現(xiàn)有的資源。


責(zé)任編輯:華軒 來(lái)源: 今日頭條
相關(guān)推薦

2013-07-30 09:42:41

實(shí)現(xiàn)編程接口編程對(duì)象編程

2010-07-13 17:18:29

Perl面向?qū)ο缶幊?/a>

2023-11-30 08:00:54

面向?qū)ο?/a>面向切面

2010-07-15 13:56:24

面向?qū)ο?/a>面向過(guò)程

2012-01-17 09:34:52

JavaScript

2017-04-21 09:07:39

JavaScript對(duì)象編程

2023-02-22 18:06:35

函數(shù)javascript面向?qū)ο缶幊?/a>

2023-01-10 09:38:09

面向對(duì)象系統(tǒng)

2016-12-12 15:22:41

編程

2010-07-08 13:35:39

UML面向?qū)ο?/a>

2009-10-13 11:28:39

VB.NET面向?qū)ο缶?/a>

2012-12-13 11:01:42

IBMdW

2012-02-27 09:30:22

JavaScript

2010-11-17 11:31:22

Scala基礎(chǔ)面向?qū)ο?/a>Scala

2014-06-27 09:10:23

UDPTCP

2015-03-20 09:54:44

網(wǎng)絡(luò)編程面向連接無(wú)連接

2022-04-01 10:27:04

面向?qū)ο?/a>串口協(xié)議代碼

2010-02-02 13:15:26

Python類

2009-07-02 13:25:00

消除實(shí)現(xiàn)繼承面向接口編程Java

2019-03-26 10:50:22

Python面向?qū)ο?/a>編程語(yǔ)言
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)