python之物件導向(軟體開發過程、反射)

來源:互聯網
上載者:User

標籤:程式   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之物件導向(軟體開發過程、反射)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.