面向對象的軟件開發流程


一 面向對象的軟件開發

很多人在學完了python的class機制之后,遇到一個生產中的問題,還是會懵逼,這其實太正常了,因為任何程序的開發都是先設計后編程,python的class機制只不過是一種編程方式,如果你硬要拿着class去和你的問題死磕,變得更加懵逼都是分分鍾的事,在以前,軟件的開發相對簡單,從任務的分析到編寫程序,再到程序的調試,可以由一個人或一個小組去完成。但是隨着軟件規模的迅速增大,軟件任意面臨的問題十分復雜,需要考慮的因素太多,在一個軟件中所產生的錯誤和隱藏的錯誤、未知的錯誤可能達到驚人的程度,這也不是在設計階段就完全解決的。

    所以軟件的開發其實一整套規范,我們所學的只是其中的一小部分,一個完整的開發過程,需要明確每個階段的任務,在保證一個階段正確的前提下再進行下一個階段的工作,稱之為軟件工程。

  面向對象的軟件工程包括下面幾個部:

 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個階段進行,往往由程序設計者按照面向對象的方法進行程序設計,包括類的設計和程序的設計

 

應用實例:

面向對象的程序設計OOD

  先找對象---------->找類(歸納對象共同的特征與技能,還有每個對象獨有的特征)

面向對象編程OOP

  先定義類---------->實例化出對象

 

#OOD:定義學生類
特征:共同國籍'China'
技能:查看成績
獨有的特征:ID、名字,性別,省

 

#OOP:

class Student:
	country='China'
	def __init__(self,ID,NAME,SEX,PROVINCE):
		self.id=ID 
		self.name=NAME
		self.sex=SEX
		self.province=PROVINCE
	def search_score(self):
		print('tell score')
	def study(self):
		print('study')	
		
s1=Student('111','luchuan','male','handan')
s2=Student('110','lulu','male','hezhou')

 二、小白容易犯的錯誤

1.面向對象的程序設計看起來高大上,所以我在編程時就應該保證通篇class,這樣寫出的程序一定是好的程序(面向對象只適合那些可擴展性要求比較高的場景)
2.很多人喜歡說面向對象三大特性(這是從哪傳出來的,封裝,多態,繼承?漏洞太多太多,好吧暫且稱為三大特性),那么我在基於面向對象編程時,我一定要讓我定義的類中完整的包含這三種特性,這樣寫肯定是好的程序
好家伙,我說降龍十八掌有十八掌,那么你每次跟人干仗都要從第一掌打到第18掌這才顯得你會了是么,我來一萬個人你需要打10000*18掌對么,傻叉
3.類有類屬性,實例有實例屬性,所以我們在定義class時一定要定義出那么幾個類屬性,想不到怎么辦,那就使勁的想,定義的越多越牛逼
這就犯了一個嚴重的錯誤,程序越早面向對象,死的越早,為啥面向對象,因為我們要將數據與功能結合到一起,程序整體的結構都沒有出來,或者說需要考慮的問題你都沒有搞清楚個八九不離十,你就開始面向對象了,這就導致了,你在那里干想,自以為想通了,定義了一堆屬性,結果后來又都用不到,或者想不通到底應該定義啥,那就一直想吧,想着想着就瘋了。
你見過哪家公司要開發一個軟件,上來就開始寫,肯定是頻繁的開會討論計划,請看第八節
4.既然這么麻煩,那么我徹底解脫了,我們不要用面向對象編程了,你啊,你有大才,你能成事啊,傻叉。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM