1. 程式人生 > >Scala實戰高手****第7課:零基礎實戰Scala面向對象編程及Spark源碼解析

Scala實戰高手****第7課:零基礎實戰Scala面向對象編程及Spark源碼解析

類名 修飾 hack 就是 博文 特征 def 編程 來源

/**
* 如果有這些語法的支持,我們說這門語言是支持面向對象的語言
* 其實真正面向對象的精髓是不是封裝、繼承、多態呢?
* --->肯定不是,封裝、繼承、多態,只不過是支撐面向對象的
* 一些語言級別的語法和功能,真正的面向對象其實有三個核心特征:
* 第一:對象不用關心消息從哪裏來,也不關心消息到哪去,只關心消息處理本身
* ,也就是說面向對象是弱耦合的且對象是消息驅動的,或者說對象是數據驅動的
* 第二:一個對象的行為不影響另一個對象的行為,一個對象掛掉了另一個對象
* 不會隨著它一起掛掉
* 第三:面向接口編程,為了封裝具體實現的不同和業務的變化
* 那麽從這個角度講,Java語言和Scala語言都不是面向對象的語言,Java和Scala
* 都是"支持"面向對象的語言,它用他的封裝、繼承、多態來支持面向對象的三大核心特征
* 或者說功能
*
* 函數:不依賴於類的
*
* 1.在Scala中定義類是用class關鍵字
* 2.可以使用new ClassName的方式構建出類的對象
* 3.如果名稱相同,則object中的內容都是class的靜態,也就是說
* object中的內容class都可以在沒有實例的時候直接去調用,正是
* 因為可以在沒有類的實例的時候去調用object中的一切內容,所以可以
* 使用object中的特定方法來創建類的實例,而這個特定方法就是apply方法
* 4.object中的apply方式是class對象生成的工廠方法,用於控制對象的生成
* 5.很多框架的代碼一般直接調用抽象類的object的apply方法來生成類的實例對象,
* 第一:其秘訣在於apply具有類的對象生成的一切生殺大權,抽象類是不可以直接實例化的,在
* apply方法中可以實例化抽象類的子類,以Spark中的圖計算為例,Graph是抽象類的
* class,在object Graph中的apply方法實際上是調用了Graph的子類GraphImpl
* 來構建Graph類型的對象實例的,當然從Spark圖計算的源碼可以看出,GraphImpl
* 的構造是使用了object GraphImpl的apply方法
* 第二:這種方式神奇的效應在於更加能夠應對代表版本叠代或者修改的變化,這是更高意義
* 的接口編程
* 6.object C7是class C7的伴生對象,class C7可以直接訪問
* object C7中的一切內容,而class C7是object C7的伴生類
* ,object C7可以直接訪問class C7的一切內容,一個特例是private[this]
* 修飾的成員,我們會在後面講解
* 7.在定義Scala的class的時候可以直接在類名後面()裏加入類的構造參數,此時在
* apply方法中也必須有這些參數
* 8.Scala中可以在object中構造很多的apply方法
* 9.Scala中的很多集合都是使用了apply的方式構造的,例如Array
*
* def apply[T: ClassTag](xs: T*): Array[T] = {
* val array = new Array[T](xs.length)
* var i = 0
* for (x <- xs.iterator) { array(i) = x; i += 1 }
* array
* }
*
*/
---------------------
作者:張涵鈞
來源:CSDN
原文:https://blog.csdn.net/shunhack/article/details/52587834
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

Scala實戰高手****第7課:零基礎實戰Scala面向對象編程及Spark源碼解析