Java 谈谈你对OOA、OOD、OOP的理解

OOA(面向对象分析)、OOD(面向对象设计)、OOP(面向对象编程),这3个概念,对于我们JAVA程序员来讲,或多或少应该都有所了解,或者说至少都听说过。

但是要谈到对其理解,可能对于多数入行不深的从业者来说,确实不是那么容易做到。特别是对于绝大多数的3年以内的低中级软件工程师而言。

因为他们的工作更多是需要按照项目经理分配的任务来编写功能代码,很少有多余的时间去阅读或者思考一些概念性的东西。说起这个问题,我也在网络上也搜索过很多的资料,大多都是摘录至书籍,比较官方化,让初学者无从理解。

为了广大的新从业者或者应聘者,在这里,我们以一种实例的方式来对这3个概念进行重新的阐述:

业务场景:

建行卡持有者,张三与李四两人,现在需要张三给李四转账人民币5000元整。按照业务分析后的流程图如下:

对于分析业务流程,常见的2种:面向过程分析(POA),面向对象分析(OOA)

面向过程分析(Procedure Oriented Analysis):是一种以过程为中心的编程思想,以数据流向为主要导向。为了解决问题,将解决问题的业务过程,按照一定的顺序划分成为一个又一个的事件,然后再封装成一个又一个的函数,最后由一个函数统一的按照顺序一步一步的调用即可。在面向过程分析中,顺序很重要,要实现功能只需要按照一定的顺序相互调用函数即可。

上述业务场景按照面向过程分析出来的结果就是:

程序检查张三卡中余额是否足够5000元人民币(事件1,满足则调用事件2)

程序从张三卡中扣除5000元人民币(事件2)

程序向李四卡中加入5000元人民币(事件3)

程序检测李四卡中是否正常入账(事件4,满足则结束整个业务)

程序向张三卡中加入5000元人民币(事件5)

在上述过程中,我们将这个业务过程,分成了5个步骤,也叫做5个事件,那么如果需要在程序中完成该转账业务的话,那么我们只需要按照1-2-3-4-5这样的顺序依次调用函数方法即可。在这个过程中,你会发现我们函数调用的顺序一定是不能变化的,变了就出问题了……

面向对象分析(Object Oriented Analysis):是一种以对象为中心的编程思想。利用从问题域中的词汇表中找到类与对象。那么说到这里,很多人对问题域又不是很清楚了,问题域:说的简单直接一点,问题域就是客户告诉你的要求,他要干什么。问题域并不特指需求,很多时候,客户所提的需求很多地方都有关联,所以在很多场合,客户所提的需求,还需要需求分析师多角度的帮助客户理清与完善。那么在客户需求范围中,衍生出来的他想要告诉你做的事,就是问题域,包括后期需求发生的变化,同样隶属于问题域的范围。

用一个图来表示:需求分析文档,规格说明文档,以及程序之间的关系:

从上述业务场景的分析中,我们可以抽离出的类与对象有:

抽离出来的类型有:汇钱者类,收钱者类,货币类。而张三只能算是汇钱者类中的一个实例,也被称之为汇钱者对象,李四只能算是一个收钱者类中的一个实例,也被称之为收钱者对象。那么额度为5000的人民币也只是货币类的一个具体实例。通常汇钱者类,收钱者类,货币类,我们都统一称之为:领域模型类,张三,李四,5000元人民币我们都统一称之为:领域对象。作为面向对象分析来说,我们最为重要的就是要分析出领域对象的行为。领域对象的行为主要是为后期的面向对象设计(OOD)提供接口依据,而属性作为分析阶段不是我们的重点。

就上述3种领域对象而言,张三这个实例,可以查询自己卡中余额,可以从余额中取出5000元,也可以将外来的钱加入到自己的账户中。

李四这个实例,可以查询自己卡中余额,可以将外来的钱加入到自己的账户中。而5000元人民币只是数据的传输携带者,没有任何行为可言。

PS:今天就只分享到这儿啦,后续明天再分享。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181127A0WRS500?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券