自封装(SelfEncapsulation) - Martin Fowler博客

/**
 * 献给我最尊敬的偶像Martin Fowler
 * 原文出处:https://martinfowler.com/bliki/SelfEncapsulation.html
 * @author dogstar.huang <chanzonghuang@gmail.com> 2017-03-17
 */

本翻译已征得Martin Fowler同意,并链接在博客原文下方。

自封装

数据封装是面向对象风格的核心原则。这表明一个对象的字段不应该公开地暴露,而是来自对象以外的全部访问都应该通过访问器方法(getter和setter)。有些语言允许公开访问的字段,但我们通常提醒程序员不要这样做。自封装(Self-encapsulation)更进了一步,意味着全部对于数据字段的内部访问同样也应该通过访问器方法。只有访问器方法本身才能接触到这些数据变量。如果数据字段不暴露给外部,这就意味着要添加额外的私有访问器。

以下是一个合理封装的Java类的例子。

class Charge...  
  private int units;
  private do

继续阅读»»»

印度朋友手把手教你学Scala(10):Scala里的样本对象

/**
 * 谨献给我最爱的YoYo 
 * 原文出处:https://madusudanan.com/blog/scala-tutorials-part-10-case-objects-in-scala/
 * @author dogstar.huang <chanzonghuang@gmail.com> 2017-03-14
 */

本翻译已征得Madusudanan.B.N同意,并链接在原文教程前面。

样本对象

我们已经学习了对象样本类。样本对象是这两者的合体,即它是一个类似对象的单例并且有在样本类中大量的和大量的样板。唯一的区别是,样板是为一个对象而不是一个类完成的。

这是关于Scala系列教程的第十章。点击这里可查看整个系列。

目录

  • 简介
  • 样本对象和样本类
  • 样本对象的优势
  • 结论

简介

如果你需要针对样本类的样板,样本对象是非常有用的。

它们可以这样创建。

case object CaseObjectDemo {

  println("I am a case object")

}

当你将一个样本对


继续阅读»»»

印度朋友手把手教你学Scala(8):特质

/**
 * 谨献给我最爱的YoYo 
 * 原文出处:https://madusudanan.com/blog/scala-tutorials-part-8-traits/
 * @author dogstar.huang <chanzonghuang@gmail.com> 2017-03-13
 */

本翻译已征得Madusudanan.B.N同意,并链接在原文教程前面。

特质

这是关于Scala系列教程的第八章。点击这里可查看整个系列。

目录

  • 特质简介
  • 一个基本的特质 - 语法解释
  • Java的抽象变量概念
  • 抽象变量的类型注解
  • 混合抽象和具体成员
  • Java语法区别
  • 扩展特质
  • with关键字
  • 混入类的组成
  • 结论

特质简介

对于Scala,特质就像样本类那样,是一个新的概念。它们补充了OOP中已有的特性。

理解特质一个更好的方式是把它和Java语言的特性进行比较。

它们类似于接口,但它们可以有方法的实现,它们像抽象类一样工作,除了特质没有构造函数外。

最好的方式是通过例子来了解他们。所以,让我们来


继续阅读»»»

函数即对象(FunctionAsObject)- Martin Fowler博客

/**
 * 献给我最尊敬的偶像Martin Fowler
 * 原文出处:https://martinfowler.com/bliki/FunctionAsObject.html
 * @author dogstar.huang <chanzonghuang@gmail.com> 2017-03-13
 */

本翻译已征得Martin Fowler同意,并链接在博客原文下方。

函数即对象

在编程中,对象的基本概念是绑定数据和行为。这为编写一系列相关函数时提供了一个公共的数据上下文。它还提供了一个用于操纵数据的接口,让对象可以控制对此数据的访问,使得支持衍生数据和预防无效的数据修改变得容易。很多语言提供了明确的语法来定义类,一如作为对象的定义。但如果你有一个支持一等函数(first-class functions)和闭包的语言,你可以通过函数即对象模式(最初由Eugene Wallingford提出)使用这些构造器创建对象。

这是一个简化的person对象例子,在JavaScript中通过使用函数即对象风格来完成。[1]

function createP

继续阅读»»»

值对象(ValueObject)- Martin Fowler博客

/**
 * 献给我最尊敬的偶像Martin Fowler
 * 原文出处:https://martinfowler.com/bliki/ValueObject.html
 * @author dogstar.huang <chanzonghuang@gmail.com> 2017-03-10
 */

本翻译已征得Martin Fowler同意,并链接在博客原文下方。

编程时,我发现把东西表示成一个组合物是很有用的。一个二维坐标由x和y组合。一定数量金额由一个数值和一种货币组成。一个日期范围由开始和结束日期组成,而日期又可以由年、月、日组成。

当我这样做的话,我就会遇到了两个组合物是否是一样的问题。假设我有两个都是表示笛卡尔坐标(2,3)的point对象,把他们当作是相等是有意义的。根据其属性来判断相等性的对象被称为值对象,在这里的属性就是他们的x和y坐标。

但除非我在编程时很小心,不然在我的程序里可能得不到那样的效果。

比如想在JavaScript表示一个坐标。

const p1 = {x: 2, y: 3};  
const p2 =

继续阅读»»»

印度朋友手把手教你学Scala(7):无处不在的对象

/**
 * 谨献给我最爱的YoYo 
 *
 * 原文出处:https://madusudanan.com/blog/scala-tutorials-part-7-objects-everywhere/
 * @author dogstar.huang <chanzonghuang@gmail.com> 2017-03-06
 */

本翻译已征得Madusudanan.B.N同意,并链接在原文教程前面。

无处不在的对象

在这篇文章中,我们会讨论为什么Scala中对象的概念更为普遍,以及它的优点是什么。大部分示例是数据类型,因为它们是Scala语言的基础。

这是关于Scala系列教程的第七章。点击这里可查看整个系列。

目录

  • 简介
  • 作为对象的数据类型
  • 类型的操作
  • 创建自定义类型
  • Java数据类型装箱/拆箱的比较
  • Bigint例子
  • 类型转换(Typecasting)
  • 值比较
  • 在其他语言的实现和一些注意事项

简介

Scala是一种多范式语言,主要是结合了面向对象和函数式。

为了支持这种语言,有必要制定一个围绕什么东西而构建的想法。正


继续阅读»»»

印度朋友手把手教你学Scala(5):类

/**
 * 谨献给我最爱的YoYo 
 *
 * 原文出处:https://madusudanan.com/blog/scala-tutorials-part-5-classes/
 * @author dogstar.huang <chanzonghuang@gmail.com> 2017-03-05
 */

本翻译已征得Madusudanan.B.N同意,并链接在原文教程前面。

这是关于Scala系列教程的第五章。点击这里可查看整个系列。

目录

  • 简介
  • 访问和可见性
  • 构造器
  • 类参数和类字段
  • 类参数提升
  • 直接访问成员
  • 不可变对象和可变对象
  • 何时使用getter和setter
  • Scala风格的getter和setter
  • 辅助构造器
  • 默认构造参数
  • 抽象类
  • override关键字
  • 何时使用抽象类

简介

Scala中类的概念非常类似于他们在Java中的同行。但是它们提供的功能有很多不同。

首先,让我们举个简单的例子。

// 典型Java风格的类
class Person {

继续阅读»»»

印度朋友手把手教你学Scala(4):对象

/**
 * 谨献给我最爱的YoYo
 * 原文出处:https://madusudanan.com/blog/scala-tutorials-part-4-objects/
 * @author dogstar.huang <chanzonghuang@gmail.com> 2017-03-01
 */

本翻译已征得Madusudanan.B.N同意,并链接在原文教程前面。

Scala的对象

这是关于Scala系列教程的第四章。点击这里可查看整个系列。

在这章,我们将讲解objects

目录

  • 什么是对象?
  • Java单例的概念和Scala对象的比较
  • 静态与面向对象编程
  • 伴生对象
  • 重温Hello World
  • 深入理解main方法

什么是对象?

在Scala里,object是一个关键字,在这个教程系列的第一章我们就知道了。

再来回顾看一下Hello World这段代码。

object Test {  
    def main(args : Array[String]){
      printl

继续阅读»»»

印度朋友手把手教你学Scala(9):函数式编程简介

/**
 * 谨献给我最爱的YoYo
 * 原文出处:https://madusudanan.com/blog/scala-tutorials-part-9-intro-to-functional-programming/
 * @author dogstar.huang <chanzonghuang@gmail.com> 2017-02-21
 */

本翻译已征得Madusudanan.B.N同意,并链接在原文教程前面。

由于它的优雅和性能特点,Scala的函数式编程范式在最近几年变得相当流行。

这是关于Scala系列教程的第九章。点击这里可查看整个系列。

在这系列里的前面8章里,我从来都没谈及过Scala函数式编程这一方面,那是因为如果你是这个范式的新手(这世界大多数是),那么伴随着完全陌生和困难的范式,学习这门语言和环境会有一点难学,那就是为什么我一开始没有谈及他们。既然我们已经覆盖了面向对象编程方面到达一定程度,理解起来就稍微更简单了。

目录

  • 看看在2017年的摩尔定律
  • 什么是编程范式?
  • 理解冯·诺依曼编程风格
  • 冯·诺依曼

继续阅读»»»

印度朋友手把手教你学Scala(6):样本类

/**
 * 谨献给我最爱的YoYo
 * 原文出处:https://madusudanan.com/blog/scala-tutorials-part-6-case-classes/
 * @author dogstar.huang <chanzonghuang@gmail.com> 2017-03-04
 */

本翻译已征得Madusudanan.B.N同意,并链接在原文教程前面。

样本类

样本类和类非常相似,但样本类做了很多东西并且有一些简洁的功能。

这是关于Scala系列教程的第六章。点击这里可查看整个系列。

目录

  • 声明样本类
  • 不用new关键字创建类
  • 访问变量
  • 默认和部分构造器参数
  • 不可变对象
  • 结构相等 - 自动生成equals
  • 引用相等
  • 字符串表示
  • 自动生成hash码
  • 样本类复制
  • 样本类反编译

声明样本类

以下代码声明了一个叫做Block的类,有三个成员变量:idtitleisbn

case class Book(id:Int,title:String,isbn:Long)

继续阅读»»»