1程序設(shè)計(jì)方法的發(fā)展歷程
程序設(shè)計(jì)方法的發(fā)展歷程
——面向過程的結(jié)構(gòu)化程序設(shè)計(jì)方法
l
設(shè)計(jì)思路
–
自頂向下、逐步求精。采用模塊分解與功能抽象,自頂向下、分而治之。
l
程序結(jié)構(gòu):
–
按功能劃分為若干個(gè)基本模塊,形成一個(gè)樹狀結(jié)構(gòu)。
–
各模塊間的關(guān)系盡可能簡(jiǎn)單,功能上相對(duì)獨(dú)立;每一模塊內(nèi)部均是由順序、選擇和循環(huán)三種基本結(jié)構(gòu)組成。
–
其模塊化實(shí)現(xiàn)的具體方法是使用子程序。
l
優(yōu)點(diǎn):
有效地將一個(gè)較復(fù)雜的程序系統(tǒng)設(shè)計(jì)任務(wù)分解成許多易于控制和處理的子任務(wù),便于開發(fā)和維護(hù)。
l
缺點(diǎn):可重用性差、數(shù)據(jù)安全性差、難以開發(fā)大型軟件和圖形界面的應(yīng)用軟件
–
把數(shù)據(jù)和處理數(shù)據(jù)的過程分離為相互獨(dú)立的實(shí)體。
–
當(dāng)數(shù)據(jù)結(jié)構(gòu)改變時(shí),所有相關(guān)的處理過程都要進(jìn)行相應(yīng)的修改。
–
每一種相對(duì)于老問題的新方法都要帶來額外的開銷。
–
圖形用戶界面的應(yīng)用程序,很難用過程來描述和實(shí)現(xiàn),開發(fā)和維護(hù)也都很困難。
程序設(shè)計(jì)方法的發(fā)展歷程
——面向?qū)ο蟮姆椒?/p>
l
將數(shù)據(jù)及對(duì)數(shù)據(jù)的操作方法封裝在一起,作為一個(gè)相互依存、不可分離的整體——對(duì)象。
l
對(duì)同類型對(duì)象抽象出其共性,形成類。
l
類通過一個(gè)簡(jiǎn)單的外部接口,與外界發(fā)生關(guān)系。
l
對(duì)象與對(duì)象之間通過消息進(jìn)行通信。
l
優(yōu)點(diǎn):
–
程序模塊間的關(guān)系更為簡(jiǎn)單,程序模塊的獨(dú)立性、數(shù)據(jù)的安全性就有了良好的保障。
–
通過繼承與多態(tài)性,可以大大提高程序的可重用性,使得軟件的開發(fā)和維護(hù)都更為方便。
面向?qū)ο蟮幕靖拍?/p>
——對(duì)象
l
一般意義上的對(duì)象:
–
是現(xiàn)實(shí)世界中一個(gè)實(shí)際存在的事物。
–
可以是有形的(比如一輛汽車),也可以是無形的(比如一項(xiàng)計(jì)劃)。
–
是構(gòu)成世界的一個(gè)獨(dú)立單位,具有
l
靜態(tài)特征:可以用某種數(shù)據(jù)來描述
l
動(dòng)態(tài)特征:對(duì)象所表現(xiàn)的行為或具有的功能
l
面向?qū)ο蠓椒ㄖ械膶?duì)象:
l
是系統(tǒng)中用來描述客觀事物的一個(gè)實(shí)體,它是用來構(gòu)成系統(tǒng)的一個(gè)基本單位。對(duì)象由一組屬性和一組行為構(gòu)成。
l
屬性:用來描述對(duì)象靜態(tài)特征的數(shù)據(jù)項(xiàng)。
l
行為:用來描述對(duì)象動(dòng)態(tài)特征的操作序列。
l
面向?qū)ο蟮幕靖拍?/p>
——類
l
分類——人類通常的思維方法
l
分類所依據(jù)的原則——抽象
–
忽略事物的非本質(zhì)特征,只注意那些與當(dāng)前目標(biāo)有關(guān)的本質(zhì)特征,從而找出事物的共性,把具有共同性質(zhì)的事物劃分為一類,得出一個(gè)抽象的概念。
–
例如,石頭、樹木、汽車、房屋等都是人們?cè)陂L(zhǎng)期的生產(chǎn)和生活實(shí)踐中抽象出的概念。
l
面向?qū)ο蠓椒ㄖ械摹邦悺?/p>
–
具有相同屬性和服務(wù)的一組對(duì)象的集合–
為屬于該類的全部對(duì)象提供了抽象的描述,包括屬性和行為兩個(gè)主要部分。
–
類與對(duì)象的關(guān)系:
猶如模具與鑄件之間的關(guān)系,一個(gè)屬于某類的對(duì)象稱為該類的一個(gè)實(shí)例。
面向?qū)ο蟮幕靖拍?/p>
——封裝
l
把對(duì)象的屬性和服務(wù)結(jié)合成一個(gè)獨(dú)立的系統(tǒng)單元。
l
盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié)。對(duì)外形成一個(gè)邊界(或者說一道屏障),只保留有限的對(duì)外接口使之與外部發(fā)生聯(lián)系。
面向?qū)ο蟮幕靖拍?/p>
——封裝
l
把對(duì)象的屬性和服務(wù)結(jié)合成一個(gè)獨(dú)立的系統(tǒng)單元。
l
盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié)。對(duì)外形成一個(gè)邊界(或者說一道屏障),只保留有限的對(duì)外接口使之與外部發(fā)生聯(lián)系。
l
繼承對(duì)于軟件復(fù)用有著重要意義,是面向?qū)ο蠹夹g(shù)能夠提高軟件開發(fā)效率的重要原因之一。
l
定義:特殊類的對(duì)象擁有其一般類的全部屬性與服務(wù),稱作特殊類對(duì)一般類的繼承。
l
例如:將輪船作為一個(gè)一般類,客輪便是一個(gè)特殊類。
面向?qū)ο蟮幕靖拍?/p>
——多態(tài)性
l
多態(tài)是指在一般類中定義的屬性或行為,被特殊類繼承之后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為。這使得同一個(gè)屬性或行為在一般類及其各個(gè)特殊類中具有不同的語義。
面向?qū)ο蟮能浖こ?/p>
l
面向?qū)ο蟮能浖こ淌敲嫦驅(qū)ο蠓椒ㄔ谲浖こ填I(lǐng)域的全面應(yīng)用。它包括:
–
面向?qū)ο蟮姆治觯∣OA)
–
面向?qū)ο蟮脑O(shè)計(jì)(OOD)
–
面向?qū)ο蟮木幊蹋∣OP)
–
面向?qū)ο蟮臏y(cè)試(OOT)
–
面向?qū)ο蟮能浖S護(hù)(OOSM)
總結(jié):
面向過程程序設(shè)計(jì):數(shù)據(jù)結(jié)構(gòu)
+
算法
主要解決科學(xué)計(jì)算問題,用戶需求簡(jiǎn)單而固定
特點(diǎn):
分析解決問題所需要的步驟
利用函數(shù)實(shí)現(xiàn)各個(gè)步驟
依次調(diào)用函數(shù)解決問題
問題:
軟件可重用性差
軟件可維護(hù)性差
構(gòu)建的軟件無法滿足用戶需求
面向?qū)ο蟪绦蛟O(shè)計(jì):由現(xiàn)實(shí)世界建立軟件模型
將現(xiàn)實(shí)世界中的事物直接映射到程序中,可直接滿足用戶需求
特點(diǎn):
直接分析用戶需求中涉及的各個(gè)實(shí)體
在代碼中描述現(xiàn)實(shí)世界中的實(shí)體
在代碼中關(guān)聯(lián)各個(gè)實(shí)體協(xié)同工作解決問題
優(yōu)勢(shì):
構(gòu)建的軟件能夠適應(yīng)用戶需求的不斷變化
直接利用面向過程方法的優(yōu)勢(shì)而避開其劣勢(shì)
C語言和C++語言關(guān)系
C語言是在實(shí)踐的過程中逐步完善起來的沒有深思熟慮的設(shè)計(jì)過程
使用時(shí)存在很多“灰色地帶”
i++i++i++
殘留量過多低級(jí)語言的特征
直接利用指針進(jìn)行內(nèi)存操作
C語言的目標(biāo)是高效
最終程序執(zhí)行效率的高效
當(dāng)面向過程方法論暴露越來越多的缺陷的時(shí)候,業(yè)界開始考慮在工程項(xiàng)目中引入面向?qū)ο蟮脑O(shè)計(jì)方法,而第一個(gè)需要解決的問題就是:高效的面向?qū)ο笳Z言,并且能夠兼容已經(jīng)存在的代碼。
C語言
+
面向?qū)ο蠓椒ㄕ?==》Objective
C
/C++
C語言和C++并不是對(duì)立的競(jìng)爭(zhēng)關(guān)系
C++是C語言的加強(qiáng),是一種更好的C語言
C++是以C語言為基礎(chǔ)的,并且完全兼容C語言的特性
學(xué)習(xí)C++并不會(huì)影響原有的C語言知識(shí),相反會(huì)根據(jù)加深對(duì)C的認(rèn)知;
學(xué)習(xí)C++可以接觸到更多的軟件設(shè)計(jì)方法,并帶來更多的機(jī)會(huì)。
1)
C++是一種更強(qiáng)大的C,通過學(xué)習(xí)C++能夠掌握更多的軟件設(shè)計(jì)方法
2)
C++是Java/C#/D等現(xiàn)代開發(fā)語言的基礎(chǔ),學(xué)習(xí)C++后能夠快速掌握這些語言
3)C++是各大知名軟件企業(yè)挑選人才的標(biāo)準(zhǔn)之一
送給在路上的程序員
對(duì)于一個(gè)開發(fā)團(tuán)隊(duì)而言,在短期內(nèi)開發(fā)出用戶滿意的軟件系統(tǒng)是其核心競(jìng)爭(zhēng)力的體現(xiàn)
對(duì)于一個(gè)開發(fā)者而言,能夠勝任系統(tǒng)中任意一個(gè)模塊的開發(fā)是其核心價(jià)值的體現(xiàn)
對(duì)于一個(gè)架構(gòu)師而言,掌握各種語言的優(yōu)勢(shì)并合理運(yùn)用到系統(tǒng)中,由此簡(jiǎn)化系統(tǒng)的開發(fā),是其架構(gòu)生涯的第一步
每一個(gè)程序員都不能固步自封,要多接觸新的行業(yè)、新的技術(shù)領(lǐng)域。暫新的突破自
3C++對(duì)C的加強(qiáng)