5 | 确定分类

作者: 不一样的卡梅利多 | 来源:发表于2020-04-20 15:23 被阅读0次

类(对象)主要内容:类名,属性,行为。确定类,我们就是需要确定类的名称和属性以及它的行为。本文包容如下内容:
1、如何确定类名,需求建模
2、通过分类,优化模型结构
3、确定类之间如何优雅的交互

关键字:建模、 共性、低耦合,高内聚、惯用法。

如何确定类名,需求建模 (面向对象分析)

分析

目的是为了能够找到关键抽象 (一个类或对象,他是问题词汇的表的一部分,有明确的边界),确定关键抽象包含两个过程:发现和发明。分析与设计边界是模糊的。分析关注点是面临的问题域,从问题域的词汇中发现类和对象,实现真实世界的建模。设计 ,在模型中发明一些抽象和机制,为要构建的解决方案提供设计。

常见分析方法

1、经典分析

关注问题域中的实实在在的事物,事物为类和对象的主要来源— 经典分类

2、行为分析

关注动态行为,将这些行为作为类和对象的主要来源 — 概念聚集。可以依据对象的责任(对象的锲约)和系统的功能。

3、领域分析

某个领域中所有应用都通用的类和对象 ,
1、咨询领域专家(领域中的参与者,用户) ,构建一个通用的模型草稿
2、检查领域中原有的系统,以一种通用的格式展示出这反面的理解
3、咨询领域专家,确定差异和相似性
4、精细化通用模型,以包含原有系统
5、垂直领域-类似应用,水平领域-同一应用相关部分

4、用例分析

经典分析,行为分析,领域分析依赖与分析师的个人经验,这样的过程不确定,不能预测成功与否。 可以通过功能用例来确认。

5、CRC 卡

类名-顶部,责任-一半,协作者-一半

6、 非正式英语描述

7、 结构化分析

1、数据流图 -外部实体,数据存储
2、控制流图-控制存储,控制转换

类命名

1、对象应该用合适的名词词组来命名,如 theSensor 或简单shape
2、类应该用常见的名词名词词组来命名,如Sensor 或者Shape
3、如果可能,选择的名称应该是领域专家使用和认识的名称
4、修改操作应该用一个主动语态的词组来命名,如 draw 或者moveLeft
5、选择操作应该表示出查询的意思或者用be动词形式来命名
6、使用下划线或者大小写字母主要是个人喜好,但是无论使用哪种风格,至少要在程序内保持一致

类优化

1、当我们将某个关键抽象为候选者,依据测量指标来评估它 (高耦合,低内聚)

2、对于新的抽象,需要放在已经设计好的类和对象的层次结构中,通常是先创建一些看似不相似的类型,意识到它们是相关的,然后将共同点剥离出来,放到一个超类中。反复迭代, 将类和对象放到正确的抽象层次中是很难的, 类提升,发现一个通用的子类,将它的类结构上移。(开发工具有提供类似的功能 IDEA),从而增加共享度,反之,一个类它太一般化,无法派生子类,语义上面差距大,粒度规模冲突。

3、类粒度 正确选择对象取决于应用的目的,以及要操作信息的粒度

分类-优化模型结构

为什么要分类

分类基本上是发现共性的问题。当进行分类时,我们寻找具有共同结构或者表现出共同行为的一组事物,分类可以帮助我们确定类之间的泛化,特化,聚合的结构。面向对象设计中,认识到事物的相似性,能够让我们将共性放入到关键抽象与机制中,导致更小的应用和更简单的架构。分类也指导我们做出有关模块化的决定,通过发行共性可以将类放入到不同的模块中。

分类的困难性

确定类和对象没有简单的诀窍,没有完美的类结构,也没有一组正确的对象,设计和选择是许多竞争因素中的折中,

对象是有清楚定义的边界事物,一个对象与其他对象的分开的边界很模糊。比如: 一句话中 ,字符构成一类,还是单词构成一类,
不存在 完美的分类,尽管某些分类比另外一些更好,有多少人参与就有多少中分类方法,每个人关注点和视角不一样,看到的共性不一样。
明智的分类需要大量的创造性思维,例如:激光像金鱼,,,共享是他们不会吹口哨。一般人发现不了这样的共性。
好的软件设计看起来简单,但是经验表明,需要很多艰苦的工作才能设计出简单的架构。

分类过程

0、通过增量和迭代的方式来分类
1、首先使用一种随意的方式解决问题
2、人们在随着经验的积累,就可以知道哪些解决方式会更好。
3、总结出更通用的解决方案。指导更复杂的实践
4、复杂的问题,开始随意的解决问题 —循环

分类方式(经验)

经典分类(按照属性来分)

1、所有具有某一个或者某一组共同属性的实体构成一个分类,这样的属性对于这个分类是必要的,也是充分的。
比如:属性:已婚,未婚。一个人要么是已婚要么是未婚 ,属性:高,矮 不行。高矮没有明确的标准
2、利用属性作为对象间相似判断的依据 ,人们可以依据某一个属性是否存在,将对象划分到没有交集的集合中。
3、问题按照属性来分:不可能得到一个属性列表,明确哪些类在这个列表中,哪些类不在这个列表中。

概念聚集(按照概念来分)

1、类的产生 ,首先是形成类的概念描述,在依据这个描述进行分类。超越了一个属性的定义
比如:一首爱情歌曲,我们确定某个歌曲像爱情歌曲就划分到这一类
2、概念聚集与模糊(多值)理论有密切的关系,对象可以按照不同的适合程度属于一个或者多个分组,概论聚集通过最适合来进行绝对分类判断

原型理论(按照已有的类和对象的关系)

有一些抽象没有清晰界定的属性,也没有清楚的概念。 这样依靠经典分类和概念分类就不好使了。这时候可以按照与已存在类或者对象 的相似度来划分

三种方式应用:

从属性 到行为,到已有的属性和行为。首先依据特定的领域相关的属性来确定类和对象, 关注重点为 构成问题空间的词汇表结构(属性)和行为,如果不能得到满意的类结构,在使用聚集,关注重点是 协作对象的行为 ,如果不能得到满意的类结构,最后使用原型理论,参照已有的类 属性(结构),行为。

机制-类之间的协作

1、关键抽象反映了问题域的抽象,而机制是设计的灵魂,在设计过程中,开发者不仅需要考虑单个类的设计,还要考虑这些类的实例如何一起工作。

2、开发者决定采用某种协作模式后,工作会被分解到许多对象上面,即 相应类上面定义适当的方法。与单个类层次结构设计一样。机制代表了战略设计决策,单个类的接口设计更多是一种战术决策,这些战略决策必须被明确标识出来,否则我们将得到一些无法合作的类,所有类都完成自己的工作,很少考虑其他对象,最优雅、最精益、最快的程序会包含一些精心设计的机制。

3、机制实际上是我们在构造良好软件系统中发现的各种模式,是我们的惯用法。惯用法是编程文化的一部分,机制也代表个复用。

小结

1、我么先可以通过面向对象分析的经验方法:经典分析(属性),行为分析,领域分析,用例分析,CRC 卡,结构化分析 等来确定系统中类组成。

2、通过对获取到的类进行迭代式,增量式的找到其中共性来进行分类,优化类结构。找到共性的一些方法包括:经典分类,概念分类,原型理论。

3、我们还需要精心设计类之间的协作方式,使得系统可扩展,是低耦合,高内聚的。设计的手段 可以利用现有经验(惯用法)-设计模式,设计原则等。

相关文章

  • 5 | 确定分类

    类(对象)主要内容:类名,属性,行为。确定类,我们就是需要确定类的名称和属性以及它的行为。本文包容如下内容:1、如...

  • 从数据的角度理解TensorFlow鸢尾花分类程序8

    接上节,本节继续分析:5,评估模型的效果: 评估指的是确定模型进行预测的效果。要确定鸢尾花分类模型的效果,需要将测...

  • 一天工作安排

    今天工作主要安排: 1、确定5月待收学生; 2确定高三学生课程安排 3、把学生分类好,看接下来的工作如何更好的开展...

  • 做简书📖第一天

    梦想版和目标确定,分类极简化

  • 获取lncRNA,截断值的确定,3、5年ROC

    目录:【1】获取lncRNA,截断值的确定,3、5年ROC 【2】ROC分类变量和连续变量 R: ROCR包用于R...

  • 第二章第4节 自动机的分类

    FA的分类 确定的FA (Deterministic finite automata,DFA) 非确定的FA (N...

  • 物料管理那些事(3)

    2、物料分类如何开展 物料分类遵从两个原则:纵向穷尽,横向互斥。 首先,确定分类框架,即分类的顶层架构。要根据自己...

  • R-CNN 系列模型总结

    Introduction 相比于分类,目标检测不仅仅要确定物体是什么,还要确定其在哪里;分类通常是一张影像获得一个...

  • 2018-10-17

    数据驱动方法 图像分类 图像分类时,分类系统接受一些输入图像,比如猫咪,并且系统已经清楚了一些确定分类或者标签的集...

  • KNN(K-Nearest Neighbor)

    分类与回归的区别 -分类:分类就是确定该目标属于哪一类,KNN用于分类就是判断该目标属于哪一类-回归:回归就是预测...

网友评论

    本文标题:5 | 确定分类

    本文链接:https://www.haomeiwen.com/subject/uhrdihtx.html