内部属性 聚合_面向对象编程中的聚合与组合

173a6a2567a743661e7192bc93c95da1.png

在面向对象编程中,两个或多个类之间可以存在许多不同类型的关系。 最常见的两种类型是:

· 继承-"是"关系

· 包容-一种"有"关系

该博客将深入探讨两种包容关系-聚合和组合。

什么是包容关系?

两个类之间的关联关系是"具有"关系。 例如:

· 汽车有引擎和车轮

· 一个人有一条腿和一条胳膊

· 一本书有页

这通常表示何时存在两个类,即A类和B类,并且其中一个:

· Class包含Class作为属性,或者

· 类的实例在类内部构造

聚合与组合有什么区别?

关联关系有两种子类型-聚合和组合。 两者有什么区别?

组合

组合意味着所包含的类不能独立于容器而存在。 如果容器被破坏,孩子也将被破坏。

以一本书和一本书为例。 没有书就不能存在该页面,因为书是由页面组成的。 如果Book被销毁,Page也将被销毁。

在代码中,这通常是指在容器类内部创建的子实例:

class Book: def __init__(self):   page1 = Page('This is content for page 1') page2 = Page('This is content for page 2') self.pages = [page1, page2]class Page: def __init__(self, content):   self.content = contentbook = Book() # If I destroy this Book instance, # the Page instances are also destroyed

聚合

通过聚合,子级可以独立于父级而存在。

因此,考虑到汽车和发动机,在销毁汽车时不需要销毁发动机。

class Car: def __init__(self, engine):   self.engine = engineclass Engine: def __init__(self):   pass    engine = Engine()car = Car(engine) # If I destroy this Car instance, # the Engine instance still exists

这些如何表示UML图?

在UML图表中,聚合和组合都在类之间用菱形箭头表示。 钻石末端在容器的侧面。

· 组合使用裸钻

· 聚合使用封闭式钻石

这是一个例子:

61b18e0c14392c14275a97f84569315b.png

希望这对您有所帮助!

(本文翻译自Anna Azzam的文章《Aggregation vs. Composition in Object Oriented Programming》,参考:https://medium.com/swlh/aggregation-vs-composition-in-object-oriented-programming-3fa4fd471a9f)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值