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

C++設(shè)計(jì)目標(biāo)及原則

開發(fā) 后端
C++的設(shè)計(jì)目標(biāo),就是要讓C++既具有適合于系統(tǒng)程序設(shè)計(jì)的C語(yǔ)言所具有的可適應(yīng)性和高效性,又能在其程序組織結(jié)構(gòu)方面具有像Simula那樣的語(yǔ)言設(shè)施。本文主要介紹C++的設(shè)計(jì)目標(biāo)及原則。

以下就對(duì)C++設(shè)計(jì)目標(biāo)及原則進(jìn)行詳細(xì)描述。

一. C++的設(shè)計(jì)目標(biāo)(C++ Design Aims)

C++的設(shè)計(jì)目標(biāo),就是要讓C++既具有適合于系統(tǒng)程序設(shè)計(jì)的C語(yǔ)言所具有的可適應(yīng)性和高效性,又能在其程序組織結(jié)構(gòu)方面具有像Simula那樣的語(yǔ)言設(shè)施(Simula所支持的這種程序組織結(jié)構(gòu)通常被稱為面向?qū)ο蟪绦蛟O(shè)計(jì)風(fēng)格)。在設(shè)計(jì)的時(shí)候,還做了很大的努力,使得引借自Simula的高層次的程序設(shè)計(jì)技術(shù)能夠應(yīng)用于系統(tǒng)程序設(shè)計(jì)之中。這即是說(shuō),C++所提供的抽象機(jī)制能夠被應(yīng)用于那些對(duì)效率和可適應(yīng)性具有極高要求的程序設(shè)計(jì)任務(wù)之中。

上述的C++之設(shè)計(jì)目標(biāo)可以小結(jié)如下:

對(duì)于要解決實(shí)際問題的程序員而言,C++使程序設(shè)計(jì)變得更有樂趣;C++是一門通用目的的程序設(shè)計(jì)語(yǔ)言,它:

是一個(gè)更好的C;

支持?jǐn)?shù)據(jù)抽象;

支持面向?qū)ο蟪绦蛟O(shè)計(jì);

支持范型程序設(shè)計(jì)。

對(duì)范型程序設(shè)計(jì)的支持在C++設(shè)計(jì)的后期才被作為一個(gè)明確、獨(dú)立的目標(biāo)來(lái)實(shí)現(xiàn)。而在C++演化過(guò)程的大部分時(shí)間里,我一直把范型程序設(shè)計(jì)以及支持它的語(yǔ)言特性劃歸在“數(shù)據(jù)抽象”的大標(biāo)題之下。

二. C++的設(shè)計(jì)原則(Design Principles)

在[Stroustrup,1994]中,C++的設(shè)計(jì)規(guī)則被分為基本規(guī)則、基于設(shè)計(jì)的規(guī)則、語(yǔ)言的技術(shù)性規(guī)則以及基于低層次程序設(shè)計(jì)的規(guī)則四個(gè)方面,分列在下文中。

1. 基本規(guī)則(General rules)

A、C++的每一步演化和發(fā)展必須是由于實(shí)際問題所引起的;

B、C++是一門語(yǔ)言,而不是一個(gè)完整的系統(tǒng);

C、不能無(wú)休止的一味追求***;

D、C++在其存在的“當(dāng)時(shí)”那個(gè)時(shí)期必須是有用處的;

E、每一種語(yǔ)言特性必須有一個(gè)有根據(jù)的、明確的實(shí)現(xiàn)方案;

F、總能提供一種變通的方法;

G、能為意欲支持的每一種程序設(shè)計(jì)風(fēng)格提供易于理解的支持方法;

H、不強(qiáng)制于人。

可以注意到,基本規(guī)則的***三條暗示了兩點(diǎn):對(duì)適用于真實(shí)世界中各種應(yīng)用的便捷工具的強(qiáng)調(diào);對(duì)程序員的技術(shù)和取向(偏好)的充分考慮。從一開始,C++面向的就是那些要做實(shí)際項(xiàng)目的程序員。所謂的“***”被認(rèn)為是不可能達(dá)到的,這是由于C++用戶在需求、背景和待解決問題上存在著太大的不同。況且,在一門通用目的的程序設(shè)計(jì)語(yǔ)言的整個(gè)生存期之內(nèi),連對(duì)“***”一詞的詮釋都可能會(huì)有極大的改變。由此可知,在語(yǔ)言的演化過(guò)程中,來(lái)自用戶的反饋和語(yǔ)言實(shí)現(xiàn)者們積累的經(jīng)驗(yàn)才是最為重要的。

2. 基于設(shè)計(jì)的規(guī)則(Design-support rules)

A、支持良好的設(shè)計(jì)方案;

B、提供用于程序組織的語(yǔ)言設(shè)施;

C、心口如一(Say what you mean);

D、所有的語(yǔ)言特性必須具有切實(shí)有效的承受能力;

E、開啟一個(gè)有用的特性比避免所有的誤用更為重要;

F、能將獨(dú)立開發(fā)的部件組合成完整的軟件。

C++的一個(gè)目標(biāo)就是提供更易用并具有一定承受能力的設(shè)計(jì)思想和程序設(shè)計(jì)技術(shù),進(jìn)一步提高程序的質(zhì)量。這些技術(shù)中的絕大部分都源自Simula ,并通常被作為面向?qū)ο蟪绦蛟O(shè)計(jì)和面向?qū)ο笤O(shè)計(jì)思想來(lái)討論。然而,C++的設(shè)計(jì)目標(biāo)總還是在于要支持一定范圍內(nèi)的各種程序設(shè)計(jì)風(fēng)格和設(shè)計(jì)思想。這與一般在語(yǔ)言設(shè)計(jì)方面的觀點(diǎn)形成一定對(duì)比。一般在語(yǔ)言設(shè)計(jì)上總是試圖將所有系統(tǒng)內(nèi)建于單獨(dú)一個(gè)被重點(diǎn)支持的、帶有強(qiáng)制性的程序設(shè)計(jì)風(fēng)格之中(或稱典范paradigm)。

3. 語(yǔ)言的技術(shù)性規(guī)則(Language-technical rules)

A、與靜態(tài)型別系統(tǒng)(Static type system)沒有內(nèi)在的沖突;

B、像對(duì)內(nèi)建(built-in)型別一樣對(duì)用戶自定義型別提供很好的支持;

C、個(gè)異化(locality)行為是可取的;

D、避免產(chǎn)生順序上的依賴關(guān)系;

E、在對(duì)語(yǔ)言產(chǎn)生疑惑時(shí),可以選取其特性中最易掌握的部分;

F、可以因?yàn)椴徽?dāng)?shù)恼Z(yǔ)法使用而產(chǎn)生問題(Syntax matters (often in perverse ways))

G、削弱對(duì)預(yù)處理器的使用。

當(dāng)然,這些規(guī)則要具體結(jié)合更多關(guān)于基本目標(biāo)的上下文環(huán)境來(lái)考慮。應(yīng)該注意到的是,在“與C有較高的兼容性”、“不損失效率”以及“具有便捷的可用性來(lái)解決實(shí)際問題”這三個(gè)方面的要求,與在“完整的型別安全性”、“完全的通用性”以及“完善的抽象之美”這三個(gè)方面的要求形成對(duì)立。

C++從Simula中借鑒了用戶自定義型別和類層次機(jī)制。然而,在Simula及許多類似的語(yǔ)言中,其對(duì)用戶自定義型別的支持與其對(duì)內(nèi)建型別的支持存在著根本上的不同。

例如,Simula中不允許在棧中為用戶自定義型別的對(duì)象分配空間,并且只允許通過(guò)指針(這在Simula中稱為引用——reference)來(lái)對(duì)這些對(duì)象進(jìn)行訪問。而相反的,內(nèi)建型別的對(duì)象只在棧中被分配空間,不能在動(dòng)態(tài)存儲(chǔ)區(qū)中分配,而且不能使用指針指向它。

這種在對(duì)待內(nèi)建型別與對(duì)待用戶自定義型別上的差異,暗示著對(duì)效率問題的嚴(yán)格考慮。比如,當(dāng)作為一個(gè)在動(dòng)態(tài)存儲(chǔ)區(qū)中被分配的對(duì)象之引用時(shí),如果該對(duì)象屬于自定義型別(比如complex),那么就會(huì)為運(yùn)行期及空間帶來(lái)負(fù)荷;而這些負(fù)荷在有些應(yīng)用中被認(rèn)為是不可接受的。這些正是C++意欲涉足解決的問題。同時(shí),在用法上的不同也決定了:不可能在范型程序設(shè)計(jì)中統(tǒng)一對(duì)待那些語(yǔ)義上近似的型別。

在維護(hù)一個(gè)較龐大的程序時(shí),一個(gè)程序員不可避免的會(huì)基于某些不完整的知識(shí)來(lái)對(duì)程序作一些修改,只關(guān)注全部程序代碼中的一小部分?;诖?,C++提供了class、namespace和訪問控制,使設(shè)計(jì)決策的各異化(locality)成為可能。

在基于一趟編譯(one-pass compilation)的語(yǔ)言中,某些順序上的依賴性是不可避免的。例如在C++中,一個(gè)變量或者函數(shù)在其被聲明之前是無(wú)法使用的。然而,C++中類成員的名字規(guī)則和重載解析(overload resolution)的規(guī)則還是在獨(dú)立于聲明順序的原則下被制定出來(lái),以便將發(fā)生混亂和錯(cuò)誤的可能性降至***。

4. 基于低層次程序設(shè)計(jì)的規(guī)則(Low-level programming support rules)

A、使用傳統(tǒng)的(笨拙的)連接器(linker);

B、與C語(yǔ)言不存在無(wú)故的不兼容性;

C、不給C++之下層級(jí)的更低層語(yǔ)言留出余地(匯編語(yǔ)言除外);

D、你不會(huì)為你所不使用的部分付出代價(jià)(零負(fù)荷規(guī)則);

E、在產(chǎn)生疑惑時(shí),能提供完全自主控制的途徑。

在C++的設(shè)計(jì)中只要在不嚴(yán)重影響其對(duì)強(qiáng)型別檢查(strong type checking)的支持的地方,都盡量做到與C的“source-link”方式相兼容。C++與C的兼容性使得C++程序員立刻就能有一個(gè)完整的語(yǔ)言和工具集可用。還有兩點(diǎn)也很重要,一是有大量關(guān)于C的高質(zhì)量的教學(xué)素材已經(jīng)存在,二是C++程序員可以利用C++與C的兼容性而直接并有效的使用大量現(xiàn)成的程序庫(kù)。

在決定將C作為C++的基礎(chǔ)的時(shí)候,C還沒有像后來(lái)那樣出類拔萃、炙手可熱,所以在考慮這個(gè)問題的時(shí)候,與C語(yǔ)言所提供的可適應(yīng)性和高效性相比,C語(yǔ)言的流行程度只是個(gè)次要的考慮因素。

然而,與C的兼容性也使得C++在某些語(yǔ)法和語(yǔ)義上保留了C的一些瑕疵之處。比如,C語(yǔ)言的聲明語(yǔ)法就實(shí)在遠(yuǎn)不及優(yōu)美;而其內(nèi)建型別的隱式轉(zhuǎn)換規(guī)則也是混亂無(wú)章法的。還有另一個(gè)大問題,就是許多從C轉(zhuǎn)向C++的程序員并沒有認(rèn)識(shí)到,代碼質(zhì)量上的顯著提高只能通過(guò)在程序設(shè)計(jì)風(fēng)格上的顯著改變來(lái)達(dá)到。

【編輯推薦】

  1. C/C++是程序員必須掌握的語(yǔ)言嗎?
  2. 淺談怎樣加快C++代碼的編譯速度
  3. 如何學(xué)好C++,用好類庫(kù)很重要
  4. C/C++中動(dòng)態(tài)鏈接庫(kù)的創(chuàng)建和調(diào)用
  5. VC++獲得當(dāng)前系統(tǒng)時(shí)間的幾種方案
責(zé)任編輯:于鐵 來(lái)源: 51Testing軟件測(cè)試網(wǎng)采編
相關(guān)推薦

2011-04-11 09:23:27

設(shè)計(jì)目標(biāo)原則C++

2010-01-11 17:34:37

C++語(yǔ)言

2010-01-26 13:36:27

C++設(shè)計(jì)

2010-01-21 16:45:02

C++設(shè)計(jì)目標(biāo)

2010-01-28 10:01:28

C++的設(shè)計(jì)原則

2010-01-22 10:36:25

C++語(yǔ)言

2021-09-13 10:30:42

C++代碼設(shè)計(jì)模式

2009-03-20 10:02:00

IP電話方案設(shè)計(jì)

2025-02-18 08:00:00

C++YOLO目標(biāo)檢測(cè)

2010-01-25 10:54:18

C++設(shè)計(jì)

2010-01-11 14:05:01

C++學(xué)習(xí)方法

2023-12-06 13:48:00

C++代碼

2010-01-18 11:05:24

C++

2010-01-25 13:19:44

C++詞法分析

2010-01-15 19:34:25

C++設(shè)計(jì)

2010-01-28 09:54:27

C++程序設(shè)計(jì)

2023-09-13 14:42:08

typedefC++

2010-02-01 16:22:56

C++枚舉類型

2011-07-10 15:36:54

C++

2024-03-04 10:53:08

RAIIC++開發(fā)
點(diǎn)贊
收藏

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