C 及其標準庫概覽 第二,三章

2021-05-09 22:20:56 字數 2185 閱讀 3193

題外話:自從寫完第一篇總結之後,自己就擱置很久沒寫這個學習筆記了。並不是說自己很懶或者沒毅力,而是越到後面越覺得,c++真的是不簡單啊!自己想在認真看完一遍,做到心中有一些概念之後再回頭來好好研究細節,這樣才能使自己的總結真正有內容,或者說有意義。

在第一章中,作者主要是籠統的告訴我們c++是什麼,該怎麼學,至於具體到怎麼用,用到哪些方面更適合更強大則是放在了這兩章講述。設計c++就是為了支援資料抽象,物件導向的程式設計和通用型程式設計,以及在這些風格約束之下的傳統的c程式設計技術。它從未有意要給其使用者強加某種特殊的程式設計風格。

開始的過程式程式設計,其設計范型是:確定你需要那些過程,採用你能找到的最好的演算法。從程式組織的觀點看,函式被人們用於在許多演算法的迷宮裡建立起一種秩序。而隨著程式規模的迅速增大,設計程式的著重點則慢慢的從有關過程的設計轉移到對資料的組織上。以及相關的過程與被它們所操作的資料組織在一起,通常稱作乙個模組。而這種模組程式設計的范型是:確定你需要哪些模組,將程式分為一些模組,使資料隱藏於模組之中。(這一范型也被作為資料隱藏原理而廣為人知!)可以說,模組化是一切成功的大型程式的乙個最基本特徵。

然而,很多時候,模組化的形式對於清晰地表達複雜的系統而言還是不夠的。在定義使用者自主建立的型別時尤為如此。綜合一下,主要存在以下兩個問題:1.這種定義型別的模組給使用者提供了乙個「假型別」的表示,它可以因為表示型別不同而出現很大的變化----而與從同時,又應該將使用者隔離於這一表示之外。2.更根本的問題是,通過模組實現的這種使用者定義型別,它們所提供的對型別的訪問,在行為上,並不像內部的型別。它們得到的支援也與內部型別不一樣,而且實際上更少一些。

c++解決這個問題的方式就是允許使用者直接定義型別,這種型別的行為方式(幾乎)與內部型別完全一樣。這樣的型別常常被稱作抽象資料型別,更普遍的術語便是使用者定義型別。而這時程式設計規範變成了:確定你需要哪些型別,為每個型別提供完整的一組操作。

但是,必須提醒的一點就是,這種具體型別的出現(更一般的說法是,類概念的出現與支援),並不等於oop的發展,相反,它還存在自身的很大不足,那就是:一旦這種「黑匣子」定義好之後,它也就無法再與程式的其他部分進行實際地互動了,也就是說,沒有任何方式可以為了某些新用途而調整它,除非去修改它的定義。這個問題的關鍵就是類的層次結構造成程式的冗餘與難以維護,當乙個新情況出現並且必須加以考慮時,只能硬性的去該原型別定義,而這卻可能帶來很多潛在的致命的問題。而要解決這個問題,就必須很好的定義這種類結構。也就是區分出類的共有特徵與特殊特徵,從而能在高層類結構不變的情況下,花費最小的代價處理新情況。而表達這種區分並由此獲益就定義了物件導向的程式設計。

事實上,在型別之間,能夠通過使用繼承和虛函式挖掘出的共性的數量,可以看做是物件導向程式設計對於某個問題的適用性的乙個石蕊檢驗。而現在的程式設計范型是:確定你需要哪些類,為每個類提供完整的一組操作,利用繼承去明確地表達共性。

當然,說了這麼多,最可能的情況是,讓人覺得新的設計范型總是比舊的好,其實這是不正確的。很多時候,一種新的范型的出現勢必是因為程式設計現狀的要求,對於使用者的服務需要更高的更新的滿足。但這並不說明對於那些舊的程式和一些特殊的新問題就都應該使用新的設計范型重新書寫。(事實上,每一種安全性與便捷性的提高貌似都付出了一定的代價!)例如,在那些不存在於資料相關的過程組之處,採用過程式設計也就足夠了。而另一方面,這些新舊設計范型並不是對立的,他們有乙個共同目的,那就是為程式設計師提供更好的設計實現之路。繼續上面的話題就是,設計「好過程」的技術其實也可以應用到模組中的各個過程。

根據bjarne stroustrup的觀點,在那些對於每個型別都只需要乙個物件的地方,採用模組方式實現資料隱藏風格的程式設計也就足夠了。而在不存在共性的地方,簡單的資料抽象就足夠了,並需要去牽扯物件導向的東西。總之,列在這裡的所有范型都是相互補充的,常常是相互支援的。類和函式都包含著函式,而模組又包含著類和函式。有經驗的程式設計師會根據需要去選擇使用各種不同的范型。

最後要說的就是通用型程式設計了。它的設計范型是:確定你需要哪些演算法,將它們引數化,是他們能夠對各種各樣適當的型別和資料結構工作。可以說,這是一種更高層次的資料抽象。(ps:模板是一種編譯時的機制,因此,與「手工編寫的**」相比,他們的使用並不引起任何額外的執行時開銷。)而stl中的容器與相關演算法也正是根據這種思想設計而來的。

語言特徵的存在是為了支援各種各樣的程式設計風格核技術,因此,學習一門語言的工作應該是集中於去把握對該語言而言固有的和自然的風格---而不是去理解該語言的所有語言特徵的細枝末節。在實踐性的程式設計中,理解語言中最晦澀難懂的的語言特徵,或者使用最大量的不同特徵並不能獲得什麼利益。把一種特徵孤立起來看並沒有什麼意思,只是在有技術和其他特徵所形成的環境裡,這一特徵才獲得了意義和解釋。

tcp ip協議第二 三章

第一章講解的是tcp ip的概述,涵蓋了網路的各個方面 第二章講解物理鏈路層 乙太網和ieee802 封裝 拆分 slip序列線網路 鏈路層主要功能就是 1 傳送接收ip資料報 2 傳送arp和接收arp模組應答 3 傳送rarp和接收rarp模組應答 環迴介面本機通訊仍然完成的是整個網路分層的步驟...

Oracle第二 三章 限制資料查詢

第三章 限制資料查詢 練習1 1.查詢職位為salesman的員工編號 職位 入職日期。select empno,job,hiredate from emp where job salesman 2.查詢1985年12月31日之前入職的員工姓名及入職日期。筆記 在填寫日期的時候,需要格式 日 某月 ...

第二三章思考題 地信1902趙佳樂

1.簡述軟體過程 軟體生存週期 軟體過程模型 軟體生存週期模型 三者之間的概念區別。軟體過程 軟體生存週期過程 軟體生存週期中的一系列相關過程所涉及的活動。過程是活動的集合。活動是任務的集合。任務是將輸入轉換為輸出的操作 軟體生存週期 軟體也有乙個從生到死的過程,這個過程一般稱之為軟體的軟體生存週期...