當我們來到生產環境中的時候,對乙個軟體需要開發的時候,剛開始也可能會懵逼,撾耳撓腮。不知從何下手,其
實,大家也不要苦惱,這是大多數程式設計師都會遇到的問題。那麼,我們就要想一想了,既然大家都會這樣,到低怎麼樣
才能解決這個問題呢?好了,下面我們就來一起學學。
軟體工程中的系統分析階段,要求分析員和使用者結合在一起,對使用者的需求做出精確的分析和明確的表述,從大的
方面解析軟體系統應該做什麼,而不是怎麼去做。物件導向的分析要按照物件導向的概念和方法,在對任務的分析中,
從客觀存在的事物和事物之間的關係,歸納出有關的物件(物件的『特徵』和『技能』)以及物件之間的聯絡,並將具有相同
屬性和行為的物件用乙個類class來標識。
建立乙個能反映這是工作情況的需求模型,此時的模型是粗略的。
找物件------->找類(歸納物件共同的特徵與技能,還有每個物件獨有的特徵)
根據物件導向分析階段形成的需求模型,對每一部分分別進行具體的設計。
首先是類的設計,類的設計可能包含多個層次(利用繼承與派生機制)。然後以這些類為基礎提出程式設計的思路
和方法,包括對演算法的設計。
在設計階段並不牽涉任何一門具體的計算機語言,而是用一種更通用的描述工具(如偽**或流程圖)來描述。
先定義類------->例項化出物件
有了上面分析、設計的結果,現在來看用**實現類和物件,是不是清晰了很多,咱們現在就可以用python來完
成了。在寫好程式後交給使用者使用前,必須對程式進行嚴格的測試,測試的目的是發現程式中的錯誤並修正它。
面向對的測試是用物件導向的方法進行測試,以類作為測試的基本單元。
正如對任何產品都需要進行售後服務和維護一樣,軟體在使用時也會出現一些問題,或者軟體商想改進軟體的性
能,這就需要修改程式。
由於使用了物件導向的方法開發程式,使用程式的維護比較容易。
因為物件的封裝性,修改乙個物件對其他的物件影響很小,利用物件導向的方法維護程式,大大提高了軟體維護的
效率,可擴充套件性高。
1.物件導向的程式設計看起來高大上,所以我在程式設計時就應該保證通篇class,這樣寫出的程式一定是好的程式(面
向物件只適合那些可擴充套件性要求比較高的場景)
2.很多人喜歡說物件導向三大特性(這是從哪傳出來的,封裝,多型,繼承?漏洞太多太多,好吧暫且稱為三大特
性),那麼我在基於物件導向程式設計時,我一定要讓我定義的類中完整的包含這三種特性,這樣寫肯定是好的程式。嚯,
好傢伙,我們來舉個例子:我們知道降龍十八掌有十八掌,那麼你每次跟人幹仗都要從第一掌打到第18掌這才顯得你會
了是麼,如果來一萬個人你需要打10000*18掌對麼,傻叉。
3.類有類屬性,例項有例項屬性,所以我們在定義class時一定要定義出那麼幾個類屬性,想不到怎麼辦,那就使勁
的想,定義的越多越牛逼
這就犯了乙個嚴重的錯誤,程式越早物件導向,死的越早,為啥物件導向,因為我們要將資料與功能結合到一起,程式整
體的結構都沒有出來,或者說需要考慮的問題你都沒有搞清楚,你就開始物件導向了,這就導致了,你在那裡幹想,自以
為想通了,定義了一堆屬性,結果後來又都用不到,或者想不通到底應該定義啥,那就一直想吧,想著想著就瘋了。你見
過哪家公司要開發乙個軟體,上來就開始寫,肯定是頻繁的開會討論計畫。
4.既然這麼麻煩,那麼我徹底解脫了,我們不要用物件導向程式設計了,你啊,你有大才,你能成事啊,傻叉。
抽象/實現
抽象指對現實世界問題和實體的本質表現,行為和特徵建模,建立乙個相關的子集,可以用於 繪程式結構,從而實現這種
模型。抽象不僅包括這種模型的資料屬性,還定義了這些資料的介面。
對某種抽象的實現就是對此資料及與之相關介面的現實化(realization)。現實化這個過程對於客戶 程式應當是透明
而且無關的。
封裝/介面
封裝描述了對資料/資訊進行隱藏的觀念,它對資料屬性提供介面和訪問函式。通過任何客戶端直接對資料的訪問,無視
介面,與封裝性都是背道而馳的,除非程式設計師允許這些操作。作為實現的 一部分,客戶端根本就不需要知道在封裝之後,資料
屬性是如何組織的。在python中,所有的類屬性都是公開的,但名字可能被「混淆」了,以阻止未經授權的訪問,但僅此而已,再
沒有其他預防措施了。這就需要在設計時,對資料提供相應的介面,以免客戶程式通過不規範的操作來訪問封裝的資料屬
性。注意:封裝絕不是等於「把不想讓別人看到、以後可能修改的東西用private隱藏起來」。
真正的封裝是,經過深入的思考,做出良好的抽象,給出「完整且最小」的介面,並使得內部細節可以對外透明
(注意:對外透明的意思是,外部呼叫者可以順利的得到自己想要的任何功能,完全意識不到內部細節的存在)
合成
合成擴充了對類的 述,使得多個不同的類合成為乙個大的類,來解決現實問題。合成 述了 乙個異常複雜的系統,比如一
個類由其它類組成,更小的元件也可能是其它的類,資料屬性及行為, 所有這些合在一起,彼此是「有乙個」的關係。
派生/繼承/繼承結構
派生描述了子類衍生出新的特性,新類保留已存類型別中所有需要的資料和行為,但允許修改或者其它的自定義操作,都
不會修改原類的定義。
繼承描述了子類屬性從祖先類繼承這樣一種方式。
繼承結構表示多「代」派生,可以述成乙個「族譜」,連續的子類,與祖先類都有關係。
泛化/特化
基於繼承
泛化表示所有子類與其父類及祖先類有一樣的特點。
特化描述所有子類的自定義,也就是,什麼屬性讓它與其祖先類不同。
多型與多型性
多型指的是同一種事物的多種狀態:水這種事物有多種不同的狀態:冰,水蒸氣。
多型性的概念指出了物件如何通過他們共同的屬性和動作來操作及訪問,而不需考慮他們具體的類。
冰,水蒸氣,都繼承於水,它們都有乙個同名的方法就是變成雲,但是冰.變雲(),與水蒸氣.變雲()是截然不同的過程,
雖然呼叫的方法都一樣。
自省/反射
自省也稱作反射,這個性質展示了某物件是如何在執行期取得自身資訊的。如果傳乙個物件給你,你可以查出它有什
麼能力,這是一項強大的特性。如果python不支援某種形式的自省功能,dir和type內建函式,將很難正常工作。還有那些特
殊屬性,像__dict__,__name__及__doc__。
Python之物件導向 物件導向基礎
一 面向過程 物件導向對比 1 面向過程 根據業務邏輯從上到下寫壘 2 函式式思想 將某功能 封裝到函式中,日後便無需重複編寫,僅呼叫函式即可 3 物件導向 對函式進行分類和封裝 1 2 3一步一步抽象,函式式是走向物件導向的中間步驟 函式式的應用場景 各個函式之間是獨立且無共用的資料 物件導向程式...
Python 基礎之物件導向
封裝繼承 類和型別 多型意味著就算不知道變數所引用的物件型別是什麼,還是能對它進行操作,而它也會根據物件 或者類 型別的不同而表現出不同的行為。程式得到了乙個物件,但是並不知道它是怎麼實現的 它可能有多種 形狀 繫結到物件特性上面的函式稱為方法 method 對於乙個變數x來說,我們不需要知道他是字...
Python 基礎之物件導向
python 是乙個高層次的結合了解釋性 編譯性 互動性和物件導向的指令碼語言。python 的設計具有很強的可讀性,相比其他語言經常使用英文關鍵字,其他語言的一些標點符號,它具有比其他語言更有特色語法結構。python 是一種解釋型語言 這意味著開發過程中沒有了編譯這個環節。類似於php和perl...