(本文主要关注 Relationships)
(想弄清楚这些关系怎样对应到 Go 里)
(!!!我好像还是没有分清楚聚合和组合的区别!!!)
定义关系
继承(Inheritance)
Is-A
子类型继承父类型。
classDiagram
direction LR
subtype --|> supertype : Inheritance
聚合(Aggregation)
Has-A
一种较弱的联系,两者可以相互独立存在,有各自的生命周期。
classDiagram
direction LR
component --o composite : Aggregation
组合(Composition)
Contains-A
一种较强的(强于聚合)联系,一方拥有另一方,两者不能独立存在。
classDiagram
direction LR
component --o composite : Composition
实现(Realization)
classDiagram
direction LR
class stringsReader["*strings.Reader"]
class ioReader["io.Reader"]
<<interface>> ioReader
stringsReader ..|> ioReader : Realization
依赖(Dependency)
classDiagram
direction LR
A ..> B : Dependency
联系(Association)
TODO 就是表示有关系吧。
classDiagram
direction LR
A --> B
C -- D
E .. F
Go 中的关系如何表示
类型实现接口
个人感觉有两种表示方式,继承和实现,但我更偏向实现吧。
classDiagram
direction LR
class stringsReader["*strings.Reader"]
class ioReader["io.Reader"]
<<interface>> ioReader
stringsReader ..|> ioReader : Realization
classDiagram
direction LR
class stringsReader["*strings.Reader"]
class ioReader["io.Reader"]
<<interface>> ioReader
stringsReader --|> ioReader : Inheritance
结构体字段
有名字字段和匿名字段(嵌入)先都用组合表示吧。
(可能是没写过真正的 OOP 的原因,我感觉现在无法分辨聚合和组合。)
classDiagram
direction LR
class netIPConn["net.IPConn"]{
- conn
}
class netconn["net.conn"]{
- fd *netFD
}
class netnetFD["net.netFD"]{
- pfd poll.FD
- family int
- sotype int
- isConnected bool
- net string
- laddr Addr
- raddr Addr
}
netconn --* netIPConn : Composition
netnetFD --* netconn: Composition
(本文主要关注 Relationships) (想弄清楚这些关系怎样对应到 Go 里) (!!!我好像还是没有分清楚聚合和组合的区别!!!)
定义关系
继承(Inheritance)
Is-A
子类型继承父类型。
聚合(Aggregation)
Has-A
一种较弱的联系,两者可以相互独立存在,有各自的生命周期。
组合(Composition)
Contains-A
一种较强的(强于聚合)联系,一方拥有另一方,两者不能独立存在。
实现(Realization)
依赖(Dependency)
联系(Association)
TODO 就是表示有关系吧。
Go 中的关系如何表示
类型实现接口
个人感觉有两种表示方式,继承和实现,但我更偏向实现吧。
结构体字段
有名字字段和匿名字段(嵌入)先都用组合表示吧。
(可能是没写过真正的 OOP 的原因,我感觉现在无法分辨聚合和组合。)
参见