成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C++語言僅僅是面對對象的語言嗎

開發 后端
下面對C++進行了大致的劃分,隨著C++語言的進化,C++語言劃分為三個半子語言:Better C、ADT C++、IDL C++、GP C++。

C++語言實際上是幾種不同語言的聚集地,你可以把他看成一種語言,也可以把他看成一種語言,要進行對C++程序地開發,那么復雜性會大幅度地增加,這就是C++在實踐中難于控制的一個主要原因。

混合使用不同風格,就好像在一個源文件里混合使用多種不同的語言,復雜和不一致性必然暴露。當然,C++獨特的魅力正在于混合風格編程的強大威力。這正是一把雙刃劍,雖然具有潛在的強大威力,但是通常來說也是導致項目混亂的重要原因。

我認為以下面的原則進行實際開發,將可以在一定程度上規避風險:

1). 在任何一個單個的時間點,只使用一種編程風格。

2). 以一種風格為主風格,用它來組織整體模塊的開發。

3). 在遇到特別適合另一種風格的典型場景,可以用一個子模塊包裝該場景,然后在該子模塊中使用該風格,但記住遵循要求1,避免混合風格。此外,必須通過封裝手段將該模塊包裝起來,以符合主體風格的要求。比如說,主風格是better C,在某個子模塊中用到了面向對象,則應當使這個子模塊從整體上看來像是一個普通的C過程。

4). 在個別場合,混合風格的確有很大的好處。但是,這種情形是比較少見的,一般來說比較成功的實踐已經總結成patterns,所以在工程實際中,可以強行規定,只有在符合某個patterns的情況下才可以謹慎地使用混合風格,嚴禁擅自創造新的混合用法。

現在來討論一下究竟應當如何劃分C++風格。Stroustrup對C++風格的分類是從語言開發者的角度進行的。如果我們以下面的原則進行分類,我認為會得出不同的結果:

1) 每一種風格必須構成一個完整的子語言,具有完備性,可以單獨使用這一子語言開發任何軟件系統,有經過歷史驗證的成功經驗。

2) 每一種風格必須相對簡單,有一致的、簡單的、得到認可和驗證的原則。

3) 每一種子語言必須能夠在現實世界中找到相對應的其他語言。

依據以上原則,我將C++語言劃分為三個半子語言:

1)  Better C, 只增加函數重載、引用類型、缺省參數等簡單特性的類C子集。對應ANSI C語言。

2)  ADT C++,即C with Class,整個程序由平面化的具體類(concrete class)對象構成,無繼承,無多態。對應Ada 83語言。

3) IDL C++,我稱之為Interface-Oriented,典型范例是COM組件模型。

3.5) GP C++, 利用模板技術形成了一種庫和組件的實現語言。這不是一種完整子語言,一方面因為可以把它看成是ADT C++的一種延伸,另一方面它必須依附于其他風格而發揮作用。

顯然,我這里遺留了一個最重要的風格,也就是我們通常所說的“傳統面向對象”風格,由Smalltalk,Java等語言所展示的。由MFC等類庫經過多年實踐論證了的一種風格:靠龐大的繼承樹抽象和組織各種數據類型,靠繼承和組合實現代碼復用。這種風格為什么沒有被我提及呢?

因為我認為這種風格實際上是一種混合風格!可以認為是在試圖融合上述第2、3和3.5種風格。在前述的三條原則里,它嚴重地違背了第二條。由于C++的靜態本質,由于C++缺乏天然的類庫和垃圾收集機制,使得在C++語言中進行Smalltalk風格的編程非常非常困難,以至于為了克服這些困難,C++語言實際上發展出了一套不同于Smalltalk、Java風格的獨特的“面向對象”編程風格。

這套風格歷經近15年實踐,應該說有成功有失敗,雖然出版了大量的著作,至今沒有形成簡單的、一致的、可仿效的風格指導。從某種意義上說,如此多的C++面向對象編程指導書籍十幾年常盛不衰,恰恰說明這種風格的困難程度和難以仿效性。

就我個人而言,我已經不再以這種風格為指導思想了。我不會再拼命地構造繼承樹,思考哪些函數應該是虛函數這類問題了。你可以認為“為了復用代碼而進行的繼承”是這種風格的標志。

請注意,ADT C++允許組合,對于繼承則應該想盡一切辦法避免。而IDL C++的典型代表COM,根本就不支持這種繼承,它支持的只是接口的復用。當然,這并不是要否定十幾年來C++語言在面向對象方面發展的成績。但是,如果你現在從頭開始規劃一個完整的項目,那么我認為如果選擇這種雜合風格,是不太明智的。但是這種風格也有兩個典型的使用場景:

1) 有一個完整的框架支持。比如MFC。雖然這種風格本身有很多技術難點,但是MFC這樣的框架已經幫你克服了一部分,給你營造了一個類似Smalltalk那樣的、相對舒適環境,這時候可以使用這種風格。但是通常要認識到,這類框架在克服不少技術難點的同時,引入了一些新的問題,有時是更加難以對付的問題,所以要明智,并且做好充分準備。

2) 符合經典模式。如果遇到某個典型的“面向對象”場景,已經有了成熟的、優秀的、現成的、文檔化了的設計解決方案,則可以有選擇的、謹慎地使用之。我指的主要就是GoF和其他一些設計模

這里所謂的“經典模式”數量絕對不會太多,但是卻大量地、反復地出現在設計中,并且往往復合出現。這樣的情況用已經經過驗證的設計方案來解決是非常合適我個人在這里有一些實踐,覺得應該注意幾個問題。***是要謹慎,我遇到過大量的情形,看上去很適合用某個模式來解決,但是真的用了才發現并不是這么回

在不適合的地方套用了錯誤的模式,會把事情弄得一團糟;二是***將設計方案局部化,包裝起來,從外面看不出你使用了什么模式。三是注意內存問題。使用OO風格的***障礙其實就是內存問題。

【編輯推薦】

  1. 簡介學習C++總結之談
  2. 對C++庫函數進行學習探索總結筆記
  3. C++類庫設計的基本構思與方法
  4. C++語言真的還有市場價值?
  5. C++類庫設計的基本構思與方法
責任編輯:chenqingxiang 來源: wewill.cn
相關推薦

2009-04-03 14:11:43

敏捷開發.NET

2022-12-29 07:58:06

谷歌ChatGPT人工智能

2020-01-15 06:00:52

物聯網IOT大數據

2015-01-05 11:18:18

SDN數據中心ONF

2012-08-14 09:21:32

虛擬化

2021-09-18 23:19:30

人工智能智慧城市技術

2013-07-04 15:22:46

華為WLAN接入

2013-12-18 12:45:59

2013-08-22 11:27:32

云服務云存儲

2009-10-19 10:50:20

內部云

2020-12-16 09:27:05

數據湖大數據數據

2021-02-01 14:11:35

數字貨幣貨幣ATM

2022-10-11 16:35:34

加密貨幣區塊鏈代幣

2018-07-06 05:03:13

2010-03-23 10:59:14

2019-01-09 09:13:40

2010-01-22 10:26:40

C++語言

2017-05-21 16:15:20

2011-02-16 18:43:04

2012-11-06 16:53:55

歐朋Opera瀏覽器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品三级 | 一区在线免费视频 | 日韩免费视频一区二区 | 一区二区三区欧美 | 久久久久国产一区二区三区不卡 | 手机看片169 | 欧美精品综合在线 | 国产一区二区中文字幕 | 国内久久 | xxxxx黄色片 欧美一区免费 | 一区二区三区免费网站 | 欧美乱码精品一区二区三区 | 亚洲精品一区中文字幕乱码 | 久久久久久亚洲精品 | 成人在线视频一区 | 99精品在线观看 | 亚洲一区网站 | 久久久精品一区 | 国产精品视频网 | 蜜桃av鲁一鲁一鲁一鲁 | 99国内精品久久久久久久 | 国产成人jvid在线播放 | 欧美一区免费 | 亚欧午夜| www国产成人免费观看视频,深夜成人网 | 国产在线观看一区二区三区 | 最新中文在线视频 | 午夜亚洲 | 亚洲欧美精品 | 成人小视频在线观看 | 九九热这里 | 亚洲国产一区在线 | 久久精品91久久久久久再现 | 日日夜夜免费精品视频 | 狠狠入ady亚洲精品经典电影 | 国产一级淫片a直接免费看 免费a网站 | 日韩一区精品 | 九九成人 | 91av亚洲 | 精品国产不卡一区二区三区 | 狠狠干综合视频 |