DataCamp 最近推出了他們的第一個 Scala 課程:Scala 入門。快去看看吧!
同時,也来看看以下的教学教程:
簡介

一般來說,面向對象程式設計(OOP)包括類別和物件,並旨在實現像是多型性、繼承等真实世界的事物。
OOP 可以使開發速度變快、成本降低,並提高軟體的可維護性。這種魔法的主要原因是它支持的特性數量;你有類別和物件,這些可以根據需求輕鬆地在未來重複使用,與缺乏類別和物件的程式相比。這進一步導致了軟體質量的提升,也具有新增方法和屬性的擴展性。
假設你有個汽車展示間;每几个月,一部新汽車就会被推出,為了通知觀眾關於这部新车 name and features, 你必須從頭定義新的方法、屬性。然而,如果你有個面向对象的程式,這個程式裡有一個汽車類別, 那你所做的就是為這款新汽車新增一個物件,這個物件會呼叫類別的方法與屬性,並傳入這部車的信息。
類別可以被視為物件的表現或設計。類別通常會有自己的方法(行為)和屬性。
屬性是区分每個物件彼此的獨立实体,並決定物件的各种質量。方法,另一方面,更像是在程式中通常如何操作函數。它們決定類別實例的運作方式。正是因為方法(行為),物件才有能力對它們進行操作。

上面的圖示给你更多关于面向对象程式設計的流程或更specifically, classes look like 的直觀印象。在上面 Pictures, there is a class car
which has attributes: fuel, max speed
, and can have more attributes like the model
, make
, etc. It has different sets of methods
like refuel()
, getFuel()
, setSpeed()
, and some additional methods can be change gear
, start the engine
, stop the engine
, etc.
所以,當你談論一部特定的汽車,你會有一個物件,這是一個類別的實例化。
現在,我們來谈谈Scala中的面向對象程式設計。
Scala中的類別與物件
與C++和Java一樣,Scala中的面向對象程式設計基本上遵循相同的惯例。它有定義類別
和物件
的概念,以及於類別建構子
內,这就是Scala中的面向對象程式設計的全部。
類別宣告
class Class_name{ // 方法和屬性 }
在Scala中,類別是由class
關鍵詞跟上類別的名稱定義,一般來說,類別名稱以大寫字母開始。有些關鍵詞是可选的,但可以在Scala類別宣告中使用,例如:class-name
,它应以大寫字母開始:superclass
, preceded by extend keyword的父類別名稱:traits
,它是一個以逗號分隔的列表,由類別 preceded by extend keyword實作。
在Scala中,一個類別只能繼承一個父類別,這意味著Scala不支援多重繼承。然而,透過使用Traits
可以實現这一点。
最後,Scala中類別的內容被大括號{}
包圍。
// 類別的名稱是Car class Car { // 類別變量 var make: String = "BMW" var model: String = "X7" var fuel: Int = 40 // 類別方法 def Display() { println("Make of the Car : " + make); println("Model of the Car : " + model); println("Fuel capacity of the Car : " + fuel); } } object Main { // 主方法 def main(args: Array[String]) { // 類別物件 var obj = new Car(); obj.Display(); } }
您可以將以上程式碼儲存為 class.scala
,並在終端機上以 scala class.scala
執行它,您應該會看到以下輸出。

好吧,以上程式碼並未充分利用物件導向程式的 privileges。由於以上程式碼的輸出结果與您運行次數無關,您在類別中定義了靜態變量,這些變量的值將保持不變,即使您創建無窮多的新物件也是如此。總結來說,您不能期望它能为您提供奔驰或法拉利轿车的詳細信息。
Scala 中的构造器
構造器主要用於初始化物件狀態。物件的初始化發生在物件創建時,且只被呼叫一次。
Scala 中有兩類構造器:主要
和 輔助
。對於本教程,您將學習主要構造器(來源:O’Reilly)。
class Class_name(Parameter_list){ // 方法、屬性 }
主要構造器包含與類相同的體,並且在類的定義 implicitly 同時創建。它從類的定義開始,横跨類的整個體。此外,當Scala程式中只有一個構造器時,它稱為主要構造器。主要構造器可以定義零個、一個或多個參數。
所以,讓我們取之前的示例,這次將主要構造函數特點添加到其中並觀察影響。
此外,您將學習類的一項新特性,即類可以具有多個物件或實例,但彼此獨立。
// 類的名稱是 Car class Car(make: String, model: String, fuel: Int) { // 類方法 def Display() { println("Make of the Car : " + make); println("Model of the Car : " + model); println("Fuel capacity of the Car : " + fuel); } } object Main { // 主方法 def main(args: Array[String]) { // 多個類物件 var obj1 = new Car("BMW", "X7", 40); var obj2 = new Car("Mercedes Benz", "S350D", 50); obj1.Display(); obj2.Display(); } }
讓我們快速查看輸出:

嗯,這不是很棒嗎?借助構造函數,您能夠產生更有效的結果。
在Scala中宣告物件
在Scala中宣告物件也可以稱為初始化類或調用類。與類一樣,物件也是面向對象程式設計的基本單元。
一個物件可以包含三個特性(來源:GeeksforGeeks:
狀態:
物件的屬性代表它。它也反映物件的屬性。行為:
物件的方法代表它。它也反映物件與其他物件的互動。身份:
它給物件提供唯一的名稱,並使一個物件能夠與其他物件互動。
將 Dog 視為一個物件,並查看下面的 diagram 來了解其身份、狀態和行為。

所有實例或物件共享類属性和方法。一個單一的類可以具有多個物件,正如您在 這裡 學到的。然而,每個物件的狀態或值是獨特的。
最後,您將撰寫一個程式碼,該程式碼將主要建構函數、類變量、屬性和方法結合在一個單一的程式碼中。
以下是一個圖形表示,展示了類 Motorcycle
中的部件。

下面的程式碼相當容易解釋;在高层次上,它檢查摩托車引擎是 on
還是 off
。最初,引擎被置於關閉狀態,它將通知您其狀態並將其切換為开启。
class Motorcycle(make:String,color:String) { var engineState: Boolean = false; def startEngine() { if (engineState == true){ println("The engine is already on."); } else { engineState = true println("The engine is now on."); } } def showAtts() { println("This motorcycle is a "+ color + " " + make); if (engineState == true){ println("The engine is on."); } else{ println("The engine is off."); } } } object Main { def main (args: Array[String]) { var m = new Motorcycle("BMW K 1600 GTL","White"); println("Calling showAtts..."); m.showAtts(); println("------"); println("Starting engine..."); m.startEngine(); println("------"); println("Calling showAtts..."); m.showAtts(); println("------"); println("Starting engine..."); m.startEngine(); } }

恭喜您!
恭喜您完成本教程。
您現在知道如何在 Scala 中宣告類和方法、實例化物件、設定其屬性以及呼叫實例方法。這些概念將對您在 Scala 乃至其他程式語言中有所用處。
面向對象程式設計的概念既有趣又同時非常強大。它為您的代碼增添了新維度,使其可重用。隨著您的程式變得越來越大,您的代碼將會在複雜性上增長。面向對象程式設計概念中如繼承、多型、實例方法等,有很多實質內容。另一個強大的功能是單例(Singleton)。設計原則有助於保持您的代碼結構化和易讀性。關於設計模式的更多內容,請考慮閱讀這本書。
如果您對本教程有任何疑問,請在下面的評論部分隨時提問。
最後,別忘了在DataCamp上參加新的Scala課程,Scala入門。
Source:
https://www.datacamp.com/tutorial/scala-classes-objects