程序员画图课--重点内容串讲和阅读建议、用Go等非面向对象语言怎么理解类的六种关系

科技   2024-10-11 11:05   北京  

专栏已经完结一段时间,今天我根据最近读者的一些反馈和常见问题做一个总结。

主要涉及一下几个内容:

  • 专栏中用代码解释类的六大关系时用的Java语言,能不能用Go语言再解释一遍?
  • 关于专栏的阅读建议上的问题
    • 我该重点看哪几节?
    • 我马上要做技术评审了,该看哪几节?
  • 针对一些绘图模版需要翻墙,公众号上付费阅读不支持复制粘贴链接等问题的解决方案。

阅读建议

关于专栏的阅读建议,我觉得不同的人和不同的时间点有不一样的阅读方式。

如果是专栏的某个主题正好满足了你的需求,你才订阅的专栏,那么就简单直奔主题,比如你工作中就是要画某个流程图交差,憋的自己想不出来,直接去UML部分的内容找到对应的章节,先去看,解决眼前的事儿,后面再考虑怎么考有体系的学习这里的内容来提升自己。

接下来我来给专栏的重点内容做个串讲,相信你按照我推荐这个顺序反复阅读和实践,一定会提升自己分析需求、拆解需求进而掌控和管理整个业务系统的能力。

有的时候画类图时你说不清到底是聚合、组合这种类间的关系,你可以先读一读下面这篇文章,从代码维度想想它该是聚合还是组合或者是依赖关系。

上面的东西看的差不多能明白了,就可以看下面这篇文章,通过尝试从需求识别类、做业务建模、推导出业务模块、库表结构

业务的结构的分析和建模相当于是静态分析,因为业务的结构不可能天天变。而业务要赚钱要经营下去,它得动起来才行啊,所以我们还要再项目结构的基础上完成各种业务流程,这些流程也叫做业务行为,针对与业务行为的分析和建模UML有以下三个非常好用的工具。

活动图:

状态机图:

顺序图:

它们三个的区别,具体什么分析场景该用哪个,可以看下面这篇,使用三种流程分析工具从不同角度可视化分析流程。

怎么做好技术评审--业务流程分析和建模


上面的顺序都是按照程序员或者研发管理的思维模式,由粗到细,由点到面。但要从产品思维的角度来考虑,拿到一个产品建设需求,我首先想搞懂的是这个产品是干什么的,有哪些功能,这些功能都有谁用?

所以我推荐大家看一下下面这篇讲描述系统功能用例的文章,如果可能的话,把它作为你系统分析的开端。

使用用例图能更直观,更能从大局上描述系统功能,常见于各种需求规格书、商务竞标书以及产品经理PRD上(如果你们的产品经理够专业的话)

这里我通篇没有提到专栏后面关于汇报技巧的东西,因为虽然这些是我写出来的,但我觉得它不是程序员的核心竞争力,所以这部分在你需要应急的时候看一下,不让你的汇报显得太潦草敷衍就行啦。花时间提升自己的时候不要在这些东西上耗费太多精力。

用Go等非面向对象语言怎么理解类的六种关系

这个有读者问我准不准备用Go解释一下类的六种关系?这个我仔细想了想觉得还是没啥必要

  • 首先这个专栏面向人群没有聚焦到使用某个语言的程序员群体
  • 其次,用Go代码说明白继承和组合实在是有点错乱,因为Go本身也没继承,我怕读者看完了更乱了。

所以专栏里我用Java代码解释的类的六种关系,而且都是特别简单的代码,大家看了都能懂。其实针对很多Go程序员关于类关系的疑问主要出在聚合、组合、继承上,其他的三个关系很好理解也完全可以自己转换过去。

这里我给大家解释一下:

  • Go里面结构体的匿名嵌套可以理解成继承,因为匿名嵌套后外部的结构体类型自动拥有了内嵌结构体的公共字段和方法。
  • 而具名嵌套则是关联--即聚合和组合。
  • 在很多Go的项目里,应该都见过NewXXX 这样的工厂函数,我们可以理解在这个NewXXX函数里自己初始化并赋值给结构体字段的方式叫做组合,因为生命周期跟New出来的结构体是一样的,而通过NewXXX函数的参数传递进来再赋值给结构体字段的方式叫做聚合,因为他们的生命周期可能是不一样的。
  • 聚合和组合主要的区别在于个体和整体的生命周期是不是一样的。

画图模版--简化获取方式

好了接下来,我把专栏里的模版重新整理到了一个文档里,一共15个,在线和离线版都有。有公众号读者说付费文章的链接复制不了,我这里特地做了一个公众号自动回复的口令。

为了保障订阅用户的权益,最后这一点点内容就是订阅读者才能看的了,如果你还没订阅可以在微信或者小报童上订阅,当然你也可以猜猜我用的是什么「口令」,猜出来算你赢

模版整理:

网管叨bi叨
分享软件开发和系统架构设计基础、Go 语言和Kubernetes。
 最新文章