標籤:程式 ndt 研究 也會 mit 通用 關係 基礎 analysis
一、物件導向軟體開發的過程
物件導向的軟體工程包括下面幾個部:
1.物件導向分析(object oriented analysis ,OOA)
軟體工程中的系統分析階段,要求分析員和使用者結合在一起,對使用者的需求做出精確的分析和明確的表述,從大的方面解析軟體系統應該做什麼,而不是怎麼去做。物件導向的分析要按照物件導向的概念和方法,在對任務的分析中,從客觀存在的事物和事物之間的關係,貴南出有關的對象(對象的‘特徵’和‘技能’)以及對象之間的聯絡,並將具有相同屬性和行為的對象用一個類class來標識。
建立一個能反映這是工作情況的需求模型,此時的模型是粗略的。
2 物件導向設計(object oriented design,OOD)
根據物件導向分析階段形成的需求模型,對每一部分分別進行具體的設計。
首先是類的設計,類的設計可能包含多個層次(利用繼承與派生機制)。然後以這些類為基礎提出程式設計的思路和方法,包括對演算法的設計。
在設計階段並不牽涉任何一門具體的電腦語言,而是用一種更通用的描述工具(如虛擬碼或流程圖)來描述。
3 物件導向編程(object oriented programming,OOP)
根據物件導向設計的結果,選擇一種電腦語言把它寫成程式,可以是python。
4 物件導向測試(object oriented test,OOT)
在寫好程式後交給使用者使用前,必須對程式進行嚴格的測試,測試的目的是發現程式中的錯誤並修正它。
面向對的測試是用物件導向的方法進行測試,以類作為測試的基本單元。
5 物件導向維護(object oriendted soft maintenance,OOSM)
正如對任何產品都需要進行售後服務和維護一樣,軟體在使用時也會出現一些問題,或者軟體商想改進軟體的效能,這就需要修改程式。
由於使用了物件導向的方法開發程式,使用程式的維護比較容易。
因為對象的封裝性,修改一個對象對其他的對象影響很小,利用物件導向的方法維護程式,大大提高了軟體維護的效率,可擴充性高。
在物件導向方法中,最早發展的肯定是物件導向編程(OOP),那時OOA和OOD都還沒有發展起來,因此程式設計者為了寫出物件導向的程式,還必須深入到分析和設計領域,尤其是設計領域,那時的OOP實際上包含了現在的OOD和OOP兩個階段,這對程式設計者要求比較高,許多人感到很難掌握。
現在設計一個大的軟體,是嚴格按照物件導向軟體工程的5個階段進行的,這個5個階段的工作不是由一個人從頭到尾完成的,而是由不同的人分別完成,這樣OOP階段的任務就比較簡單了。程式編寫者只需要根據OOd提出的思路,用物件導向語言編寫出程式既可。
在一個大型軟體開發過程中,OOP只是很小的一個部分。
對於全棧開發的你來說,這五個階段都有了,對於簡單的問題,不必嚴格按照這個5個階段進行,往往由程式設計者按照物件導向的方法進行程式設計,包括類的設計和程式的設計。
二、反射1、什麼是反射
反射的概念是由Smith在1982年首次提出的,主要是指程式可以訪問、檢測和修改它本身狀態或行為的一種能力(自省)。這一概念的提出很快引發了電腦科學領域關於應用反射性的研究。它首先被程式語言的設計領域所採用,並在Lisp和物件導向方面取得了成績。
2、python物件導向中的反射
Python物件導向中的反射:通過字串的形式操作對象相關的屬性。python中的一切事物都是對象(都可以使用反射)。
四個可以實現自省的函數
下列方法適用於類和對象(一切皆對象,類本身也是一個對象)
class Teacher: school = ‘oldboy‘ def __init__(self,name,age): self.name = name self.age = age def teach(self): print(‘%s i teaching‘%self.name)‘‘‘定義一個老師的類有3個資料屬性,1個函數屬性‘‘‘
hasattr(object,name) 判斷object中有沒有一個name字串對應的方法或屬性。
print(hasattr(Teacher,‘school‘)) #判斷Teacher中是否有schoolprint(hasattr(Teacher,‘teach‘)) #判斷Teacher中是否有teach‘‘‘TrueTrue‘‘‘
getattr(object, name, default=None) 從object中取一個name字串對應的方法或屬性,沒有返回default
print(getattr(Teacher,‘school‘,-1))print(getattr(Teacher,‘teach‘,-1))print(getattr(Teacher,‘student‘,-1))‘‘‘oldboy<function Teacher.teach at 0x000000000280BB70>-1‘‘‘
setattr(x, y, v) 將對象x中的字串為y的屬性設定為v setattr(x, ‘y‘, v) is equivalent to “x.y=v”‘
print(getattr(Teacher,‘school‘,-1))setattr(Teacher,‘school‘,123)print(Teacher.school)‘‘‘oldboy123‘‘‘
delattr(x, y) 將對象x中的字串為y的屬性刪除 delattr(x, ‘y‘) is equivalent to “del x.y”
print(getattr(Teacher,‘school‘,-1))delattr(Teacher,‘school‘)print(hasattr(Teacher,‘school‘))‘‘‘oldboyFalse‘‘‘
python之物件導向(軟體開發過程、反射)