开发者学堂课程【Scala 核心编程-基础:面向对象编程介绍和入门案例】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/609/detail/8940
面向对象编程介绍和入门案例
目录:
一、类与对象
二、快速入门-面向对象的方式解决养猫问题
三、总结
一、类与对象
1.基本的概念
养猫的问题就是提出类与对象的一个关系。有一个张老太太养了两只猫,一个叫小白今年三岁,还有一个叫小花今年十岁。花色请编写一个程序,当用户输入小猫名字时,就显示该猫的名字、年龄和颜色。如果用户输入的小猫名字错误,则显示没有真正猫。如果没有类与对象关系,很难去处理。
这个猫有三个属性,类型不一样,用变量来保存不行。使用普通的变量不好管理。如果用三个变量来分别去管理猫的信息,将来就散了。将来张老太太养的不是两只猫,养的是2000只猫。是200乘以3,就是600个变量。其实真正这个面向对象的原因没有那么复杂。
2.面向对象处理要解决什么?
它出现了一个新的数据,这个时候就要使用一种新的类数据类型。这个数据类型要满足两个特点,第一个可以管理多个不同类型的数据,在这个基础上做一个扩展,这个新的数据类型不但能够去管理多个不同类型的数据,还希望这个类型可以对属性进行操作。类最核心的就是一个属性一个方法。设计属性来管理不同类型的数据。
第二个是用方法来操作属性。最后就引出了类与对象,类和对象类就是一种数据类型。对象是一个实例,也可以看的是一种类型,类本身也是一种对象。
3.Scala 语言是面向对象的
(1)java 面向对象的编程有语言,但是由于历史的原因,java 中还存在很多非面向对象的内容。Java 面向对象的纯度最多50%,还有5%不是面向对象的东西。比如像基本类型,int 就不是面向对象,int 是一个很基本的数据。Null、静态方法,静态属性都不是属于面向对象。因为静态方法静态属性是类这个级别的。所以严格来讲也不是面向对象。因此在 Scala 里面,把静态的东西拿掉,用伴生对象来替代静态的影子。
(2)Scala 语言来自于 java,就是面向对象的,而且 scala 是纯粹的面向对象及 Scala 中一切皆为对象,甚至包括null。
(3)在学 scala 面向对象的时候,可以对比 java 学习。
4.类与对象的关系
把猫所有特性,属性、行为提出来。比如认为一个猫它有年龄,有名字,有颜色,就把属性写出来。行为就是方法,这个猫可以 run,可以 cry,通过学习可以做算术题,他的计算就是他的行为。属性加行为就构成了猫类,猫类经过实例化就形成对象,这就是它的一个系统。
二、快速入门-面向对象的方式解决养猫问题
新建一个 com.atguigu.chapter06先建一个临时的一个文件。开始建一个包 oop,再新建一个类 CatDemo 选择object。
package com.atguigu.chapter
0
6.oop
object Catdemo{
def main(args:
Array[Strin
g]
):Unit
={
//创建一只猫
val cat = new Cat
//给猫的属性赋值
//说明
//1.cat.name 其实并不是直接访问属性,而是 cat.name_$eq(“小白”)
//2.cat.name 等价于 cat.name()
cat.n
a
me
=
"小白"
cat.age
=
10
cat.color
=
"白色"
Println(“ok”)
Printlf(“\n小猫的信息如下:%s %d %s,cat.name,cat.age,cat.color”)
}
}
//定义一个类 Cat
//一个 class cat 对应的字节码文件只有一个 cat.class 默认是 public
class Cat
//定义声明三个属性
//说明
//1.当声明了 var name:String 时。在底层对应 private.name
//2.同时会生成两个 public 方法 name()<=类似=>gettre public name_$eq()=>setter
var name :String
=
""
//给初始值
var age :Int
=_
// 表示给 age 一个默认的值,如果 Int 默认就是0
var color:String=
_
// 经 color 默认值,如果 String ,默认就是“”
运行过后,打开反编译器,找到 chapter06在这里面有个 OOP,打开。如果写的是 class,那么它只会生成一个类文件。如果用 object 会生成两个,在这里它就只会生成一个 class,就是 cat。打开 OOP,三个均为私有,并不是public。既然是私有的,为什么可以直接去访问名字和年龄?原因是在于在底层还给他生成了一段方法。一个方法是name。这个 name 就是根据这个属性的名字生成的。这个函数是返回属性的。还有一个就是 name_$eq,这个函数是给它赋值的。如果传进了一个变量,它会把这个变量设置给 this.name。
运行结果:
D: \program\jdk8\bin\java
ok~
小猫的信息如下:小白10白色
说明写入信息正确。
三、总结
1.案例
(1)问题的描述:
张老太养了只猫猫:一只名字叫小白,今年3岁,白色。还有一只叫小花,今年10岁,花色。请编写一个程序,当用户输入小猫的名字时,就显示该猫的名字,年龄,颜色,如果用户输入的小猫名错误,则显示 张老太没有这只猫猫。
(2)问题
猫有三个属性,类型不一样。
如果使用普通的变量就不好管理
使用一种新的数据类型(①可以管理多个不同类型的数据[属性])②可以对属性进行操作-方法因此类与对象)
2.Scala 语言是面向对象的
(1)Jaya 是面向对象的编程语言,由于历史原因,Java 中还存在着非面向对象的内容:基本类型,null,静态方法等。
(2)scala 语言来自于 Java,所以天生就是面向对象的语言,而且 Scala 是纯粹的面向对象的语言,即在 Scala 中,一切皆为对象
(3)在面向对象的学习过程中可以对比着 Java 语言学习
3.快速入门-面向对象的方式解决养猫问题
object Catdemo{
def main(args:
Array[strin
g]
):Unit
={
//创建一只猫
val cat = new Cat
//给猫的属性赋值
//说明
//1.cat.name 其实并不是直接访问属性,而是 cat.name_$eq(“小白”)
//2.cat.name 等价于 cat.name()
cat.n
a
me
=
"小白"
cat.age
=
10
cat.color
=
"白色"
Println(“ok”)
Printlf(“\n小猫的信息如下:%s %d %s,cat.name,cat.age,cat.color”)
}
}
//定义一个类 Cat
//一个 class cat 对应的字节码文件只有一个 cat.class 默认是 public
class Cat
//定义声明三个属性
//说明
//1.当声明了 var name:String 时。在底层对应 private.name
//2.同时会生成两个 public 方法 name()<=类似=>gettre public name_$eq()=>setter
var name :String="" //给初始值
var age :Int =_ // 表示给 age 一个默认的值,如果 Int 默认就是0
var color:string=- // 经 color 默认值,如果 String ,默认就是“”