java基礎學習(二):理解面向對象

  Java 語言是純粹的面向對象的程序設計語言,這主要表現爲Java完全支持面向對象的三種基本特徵:繼承、封裝和多態。整個Java程序是由一個一個類組成的。
  Java完全支持使用對象、類、繼承、封裝、消息等基本概念來進行程序設計,允許從世界中客觀存在的事物(即對象)出發來構造軟件系統,再系統構造中儘可能運用人類的自然思維方式。面向對象的方式實際上由OOA(面向對象分析)、OOD(面向對象設計)和OOP(面向對象編程)三個部分有機組成,其中,OOA和OOD的結構需要使用一種方式來描述並記錄,目前業界統一採用UML(統一建模語言)來描述並記錄OOA和OOD的結果。
  常用的UML圖形有例圖、類圖、組件圖、部署圖、順序圖、活動圖和狀態機圖。暫時瞭解這麼多足夠了。

2.1 面向對象

  在目前的軟件開發領域有兩種主流的開發方法:結構化開發方法和麪向對象開發方法。面向對象可以提供更好的可重用性、可擴展性和可維護性。

2.1.1 結構化程序設計簡介

  結構化程序設計方法主張按功能來分析系統需求,其主要原則柯概括爲自頂向下、逐步求精、模塊化等。架構話程序設計首先採用結構化分析(Structured Analysis, SA) 方法對系統進行需求分析,然後使用結構化設計(Structured Program,SP)方法對系統進行概要設計、詳細設計,最後採用結構化編程(Structured Program,SP)方法來實現系統,使用這種SA、SD和SP的方式可以較好地保證軟件系統地開發進度和質量。
  因爲結構化程序設計方法主張按功能把軟件系統逐步細分,因此這種方法也被稱爲面向功能地程序設計方法:結構化程序設計地每個功能都負責對數據進行一次處理,每個功能都接受一些數據,處理完後輸出一些數據,這種處理方法也被稱爲面向數據流的處理方式。
  結構化程序設計裏最小的程序單元使函數,每個函數都負責完成一個功能,用以接受一些輸入數據,函數對這些輸入數據進行處理,處理結束後輸出一些數據。整個軟件系統由一個個函數組成,其中作爲程序入口的函數被稱爲主函數,主函數依次調用其他普通函數,普通函數之間依次調用,從而完成整個軟件系統的功能。
在這裏插入圖片描述
  由圖可以看出,結構化設計需要自頂向下的設計方式,在設計階段就需要考慮每個模塊應該分解成哪些子模塊,每個子模塊又分解成哪些更小的模塊…依此類推,直至將模塊細化成一個個函數。
  每個函數都是具有輸入、輸出的子系統,函數的輸入數據包括函數形參、全局變量和常量等,函數的輸出數據包括函數返回值以及傳出參數等。結構化程序設計方式又如下兩個侷限性:
(1)設計不夠直觀,與人類習慣思維不一致。採用結構化程序分析、設計時,開發者需要將客觀世界模型分解成一個個功能,每個功能用以完成一定的數據處理。
(2)適應性差,可擴展性不強。當用戶的需求發生更改的時候,都需要自定向下地修改模塊結構,這種方式地維護成本太高。
  有一說一,這個結構化設計看得我懵懵的,原話說就是像我們使用c語言一樣,用函數作爲最小單位,然後主函數負責連接各個功能的子函數。但是這樣的系統會出現上面提到的一些問題。所以,我看了半天,這個結構化設計是不好的???

2.1.2 程序的三種基本結構

  不知道爲什麼,書裏面這一節提到在Java語言中,拒絕使用GOTO語句,但是把它作爲了保留字。
  重點:任何簡單或複雜的算法都可以由順序結構、選擇結構和循環結構三中基本結構組成。所以,這三種結構就被稱爲程序設計的三種基本結構,也是結構化程序設計必須採用的結構。

2.1.2.1 順序結構

在這裏插入圖片描述
 這個很簡單啦,我就不多寫了,就是在源代碼種按排列順序依次執行語句。如圖:程序從a進入到S1再到S2再從b出來,就很順的完成一個結構。

2.1.2.2 選擇結構

在這裏插入圖片描述
  選擇結構也是非常容易理解的,相信學過c語言的人都瞭解選擇結構。很簡單,做選擇然後執行語句。

2.1.2.3 循環結構

在這裏插入圖片描述
(1)當型結構 :先判斷條件,當條件爲真時執行循環體,並且在循環體結束時自動返回到循環入口處,再次判斷循環條件:如果條件爲假,則退出循環體到達流程出口處 因爲是"當條件爲真時執行循環",即先判斷後執行,所以被稱爲當型循環。
(2)直到型循環: 從入口處直接執行循環體,循環體結束時判斷條件,如果條件爲真,則返回入口
處繼續執行循環體,直到條件爲假時退出循環體到達流程出口處,是先執行後判斷。因 爲是"直
到條件爲假時結束循環",所以被稱爲直到型循環。

  前面三種結構已經非常熟悉了,我就沒記多少筆記。跟其他語言一樣,Java語言的方法體內同樣是由這三種程序結構組成的,換句話說,肅然Java是面向對象的,但Java的方法裏則是一種結構化的程序流。

2.1.3 面向對象程序設計簡介

  看了書感覺,對面向對象的介紹有點抽象,在這裏我就按自己的瞭解,寫一寫。面向對象一切以對象爲中心,大家一定要記住對象這個概念,比如:你要寫一個管理系統,那麼你的對象就是管理員和成員等。就這樣的話很直觀地可以直接映像到客觀世界,就感覺你寫這個程序就是在寫一個世界。
  採用面向對象方式的軟件系統,其最小的程序單元是類,這些類可以生成系統中的多個對象,而這些對象則直接映像成客觀世界的各種事物。結構如下:
在這裏插入圖片描述
下面一個公式:
+=成員變量(狀態數據)+方法(行爲)= 類定義
  我的理解就是,一個類的定義,需要包括一個成員的基本屬性,比如人的身高,體重等。還需要有一個成員的行爲,比如人吃飯,運動等動作。這樣整合在一起才叫做一個類。如果理解有誤,可以指證。

  書中有一個很好的例子,講述了面向對象和麪向過程的區別。比如完成豬八戒吃西瓜這個事件

  • 用面向過程表達:吃(豬八戒,西瓜)
  • 用面向對象表達:豬八戒.吃(西瓜)

好好感受一下,就知道兩者的區別巨大有木有。

2.1.4 面向對象的基本特徵

  面向對象方法具有三個基本特徵:封裝(Encapsulation)、繼承(Inheritance)和多態(Polymorphism)。這三個以後應該會仔細將,這裏我就不記太多筆記。
  除此之外,抽象也是面對對象的重要部分,抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關地方面。抽象不打算了解全部問題,只是考慮部分問題。
面向對象還支持如下幾個功能:

  • 對象是面向對象方法中最基本的概念,它的基本特點有 標識唯 性、分類性、多態性、封裝性、模塊獨立性好。
  • 類是具有共同屬性、共同方法的 類事物 類是對象的抽象;對象則是類的實例 而類是整個軟件系統最小的程序單元,類的封裝性將各種信息細節隱藏起來,並通過公用方法來暴露該類對外所提供的功能,從而提高了類的內聚性,降低了對象之間的稿合性。
  • 對象間的這種相互合作需要 個機制協助進行,這樣的機制稱爲"消息" 消息是 個實例與另個實例之間相互通信的機制。
  • 在面向對象方法中,類之間共享屬性和操作的機制稱爲繼承 繼承具有傳遞性 繼承可分爲單繼承( 個繼承只允許有 個直接父類,即類等級爲樹形結構)與多繼承( 個類允許有多個直接父類)

  在編程語言領域,還有一個“基於對象”的概念,這兩個概念極易混淆。“基於對象”也使用了對象,但是無法利用現有的對象模板產生新的對象,也就是說,“基於對象”沒有繼承的特點。例如JavaScript。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章