程式概念─類別(class)與物件(object)的練習
◆課堂練習&作業8:練習使用類別,內容包含:屬性、方法、串聯、繼承◆
練習 1:屬性變更
想一個類別,生兩個物件,修改它們的屬性後,印出屬性的內容
- 先創立一個米克斯貓的類別
屬性設定:年齡、名字、肉球顏色(變數)品種都是米克斯(常數) - 創造兩個物件分別是 minuCat 跟 huhuCat,類別都是 MixedCat 但更改成不同的年齡、名字、肉球顏色
白話文:兩隻貓(兩個物件)都是米克斯貓(類別),但名字、年齡(變數的屬性)不一樣,但品種都是米克斯(常數的屬性)
3.列印屬性的內容,把屬性內容跟一些文字結合變成一般句子(?)
【筆記兼複習】
1.print的字串中要加入屬性內容或function計算結果之類的值時要用:
print(“字串內容\(值)字串內容")不能用:print(“字串內容” + 值+ “字串內容”)❌❌❌2.可用「,」將不同句的字串內容隔開
ex: print("字串A","字串B")
練習 2:加入方法
在前面練習定義的類別裡定義 function,建立物件並呼叫 function
方法(Method)其實就是指令,也就是 function,只是當 function 被包在 class 裡面的時候被稱作方法(總之就是做動作)
關於類別中的屬性及方法,自我流解讀為:屬性是名詞(例如:名字、年齡、特徵)
方法是動詞(要做動作,例如:加減乘除、發出聲音、點擊)
貓咪又不能變顏色、除了年齡沒別的東西可以增減,只好從日常著手──計算熱量跟喝水量
身為一隻有輕微慢性腎病又微胖的老貓的飼主,自從太上皇上次開始挑食之後就對飲食審慎紀錄 ρ(・ω・、)(還有就是身體出狀況可以追溯吃了哪些東西)
- 雖然不是沿用剛才建立的類別,要做新的類別來用,總之先創立一個類別,並宣告變數屬性:熱量跟水份攝取量
- 加入 function,並加入參數(乾糧重量/濕糧重量,型別為整數)
function 內的動作為:計算熱量、計算水量、列印出結果 - 建立一個物件,並呼叫 function。輸入乾糧濕糧分別的重量(參數)讓程式計算出熱量跟水份攝取量
【筆記兼複習】
1.要先建立物件才能呼叫function
建立物件: var/let xxx = 類別名()直接用類別呼叫function(類別名.function名)會有錯誤❌❌❌
因為類別只是一個模版,要創造新商品來套用模版,才能進行模版中寫入的動作2.型別不同不能進行運算
類別中的水量屬性的型別都是整數、參數(食物重量)型別也是整數,但0.1、0.75釋浮點數不能跟整數一起運算
所以整體結構是:先改變參數型別→進行運算→為符合屬性再改一次型別
(先把參數從Int改為Double,Double跟Double進行運算,算出來的結果為Double,但是屬性型別是Int,所以要再從Double改回Int)
練習 3:串聯
Peter 上課說到的寶寶的兔子的名字比較好懂😂 為了練習改成別的內容反而有點難用文字描述(看圖吧 XD)
- 創造兩個類別,分別是 CatName 跟 CatMeal
並且 CatMeal 中的貓咪名字屬性=CatName 這個類別 - 創造新物件:myCatMeal,類別為 CatMeal
CatMeal 類別中的 catName 屬性會串聯到 CatName 類別中的 name 屬性
myCatMeal 的(.)貓咪名字(catName)的(.)名字(name)= “MINU”
練習 4:繼承
定義兩個類別,用到繼承,類別裡包含屬性和方法。然後用類別生出物件存取物件的屬性和呼叫物件的方法
- 創造三個類別,一個是甲廠牌罐頭的統一數據(水份含量都是85%、重量屬性)第二個是甲廠牌罐頭中的 A 口味、第三個是甲廠牌罐頭中的 B 口味(都繼承甲廠牌的水份含量,但兩個口味的熱量不同)
- 8 月 11 日早餐吃 A 口味罐頭、晚餐吃 B 口味罐頭,可以計算出兩餐分別的水份含量和熱量
- 下面再加入每天額外加的水份(變數,因為每天不一樣)用 print 印出整天的飲食記錄
其實在寫的時候有點疑惑串聯跟繼承差在哪,有些部分是不是用串聯就可以不用用到繼承,不過做成圖之後有稍微感受到差異(個人理解,不確定有沒有誤)
串聯:一層包一層,某個屬性中包入另一個類別(通常是屬性間的串聯:某某的 OO 的 XX ←都是名詞,沒有動作)繼承:像父子關係,父層類別裡的內容子層類別都可以共用(屬性、方法都能用)
【完整程式碼】
※為了避免混淆,四種練習都各自創了新的類別跟物件,每個練習可以獨立出來看
文中提到的貓咪飲食記錄,其實在剛開始上課的時候就有思考做成 APP 的可能性(人都有記錄卡路里的 APP 了,貓也可以!)
不過如果是要給世人(?)使用,比起程式撰寫,更難的應該是後面資料庫的問題 (゚∀。)(糧食百百種資料量很大,加上寵物食品標示其實計算起來頗複雜,萬一某款飼料改了成分,更新也會是大工程)
不過還是希望有一天可以做出 APP 來記錄 ᕦ(ò_óˇ)ᕤ(遠大的夢想之一)