# 物件導向 1 - 學習J筆記 學習 JAVA 的路上,可能最需要懂得就是這些基本觀念 預計下個學期在學校修課,但覺得自己可能還是先來看一下比較好 大四了,總覺得該把時間花在對的事情上,包括鞏固自己的學習方法、了解自己的目標跟方向、扎實地紀錄自己走過的路,希望往後的日自我能夠持續努力下去 ## 物件導向程式設計概念 物件導向顧名思義就是利用軟體模擬現實生活中的實體,這些實體在物件導向程式當中就是物件,每個**物件**可以有自己的"屬性"以及"方法" 而物件導向的程式就是透過物件的方法產生互動,完成程式的目標 物件導向程式中具有四大概念:**class**(類別)、**object**(物件)、**method**(方法)、**property**(屬性) 類:人可以看作一個類。 物件:具體到什麼人(黃種人,白種人,黑種人,中國人等等)這就可以看作是物件,可以根據需求繼續往下區分,比如 男人 女人。 屬性:比如說黃種人的特點:黃面板,黑頭髮,黑眼睛等等,這些就是黃種人具有的屬性,本身存在的,也可以是後天加上去的,是不需要人刻意去行動,自然而然表現出來的。 方法:方法其實是某種人的具體行為解釋,比如說會走路,會說話 以及三大特性:封裝、繼承(extend)、多型 ## 程式設計概念 >在純物件導向的程式中,每一個運作實體都可視為某種類別衍生出來的物件 * 類別具有較為抽象的概念,他會是某些具有共同特性物件的集合 * 換句話說,物件則代表了類別的實體 * 原則上每個物件相互獨立且無關聯性 >物件之間的互動是透過訊息(Message)的傳遞來達成 * 發送訊息的物件稱之為發送者(sender) * 接受訊息的物件稱之為接收者(receiver) * 當物件需要其他物件服務時,會發送訊息給接收者,接收者在收到訊息後,會執行符合要求的方法完成任務以提供服務。 * 由於每一個物件都是一個獨立的個體,因此改良某一物件的內容時,其他不同類別的物件並不需要跟隨著變動。 --- ### 物件(object) >真實世界的所有不論具體或抽象事物,都可以視為是一個物件 我們可以想像飛機、狗、鬼魂、螺絲釘、地球,這些東西都可以成為物件 想當然耳,這些物件都可以被拆分成更小的物件,像是飛機可以被拆分為機翼、輪胎、機身、座椅...等等。 >在程式設計當中,單一物件應該要是一個完整單元,然而物件也應該要可以組合成為更大的物件。 例如一個按鈕、一個空格是單一且完整獨立的物件單元,但是多個按鈕加上多個空格就可組成一個可回覆式表單,可回覆式表單也會是一個單一且完整的物件單元。 #### 屬性(property) >物件擁有許多特性(attribute),這些特性代表了一個物件的外觀或某些性質 一輛汽車(物件)可能有不同的顏色、型號,而這些特性就是物件的"屬性" 然而,在我們取得"物件的屬性"時,也可能是去取得另外一個"物件"。 汽車的引擎可以是汽車的屬性可能叫做"動力來源",但他也是汽車的一個子物件;或是汽車的引擎廠牌,也可以是引擎本身的子物件。這些物件,也會存在自己的方法 >在程式設計或執行階段,我們可以藉由改變屬性來改變整個物件的某些特性,完成我們想要的物件表示形式。 將汽車烤漆為藍色,椅墊要是牛皮的...等等 >在 Java 語言中,屬性(Property)被稱為 Field(有人翻譯為欄位;有時也翻譯為成員資料變數),並且被區分為不同的等級 * 某些等級的屬性,不允許外部的程式對他們加以修改,必須透過該物件的方法,才能夠達到修改的目的 * 因此透過物件去附帶屬性,有保護資料的功能 #### 方法(method) >每個物件都擁有不同數量的行為,這些行為在物件導向程式設計中稱之為方法。**不同種類的物件所擁有的方法大多不同,但同類物件擁有的方法則大致相同。** 同為飛行器的飛機和直升機,兩個雖然是"不同的物件",但是關於基本的方法應該都會包含"飛行"這個方法 >所謂方法,也就是為了完成該物件某些目標的處理方式 >每個方法都會有許多細節 如何達成起飛、降落、前進、後退這些方法都有各自的細節 >在 Java 中,方法也稱之為 method(有些書籍翻譯為方法或函式,也就是成員函式)。 * 同時 Java 的 method 也和 Field 一樣,被區分為多種等級 * 某些等級的成員函式同樣不允許外部程式呼叫執行(只能做為內部成員函式呼叫執行的對象) * 因此達到封裝物件的功能 >對於某些由他人完成的物件而言,該物件同樣必須提供許多關於物件的方法,如此一來,我們就不需要了解這些方法的細節,而能夠快速運用物件來完成工作 我們買了一台飛機,我只要會"操作"飛機,不需要了解飛機如何起飛、燃料如何供應,就能夠達到最低限度的使用 --- ### 類別(Class) >物件雖然是獨立的個體,不同的物件可以擁有相同的屬性及方法,例如:「一架民航機」和「一架戰鬥機」各是一個物件,但兩者的速度、爬升力、重量、載重量雖不相同,但卻同樣擁有這些屬性以便表達完整物件的各個特性。所以,不同的物件若擁有共同的屬性,但因為屬性內容的不同,因此可以創造出同類性質但卻獨立的不同物件。而同類型的物件,則構成了類別(Class) 例如每一個按鈕都是一個物件,屬於按鈕類別之下所建造出來的物件實體,但是由於按鈕的名稱不同,因此視為不同且獨立的物件 >更明確地說,類別才是物件導向程式設計最基本的單元 「民航機」和「戰鬥機」都是物件,而『飛行器』或『飛機』才是類別。不同的只是在建立該類別的實體物件時,給予不同的屬性而已。 >事實上,在 Java 這樣的物件導向程式語言中,我們必須先定義類別,然後才能夠透過類別宣告各個屬於該類別下的物件,接著再設定物件的屬性來代表該物件某方面的特性,並使用物件的方法來操作物件 ### 小結 * 從由下而上的角度來看,類別是許多同類物件的集合 * 所謂同類物件,代表擁有相同屬性(變數)、相同方法(函式)的物件集合 * 在純物件導向的程式中程式碼是以類別為基礎,而物件只是類別的實體 比如說 String 這個類別,可以讓我們宣告一個 String 物件 ```java= String MyName; ``` 但是這個 String 物件被宣告之後只有物件名稱,只有一個參考,沒有實體,因此實體的物件還是要透過new這個動作去產生。 ```java= String MyName = new String("Jeff"); ``` 如此一來才是完整的宣告了一個包含我自己名字在內的 MyName 物件 而這個物件是一個屬於 String 類別的物件,也就是說它包含了所有 String 類別、物件的屬性和方法。 對於程式來說,物件名稱是一個參考,利用參考指向物件實體,才可以形成對物件的影響。 在之後的筆記終將會個別介紹 JAVA 的類別、物件以及方法 2020/12/30 ###### reference [某處上課PPT](http://dns2.asia.edu.tw/~wzyang/slides/java/chen/se7ch07.pdf) [Java基礎總結(一)](https://www.itread01.com/content/1546524374.html) ###### tags: `JAVA` `學習計畫` `物件導向`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up