现在你知道什么是设计模式了吧! 在这一章中,你将学习一个基本概念来帮助你理解设计模式:类图。
类图就像工程蓝图;它们通过图片、符号和注释的媒介来提供系统的信息。
你可能听说过统一建模语言(UML),它是一种用于创建类图、建筑图和其他系统图示的标准语言。对UML的完整讨论超出了本书的范围,但你在日常的iOS开发中不需要了解很多UML。相反,你将在本章中学习UML的一个子集,它对创建类图和描述设计模式很有用。
类图包括类、协议、属性、方法和关系。
一个方框表示一个类。下面是一个非常简单的狗类的类图。
为了表示一个类继承于另一个类,使用一个开放的箭头。
但不要把它读成 "继承于",而要读成 "是"。例如,为了表明SheepDog继承于Dog,你可以画出下面的图。
你可以把它从下到上读成 "SheepDog是一只狗"。
用一个普通的箭头来表示一个属性,这在UML术语中被称为 "关联"。
类图可以从下往上写,也可以从左往右写,还可以用其他任何你想用的方向。无论哪种方向,箭头的方向都决定了其含义。继承箭头总是指向父类,而属性箭头总是指向属性类。
你应该把属性箭头理解为 "有一个"。例如,如果一个农民有一只狗,你会这样画。
你可以通过在箭头旁边指定一个范围来表示一对多的关系。例如,你可以这样表示一个农夫有一个或多个狗。
在类图中,你应该始终使用类名的单数形式,即使你在传达一对多的关系。在这种情况下,你应该写Dog,而不是Dogs。
你可以在一个类图中使用任意多的箭头和方框。例如,下面是你如何表示一个农夫有一只属于狗的SheepDog。
你也可以用一个框来表示一个协议。然而,为了将它与一个类区分开来,你需要在它的名字前写上<
下面是你如何表示一个叫做PetOwning的协议。
使用带虚线的开放式箭头来表示一个类实现了一个协议。
你可以把它理解为 "实施 "或 "符合"。例如,你可以这样表示Farmer符合PetOwning的规定。
用一个普通的箭头加上虚线来表示 "使用",这在UML术语中被称为 "依赖"。
UML故意对什么是依赖关系含糊其辞。因此,当你使用一个依赖性箭头时,你通常应该注解它的目的。例如,你可以用一个依赖性箭头来表示以下东西。
一个弱属性或委托。
一个被作为参数传入方法的对象,但不作为属性持有。
一个松散的耦合或回调,例如从视图到控制器的IBAction。下面是你如何表示Dog委托给PetOwning对象的方法。
你也可以在类图中表示出属性和方法。例如,你可以这样表示PetOwning有一个name属性和一个petNeedsFood(_:)方法。
下面是一个拥有SheepDog的农夫的完整类图,SheepDog是一个委托给PetOwning对象的狗。
现在你已经掌握了基础知识,是时候测试一下你的知识了!在一张纸上画出以下挑战的类图。
在一张纸上,为以下每个挑战画出类图。准备好后,在下一页查看答案。
狗和猫继承于动物,动物定义了一个吃的方法。
车辆协议有一个马达和一个或多个车轮对象。
教授是一名教师,符合人的协议。
对于这些挑战,有许多正确的解决方案。例如,你不需要从上到下画图。相反,你可以从左到右或其他方向画。只要你的类图清楚地传达了预期的意思,它就是正确的!
解决方案1。你需要三个盒子:猫、狗和动物各一个。你需要一个从猫到动物的开放箭头,以及另一个从狗到动物的开放箭头。你还应该在Animal上注明eat()。
解决方案2。你应该有三个盒子:一个用于<<协议>>车辆、马达和车轮。你应该有一个从Vehicle到Motor的普通箭头,还有一个从Vehicle到Wheel的普通箭头。你还应该有1 ... 指向车轮的箭头旁边应该有*。
解决方案3。这个问题的措辞是故意含糊的。我们的意思可能是,要么教师符合人,要么教授符合人。因此,教授将直接或间接地通过教师与人相一致。
如果教师符合人,而教授继承于教师,那么类图看起来是这样的。
如果教授符合人称,但教师不符合,那么班级图看起来是这样的。
你在本章中学习了类图的基本知识。这就是你理解本书其他部分的图所需要的全部内容。如果需要的话,你可以随时参考本章的内容
类图给出了类和协议类型的可视化表示,显示了它们的属性和方法。
类图还显示了对象类型之间的关系。
类图可以以任何其他方向绘制;箭头的方向决定了其含义。
框表示类,线表示关系。"实现"、"具有"、"使用 "和 "符合 "是最常见的关系。
盒子也可以表示协议,在名称前用\(<<protocol>>\)表示。
上一章 | 目录 | 下一章 |
---|