Java零基礎_零基礎學Java必備的學習筆記(十)Java面向對象| 8月更文挑戰

面向對象

一、面向過程和麪向對象有什麼區別?

從語言方面出發:java

  • 對於C語言來講,是徹底面向過程的。python

  • 對於C++語言來講,是一半面向過程,一半是面向對象。(C++是半面向對象的)編程

  • 對於Java語言來講,是徹底面向對象的。markdown

什麼是面向過程的開發方式?

面向過程的開發方式主要的特色是:編程語言

注重步驟,注重的是實現這個功能的步驟。oop

第一步幹什麼學習

第二步幹什麼spa

....設計

另外面向過程也注重實現功能的因果關係。code

由於A全部B

由於B因此C

由於C因此D

.....

面向過程當中沒有對象的概念。只是實現這個功能的步驟以及因果關係。

面向過程有什麼缺點?(耦合度高,擴展力差。)

面向過程最主要是每一步與每一步的因果關係,其中A步驟因果關係到B步驟,A和B聯合起來造成一個子模塊,子模塊和子模塊之間又由於因果關係結合在一塊兒,假設其中任何一個因果關係出現問題(錯誤),此時整個系統的運轉都會出現問題。(代碼和代碼之間的耦合度過高,擴展力太差。)

螺栓螺母擰在一塊兒:耦合度高嗎?

這是耦合度低的,由於螺栓螺母能夠再擰開。(它們之間是有接口的。)

螺栓螺母擰在一塊兒以後,再用焊條焊接在一塊兒,耦合度高嗎?

這個耦合度就很高了。耦合度就是黏連程度。

每每耦合度高的擴展力就差。

耦合度高致使擴展力差。(集成顯卡:計算機顯卡不是獨立的,是集成到主板上的)

耦合度低致使擴展力強。(燈泡和燈口關係,螺栓螺母關係)

採用面向過程的方式開發一臺計算機會是怎樣?

這臺計算機將沒有任何一個部件,全部的都是融合在一塊兒的。

你的這臺計算機是一個實心兒的,沒有部件的。一體機。

假設這臺一體機的任何一個「部位」出問題,整個計算機就不能用了,

必須扔掉了。(沒有對象的概念。)

採用面向對象的方式開發一臺計算機會是怎樣?

  • 內存條是一個對象

  • 主板是一個對象

  • CPU是一個對象

  • 硬盤是一個對象

而後這些對象組裝在一塊兒,造成一臺計算機。

假設其中CPU壞了,咱們能夠將CPU拆下來,換一個新的。  

面向過程有什麼優勢?(快速開發)

對於小型項目(功能),採用面向過程的方式進行開發,效率較高。

不須要前期進行對象的提取,模型的創建,採用面向過程

方式能夠直接開始幹活。一上來直接寫代碼,編寫因果關係。

從而實現功能。

什麼是面向對象的開發方式?

採用面向對象的方式進行開發,更符合人類的思惟方式。(面向對象成爲主流的緣由)

人類就是以「對象」的方式去認識世界的。

因此面向對象更容易讓咱們接受。

面向對象就是將現實世界分割成不一樣的單元,而後每個單元都實現成對象,而後給一個環境驅動一下,讓各個對象之間協做起來造成一個系統。

  • 對象「張三」

  • 對象「香菸」

  • 對象「打火機」

  • 對象「吸菸的場所」

而後將以上的4個對象組合在一塊兒,就能夠模擬一我的的抽菸場景。

其中「張三」對象能夠更換爲「李四」

其中「香菸」也能夠更換品牌。 其中「打火機」也能夠更換。

其中「吸菸的場所」也能夠更換。

採用面向對象的方式進行開發:

耦合度低,擴展力強。

找一個合適的案例。說明一下面向對象和麪向過程的區別?

蛋炒飯:

雞蛋和米飯徹底混合在一塊兒。沒有獨立對象的概念。

假設客戶提出新需求:我只想吃蛋炒飯中的米飯,怎麼辦?

客戶提出需求,軟件開發者必須知足這個需求,因而開始擴展,這個軟件的擴展是一場噩夢。(很難擴展,耦合度過高了。)  

蓋飯:

老闆,來一份:魚香肉絲蓋飯

魚香肉絲是一道菜,能夠當作一個獨立的對象。

米飯能夠當作一個獨立的對象。

兩個對象準備好以後,只要有一個動做,叫作:「蓋」

這樣兩個對象就組合在一塊兒了。

假設客戶提出新需求:我不想吃魚香肉絲蓋飯,想吃西紅柿雞蛋蓋飯。

這個擴展就很輕鬆了。直接把「魚香肉絲」對象換成「西紅柿雞蛋」對象。

目前先聽一下,須要三四年的時候才能完全領悟面向對象。

  • 面向過程主要關注的是:實現步驟以及整個過程。

  • 面向對象主要關注的是:對象A,對象B,對象C,而後對象ABC組合,或者CBA組合.....

 

二、當咱們採用面向對象的方式貫穿整個系統的話,涉及到三個術語:

OOA:面向對象分析

OOD:面向對象設計

OOP:面向對象編程

整個軟件開發的過程,都是採用OO進行貫穿的。

 

實現一個軟件的過程:

分析(A) --> 設計(D) --> 編程(P)

在軟件公司當中,通常同事與同事之間聊天,有的時候會忽然說出來一個英語單詞。

這種狀況是很常見的。因此一些術語仍是要知道的,否則會鬧出笑話。

  • leader 領導/經理/組長

  • team 團隊

  • PM 項目經理(整個項目的監管人)Project Manager

三、面向對象包括三大特徵

  • 封裝

  • 繼承

  • 多態

 

任何一個面向對象的編程語言都包括這三個特徵

例如:

  • python也有封裝 繼承 多態。

  • java也有封裝 繼承 多態。

注意:java只是面向對象編程語言中的一種。

除了java以外,還有其它不少不少的編程語言也是面向對象的。

以上三個特徵的名字先背會,後面一個一個進行學習。

四、類和對象的概念

面向對象當中最主要「一詞」是:對象。

  • 什麼是類?

類實際上在現實世界當中是不存在的,是一個抽象的概念。

是一個模板。是咱們人類大腦進行「思考、總結、抽象」的一個結果。(主要是由於人類的大腦不通常纔有了類的概念。)

類本質上是現實世界當中某些事物具備共同特徵,將這些共同特徵提取出來造成的概念就是一個「類」,「類」就是一個模板。

明星是一個類

  • 什麼是對象?

對象是實際存在的個體。(真實存在的個體)

宋小寶就是一個對象

姚明就是一個對象

劉德華就是一個對象

....

宋小寶、姚明、劉德華這3個對象都屬於「明星」這個類。

在java語言中,要想獲得「對象」,必須先定義「類」,「對象」是經過「類」

這個模板創造出來的。

類就是一個模板:類中描述的是全部對象的「共同特徵信息」

對象就是經過類建立出的個體。

這幾個術語你須要本身可以闡述出來:

  • 類:不存在的,人類大腦思考總結一個模板(這個模板當中描述了共同特徵。)

  • 對象:實際存在的個體。

  • 實例:對象還有另外一個名字叫作實例。

  • 實例化:經過類這個模板建立對象的過程,叫作:實例化。

  • 抽象:多個對象具備共同特徵,進行思考總結抽取共同特徵的過程。

 

類 --【實例化】--> 對象(實例)

對象 --【抽象】--> 類

類是一個模板,是描述共同特徵的一個模板,那麼共同特徵包括什麼呢?

潘長江對象:

名字:潘長江

身高:165cm

打籃球:非專業的,本身玩兒呢,無所謂了

學習:考試80分

姚明對象:

名字:姚明

身高:240cm

打籃球:NBA專業球員,打籃球很是棒

學習:考試100分

 

共同特徵包括哪些?

名字、身高都屬於名詞(狀態特徵)

打籃球、學習都屬於動詞(動做特徵)

類 = 屬性 + 方法

屬性來源於:狀態

方法來源於:動做

public class 明星類{

//屬性-->狀態,多見於名詞

名字屬性;

身高屬性;  

//方法-->動做,多見於動詞

打籃球方法(){

}

學習方法(){

}

}
複製代碼

陳賡同窗、何偉彬同窗,他們倆有沒有共同特徵呢?

有共同特徵,就能夠抽象一個類模板出來。

能夠定義一個學生類(Student)

public class Student {

// 屬性

// 姓名

// 性別

// 身高

// 方法

public .... sing(){

}

public .... dance(){

}

public .... study(){

}

.... }  

五、思考:「java軟件工程師」在開發中起到的一個做用是什麼?

咱們爲何要作軟件開發?

說的大一些是爲了人民服務。解決現實生活當中的問題。

軟件開發既然是爲了解決現實世界當中的問題,那麼首先java軟件必須可以模擬現實世界。

其實軟件是一個虛擬的世界。

這個虛擬的世界須要和現實世界一一對應,這才叫模擬。

六、類的定義

6.一、怎麼定義一個類,語法格式是什麼?

[修飾符列表] class 類名 {

//類體 = 屬性 + 方法

// 屬性在代碼上以「變量」的形式存在(描述狀態)

// 方法描述動做/行爲

}
複製代碼

注意:修飾符列表能夠省略。

6.二、爲何屬性是「以」變量的形式存在的?

假設咱們要描述一個學生:

學生包括哪些屬性:

學號: 110

姓名:"張三"

性別:'男' (true/false)

住址:"深圳寶安區"

答案:是由於屬性對應的是「數據」,數據在程序中只能放到變量中。

結論:屬性其實就是變量。  

變量的分類還記得嗎?

變量根據出現位置進行劃分:

方法體當中聲明的變量:局部變量。

方法體外聲明的變量:成員變量。(這裏的成員變量就是「屬性」)

6.三、請你們觀察「學生對象1」和「學生對象2」的共同特徵,而後再利用java語言將該「學生類」表述/表達出來。(這裏只表達屬性,不表達方法.)

七、關於編譯的過程

按說應該先編譯XueSheng.java,而後再編譯XueShengTest.java

可是對於編譯器來講,編譯XueShengTest.java文件的時候,會自動找XueSheng.class,若是沒有,會自動編譯XueSheng.java文件,生成XueSheng.class文件。

  • 第一種方式:

javac XueSheng.java

javac XueShengTest.java

  • 第二種方式:

javac XueShengTest.java

  • 第三種方式:

Javac *.java  

八、在語法級別上是怎麼完成對象建立的呢?

類名 變量名 = new 類名();

這樣就完成了對象的建立。

九、什麼是實例變量?

對象又被稱爲實例。

實例變量實際上就是:對象級別的變量。

public class 明星類{

double height;

}
複製代碼

身高這個屬性全部的明星對象都有,可是每個對象都有「本身的身高值」。

假設建立10個明星對象,height變量應該有10份。

因此這種變量被稱爲對象級別的變量。屬於實例變量。

實例變量在訪問的時候,是否是必須先建立對象?

十、對象和引用的區別?

對象是經過new出來的,在堆內存中存儲。

引用是:但凡是變量,而且該變量中保存了內存地址指向了堆內存當中的對象的。

相關文章
相關標籤/搜索