Kotlin自学日记之面向对象

面向对象

-对象
-类
-继承
-封装
-多态

对象的含义是指具体的某一个事物,即在现实生活中能够看得见摸得着的事物。在面向对象程序设计中,对象所指的是计算机系统中的某一个成分。在面向对象程序设计中,对象包含两个含义,其中一个是数据,另外一个是动作。对象则是数据和动作的结合体。对象不仅能够进行操作,同时还能够及时记录下操作结果。

对象

首先在这里引用了面向对象中对对象的解释。对象其实就是指现实中的具体事物每一个具体的事物都有其对应的属性,当对这些属性进行归类。可以归结为数据和动作(方法),拿电视来举例:其数据也就电视所具有的属性的集合,电视的长、宽、薄厚、材质、接口等等这些基本的,固有的属性;动作(方法)则包括:开电视,点播,换台,设置等等状态改变。

对象=数据+方法

所以面向对象也就是指把数据和方法看做一个整体,将其抽象化建模,更加贴近事物的自然运行规律。此时就可以方便的对一个事物进行定义。也就是说通过对数据的建模可以轻易的对一个电视进行建模:

此时引入类的概念

类是具有相同特性(数据元素)和行为(功能)的对象的抽象。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象,类实际上就是一种数据类型。类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。

对象的抽象是类

抽象是指:将具体事物抽出,概括他们的属性,特征和关系等…
对象的抽象也就是说将一个事物的方法和数据的属性特征和关系等抽出,然后利用建模的方式进行概括。概括后统称为类。可以将类理解为一种模板,通过这个模板可以搭建出很多有相同属性和方法的事物。

类的具体化就是对象

将模板的数据和方法进行具体化,就可以得到一个个对象,数据和方法变化会得到不同的对象,比如(定义不准确,望海涵):

class TV(var height:Int,var width:Int,var material:String,var land:Int,var brand:String)//电视类:包含属性  长宽厚度材质品牌

如果我给这个电视赋予长 100厘米 宽 60厘米 厚度50厘米 塑料材质 松下品牌的属性 那么它就是松下的一个大头电视;
如果我给电视赋予 100厘米 60厘米 2厘米 复合材料 海尔品牌的属性, 那么它就是海尔品牌的超薄电视
它们都是电视
却因为属性的参数有所不同而不同,也就是一个将电视具体化为各个类型的电视

类是一种数据类型

类其实就是一种复杂的数据类型
在这里我们定义一个普通的数据类型:

var name:String="张三"

这一个String类型的数据, 定义了一个变量 名字 这个名字就相当于一个类,也就是一个模板,我们对名字的赋值不同,产生的对象就不一样。可以是张三对象李四对象,但他们都是一个名字。
回到上面的电视:
其实类就是多个简单的数据类型组成的一个复杂的数据类型。电视类包括了几个变量,根据赋值的不同,产生不同的对象。

所以明白了类和对象的关系后,能够更加深刻的理解该如何对一个对象进行抽象。就能够更加准确和详细的去描述一个事物。

继承

继承的通俗理解是(继续用电视举例子):我有一个电视类,现在我可以定义出什么品牌的什么样的电视,但是我现在有一个新的需求,我要知道电视是LED的还是VA的 ,刷新频率是多少,能不能联网。此时如果我再去重新定义一个电视类那就得不偿失了。费时又费力,此时我可以将电视类作为基类,也就是具有基本属性的类,在此基础上加上特殊的属性成为一个新的类,也就是派生类。
继承是一个一般到特殊的过程

继承简单地说就是一种层次模型,这种层次模型能够被重用。层次结构的上层具有通用性,但是下层结构则具有特殊性。在继承的过程中类则可以从最顶层的部分继承一些方法和变量。类除了可以继承以外同时还能够进行修改或者添加。通过这样的方式能够有效提高工作效率。

封装

封装的通俗理解(计算器):我们在使用计算器的时候,输入一个数据 1+1=2,或者拉格朗日,开平方,平方也好,都是我们输入一个数据,然后计算器给我们一个结果,我们无法看到计算器内部是怎么样去计算你输入的数据,而是直接得到结果。

封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。

class dog(var kind:String,var name:String,var age:Int,var character:String)
{
	//内部定义函数
}
fun main(args:Array<String>)
{
	var dog01=dog("拉布拉多","妞妞","3","开朗")
	println(dog01.kind)
}

此时dog类就是被封装好的,我们在主函数中直接调用这个类,定义好的dog01就是一个对象,此时类具体化为一个叫妞妞的拉布拉多3岁开朗小狗子,我们可以知道dog类,但是却无法知道内部的数据和功能是什么样的,比如我们不知道里面根据狗子的品种和年龄可以算出它患某些隐形疾病的概率(我没写,不知道咋写哈哈哈)我们直接输入就可以得出一个概率。这个类就是被封装好的,我们直接调用即可。

多态

多态实际上是一种功能的不同种实现:比如日常行为中:吃饭,有人喜欢用筷子吃,有人喜欢用勺子吃。他们的行为都是吃饭,在程序定义初期,并没有规定谁要怎么吃饭,而是在运行的过程中,根据数据的不同,得到的行为是不同的。张三喜欢用勺子吃饭,李四喜欢用筷子,那么输入数据张三的时候,就会得到喜欢用勺子,输入李四就得到喜欢用筷子。同一种行为,不同的实现方式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章