[绿茶学代码01] 为什么giegie画的流程图没用呢?[日记][笔记学]

记笔记的时候,我们喜欢画出这样的图(以工厂模式为例):

工厂
接受订单
生产东西

giegie喜欢嘛?

乍一看似乎做了点什么,却又什么都没做呢。

这种图,多半是刚看到概念还不清楚的时候,不由自主画的呢。

giegie这么厉害,等熟悉了肯定觉得索然无味吧,既不能当做wiki,也不能当做reference,面试也不能背。

想来想去,它其实也是无辜的呢,不过是更偏向于"概念"方面,真要落实到代码上,却毫无意义了呢。

那有没有giegie会抛弃它,去画UML图呢?

好像更加没头没尾了吧?

…恕我直言,giegie的UML图, 90%的情况下不如直接读代码呢。

但是直接记代码的话,好像很费劲,也不太容易发现问题呢。

我们理解的过程也是很重要的呢。

伪代码好像也不太可以,因为那个就是叙述性的呢。。

giegie,为什么记笔记这么难呢?

我们大概是缺少联通<概念>与<实现>的中介吧,我们总是很少考虑执行的机器模型本身呢。

要知道,任何概念对应的实际代码,都是在一个{受限机}的模型下产生的。

比如上次giegie不小心碰到了人家的肩膀,这个"碰撞"在我们看来完全是天然的,但图灵机的模型下,就只能一行一行去检查,所以我们的代码就要用循环了呢。

要知道,任何事情都是矛盾的产物。

代码的写法,语义的实现,就是<概念>和{模型受限的机器}之间,矛盾调和的产物呢。

依然还是工厂模式,它的实际代码和概念图完全没法对应,尤其是new语句混在其中,它出现得理所应当,又让人家很不愉快呢。

factory=new SomeFactory();
order=new order();
result=factory.Create(order);

这就是因为,实际的机器是一个{线性执行对象机}呢。也就是说,它只能一条一条地线性地执行语句,并且以对象为基本单位呢。

所以工厂模式的概念落实到代码的执行上只能是线性的。这让实际代码不多用几次,就好难记呢。

再比如下面这个例子,是微软酱的Trace的用法喔(打log用的呜!)

M1
M2
Trace信息
A:缓冲区
B:监听者

这种概念图,还是说了等于没说呢。

由此看来,模型图确实没用。

它给的都是我们抽象得不能再抽象的东西,而笔记又不太好记太具体的,不然还不知道是对是错呢。

我们不如简单地改一改,将代码指向每个阶段:

在这里插入图片描述

TextWriterTraceListener listener = new TextWriterTraceListener(<outputFileName>); 
Trace.Listeners.Add(<listener>);
Trace.AutoFlush = true;
Trace.WriteLine(<ex>.ToString());
Trace.Flush();   
<listener>.Close();
Trace.Listeners.Remove(<listener>); 

这样就又具体,又看得出执行的东西了呢。

虽然打乱了"线性"的节奏,也反应不出用何种对象,但只要同时贴好源代码,就是很好的速记方法呢!giegie一定不会怪我的吧?(代码中的<Listener>语义,借用了XAML的写法,标记了一个Listener的实例呜!)

而在具体总结时,giegie可以在概念图的边上,画出下面这样的执行模型呢。

它把不同的东西用不同的域去圈住。还在流程之外新建了对象,很好用的呢。它还强调了你在一个{受限线性对象机}上跑的呜!
在这里插入图片描述

哎呀,giegie眼神真好,你一定看到有些代码确实没有抄的吧!像刚才<Listener>.Close()这样的代码,我觉得是进出这一段环境该考虑的, 所以可以写在背景的大白块上,就是会很不好看的啦!
要是搞得和UML图一样让人晕乎乎的,giegie一定会怪我的吧!

2021.09.15

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值