浅谈面向对象的分析和设计

来源:互联网 发布:社交账号软件 编辑:程序博客网 时间:2024/05/01 23:56

最早在学习面向对象的分析与设计时,也研究了很多的教材,有讲OO 基本概念的,比如什么是类,面向对象的基本特点等;也有讲面向对象的设计原则的,比如单一职责,开放封闭,接口隔离等;当然不可能不去学习设计模式啦。但最终理论学了一大堆,在实践时,还是觉得不知从何下手,有点雾里看花的感觉。

(这里讲到了学习OO 的最好路线,先学概念,再学设计原则,最后才是设计模式)

后来我突然意识到,做系统设计虽然可以理解为艺术,但根本上它不过是个技术活,没那么玄乎的。而技术活是一定要去实践的,不能被概念吓到,相信熟能生巧。

我写这篇文章就是希望帮那些刚开始学习OO 的人早点下手,少走弯路,大牛请华丽地飘过。

首先讲讲分析和设计的区别,简单的讲,分析是针对问题域的,设计是针对解域的,也就是说分析是为了更好地理解需求和待解决的问题,而设计才是解决方案。这个不是重点,Pass.

那怎样面向对象设计呢?

其实,下手很简单,掌握以下两个中心就好了,面向对象的设计不过是:

  1. 识别类
  2. 分配职责

还是很抽象?别急,听我慢慢解释,

怎样识别类呢,类有三种,实体类,边界类和控制类。

实体类是指需要长时间保留下来的信息,通常会做持久化处理,一般来讲,用例中的名词都可以被识别为实体类(或者实体类属性)。

边界类负责处理Actor/System 之间的交互,通常是输入/输出等。

控制类负责处理一些复杂的运算和算法等,一些较为复杂的处理都可以识别为控制类,同时,控制类还需要协调(控制)其他的类一起工作。

分配职责又是怎么回事呢?

所谓的职责,就是系统需要完成的事情。具体来讲,用例中系统要处理的步骤就是系统的职责,比如常见的CRUD 操作。这些操作都要适当的分配给上面找出来的类。

以上讲的可能还是很抽象,怎么办呢。很简单,我是莽汉我怕谁,不知道就硬上了,哈哈。管它三七二十一,胡乱识别一堆类,写一堆的方法实现了用例再说。

你可能会说,这样不好吧。可不好的标准是什么呢,就是不符合前面说到的设计原则 。不好怎么办呢,按照设计原则或者是使用适当的设计模式重构啊。

对于设计来说,没有最好,只有更好。还有,只要你敢干,啥事儿也不难。

 

最后,谈谈我对面向对象的理解。

对于任何的新概念或是方法论,我们首先要把握住其根本的价值所在,其次是了解实现这个价值而需要遵循的原则和策略,最后才是手段。

面向对象的分析和设计也是一样,

  • 根本的价值在于提高软件的复用性,可维护性和可扩展性,更好的适应业务的变化。
  • 为了实现这个目标,设计时就必须遵循相关的设计原则,比如单一职责,开放封闭,接口隔离,里氏替换,依赖倒置... ...
  • 最后才是设计模式,这些模式都是符合设计原则的最佳实践了。

所以才会推荐上面提到的学习顺序,先原则,后模式,否则可能就是本末倒置,甚至落入为了模式而模式的怪圈,效果可能就不好了。

 

PS:推荐两本书给大家

《UML 和模式应用》

《系统分析与设计方法》

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 武警警卫部队改革新兵怎么办 肾结石3mm很痛怎么办 剖腹产第6天肾结石痛怎么办 左肾5mm结石怎么办 肾结石手术后反复发烧怎么办 百世快递会被退回怎么办 身份证被列入黑名单了怎么办 顺丰寄方客户要求退回快递费怎么办 蛋蛋被皮筋弹肿了怎么办 人肌肉里的绦虫卵怎么办 鞋子前面踢坏了怎么办 猫割完蛋蛋流东西怎么办 北京怡瑞被骗后怎么办 玩滑板睾丸碎了怎么办 雄鸽不会踩蛋怎么办 玩滑板蛋碎了怎么办 精子在精囊满了怎么办 孩子的睾丸一大一小怎么办 肾阳虚早射该怎么办 有奶水吸不出来怎么办 苹果mac商店里没有软件怎么办 战地1安装包损坏怎么办 战地4db显示数据异常怎么办 战地1亚服没人怎么办 战地一加载太慢怎么办 饥荒手机版怪物跟人就打狗包怎么办 电脑文件损坏开不了机怎么办 黑魂1武器损坏怎么办 系统注册表文件丢失或损坏怎么办 steam申诉填错信息怎么办 手机玩游戏老是闪退怎么办 美剧推荐不能看怎么办 最角两边有点烂怎么办 独显禁用了黑屏怎么办 目标文件夹访问被拒绝怎么办 苹果mac电脑很卡怎么办 未能成功安装设备驱动程序怎么办 mac更新系统卡住了怎么办 电脑卡住了文件没保存怎么办 迅雷卸载重装列表没了怎么办 多个dts文件音量不同怎么办