自學Python5.1-面向對象與面向過程

自學Python之路html

自學Python5.1-面向對象與面向過程

面向過程:根據業務邏輯從上到下寫代碼。python

   優勢:性能比面向對象高,由於類調用時須要實例化,開銷比較大,比較消耗資源;好比單片機、嵌入式開發、 Linux/Unix等通常採用面向過程開發,性能是最重要的因素。 算法

   缺點:沒有面向對象易維護、易複用、易擴展。編程

面向對象:將數據與函數綁定在一塊兒,進行封裝,這樣可以更快速的開發程序,減小了重複代碼的重寫過程。安全

   優勢:易維護、易複用、易擴展,因爲面向對象有封裝、繼承、多態性的特性,能夠設計出低耦合的系統,使系統 更加靈活、更加易於維護。  編程語言

   缺點:性能比面向過程低模塊化

1、面向過程

面向過程?面向過程就是面向解決問題的過程進行編程。函數

咱們在學習和工做中,當咱們去實現某項功能或完成某項任務時,是否是會不自覺的循序漸進的羅列出咱們要作的事情?(若是沒有,建議之後試着步驟化解決問題)。而當咱們按着咱們羅列的步驟去解決問題時,實質上就是按照面向過程的思想去解決問題。咱們羅列的步驟就是過程,按照步驟解決問題就是面向過程。工具

傳統的面向過程的編程思想總結起來就八個字——自頂向下,逐步細化!實現步驟以下:性能

  1. 將要實現的功能描述爲一個從開始到結束循序漸進的連續的步驟(過程);
  2. 依次逐步完成這些步驟,若是某一步的難度較大,又能夠將該步驟再次細化爲若干個子步驟,以此類推,一直到結束獲得想要的結果;
  3. 程序的主體是函數,一個函數就是一個封裝起來的模塊,能夠實現必定的功能,各個子步驟每每就是經過各個函數來完成的,從而實現代碼的重用和模塊化編程!

案例:學生到校報道註冊

面向過程流程圖:

面向過程,就是按照咱們分析好了的步驟,循序漸進的依次執行就好了!因此當咱們用面向過程的思想去編程或解決問題時,首先必定要把詳細的實現過程弄清楚。一旦過程設計清楚,代碼的實現簡直垂手可得。

2、面向對象

所謂的面向對象,就是在編程的時候儘量的去模擬真實的現實世界,按照現實世界中的邏輯去處理一個問題,分析問題中參與其中的有哪些實體,這些實體應該有什麼屬性和方法,咱們如何經過調用這些實體的屬性和方法去解決問題。

現實世界中,任何一個操做或者是業務邏輯的實現都須要一個實體來完成,也就是說,實體就是動做的支配者,沒有實體,就確定沒有動做發生!

  如今讓咱們思考下,上述註冊報名的每個步驟都有哪些動詞?

  提出 提供 繳 收 得到 分配 增長

  有動詞就必定有實現這個動做的實體!

  所謂的模擬現實世界,就是使計算機的編程語言在解決相關業務邏輯的方式,與真實的業務邏輯的發生保持一致!須要使每個動做的背後都一個完成這個動做的實體!

  由於任何功能的實現都是依賴於一個具體的實體的「動做|操做|行動」,能夠看做是一個又一個的實體在發揮其各自的「能力」並在內部進行協調有序的調用過程!

  當採用面向對象的思想解決問題時,可分爲下面幾步:

    1. 分析哪些動做是由哪些實體發出的;
    2. 定義這些實體,爲其增長相應的屬性和功能;
    3. 讓實體去執行相應的功能或動做。

  採用面向對象的思想,解決上面的報名問題,應該以下:

第一步:分析那些動做是由哪些實體發出的

  • 學生提出報名
  • 學生繳費
  • 機構收費
  • 教師分配教室
  • 班級增長學生信息

  因而,在整個過程當中,一共有四個實體:

  學生、機構、教師、班級!

  在現實中的一個具體的實體,就是計算機編程中的一個對象!

第二步:定義這些實體,爲其增長相應的屬性和功能

  屬性就是實體在現實世界中的一些特徵表現。如:

    • 人的屬性:姓名、性別、身高、三圍、體重、電話號碼、家庭住址、籍貫等
    • 手機的屬性:品牌、價格、顏色、尺寸、待機時間等

  功能就是能完成的動做,在面向對象的術語中,動做就叫做方法或者函數。如:

    • 人的動做(功能):吃飯、睡覺、學習、打遊戲、走路、跑步、繳費!
    • 手機的動做(功能):打電話、發短信、拍照、打遊戲、視頻、看電影等

  下圖顯示了在上述實例中出現的實體以及相應的屬性和功能:

第三步:讓實體去執行相應的功能或動做

  • 學生提出報名
  • 學生繳費
  • 學校收費
  • 教師分配教室
  • 班級增長學生信息

  因此說,面向過程主要是針對功能,而面向對象主要是針對可以實現該功能的背後的實體。面向對象實質上就是面向實體,因此當咱們使用面向對象進行編程時,必定要創建這樣一個觀念:萬物皆對象!

3、面向對象和麪向過程的比較

面向過程簡單直接,易於入門理解,模塊化程度較低。

面向對象相對於面向過程較爲複雜,不易理解,模塊化程度較高。

可總結爲下面三點:

  • 均可以實現代碼重用和模塊化編程,可是面對對象的模塊化更深,數據更封閉,也更安全!由於面向對象的封裝性更強!
  • 面對對象的思惟方式更加貼近於現實生活,更容易解決大型的複雜的業務邏輯
  • 從前期開發角度上來看,面對對象遠比面向過程要複雜,可是從維護和擴展功能的角度上來看,面對對象遠比面向過程要簡單!

4、面向對象的軟件開發

軟件的開發其實一整套規範,咱們所學的只是其中的一小部分,一個完整的開發過程,須要明確每一個階段的任務,在保證一個階段正確的前提下再進行下一個階段的工做,稱之爲軟件工程

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

4.1 面向對象分析(object oriented analysis ,OOA)

    軟件工程中的系統分析階段,要求分析員和用戶結合在一塊兒,對用戶的需求作出精確的分析和明確的表述,從大的方面解析軟件系統應該作什麼,而不是怎麼去作。面向對象的分析要按照面向對象的概念和方法,在對任務的分析中,從客觀存在的事物和事物之間的關係,貴南出有關的對象(對象的‘特徵’和‘技能’)以及對象之間的聯繫,並將具備相同屬性和行爲的對象用一個類class來標識。

    創建一個能反映這是工做狀況的需求模型,此時的模型是粗略的。

4.2 面向對象設計(object oriented design,OOD)

    根據面向對象分析階段造成的需求模型,對每一部分分別進行具體的設計。

    首先是類的設計,類的設計可能包含多個層次(利用繼承與派生機制)。而後以這些類爲基礎提出程序設計的思路和方法,包括對算法的設計。

    在設計階段並不牽涉任何一門具體的計算機語言,而是用一種更通用的描述工具(如僞代碼或流程圖)來描述

4.3 面向對象編程(object oriented programming,OOP)

    根據面向對象設計的結果,選擇一種計算機語言把它寫成程序,能夠是python

4.4 面向對象測試(object oriented test,OOT)

    在寫好程序後交給用戶使用前,必須對程序進行嚴格的測試,測試的目的是發現程序中的錯誤並修正它。

    面向對的測試是用面向對象的方法進行測試,以類做爲測試的基本單元。

4.5 面向對象維護(object oriendted soft maintenance,OOSM)

    正如對任何產品都須要進行售後服務和維護同樣,軟件在使用時也會出現一些問題,或者軟件商想改進軟件的性能,這就須要修改程序。

    因爲使用了面向對象的方法開發程序,使用程序的維護比較容易。

    由於對象的封裝性,修改一個對象對其餘的對象影響很小,利用面向對象的方法維護程序,大大提升了軟件維護的效率,可擴展性高。

 

在面向對象方法中,最先發展的確定是面向對象編程(OOP),那時OOA和OOD都尚未發展起來,所以程序設計者爲了寫出面向對象的程序,還必須深刻到分析和設計領域,尤爲是設計領域,那時的OOP實際上包含了如今的OOD和OOP兩個階段,這對程序設計者要求比較高,許多人感到很難掌握。

如今設計一個大的軟件,是嚴格按照面向對象軟件工程的5個階段進行的,這個5個階段的工做不是由一我的從頭至尾完成的,而是由不一樣的人分別完成,這樣OOP階段的任務就比較簡單了。程序編寫者只須要根據OOd提出的思路,用面嚮對象語言編寫出程序既可。

在一個大型軟件開發過程當中,OOP只是很小的一個部分。

對於全棧開發的你來講,這五個階段都有了,對於簡單的問題,沒必要嚴格按照這個5個階段進行,每每由程序設計者按照面向對象的方法進行程序設計,包括類的設計和程序的設計。

相關文章
相關標籤/搜索