Scala讲座:面向对象和函数式的特点总结
创始人
2024-06-08 01:31:31
0

这篇是Scala讲座第七篇的第五部分,通过比较命令式、面向对象式和函数式编程的例子来阐述了他们的特点。一句话,可以从两个方面来说明“面向对象式”和“函数式”。

Scala讲座 表 

Scala讲座 表:模块层次与方法层次

#t#从分治法概念上来说,可以分为两个轴上的问题,分别为模块层次上的面向对象还是函数式,以及方法层次上的命令式还是函数式。从Java语言来说在模块上是面向对象,在方法上是命令型。从Haskell语言来说模块和方法层次上都是函数式。

那么说到Scala语言,他在模块层次上既可以用面向对象又可以用函数式,在方法层次上既可以用命令又可以用函数式方法描述。例如可以在模块层次上用面向对象,在方法层次上用命令式来描述。笔者个人觉得,在模块层次上用面向对象方式则比较容易理解,在方法层次上用函数式则在很多情况下代码会变得很简单。

通过这次学习,说明了一下很可能成为函数式编程的障碍的基本思考方法。Scala有趣的地方是,它不仅可以用函数式方法来编程,用传统的面向对象和命令式方法也行的特点。应此刚开始即使没有“函数脑”也可以享受他的好处。

***尽笔者所能写了一个将函数式和面向对象式编程方法混在一起的程序。感觉上是使用了函数式的函数,然后在上面盖上类,然后再使用多态技术。这个程序虽然没有实用性,但是可以感觉到由于有了Scala这类有趣的语言将来可能会诞生混合了“函数式”和“面向对象式”特点的创意或模式。

  1. case class Person(val name:String, val num:Int){  
  2. def say = {  
  3. "[" + num + "] " 
  4. }  
  5. def introduceMySelf = {  
  6. "My name is " + name  
  7. }  
  8. }  
  9. case class Sekaino(override val name:String, override val num:Int) extends Person(name, num){  
  10. override def say = {  
  11. num match {case 3 => "[Sir]" 
  12. case _ => super.say  
  13. }  
  14. }  
  15. }  
  16. object Count{  
  17. def main(args:Array[String]):Unit = {  
  18. val persons = (1 until 5).map(x => factory(args(0), x))  
  19. persons.foreach(show)  
  20. }  
  21. def show(person:Person) :Unit = {  
  22. println(person.introduceMySelf)  
  23. println(person.say)  
  24. }  
  25. def factory(name:String, num:Int) = {  
  26. name match {  
  27. case "nabe" => Sekaino(name, num)  
  28. case _ => Person(name, num)  
  29. }  
  30. }  

顺便说明一下,内容为数一下执行结果的个数,只有3才打印。

#p#

C:\ scalatest>scalac Count.scala

C:\scalatest>scala Count ushio

My name is ushio

[1]

My name is ushio

[2]

My name is ushio

[3]

My name is ushio

[4]

C:\scalatest>scala Count nabe

My name is nabe

[1]

My name is nabe

[2]

My name is nabe

[Sir]

My name is nabe

[4]

到这里,Scala讲座第七篇的内容终于结束了。对于Scala语言的面向对象式和函数式的特点,你是否了解了呢?

【编辑推荐】

  1. 万物皆对象:介绍Scala对象
  2. Scala的泛型:***大的特性
  3. Scala的Trait:可以包含代码的接口
  4. Scala的模式匹配和条件类
  5. Scala类:复数类,无参方法,继承和覆盖

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...