硬核

软工爬坑之旅(二)——对象

. 3 min read . Written by seki
软工爬坑之旅(二)——对象

很多人知道JAVA是一门面向对象编程语言(OOP),与面向过程的C语言不同,JAVA运用了对象、 类、 继承、 封装、 消息等,这样的一些面向对象的经典概念进行程序设计(OOD)。实际上面向对象(OO方法)不仅是计算机语言的一种特性,而是软件工程最重要的概念之一。

看待世界的方式

“万物皆对象”是面向对象方法看待世界的方式,世界上的一切物体皆为对象,对象与对象间的关系为万物活动的规则,对象的共性被抽象出来成为“类”。

通过“类”我们可以批量性的定义对象。例如“个人”和“设计师”,我们可以说某人是一名设计师,但他并不只有设计师这一身份,在“类”的基础上加上“属性”可以让具体化的“对象”更加完善,譬如他的肤色,兴趣。

除了将他抽象为“设计师”之外,我们还可以说“他是一个人类”,人类的范畴比设计师更广,而设计师这一职业或许只是人类的“方法”(属性)。具体如何抽象,就是架构师需要思考的问题。

这种看待事物的方式将贯穿整个学习过程。

包与接口

如前文所说,软件工程的本质是将复杂度控制在一名开发者能处理的范围之内。每个开发者所处理的内容被称为“包”,这样一来,包内的加工方式和数据不会干涉外界,也就是常说的“低耦合”。

包之间通过“接口”进行数据传输,最终连为一体,成为所需要的软件。处理好输入和输出数据是否符合接口的规则,并且只使用接口传输数据,就可以保证彼此间的通讯良好,这就是“高内聚”。

这种做法很像产品经理的PRD文档——只要开发和设计都能读懂并遵守PRD中的需求,那么协作就能顺利推进。只是文档面向的是人类,而接口的读者是计算机程序,因此,后者对准确和严谨性有着更高要求。

业务

以互联网公司为例,当我们定义一家互联网公司时,我们会谈论它的产品,这是以消费者视角出发的看待事物方法,但对于公司内的技术人员而言,产品之间是互相关联的,产品中一部分功能和数据还会重合,这些功能被称为“业务”,技术人员从业务出发描述一家公司如何运作。

将业务往下进行拆分,可能会得到不同的结果:

  • 更小一级的业务,通常被称为服务,服务之间相互协调,最终为公司级业务提供价值
  • 程序。这意味着整个公司的业务是一体的,一个大包,这样的做法是真实存在的

上述的两种拆分方式代表着两种不同的架构模式:面向服务(SOA)以及巨石(Monoliths)。当然,架构模式并不止是这两种,但我们应该明白,即便掌握了面向对象的思维方式,也未必能够写出实现企业价值的产品,架构是面向业务的,优秀的开发者并不只关心具体代码。