Swift 中 OOP vs POP (举例说明)
OOP
什么是OOP?
- 面向对象程序设计(英语:Object-oriented programming,缩写:OOP)
- 几乎所有的编程语言都支持OOP,Java、Ruby等语言的设计理念几乎将一切事物都看作对象,对象即中心,对象即真理。
OOP主要关心对象是什么
// 基类,人类
class Human {
var name: String
var age: Int
init(name:String, age:Int) {
self.name = name
self.age = age
}
func sayHi() {
print("Hello")
}
}
// 运动员,继承自人类
class Athlete : Human {
override func sayHi() {
print("Hi,I'm \(name)")
}
}
// 田径运动员,继承自运动员
class Runner: Athlete {
func run() {
print("run")
}
}
// 游泳运动员,继承自运动员
class Swimmer: Athlete {
func swim() {
print("swim")
}
}
// 那这时候,如果一个有一个天赋异禀运动员,田径和游泳均会,咋处理?
OOP缺陷
- 继承机制要求你在开始之前就设计好整个程序框架、结构、事物间的连接关系,比如上面例子中的全能运动员,这要求开发者必须有很好的分类设计能力,将不同的属性和方法分配到合适的层次里面去。但是设置清晰明了的继承体系总是很难的。
- 结构天生对改动有抵抗特性。这也是为什么OOP领域中所有的程序员对重构都讳莫如深,有些框架到最后代码量急剧膨胀变得难以维护从而失控。
- 继承机制带来的另一个问题就是:很多语言不支持多继承,我们不得不在父类塞入更多的内容,子类可能会存在无用的父类属性和方法,而这些冗余的代码给子类带来一定的风险,而对于层级很深的代码结构来说Bug修复将会成为难题
- 对象的状态不是我们的编码的好友,相反是我们的敌人。对象固有的状态在分享和传递过程中很难追踪调试,尤其在并行程序编码中问题就更加明显。OOP所带来的可变、不确定、复杂等特征完全与编程倡导的小型化、核心化高效化完全背离
POP
面向协议程序设计(英语:Protocol Oriented Programming,缩写:POP),是Swift的一种编程范式,Apple于2015年WWDC提出,Swift是世界上第一门面向协议编程的语言。它是swift2.0引入的一种新的编程范式,通过协议扩展,协议继承和协议组合的方式来设计编写代码。
- 一个协议会描述方法属性的蓝图。这个协议可以被其他的类、结构体、枚举去遵循
- POP本身就是OOP的演化,只是在OOP(99%)的基础上又迈进了一小步(1%),补足OOP一些设计的不足。
POP主要关心对象做什么
// 定义人类的协议
protocol Human {
var name: String { get set }
var age: Int { get set }
func sayHi()
}
// 定义跑步协议
protocol Runnable {
func run()
}
// 定义游泳协议
protocol Swimming {
func swim()
}
// 定义田径运动员
struct Runner : Human, Runnable {
var name: String = "zhangsan"
var age: Int = 20
func sayHi() {
print("Hi,I'm \(name)")
}
func run() {
print("run")
}
}
// 定义游泳运动员
struct Swimmer : Human, Swimming {
var name: String = "lisi"
var age: Int = 21
func sayHi() {
print("Hi,I'm \(name)")
}
func swim() {
print("swim")
}
}
// 定义全能运动员
struct Aller : Human, Runnable, Swimming {
var name: String = "wangwu"
var age: Int = 22
func sayHi() {
print("Hi,I'm \(name)")
}
func run() {
print("run")
}
func swim() {
print("swim")
}
}
文章目录
关闭
共有 0 条评论