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類,但是卻無法知道內部的數據和功能是什麼樣的,比如我們不知道里面根據狗子的品種和年齡可以算出它患某些隱形疾病的概率(我沒寫,不知道咋寫哈哈哈)我們直接輸入就可以得出一個概率。這個類就是被封裝好的,我們直接調用即可。

多態

多態實際上是一種功能的不同種實現:比如日常行爲中:吃飯,有人喜歡用筷子吃,有人喜歡用勺子吃。他們的行爲都是吃飯,在程序定義初期,並沒有規定誰要怎麼吃飯,而是在運行的過程中,根據數據的不同,得到的行爲是不同的。張三喜歡用勺子吃飯,李四喜歡用筷子,那麼輸入數據張三的時候,就會得到喜歡用勺子,輸入李四就得到喜歡用筷子。同一種行爲,不同的實現方式

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