為了達到對oop最準確最深入的理解,我把散落各處邊邊角角的有關oop的描述都梳理總結在此,希望連點成線,逐個擊破,形成成熟的oop思維。
c++ 集合了物件導向程式設計,泛型程式設計和過程化程式設計三種程式設計正規化於一體。(所有說c++難都是因為要學的東西太多,實際上學會了就會異常靈活)
c++的二重性:oop提供高階抽象;c語言提供低階硬體訪問
繼承:oop中最強大特性之一。派生類,基類。派生類可以繼承基類的特性,還能重用基類的**。
類就是oop的代表,所以類是oop的核心,抓緊類,就抓緊了oop。
用c佳佳就是為了用他的oop特性!可見oop才更重要,語言本身沒有oop特性重要,語言只是實現oop程式設計方式的工具,多種語言都可以實現oop程式設計方式,在這一點上,c佳佳並不特殊。
計算機的發展歷程中,是硬體帶動了軟體的發展。先有了計算機,主要是大型機和工作站,然後促使人們程式設計控硬體做事情,於是從機器語言到組合語言,到c和pascal在上世紀七十年代引領人們進入結構化程式設計的有秩序有規程的時代。你可以清晰的看到語言的進步和變化。上個世紀的八十年代,c一統天下,在程式語言中佔據著統治地位。但也正是同時,用c的人多了,發現問題的人也就多了,於是人們解決痛點,在大型程式的開發上,發明了一種新的程式設計模式,oop。當時只有c佳佳和smalltalk兩個語言可以做到oop。
其實計算機語言就處理倆概念,那麼多**,實際上抽象概括起來,就是資料和方法/演算法。
過程性語言就強調演算法方面,就是你先確定計算機,她應該做啥,然後你就寫程式讓她做這些事情,就結了。即根據要做什麼!來寫程式。資料倒是次要的,要用就用唄,沒有提前去規劃考慮資料本身。後來在過程化程式設計的基礎上又改進了一些,變成了結構化程式設計,大大提高了程式的清晰度,可靠性和可維護性,即把乙個大任務分成很多子任務,自頂而下的,用多個子程式或者函式來分別實現一部分功能。但是結構化程式設計還是根據要執行什麼操作來構思乙個程式,還是強調演算法。
oop是一次很大的改變,革新,它完全從另乙個角度出發,計算機科學家們可真聰明!它強調資料,他的核心理念就是,設計與問題本質特點相對應的乙個資料形式!!!類,就是這種新的資料格式,而物件,就是根據類這個規範而構造出來的資料結構!!
比如乙個繪圖程式,就要設計很多個類,乙個類被定義用於表示圓,乙個類表示矩形,乙個類表示直線等等等等,然後基於這些類,我們來開發乙個使用這些類的程式。所以oop它是自下而上的程式設計,先寫低階組織(類),再寫高階組織(程式)。
oop不把重心放在任務上,而是放在表示概念上。它引入了很多新概念,比如多型,繼承,資訊隱藏,,,使得oop不僅僅只是把資料和方法合併為類的定義,還有很多其他的好處,比如**重用,保護資料,為函式和運算子建立多個定義,使用舊類派生新類。
oop的目標就是去抽象通用概念,把他們可能需要的方法抽象出來,然後盡量**重用。在這一點上,泛型程式設計也一樣,它也是為了使得**重用和抽象通用概念更簡單。
oop的本質是設計並擴充套件自己的資料型別。c++內建的型別是建立自己的型別的基本元件。
oop強調程式如何表示資料。
oop程式設計第一步就是根據程式和類的介面來描述資料,指定如何使用資料。
然後設計乙個類實現出這個介面。私有資料成員儲存資訊,公有成員函式提供訪問資料的唯一途徑。所以私有部分實現了資料隱藏。只要知道公有介面就可以使用類。
要把介面和細節分開,一般是把有介面的類宣告放在標頭檔案。有成員函式實現的源**放在方法檔案。
每個物件都儲存自己的資料,但共享類方法。
如果方法需要顯式地引用呼叫它的物件,就要用this指標。this指標指向呼叫物件的位址,所以*this是呼叫物件的別名。
oop另乙個目標:隱藏內部機理,強調實質。比如過載運算子就做到了這一點,**更簡單自然貼近人類思維。
深挖你的工作
台灣鴻海總裁郭台銘給員工的一封郵件 各位同仁 我們可以自我檢視一下自己的工作態度!如果 1 你只是接 告訴客戶不知道 沒辦法。2 你只是開訂單,不連絡 不追蹤,有問題不回報 不處理。3 你只是打報表,不確定數字正確性。4 你只是接 從未希望客戶有滿意的感覺 從未希望客戶多訂一些貨。5 你只是認為自己...
基礎理論深挖版
測試基本理論深挖版一.了解軟體開發過程模型 瀑布模型 重點記憶 wate ll model 分為定義階段 可行性研究與計畫,需求分析 開發階段 設計,編碼,測試 維護階段 執行維護 瀑布模型定義 是將軟體生存週期的各項活動規定為固定順序而連線的諾幹階段工作,形如瀑布流水,最終得到的軟體產品.瀑布模型...
oop程式設計
1.重用 2.封裝 1.重用 2.內部資料安全 3.只能通過預留的介面 api 進行訪問 var f function var a new f console.log a.name console.log a.age console.log a.hover 靜態方法只能被類來訪問 靜態屬性只能被類來...