第7课:零基础实战Scala面向对象编程及Spark源码解析
2016-09-19 17:40
363 查看
本课内容
1.Spark中面向对象鉴赏
2.Scala中面向对象代码操作实战
------------------------------------------------------------------------------------------------------------------------
/**
* 如果有这些语法的支持,我们说这门语言是支持面向对象的语言
* 其实真正面向对象的精髓是不是封装、继承、多态呢?
* --->肯定不是,封装、继承、多态,只不过是支撑面向对象的
* 一些语言级别的语法和功能,真正的面向对象其实有三个核心特征:
* 第一:对象不用关心消息从哪里来,也不关心消息到哪去,只关心消息处理本身
* ,也就是说面向对象是弱耦合的且对象是消息驱动的,或者说对象是数据驱动的
* 第二:一个对象的行为不影响另一个对象的行为,一个对象挂掉了另一个对象
* 不会随着它一起挂掉
* 第三:面向接口编程,为了封装具体实现的不同和业务的变化
* 那么从这个角度讲,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
* }
*
*/
1.Spark中面向对象鉴赏
2.Scala中面向对象代码操作实战
------------------------------------------------------------------------------------------------------------------------
/**
* 如果有这些语法的支持,我们说这门语言是支持面向对象的语言
* 其实真正面向对象的精髓是不是封装、继承、多态呢?
* --->肯定不是,封装、继承、多态,只不过是支撑面向对象的
* 一些语言级别的语法和功能,真正的面向对象其实有三个核心特征:
* 第一:对象不用关心消息从哪里来,也不关心消息到哪去,只关心消息处理本身
* ,也就是说面向对象是弱耦合的且对象是消息驱动的,或者说对象是数据驱动的
* 第二:一个对象的行为不影响另一个对象的行为,一个对象挂掉了另一个对象
* 不会随着它一起挂掉
* 第三:面向接口编程,为了封装具体实现的不同和业务的变化
* 那么从这个角度讲,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
* }
*
*/
//class C7(){ //无参数 class C7(age:Int){ //带参数 var name = "Spark"; def sayHello = println("Hi,My name is "+ name+" ,I'm "+age+" years old") } object C7 { var number = 0 def main(args: Array[String]): Unit = { println("Hello Scala oop") //创建一个类,new关键字 //val helloOOP = new C7 val helloOOP = C7(30) helloOOP.sayHello C7(1) C7(2) C7(3) C7(4) C7() Array(1,2,3,4,5) } //def apply():C7={ def apply(age:Int):C7={ println("My number is:"+number) number += 1 new C7(age) } def apply():C7={ println("My number is:"+number) number += 1 new C7(10) } } |
相关文章推荐
- 大数据Spark “蘑菇云”行动前传第7课:零基础实战Scala面向对象编程及Spark源码解析
- 大数据Spark “蘑菇云”行动前传第4课:零基础彻底实战Scala控制结构及Spark源码解析
- 第6课 :零基础实战Scala集合操作及Spark源码解析
- 第4课:零基础彻底实战Scala控制结构及Spark源码解析
- Scala中隐式转换初体验实战详解以及隐式转换在Spark中的应用源码解析之Scala学习笔记-49
- 第44讲:Scala中View Bounds代码实战及其在Spark中的应用源码解析
- Scala中类型变量Bounds代码实战及其在Spark中的应用源码解析之Scala学习笔记-34
- Scala深入浅出实战第67讲:Scala并发编程匿名Actor、消息传递、偏函数实战解析及其在Spark源码中的应用解析
- 第43讲:Scala中类型变量Bounds代码实战及其在Spark中的应用源码解析学习笔记
- Scala类型约束代码实战及其在Spark中的应用源码解析之Scala学习笔记-39
- 第45讲:Scala中Context Bounds代码实战及其在Spark中的应用源码解析学习笔记
- 第49讲:Scala中Variance代码实战及其在Spark中的应用源码解析学习笔记
- 第47讲:Scala多重界定代码实战及其在Spark中的应用源码解析
- Scala中View Bounds代码实战及其在Spark中的应用源码解析之Scala学习笔记-35
- Scala 深入浅出实战经典 第60讲:Scala中隐式参数实战详解以及在Spark中的应用源码解析
- Scala 深入浅出实战经典 第65讲:Scala中隐式转换内幕揭秘、最佳实践及其在Spark中的应用源码解析
- Scala中上下文界定内幕中的隐式参数与隐式参数的实战详解及其在Spark中的应用源码解析之Scala学习笔记-52
- Scala中隐式参数与隐式转换的联合使用实战详解及其在Spark中的应用源码解析之Scala学习笔记-51
- Scala 深入浅出实战经典 第48讲:Scala类型约束代码实战及其在Spark中的应用源码解析
- Scala中Context Bounds代码实战及其在Spark中的应用源码解析之Scala学习笔记-36