自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

?面向過程編程

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

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

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

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

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

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

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

面向協(xié)議編程

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

它的好處:

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

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


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

2013-07-30 09:42:41

實現(xiàn)編程接口編程對象編程

2023-11-30 08:00:54

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

2010-07-13 17:18:29

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

2010-07-15 13:56:24

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

2017-04-21 09:07:39

JavaScript對象編程

2012-01-17 09:34:52

JavaScript

2023-02-22 18:06:35

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

2023-01-10 09:38:09

面向對象系統(tǒng)

2016-12-12 15:22:41

編程

2009-10-13 11:28:39

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

2010-07-08 13:35:39

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

2012-12-13 11:01:42

IBMdW

2014-06-27 09:10:23

UDPTCP

2012-02-27 09:30:22

JavaScript

2010-11-17 11:31:22

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

2015-03-20 09:54:44

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

2022-04-01 10:27:04

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

2010-02-02 13:15:26

Python類

2019-03-26 10:50:22

Python面向?qū)ο?/a>編程語言

2012-12-18 09:24:47

點贊
收藏

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