Swift编程:面向对象与协议编程及类型选择
1. 面向对象编程与协议编程对比
在编程领域,面向对象编程(OOP)和协议编程(POP)是两种重要的编程范式。
在面向对象编程中,子类的初始化器必须调用父类的初始化器,以确保父类的所有属性都能正确设置。但这也隐藏了类的初始化过程,我们可能需要深入类的层次结构才能了解其初始化方式。而在协议编程中,所有的初始化都在类型本身完成,我们能轻松看到所有内容的定义和初始化方式。
面向对象编程中,父类提供需求的实现;而协议编程里,协议只是一个契约,任何遵循协议的类型都必须满足协议规定的要求,所有属性、方法和初始化器都在遵循协议的类型中定义。
2. 值类型与引用类型
值类型和引用类型存在一些根本区别,这里主要关注它们在传递方式上的差异:
- 引用类型(类) :传递实例时,传递的是对原始实例的引用,对实例的任何更改都会反映回原始实例。
- 值类型 :传递实例时,传递的是原始实例的新副本,对副本的更改不会影响原始实例。
以饮料类型为例,饮料实例在同一时间应该只有一个所有者。使用值类型可以确保我们总是得到一个唯一的实例,因为传递的是副本而非引用,这样能避免代码的其他部分意外更改实例。在多线程环境中,这一点尤为重要,因为不同线程可能会改变数据并导致意外行为。
我们需要根据具体情况合理使用值类型和引用类型。在这个例子中,饮料类型适合使用值类型,而冷却器类型则适合使用引用类型。
在大多数面向对象语言中,我们无法将自定义类型实现为值类型。但在Swift中,类和结构体的功能更为接近
Swift编程:面向对象、协议编程与类型选择
超级会员免费看
订阅专栏 解锁全文

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



