Zhangxu's Blog.

第5周ARTS-类图的相关概念

Word count: 1,611 / Reading time: 6 min
2018/08/19 Share

A: 字符找不同
R: Deploy Early and Often
T: 类图的相关概念
S: 科学的认知态度

Algorithm

题目

给定两个字符串 s 和 t,它们只包含小写字母。

字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。

请找出在 t 中被添加的字母。

示例:

输入:
s = "abcd"
t = "abcde"

输出:
e

解释:
'e' 是那个被添加的字母。

答案

1
2
3
4
5
6
7
8
9
10
11
class Solution {
public char findTheDifference(String s, String t) {
char[] t_l = t.toCharArray();
for (char i : t_l) {
if (!s.contains(String.valueOf(i))){
return i;
}
}
return 0;
}
}

Review

文章:Deploy Early and Often

本文主张在开发过程中经常部署和安装项目。

在产品开发周期中改进流程,我们有机会修改程序代码最终简化安装和部署。若是把安装和部署作为最后的工作,可能需要付出更大的代价才能改进流程,因为相比较而言团队缺乏安装部署环境的经验。

Tip

学了好长时间Java才接触到类图的相关概念,其实我觉得大可在学Java之前就普及相关知识,最近看了相关的东西借此从结下自己的理解。

我们可以把类图看作我们写程序之前准备的草稿或图纸,不要求我们详尽设计,只是构建出一个相对明晰的整体框架,帮助我们从宏观架构我们的项目。

类图将类与类之间的关系氛围以下几种:

  • 实现
  • 泛化
  • 聚合
  • 组合
  • 关联
  • 依赖

实现 泛化

我觉得可以将它们放在一起来看,因为它们都体现出类的一种继承结构,也即 is-a 的关系,举个例子:自行车是车、猫是动物

那么在实际的代码中实现表示继承抽象类,符号是一条带空心箭头的虚线,箭头方向表示继承自,继承自谁就指向谁。

实现

泛化,从字面上理解就有推广开来的意味,在实际代码中是继承自非抽象类,符号是带空心箭头的实线。

泛化

聚合 组合

其实组合是一种特殊的聚合,区别聚合与组合原则在于:整体不存在时部分是否还存在?

如果整体不存在时部分还存在,那就是聚合它的整体和部分不是强依赖的,比如羊群解散了羊作为一个独立的个体仍然是存在的,聚合关系用一条带空心菱形箭头的直线表示,如下图表示A聚合到B上,或者说B由A聚合:

聚合

反之如果整体不存在时部分也不存在了,那就是组合它是一种强依赖的特殊聚合关系,例如:公司不存在了,部门也将不存在了,组合关系用一条带实心菱形箭头直线表示,如下图表示A组成B,或者B由A组成;

组合

依赖 关联

一个对象A在运行期间会用到另一个对象B我们就称作A依赖B,他们之间的关系就是依赖关系。

显然关联关系也是依赖关系的一种,区别在于关联关系是一种静态关系, 通常与运行状态无关,一般由常识等因素决定的,它一般用来定义对象之间静态的、天然的结构。所以,关联关系是一种“强依赖”的关系;比如学生和学校就是一种关联关系。关联关系是用一条直线表示的默认不强调方向,表示对象间相互知道;如果特别强调方向,如下图,表示A知道B,但 B不知道A:

关联关系在最终代码中,通常是以成员变量的形式实现的。

关联

而依赖它是一种临时性的关系,通常在运行期间产生,并且随着运行时的变化,依赖关系也可能发生变化。因此在最终代码中,依赖关系体现为类构造方法及类方法的传入参数,因为参数是可以在运行时动态变化的。依赖关系是用一套带箭头的虚线表示的如下图表示A依赖于B:

依赖

由此可见,上面的组合和聚合也是一种依赖,而且是强依赖关系–关联关系。

Share

科学的认知态度

最近看了一个教授的讲座,他讲到一句话我的印象很深刻大意是:对于某个观点或是结论在不能证实或是证伪的情况下,存疑。

我认为这是一个科学的认知事物的态度,是非常有必要培养的一个思维习惯。

在日常生活中,我们太容易就相信了别人的话,也许这个人看起来是一位权威人士,或是他声称自己亲身经历过某个事件,又或是他是你信任的家人、朋友、上司,甚至你觉得从动机上来讲他们没必要骗你,也许你的想法都没问题,但是你听到的这个消息或者观点很可能他也是这么稀里糊涂的接受的,那么你怎么确保在此过程中间的某个环节不会出现问题?

其实跳出这个场景的局限,我们很容易就能甄别消息或观点的可靠性:

  • 消息来源是否可靠
  • 有没有客观的事实作为依据(所谓客观事实就是指权威数据或者不带感情色彩的示例)
  • 逻辑推倒是否严密(演绎法、归纳法)

当我们经过上述方式的思考出现以下情况:

  • 认为觉缺少某个要素结论不能轻易得到(不能证实)
  • 或者我们当下推到下来没有问题所有条件都满足结论成立,但是后续无法再通过某一特例推翻它(不能证伪)

这时我们就得冷静下来,最起码当下我们不能相信这个消息或是观点。

一旦带有这样的思维习惯去接受信息,我认为起码会从某种程度上减少或是避免掉自己盲目跟风的愚蠢行为。

原文作者: 张旭

原文链接: http://jshpy.cn/ARTS/ARTS05.html

发表日期: August 19th 2018, 4:30:09 pm

版权声明: 本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可

CATALOG
  1. 1. Algorithm
    1. 1.1. 题目
    2. 1.2. 答案
  2. 2. Review
  3. 3. Tip
    1. 3.1. 实现 泛化
    2. 3.2. 聚合 组合
    3. 3.3. 依赖 关联
  4. 4. Share
    1. 4.1. 科学的认知态度