Scala实战高手****第7课:零基础实战Scala面向对象编程及Spark源码解析
/**
* 如果有这些语法的支持,我们说这门语言是支持面向对象的语言
* 其实真正面向对象的精髓是不是封装、继承、多态呢?
* --->肯定不是,封装、继承、多态,只不过是支撑面向对象的
* 一些语言级别的语法和功能,真正的面向对象其实有三个核心特征:
* 第一:对象不用关心消息从哪里来,也不关心消息到哪去,只关心消息处理本身
* ,也就是说面向对象是弱耦合的且对象是消息驱动的,或者说对象是数据驱动的
* 第二:一个对象的行为不影响另一个对象的行为,一个对象挂掉了另一个对象
* 不会随着它一起挂掉
* 第三:面向接口编程,为了封装具体实现的不同和业务的变化
* 那么从这个角度讲,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源码解析的更多相关文章
- Scala实战高手****第5课:零基础实战Scala函数式编程及Spark源码解析
Scala函数式编程 ----------------------------------------------------------------------------------------- ...
- 机器学习实战(Machine Learning in Action)学习笔记————03.决策树原理、源码解析及测试
机器学习实战(Machine Learning in Action)学习笔记————03.决策树原理.源码解析及测试 关键字:决策树.python.源码解析.测试作者:米仓山下时间:2018-10-2 ...
- Scala实战高手****第4课:零基础彻底实战Scala控制结构及Spark源码解析
1.环境搭建 基础环境配置 jdk+idea+maven+scala2.11.以上工具安装配置此处不再赘述. 2.源码导入 官网下载spark源码后解压到合适的项目目录下,打开idea,File-&g ...
- Scala实战高手****第6课 :零基础实战Scala集合操作及Spark源码解析
本课内容1.Spark中Scala集合操作鉴赏2.Scala集合操作实战 --------------------------------------------------------------- ...
- 「从零单排canal 04」 启动模块deployer源码解析
基于1.1.5-alpha版本,具体源码笔记可以参考我的github:https://github.com/saigu/JavaKnowledgeGraph/tree/master/code_read ...
- spark源码解析之scala基本语法
1. scala初识 spark由scala编写,要解析scala,首先要对scala有基本的了解. 1.1 class vs object A class is a blueprint for ob ...
- Scala实战高手****第8课:零基础实战Scala最常用数据结构Map和Tuple及Spark源码鉴赏
本课内容1.Map和Tuple在Spark源码中的鉴赏2.Map和Tuple代码操作实战 ------------------------------------------------------- ...
- Scala实战高手****第12课:Scala函数式编程进阶(匿名函数、高阶函数、函数类型推断、Currying)与Spark源码鉴赏
/** * 函数式编程进阶: * 1.函数和变量一样作为Scala语言的一等公民,函数可以直接赋值给变量 * 2.函数更常用的方式是匿名函数,定义的时候只需要说明输入参数的类型和函数体即可,不需要名称 ...
- Scala 深入浅出实战经典 第65讲:Scala中隐式转换内幕揭秘、最佳实践及其在Spark中的应用源码解析
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
随机推荐
- 接口认证方式:Bearer Token
因为HTTP协议是开放的,可以任人调用.所以,如果接口不希望被随意调用,就需要做访问权限的控制,认证是好的用户,才允许调用API. 目前主流的访问权限控制/认证模式有以下几种: 1),Bearer T ...
- (转)tableview的索引设置
.感觉tableview的索引条将表视图往左边挤了一点?别担心,只是颜色问题.只要如此设置即可 //索引条背景的颜色(清空颜色就不会感觉索引条将tableview往左边挤) [_tableView s ...
- Sencha touch中Ext.List的使用及高度自适应
最近在做 Sencha 的一个项目,需要用到 Ext.List 来列出所需商品及相关信息,平时我们使用 Ext.List 都是使用 fullscreen:true 来设置 List 全屏显示, 但 ...
- JS遮罩层弹框效果
对于前端开发者来说,js是不可缺少的语言.现在我开始把我日常积累的一些js效果或者通过搜索自己总结的一些效果分享给大家,希望能够帮助大家一起进步,也希望大家能够多多支持! 1.今天我先分享一个遮罩层弹 ...
- 基于js的地理数据的几何运算turfjs
Doc: http://turfjs.org/static/docs/global.html Openlayers3 Sample: http://jsfiddle.net/d6o81vc7/
- [vue-router] Failed to resolve async component default: Error: Loading chunk 0 failed.
在整合laravel5.4 和vue2.1的时候遇到一个奇怪的问题 Uncaught SyntaxError: Unexpected token < Error: Loading chunk 0 ...
- 类的 propert,classmethod,ataticmethod 方法 与 多态
一 .property 将一个类的函数定义成特性以后,对象再去使用的时候obj.name,根本无法察觉自己的name是执行了一个函数 然后计算出来的,这种特性的使用方式遵循了统一访问的原则 egon. ...
- 最近研究xcodebuild批量打包的一些心得
http://blog.csdn.net/tlb203/article/details/8131707 转自Rainbird的个人博客 以前的时候只知道做安卓开发的兄弟挺辛苦的,不但开发的时候要适配一 ...
- PL/SQL 02 声明变量 declare
语法:identifier [CONSTANT] datatype [NOT NULL] [:= | DEFAULT expr] identifier:用于指定变量或常量的名称.CONSTANT:用于 ...
- pygame --- 可怜的小乌龟
来于----@小甲鱼工作室 import pygame import sys from pygame.locals import * #初始化 pygame.init() size = width,h ...