每天一杯Java-D2-物件導向程式設計概述

KenLee
Oct 12, 2020

--

內有柴犬,慎入!

大部分的教程都是先教如何執行出Hello World,讓人有稍微寫程式的感覺,但我認為在下筆寫Java之前必須理清物件導向程式設計的基本原理,如此以來才能明白寫的每一行是什麼以及要怎麼寫下一行,如果你不知道物件導向就開始寫,會腦袋一片空白不知道自己在寫什麼鳥,別害怕,基本原理非常簡單易理解,趕快打開你的聰明小腦袋理解物件導向程式設計原理!而物件導向的四大特色將在第四杯跟大家討論。

==第二杯內容物==

#Object configuration 物件的組成

#Class — blueprint of object 類 — 物件的說明書

#Declare 宣告

#Constructor 建構子

#如何製造物件?

#Object configuration

物件導向程式最主要目的就是讓程式碼具有靈活運用的彈性以及容易維護的特性,因為他把一個物件的資料打包起來,讓人類比較好理解程式的運作方式,在第一杯我們喝到了物件導向的核心概念,描述真實物體的一整段程式碼就是一個物件,接著我們來深入了解這一段程式碼的組成吧,下面是物件導向的精髓,記起來你就是50%的物件導向專家了:

An object consists of state and behavior.

State is stored in fields

Behavior is exposed through method

先不要畏懼這些抽象的詞彙,只要理解每個單字的意思就可以明白物件的基本概念了喔,一個真實的物體可以用狀態(想像成靜態外觀)和表現(想像成動態的行為)來描述,同樣的,物件導向語言中的物件就是由state(狀態)和behavior(表現)所組成,而整體的狀態(state)是存在每一個fields裡(例如腳踏車的顏色和大小)集合而成的狀態,整體的表現是藉由不同的methods(例如腳踏車會前進也會煞車)所表現,物件的示意圖如下:

An object consists of state and behavior.

再來我們來實際看一個描述柴犬的state 和 behavior的程式碼,這裡面包含柴犬的特徵和動作,以及我們創造出來的一隻黑柴和一隻赤柴(找看看程式碼裡面的 blackChai 和 orangeChai在哪裡吧):

chaiChai class

其實在其他教程裡會在最一開始把類別裡寫完state和behavior來當作一個物件,我覺得這樣很容易搞混觀念,所以我在這邊就把完整的類別到新增一個物件的方式寫出來,雖然第一次看程式碼就看一整段會非常天旋地轉,但我會一步一步解釋,耐心的看完就會明白這兩隻柴柴了,首先我們來看看第一行的Class。

#Class — blueprint of object 類 — 物件的說明書

實際上在撰寫Java程式碼時,基本上都是在撰寫類別,而不是撰寫物件。

syntax of creating a class

最一開始我們會先寫出這個文件是Class(類別),先不管public是什麼 ,這個你會在第七杯-資料存取權限與Static Keyword喝到,而類別就是我們菜鳥想像的那種類別,就是人類的類,種類的類,往下會根據我們定義類別的state 和 behavior來創造出不同的物件,所以說,類別定義的state和behavior是我們要創造的物件所共同擁有的,而這些定義都必須寫在{ }大括號裡面喔。

syntax of declaring fields or variables

#Declare 宣告

這裡我們寫一個chaiChai(柴柴)類,然後在大括號裡面declare (宣告,這是一個聽起來很酷炫的動作,但其實就是告訴Java我們有哪些東西,如此而已)fields,這個柴柴類別裡宣告的fields(所有的fields 集合起來就代表一個柴柴的狀態(state))有String(字串)、int(整數) 、Boolean(布林值)這幾種,這些到底是什麼魔神仔,我們會在下一杯討論,一樣要繼續看下去喔,簡單說這些都是不同的資料型別。

宣告fields or variables 的語法: 資料型別 + 名稱 ;

所以這裡我們宣告叫做name、color、temper的fields,而儲存在這些fields裡的資料的型別是String。

還有宣告叫做age的fields,儲存在這個field裡的資料的型別是int。

以及宣告叫做cute的fields,儲存在這個field裡的資料的型別是Boolean。

我們目前還沒有指定資料到這些fields裡,接下來我們就來看儲存資料進去的方式之一:Constructor (建構子),柴柴就快出現了!!

#Constructor 建構子

syntax of a Constructor

Constructor 建構子的語法:與類別相同的名稱 (資料型別+參數){ }

顧名思義,建構子的目的就是去建構一個物件,之後我們在新增兩隻柴柴物件的時候就是用建構子去建構他們,建構子的名稱必須與類別名稱相同,這是固定的語法,請刻在你們心底,跟隨在名稱之後的小括號內可以輸入資料(Java裡稱為 arguments)到我們上一段所宣告的fields裡面,所以我們在小括號內可以放入我們要輸入的資料型別+parameter參數,arguments跟parameter的差異非常非常的微妙,arguments指的是要輸入進去的那些資料,parameter指的是一個代號,建構子內使用這些代號來代表這些arguments。

argument -> 輸入進去的資料 -> 真的數值

parameter -> argument在建構子內的代號

所以這裡我們在小括號內用name來代表輸入進去型別為String的資料,這個name只在建構子大括號內作用,這個name跟宣告field時所命名的name是完全不一樣的,這兩者的差別搞清楚非常非常的重要喔,接下來我們來看看大括號裡面的神秘訊息。

syntax of a Constructor

this又是什麼魔神仔,其實就是你想的那個this,他是在建構子內代替本身的代號,這很重要,在建構子內必須以this來代表本身,不然Java會以為你在叫別人,所以這裡的this就是代表chaiChai這個類別,或是說之後被創造出來的這個物件,如果是黑柴物件就是代表黑柴,赤柴物件就是代表赤柴,再來我們來解構this.name = name; 在說什麼吧。

取得儲存在物件內field裡資料的語法: 物件.field

this.name 就是把this裡叫做name的field所儲存的資料叫出來,這裡就是把我們上面宣告的String name呼叫出來,然後把他assign(指定,=)給參數name,所以我們的argument就會藉由代號name被儲存在name field裡面了!!其他的指定也是相同的原理!

建構子有不同的種類,這個我們會在第五杯-Constructor建構子討論。

最後我們就來創造可愛的黑柴跟赤柴吧 ^^

#如何製造物件?

syntax of instantiating a class

請先忽略這裡的public static void main (String[] args) ,main代表的意義將在每天一杯Java-D6-Method方法討論,public 和Static 會在第七杯-資料存取權限與Static Keyword討論,void將在第八杯-資料回傳型別與signature討論。

Instance of Class = Object →類別的例項 = 物件

其實在Java裡創造物件有一個很酷炫的說法,叫做例項化(跟宣告一樣酷,對吧),故名思議就是按照類別(說明書)把物件做出來(例項化 ,instantiate),所以類別的例項其實就是物件。

新增一個物件(例項化物件)的語法:類別名 物件名 = new 建構子;

這裡建構子就派上用場了!!!好興奮,再滑上去建構子的部分複習一次吧,特別注意這裡new這個字,在例項化物件的時候這是必要存在的字,是固定的語法,一樣請刻在你們心底,所以我們的黑柴和赤柴就被創造出來了,他們分別是以下這兩個物件:

blackChai {

String name = “fairy”;

String color = “black”;

String temper= “bad”;

int age = 2;

Boolean cute = true;

}

一隻名叫fairy、顏色是黑色、脾氣不好、年齡兩歲、可愛的黑柴。

orangeChai {

String name= “apple”;

String color = “orange”;

String temper = “good”;

int age =3;

Boolean cute = true;

}

一隻名叫apple、顏色是橘色、脾氣好、年齡三歲、可愛的赤柴。

柴犬都是可愛的 ><

--

--

KenLee

世界上有10種人 ,一種懂twice的,另一種不懂twice的