本文概述
srcmini最近在该处开设了第一个Scala课程:Scala简介。看看这个!
另外, 请查看以下教程:
- Scala初学者指南
- IF ELSE在Scala
- Scala中的运算子
- Scala中的列表
介绍
资源
通常, 面向对象编程(OOP)由类和对象组成, 旨在实现诸如多态性, 继承之类的现实世界实体。
OOP使开发方式更快, 更便宜, 并且具有更好的软件可维护性。产生这种魔力的主要原因是它支持的功能数量。与缺少类和对象的程序相比, 你有类和对象可以根据需求在将来轻松重用。反过来, 这导致了更高质量的软件, 该软件也可以通过新的方法和属性进行扩展。
比方说;你有一个汽车展示厅;生产线每隔几个月就会推出一辆新车, 并且要向听众介绍它的名称和功能, 你必须从头开始定义新方法和属性。但是, 如果你有一个具有car类的面向对象程序, 那么你将添加的只是该新汽车的对象, 该对象将使用车辆信息调用类方法和属性。
可以将类视为对象的表示形式或设计。类通常将具有自己的方法(行为)和属性。
属性是将每个对象区分开来并确定对象的各种质量的单独实体。另一方面, 方法更像是函数通常在编程中的操作方式。它们确定类实例的工作方式。主要是因为方法(行为);对象有权对他们执行某些操作。
资源
上图为你提供了有关面向对象编程流程的直观信息, 或者更具体地说, 是类的外观。在上面的图片中, 有一个具有以下属性的类汽车:燃料, 最大速度, 并且可以具有更多属性, 例如模型, 制造等。它具有不同的方法集, 例如refuel(), getFuel(), setSpeed() , 还有一些其他方法可以是换档, 启动发动机, 停止发动机等。
因此, 当你谈论特定的汽车时, 你将拥有一个对象, 它是类的实例。
现在, 让我们谈谈Scala中的面向对象编程。
Scala中的类和对象
与c ++和java一样, Scala中的面向对象编程遵循几乎相同的约定。它具有定义类和对象以及在类构造函数中的概念, 这就是Scala中面向对象编程的全部内容。
类声明
class Class_name{
// methods and attributes
}
Scala中的类由关键字class定义, 后跟类的名称, 通常, 类名以大写字母开头。很少有关键字是可选的, 但是可以在Scala类声明中使用, 例如:class-name, 它应该以大写字母开头:superclass, 父类名称以extend关键字开头:traits, 这是一个用逗号分隔的列表, 已实现通过扩展关键字开头的类。
Scala中的一个类只能继承一个父类, 这意味着Scala不支持多个继承。但是, 可以通过使用”特征”来实现。
最后, Scala中的类主体由花括号{}包围。
// Name of the class is Car
class Car
{
// Class variables
var make: String = "BMW"
var model: String = "X7"
var fuel: Int = 40
// Class method
def Display()
{
println("Make of the Car : " + make);
println("Model of the Car : " + model);
println("Fuel capacity of the Car : " + fuel);
}
}
object Main
{
// Main method
def main(args: Array[String])
{
// Class object
var obj = new Car();
obj.Display();
}
}
你可以使用名称class.scala保存上面的代码, 并在终端上将其作为scala class.scala运行, 你应该看到如下输出。
很好, 上面的代码没有完全利用面向对象程序所具有的特权。由于以上代码的输出将返回相同的结果, 而不管你运行了多少次。你在类内定义了静态变量, 即使你创建无限的新对象, 这些变量的值也将保持不变。总之, 你不能期望它会为你提供梅赛德斯奔驰或法拉利汽车的详细信息。
Scala的构造函数
构造函数主要用于初始化对象状态。该对象初始化在对象创建时发生, 并且仅被调用一次。
Scala中有两种类型的构造函数:Primary和Auxiliary。在本教程中, 你将学习有关主构造函数的信息(来源:O’Reilly)。
class Class_name(Parameter_list){
// methods, attributes
}
主构造函数包含与类相同的主体, 并且它与类定义一起隐式创建。它从类定义开始, 并跨越该类的整个主体。同样, 当Scala程序中只有一个构造函数时, 它被称为主要构造函数。可以使用零个, 一个或多个参数来定义主构造函数。
因此, 让我们以前面的示例为例, 但这一次将主要的构造函数功能添加到其中, 并观察其效果。
另外, 你还将在这里学习类的新功能, 即, 一个类可以具有多个对象或实例, 但它们彼此独立。
// Name of the class is Car
class Car(make: String, model: String, fuel: Int)
{
// Class method
def Display()
{
println("Make of the Car : " + make);
println("Model of the Car : " + model);
println("Fuel capacity of the Car : " + fuel);
}
}
object Main
{
// Main method
def main(args: Array[String])
{
// Multiple Class object
var obj1 = new Car("BMW", "X7", 40);
var obj2 = new Car("Mercedes Benz", "S350D", 50);
obj1.Display();
obj2.Display();
}
}
让我们快速查看输出:
好吧, 这不是很好吗?借助构造函数, 你可以生成更有效的结果。
在Scala中声明对象
在Scala中声明对象也可以称为实例化一个类或调用一个类。与类相似, 对象也是面向对象编程的基本单元。
一个对象可以包含三个功能(来源:GeeksforGeeks):
- 状态:对象的属性表示它。它还反映了对象的属性。
- 行为:对象的方法表示它。它还反映了一个对象对其他对象的响应。
- 身份:它为一个对象赋予唯一的名称, 并使一个对象能够与其他对象进行交互。
将Dog视为对象, 请参见下图以了解其身份, 状态和行为。
(资源)
所有实例或对象共享类的属性和方法。正如你在此处了解到的, 单个类可以具有多个对象。但是, 每个对象的状态或值都是唯一的。
最后, 你将编写一个将主要构造函数, 类变量, 属性和方法组合在一起的代码。
下面是在Motorcycle类中放在一起的组件的图形表示。
下面的代码是不言自明的;但是, 它会在较高级别上检查摩托车引擎是打开还是关闭。最初, 引擎处于关闭状态, 它将通知你其状态并将其打开。
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。设计原则有助于使代码更加结构化和可读性。有关设计模式的更多信息, 请考虑阅读本书。
请随时在下面的评论部分中提出与本教程相关的任何问题。
最后, 不要忘了参加有关srcmini的新Scala课程” Scala简介”。