面向Java开辟人员的Scala指南 - 关于特点和行为[Java编程]
本文“面向Java开辟人员的Scala指南 - 关于特点和行为[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
Scala 并不但仅只给 JVM 引入了函数概念,它还为我们供应了一种关于面向对象语言计划的现代视角.在这一期的 面向 Java 开辟人员的 Scala 指南 中,Ted Neward 介绍了 Scala 若何操纵特点(trait)使对象越发简单、更易于构建.您将理解到,特点与 Java™ 接口和 C++ 多重担当供应的传统极性既有类似之处,也有差别之处.
闻名科学家、研究学者艾萨克.牛顿爵士有这样一句名言:“假如说我看得比别人远一些,那是因为我站在伟人的肩膀上”.作为一名热情的历史和政治学家,我想对这位伟人的名言略加改正:“假如说我看得比别人远一些,那是因为我站在历史的肩膀上”.而这句话又表现出另一位历史学家 George Santayana 的名言:“忘掉历史必将重蹈复辙”.换句话说,假如我们不能回想历史,从过去的错误(包含我们自己过去的经验)中汲取教导,就没有机会做出改良.
您大概会迷惑,这样的哲学与 Scala 有什么关系?担当就是我们要谈论的内容之一.考虑这样一个事实,Java 语言的成立已经是近 20 年前的事情,当时是 “面向对象” 的全盛期间.它计划用于模拟当时的主流语言 C++,尝试将利用这种语言的开辟人员吸引到 Java 平台上来.毫无疑问,在当时看来,这样的抉择是明智并且必要的,但回想一下,就会发现此中有些地方并不像成立者假想的那样有益.
比方,在二十年前,关于 Java 语言的成立者来说,反映 C++ 气势的私有担当和多重担当是必要的.自那之后,很多 Java 开辟人开始为这些抉择此懊悔.在这一期的 Scala 指南中,我回想了 Java 语言中多重担当和私有担当的历史.随后,您将看到 Scala 是怎样改写了历史,为全部人带来更大收益.
C++ 和 Java 语言中的担当
历史是人们乐意记录下来的事实.
—拿破仑.波拿巴
从事 C++ 工作的人们可以回想起,私有担当是从基类中获得行为的一种办法,没必要显式地承受 IS-A 关系.将基类标志为 “私有” 答应派生类从该基类担当而来,而无需实际成为 一个基类.但对自身的私有担当是未得到遍及利用的特点之一.担当一个基类而无法将它向下或向上转换到基类的理念是不明智的.
另一方面,多重担当常常被视为面向对象编程的必备要素.在建模交通工具的层次构造时, SeaPlane 无疑需求担当 Boat(利用其 startEngine() 和 sail() 办法)以及 Plane(利用其 startEngine() 和 fly() 办法).SeaPlane 既是 Boat,也是 Plane,莫非不是吗?
无论若何,这是在 C++ 昌盛期间的设法.在快速转向 Java 语言时,我们认为多重担当与私有担当一样存在缺陷.全部 Java 开辟人员城市奉告您,SeaPlane 应当担当 Floatable 和 Flyable 接口(大概还包含 EnginePowered 接口或基类).担当接口意味着可以实现该类需求的全部办法,而不会碰到 虚拟多重担当 的难题(碰到这种难题时,要弄清楚在调用 SeaPlane 的 startEngine() 办法时应调用哪个基类的 startEngine()).
遗憾的是,完好放弃私有担当和多重担当会使我们在代码重用方面付出高贵的代价.Java 开辟人员大概会因从虚拟多重担当中约束出来而高兴,但代价是程序员常常要完成辛劳而易于出错的工作.
回想可重用行为
事情大致可以分为大概永久不会发生的和不重要的.
—William Ralph Inge
JavaBeans 标准是 Java 平台的底子,它带来了众多 Java 生态系统作为根据的 POJO.我们都懂得一点,Java 代码中的属性由 get()/set() 对管理,如清单 1 所示:
清单 1. Person POJO
//This is Java
public class Person
{
private String lastName;
private String firstName;
private int age;
public Person(String fn, String ln, int a)
{
lastName = ln; firstName = fn; age = a;
}
public String getFirstName() { return firstName; }
public void setFirstName(String v) { firstName = v; }
public String getLastName() { return lastName; }
public void setLastName(String v) { lastName = v; }
public int getAge() { return age; }
public void setAge(int v) { age = v; }
}
以上是“面向Java开辟人员的Scala指南 - 关于特点和行为[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |