面向对象分析和设计的几个关键步骤_(豁然开朗)《面向对象分析与设计》读书笔记 (4)- 分类...

目录

分类

正确分类的重要性

分类的困难

分类的增量和迭代本质

确定类和对象

经典方法 && 现代方法 (种)

面向对象分析 (主要识别对象)

关键抽象和机制

确定关键抽象

识别机制

面向对象的分析与设计的难点

分类

  • 组织知识的手段。
  • 【作用】相似性 共性 关键抽象 更小的应用,更简单的架构
  • 【Question】
    • 分类在类的构建中发挥了什么样的作用? (结合具体示例加以体会)

8fd2bea586c5a04f570a07fbe9ebf210.png

正确分类的重要性

  • 在面向对象分析和设计中,相当一大部分活动,可以认为是分类问题
    • 在AI中,分类也是及其重要的,是很多训练的最终目的。
  • 分类的关键环节发现共性
    • 找出 结构/行为 存在共性的一组事物
  • 【分类在面向对象中的作用体现】 分类作用很大
    • 【帮助我们确定层次结构】如类之间的泛化、特化、聚合等等。
    • 【核心机制的产生】交互中的共同模式 发明机制 核心
    • 【模块化】根据类对象的功能分包,进行模块化。
    • 【耦合&内聚】
    • 【部署】将不同的处理过程分配到不同的处理器上。

09af00408a0f7ac04e6eb256dce33d9e.png

cbb153f1a8052f4a7818e082edbe0c3b.png

1ba47d49b53270a5c089d840910112ed.png

f5f6aef1606b1c684fdcc2b8ba43f2e2.png

分类的困难

前面提到了分类 在面向对象中发挥着十分重要的作用。(可以说,是一种非常基础的能力)。事实上,在数据排查时,也是如此

  • 造成分类困难的原因
    • 边界的模糊】一种常见的现象时,一个对象和其它对象区分开来的边界,往往非常模糊。
      • 【示例】如膝盖从哪里开始,从哪里结束?
    • 【人的角度】
      • 分类的角度多种多样,不存在“完美”的分类。 我们需要权衡不同的分类方案。
        • 如 flink虽然在目前比较流行/优秀,但随着技术的迭代,新的角度的发现,flink有一天也会被相应的淘汰。
      • 明智的分类需要大量的创造性的活动。
  • 【分类需要投入较多的精力】
    • 很多艰苦的工作,才能设计出简单的架构。

268bb9a3d807cc68138a76c37822b785.png

d9abd71bb96501159ae6777e4e617077.png

分类的增量和迭代本质

  • 【一般规律】明智的分类 是 很艰难的智力工作,最好是一个增量式、迭代式的过程来完成。
    • 如 flink虽然在目前比较流行/优秀,但随着技术的迭代,新的角度的发现,flink有一天也会被相应的淘汰。

f550fdc6ac40636e96975c1a9a97ed9d.png

b28b17fb093ed2efb8fc8ed3484d3725.png

9678e81c6923e31d85111698d6b770bd.png

确定类和对象

经典方法 && 现代方法 (3种)

62f78d9e6c9f8a7b73c258b14f4fca5a.png

经典分类

  • 【核心】根据相关属性作为对象间相似性 分类的依据。

d38756e2f2b5351800d89d34094c8f14.png

e010a6fbed7322a5679c3dd0be8c57dd.png

经典分类的属性选择:

  • 【选择分类属性时的建议】 属性之间最好是独立的,不相互影响的。
    • 反例】年龄 和班级 就是关联性相对较大的属性。
  • 【属性可测量可不测量】
  • 【属性的选择和领域高度相关】

4ae5acd9b9d5b8c092c79993ff57ca1a.png

752811a93248c885fd496a9537672cc8.png

自然分类的缺陷:

  • 自然的分类趋向混乱。

b6bbd67fe6e4c6af3f0db27665afd497.png

469f1d238b020a96f5ef2db58ec2874e.png

概念聚集

  • 借助概念,来将符合概念的纳入相应的分类中。
  • 【分类的大致步骤】
    • 形成某个类的概念描述 根据描述,对于实体进行分类。
  • 【示例】爱情歌曲
    • 【概念描述】表达一个人对于另一个人的
      • 爱,这个词是抽象的,是模糊的,这和个人的理解也有一定的关系。
    • 【对于实体歌曲的分类】
      • 【爱情歌曲】一首歌,描绘两个异性动物之间的快乐生活。 要体会到其深层次的比喻的含义。
      • 【非爱情歌曲】国歌。 主题不能反映两人之间相爱。

a47a16f30d6afd79c56cfad5fa9c8394.png

原型理论

  • 【分类方式】
    • 原型代表】对象的类 由一个 原型对象 代表;
    • 与原型进行比对】对于给定的对象,和原型进行比较,如果相似 该对象属于原型所代表的类。
  • 实际中的应用
    • 论文中,为验证观点,做个简单的原型。用以表明论文中涉及到的关键点。
    • Js 中的原型链。 对象模板。
    • 对于游戏的归类。

d18e4287df20d08df109243a644ea395.png

b91ff5c0bd413eb68e0bc562b298ef52.png

1c06307f9162bfc04cf6386675414860.png

面向对象分析 (主要识别对象)

e16060248757102888c826ef4459d9f6.png

经典方法 (主要用来识别对象)

31219f52169fc6a88c2b42d4aab9fa5f.png

建模时,类和对象的一般来源

  • 【经典方法】是在大量经验基础上,对于建模中存在的模式进行了相应的总结。 形成了某些概念/事物 到 对象的映射
    • 一种可以直接拿来,偷懒的分类框架。

c01f5c5804af85cef603b63c2e956e2c.png

数据库建模的角度,来看:

f05ffea4f1014cc84301b6204dbd7a8b.png

a4e10adfef6adf9d54754fd72aad9b2f.png

其它:

3db69f6b84ab049cc58aa956d6d3a98e.png

行为分析

  • 【基本思想】将行为 作为 分类的重要依据,作为 识别 类和对象的主要来源。
  • 【分类内核】概念聚集 (前面3种分类方法中的第2种)
    • 通过概念描述出一个类 然后将符合该概念的实体,划分到该分类中来。
    • 站在此处来看,分类需要一定的语言学功底。

0282a7ba4a698d47960c049d44dc0a64.png

领域分析

  • 区分:问题域 & 解决方案域

b62d2301173301cf4292c99300a724c9.png

24210f888cd2f4e49d31b363df31bfc4.png

用例分析

c2a5b7dd6d88160011867d1c1b81369a.png

其它方法略过 。。。

关键抽象和机制

【关键抽象】

  • 有不同的身份】类/对象 , 问题域词汇表的一部分。
  • 重要作用】给出了 问题的边界
    • 关键抽象描绘了,哪些在关键抽象范围内,哪些在其外。
    • 突出系统中的一些事物
    • 排除系统之外的事物

2da23ed1f5ba687924d645a624dbadcd.png

【机制】

  • 机制代表行为模式

4f98febfedef63179cea63b3f40719cb.png

确定关键抽象

  • 具体问题具体对待】 关键抽象 与 具体领域高度相关。
  • 【关键抽象的两个过程】
    • 发现
      • 抽象领域专家所使用的抽象;
      • 往往是 问题域 的词汇的一部分。
      • 【示例】ATM客户提到的账户、取款 & 存款
    • 发明
      • 通过发明,创造新的类 和对象。 它们不一定是问题域的组成部分,可能是设计/实现 领域的 词汇
      • 【示例】ATM中的关键词汇:数据库,屏幕管理器,队列等。 这部分更多是站在实现角度来确定关键抽象的

b3b7a3af6ccad6d205cb8e89cb6c69f8.png

1406b6e11097b6f1479ca32b94a6cf78.png

精化关键抽象

  • 选定关键抽象之后,我们应该在此抽象上做哪些事情?
    • 一个抽象的概念,是无法 直接落地到的实现的。我们需要通过细化抽象使得抽象层次越来越接近落地/实现
    • 【一些具体的问题】 概念/抽象开始并不是‘清晰’的,通过回答下面一些参考的问题,能够让一些边界清晰起来
      • 对象如何创建?销毁?
      • 在此对象上,可以执行什么操作?
  • 关于对象抽象活动的观点
    • 面向对象设计 是 增量的,迭代的。
    • 常见的活动模式
      • 从两个类中,提取公共部分到一个新类中。
      • 将一个类,分成两个新类。
    • 【注意】既不是自顶向下,也不是自底向上 的活动。 而是两者的有机结合

ba361539ad89d22374983efa44b898f8.png

c2716700b0270440f365eec18dfe43e0.png

37a4679afbfc82279fa682cc864e3ec2.png

将类和对象放在正确的抽象层次很难。

  • 需要进行大量练习,积累足够的经验。

e4b308362db208eabc42c4ea0dbcee9d.png

【命名抽象】

df0b621fbc0658205fdd9144b3a45b0a.png

一般建议:

b9c7865ba6d60c54b0403c9e9805a356.png

5e029f4d10024362bfa9a22e929d5e91.png

识别机制

一个简单的示例:

  • 【外部视图】驾驶员看到的是外部视图,也就是汽车系统表现出的外部行为;
  • 【内部视图】但是,外部视图/行为,是需要内部的机制来进行支撑的
    • 【哪种活动的结果?】设计时的结果
    • 【支撑外部视图的内部机制有多种】达到支撑一个外部行为的方式有多种,我们需要从中进行选择/决策。 上面提到的汽车系统,内部机制就存在很多种
    • 机制的选择】虽然不同机制表现出来的外部行为是等价的,但是在其它方面是存在差异的,比如说代价等。

40dd35f9ba89c3067bb953b8be6e23dd.png

497c2722df883ef2da13ff2e5b0977d2.png

在进行机制选择时,需要考虑的问题:

447723b1181b6aedc6adf8632091bebe.png

避免内外违反约定

  • 机制代表战略决策,接口的设计 体现了战术决策
  • 【外部违反】客户违反规定的接口;
  • 【内部违反】接口背后的机制 违反了 该规定的行为;
  • 如何进行机制的分析?
    • 使用场景 驱动机制分析过程;
      • 【NICE】研究 典型/关键的场景,很重要
  • 协作模式
    • 开发者决定采用某种协作模式 工作分解到多个对象(相应类的方法)
    • 示例】MVC可以看作是一种 模式/机制,属于战略层面。

8961bff4950ec8e4c05771ae35a4d5ae.png

53b4102fcfd2f7c9535c4816b971a7e0.png

机制即模式

  • 【我的理解(可能有误)】模式,感觉 是一些在探索过程中,普遍被认可的机制。
  • 机制在底层的表现:食物链的底端】惯用法
    • 每个编程语言 有自己的惯用法;
    • 许多常见的编程任务都用惯用的实现方式;
  • 框架:食物链的高端
    • 【框架介绍】一组类,为某个领域提供了一组服务。 代表了大规模的复用
    • 【作用】输出了一些类和机制 客户可以使用/扩展 它们;

ea7b46e595f4fbd43436d2143ebc317b.png

cc9c6a3f642477b084899685cd506f0c.png

机制的示例(画图机制):【MVC】

  • 画图机制】 几个对象通过协作(内部视图) 为用户展现图片(外部视图)。
    • 【对象】窗口、视图、模型、客户
  • 流程】 见下面的文字。
  • 该机制的好处
    • 模型 与 窗口/视图 解耦. 这样解耦之后有何好处? (方便修改、维护)

61ff8d2f346fd48706d262fbc797bc79.png

41b8587e6981f26808d0905227b8830b.png

面向对象的分析与设计的难点

这类问题可以归结为,在方案空间中,选择较好的解的问题

  • 【抽象】抽象的方式多种多样?
  • 【连接方式】组合对象的方式多种多样?
  • 【语义】表达是否有助于理解?是否能够涌现出需要的功能?
    • 单纯看代码,不了解其面向的业务,是不太容易读懂代码的。

0d8f77619f3d017e9e2353a721a81004.png

e10fb453e5911b66dc0fe6a803038f7c.png

9f466be5a0cf3705a3b400c0b5f3edeb.png

6b0259cbf8c9b1f78a896a024f2797ad.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值