JAVA基礎總結(1)——面向對象編程思想

抽象

1. 概念

由於面向對象有類的概念,類是是對象的抽象。因此,有必要理解一下抽象這個概念,抽象它是一種科學學概念,它是哲學的根本特點。抽象與我們平時所說的具體,是相應的一個概念,所以說,抽象它不能脫離具體而單獨存在。

抽象是從衆多的事物中抽取出共同的、本質性的特徵,而捨棄其非本質的特徵的過程。

以上來自百度百科中對抽象的一句解釋,以下,是我對上面這句話的解釋:

	 1、抽象是一個動詞,它是一種行爲、一種動作,一種思維過程。
	 2、它是從衆多事物中抽取共有的屬性特徵。
	 3、在選擇待抽取特徵的過程中只選擇事物本身固有的屬性。
2. 抽象的特徵

在抽象過程中,對特徵的選取,往往取決於個人對事物的看法,如果目標事物是一個問題,那麼選擇的特徵往往分析或解決這項問題所必須的特徵元素,那些不必要的特徵元素往往不會考慮進去。也就是說,不同的人,分析事物的層次的角度不同,抽象的過程對事物特徵的選擇就會不同,以下舉例說明:

“ 小明今天做了一道清蒸鱸魚”

看上面這句話,你從中得到了哪些信息。

普通人:它就是小明做的一道菜,一道清蒸的鱸魚而已。

思維豐富的人:除了上面這些,小明是不是一個廚師,它是怎麼做的,這道菜好喫嗎?

廚師:鱸魚這個食材是在哪買的?新不新鮮?製作過程中用了哪些烹飪技巧,放了哪些調料?蒸煮過程的用時、火候等等。

數學家:這是不是小明今天做的第一道菜,今天幾點開始做的,一共用了幾條魚。

3. 編程中的抽象

人們所能解決的問題的複雜性直接取決於抽象的類型和質量。所謂的“類型” 是指,“所抽象的是什麼?” ——《JAVA編程思想》

計算機的誕生就是爲了解決現實生活中的問題,如數據存儲、科學計算、密碼破譯、自動化生產等。目的就是爲了替代和增強人類手動完成業務、解決問題的能力。

前面說過,不同的人,分析事物的層次的角度不同。實際上,程序員在通過編程解決實際問題的時候,通常也是一樣,不同程序員,分析問題的層次和角度也是不同的。大多數人(程序員)在分析問題的時候,往往會是一種過程化思維(面向過程化編程),而也有一部分程序員則會用到抽象化思維。這裏舉例說明一下:

在計算機屏幕中繪製出一個長方形

對於使用過程化思維進行編程的程序員:在編程的時候往往會想,利用編程在計算機屏幕中繪製圖片,我要先做什麼,後做什麼,最後才能畫出一個長方形。

對於使用抽象化思維進行編程的程序員:我要畫長方形,我要關注長方形的長度和寬度,以及屏幕的長度和寬度,在繪製過程中需要用到哪些方法,哪些資源?怎樣將它們看成是同一類事物,怎樣進行分類處理,我是否可用同一類編程方法,繪製出除長方形以外其他的幾何圖形?

實際上,除了編程中分析問題時的抽象,計算機各等級編程語言當中也有抽象,比如彙編語言是對機器語言的抽象,只是抽象的不強,所以有了各種各樣的指令。而高級語言又是對彙編語言的抽象,所以有了各種個樣的函數或方法。

面向對象編程思維

1. 概念

前面我們在講抽象過程的時候,講到過對於使用抽象化思維進行編程的程序員分析問題的特點。在編程之前,需要對問題進行分析,分析的結果會直接或間接的影響編程成果。所以,分析問題時選擇的角度和層次是什麼重要的。而面向對象就是在分析問題的時候,建立問題模型的時候,一種非常好的思維方式。通過用這種思想進行分析問題和編程就是在問題中解決問題。亦或者是說,在建立的問題模型裏還原和解決問題。以這樣的方式進行編程,不僅簡化了問題,也有非常好的自適應和擴展性。

2. 類與對象

對象的概念: 所謂對象,指的是現實生活中能夠看得見摸得着的具體事物,而在面向對象編程裏,對象具有數據和行爲,它不僅可以實現特定的操作,還可以記錄操作的結果。也就是說,對象是數據和行爲的結合體。這也和我們現實生活中的事物大相徑庭,比如一個人自身就有很多數據(姓名,性別,身高,體重等等),也有很多行爲(寫作,說話,行走等等)。實際上面向對象編程,就是通過利用衆多對象裏的各種行爲來完成程序中一項項功能,因此我們可以認爲程序就是對象的集合。
類的概念: 所謂類,就是類型,它是對事物通過抽象得來的一種抽象概念,簡單理解就是歸納總結得來的結果。在面向對象編程裏,類是對具有相同數據(屬性)和行爲(功能)的對象的抽象。類具有屬性和功能,它的屬性和功能就是所抽象的這些對象共同擁有的屬性和功能。例如我們對電飯煲、電風扇、電動牙刷、電動車這些東西進行抽象,它們都共同擁有輸入功率、輸出功率這兩個屬性,只不過大小都各不同罷了,都可以做功產生能量,只不過能量的形式不同罷了。那麼我們就可以將它們抽象成電器類,因此電器類就有屬性:輸入功率、輸出功率,和功能:產生能量。
二者的關聯: 對象的抽象就是類,而類的具體化(實例化)就形成了對象。每一個對象都有所屬的類型,每一個類型下的對象都擁有的相同的屬性名和同一種功能,但是屬性具體的值大小和功能產生的結果不同,這也是爲什麼一個類下可以有多種對象,而這些對象又可以歸納總結爲一類對象。

類描述了具有相同特性(數據元素)和行爲(功能)的對象集合。 ——《JAVA編程思想》

3. 思維過程

我們在前面講過,在編程之前需要對問題進行分析(建立問題模型),實際上,使用面向對象思維建立問題模型就是抽取待解問題中任意的元素(形成問題的各種因素以各種事物),並將這些元素看成是對象,並定義對象所屬的類型,通過對類的具體化(實例化)生成對象,最後調用並組合使用各種對象解決待解問題。歸納後就是以下幾項步驟:

  1. 以對象思維看待各種問題元素
  2. 定義對象所屬的類型
  3. 類實例化形成對象
  4. 調用並組合使用各種對象
4. 消息與接口

在講對象時我們說到過,面向對象編程就是就是通過利用衆多對象裏的各種行爲來完成程序中一項項功能。而利用對象的各種行爲的過程,就是調用對象的接口,並將指定消息告訴對象使其根據你的消息完成特定的功能。這裏就好比如一個人會寫文章,他有 寫文章 這個接口,並且可以指定你要求寫的 文章類型 (小說、詩文等),如果你要他完成一篇小說,你就得調用他 寫文章 這個接口,並附帶 文章類型: 小說這一消息。
因此接口定義的是對象所能完成的行爲(功能)(或者說所能提供服務)以及可以接收的消息(可以是多個不同類型的消息),指定的消息不同,完成的功能結果就不同。 注:在具體編程語言中,這個可接收消息也叫做接口的參數。 接口確定了對某以特定對象所能發出的請求。

5.特性總結

1)萬物皆對象
在面向對象過程中,你可以將待解決問題中的任一元素(問題形成的因素和事物)看成對象。以對象思維看待各種問題元素。

2)程序即對象集合,它們通過發送消息來告知彼此所要做的。
面向對象編程就是就是通過利用衆多對象裏的各種行爲來完成程序中一項項功能,對象與對象之間可以相互傳達消息,相互調用接口,以此來配合實現程序的功能。

3)每個對象都擁有其類型
要先使用對象,就得建立對象的類型,而類又不能脫離對象單獨存在,因此每個對象都擁有其類型。

4)同屬一類的對象都提供同樣的服務
由於類的實例化就是對象,而類的屬性和行爲(功能)就是對象的屬性和行爲(功能),因此,由同一個類實例化出來的對象們,都擁有相同的屬性和行爲,自然都提供同樣的服務,接收同類型消息。

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