面向对象设计:原理、实践与案例分析
1. 组合与聚合关系
在面向对象设计中,组合和聚合是两种重要的对象关系。在UML(统一建模语言)里,组合关系用实心菱形表示,聚合关系则用空心菱形表示。以国际象棋为例,棋盘和棋子作为棋具的一部分被存储,就如同棋具对象的属性引用它们一样。在实际应用中,一旦过了设计阶段,聚合和组合的区别往往变得不那么重要,因为在实现时,它们的行为很相似。不过,当团队讨论不同对象如何交互时,区分这两者还是有帮助的。通常可以将它们视为相同的事物,但在需要区分时,了解它们的差异就显得尤为重要,这也是抽象的体现。
2. 继承关系
2.1 继承的概念
除了组合和聚合,对象之间还有关联关系。但仅靠这些关系还不足以完整地定义国际象棋系统。例如,玩家可能是人类,也可能是具有人工智能的软件程序。这里就需要一种“是一个”(is - a)的关系,即继承。继承是面向对象编程中最著名、最常用但也常被过度使用的关系。它类似于家族树,就像姓氏和一些特征会在家族中传承一样,在面向对象编程中,一个类可以从另一个类继承属性和方法。
2.2 国际象棋棋子的继承示例
国际象棋棋具中有32个棋子,分为6种不同类型(兵、车、象、马、王、后),每种棋子移动时的行为不同。这些棋子类都有一些共同属性,如颜色和所属棋具,同时在棋盘上有独特的形状和不同的移动方式。可以让这6种棋子类继承自一个 Piece 类。空心箭头表示各个棋子类从 Piece 类继承,所有子类会自动拥有从基类继承的 chess_set 和 color 属性。每个
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



