首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >哪种类型的UML图适合描述通过通道协作的猩猩?

哪种类型的UML图适合描述通过通道协作的猩猩?
EN

Stack Overflow用户
提问于 2022-04-12 10:43:06
回答 1查看 538关注 0票数 0

让我们假设有一个简单的整数计算器,它只支持加法和乘法运算。它将接收一个整数生成器和一个整数作为其输入参数的加性或乘数,并对来自生成器的每个元素应用相应的计算。

我认为下面的粗略序列图恰当地描述了这个逻辑。

但是,当我使用goroutines和通道来实现相同的逻辑时,直接的方法/函数调用关系就消失了,因为goroutines利用通道来发送和接收数据。

代码语言:javascript
运行
复制
generator := func(integers ...int) <-chan int {
    intStream := make(chan int)
    go func() {
        defer close(intStream)
        for _, i := range integers {
            intStream <- i
        }
    }()
    return intStream
}

multiply := func(intStream <-chan int, multiplier int) <-chan int {
    multipliedStream := make(chan int)
    go func() {
        defer close(multipliedStream)
        for i := range intStream {
            multipliedStream <- i*multiplier
        }
    }()
    return multipliedStream
}


add := func(intStream <-chan int, additive int) <-chan int {
    addedStream := make(chan int)
    go func() {
        defer close(addedStream)
        for i := range intStream {
            addedStream <- i+additive
        }
    }()
    return addedStream
}

intStream := generator(1, 2, 3, 4)
pipeline := multiply(add(intStream, 1), 2)

for v := range pipeline {
    fmt.Println(v)
}

generator中生成的goroutine充当发送整数的生产者;在addmultiply中生成的goroutine既是生产者,也是消费者;它们接收整数,处理它们,并将它们放入新的通道。最后,两条通道将这3条通道连接成一条管道,但我不知道如何将其呈现得一目了然。

有一种面向大猩猩的UML图吗?

EN

Stack Overflow用户

回答已采纳

发布于 2022-04-12 11:56:54

在这个领域,没有一刀切的东西。这取决于您希望在设计中将重点放在何处:

  • 如果您想坚持戈鲁廷是轻量级线程这一事实,并且在使用的通道(缓冲与否)上,您可能会对活动图感兴趣。活动图也适合于突出显示功能设计中的值流(即对象流)。如果您想显示对象(包括函子)在特定场景中是如何交互的,则保留序列图,但完成它以显示发生了什么:您至少需要在使用者和生成器之间提供一些消息(这对应于通过通道进行的交换:箭头不仅仅是函数调用;它们是可以对应于函数调用的消息,也是其他通信形式的消息)。如果频道非常重要,您甚至可以考虑为它添加一个liefline :这将解决您所表达的大部分关切。

Not related__:使用UML图可视化地记录低级代码,或者进行某种可视化编程是完全有效的,但是往往会创建非常复杂的图表,更难阅读代码。这可能不是最好的目的。

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71841250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档