变成思想-0x01 面向编程

POP (protocol Oriented Programing POP) 面向协议编程

OOP (Object Oriented Programing) 面向对象编程

OOP的优点

1)封装和权限控制

OC:.h文件负责声明公共变量和方法,.m 文件负责声明私有变量, 并实现所有方法。

Swift:也有public、internal、fileprivate、private 等权限控制;

2)命名空间

Swift:不同的class即使命名相同, 在不同的bundle中, 由于命名空间不同,它们依然可以和谐共存,毫无冲突;在App体积很大的时候,bundle很多时候,这一点特别有用;

OC: 没有命名空间, 所以很多类在命名的时候都加入了“驼峰式”的前缀;

3)扩展性:

Swift:可以通过extension 来增加新方法, 通过动态特性亦可以增加变量, —— 可以保证在不破坏原来代码封装的情况下实现新的方法。

OC:可以使用category实现类似功能;

在Swift和OC中, 还可以通过protocol 和代理模式实现更加灵活的扩展

4)继承和多态

同其他语言一样, 在iOS中,可将公共的方法和变量定义在父类中,在子类继承时再各自实现对应的功能,高效实现代码复用,针对不同的子类,从而大大增加代码的灵活性;

OOP 缺点

1)隐式共享

class 是引用类型, 当在代码中的某处改变某个实例变量时, 另一次在调用此变量时就会受此修改的影响;
很容易造成异常, 尤其是在多线程上, 我们经常会遇到资源竞选(Race condition) 就属于这种情况。
解决多线程时枷锁, 加锁有可能会引起死锁或者代码复杂度剧增。 解决这个问题最好的方案是诸如struct这样的值类型取代class

2)冗余的父类

eg: UIViewController 需要加入一个handleSomethiing() 方法, OOP的是在其extension直接添加这个方法,随着新方法越来越多, 导致UIViewController越来越冗余, 随着新方法越来越多, 导致职权不明确、依赖、冗杂等多种问题。

3)多继承

swift 和OC都不支持多继承, 因为他会造成“菱形”问题,
即为:多个父类实现了同一个方法,子类无法判断继承哪个父类的情况。 C++ 就会有这种情况, 使用了抽象类的实现方式确定继承方法;
在Java中, 有interface的解决方案, 在Swfit有类似的protocol


为什么Swift 要推出全新的POP?

1)OOP自身的缺点, 在继承和代码复用等方面, 其灵活度不高, POP恰好可以解决这个问题;

2)POP可以保证Swfit作为 静态语言的安全性, 而OC时代的OOP, 其动态特性经常会导致异常

3)OOP无法应用于值类型, 而POP可以将其优势扩展到结构体(struct)和枚举(enum)类型中;


OOP优点

1)更加灵活:上面的handleSomething方法, 通过服从协议的同时, 增加了代码的可读性;

2)减少依赖:相对于传入具体的实例变量,可以传入protocol来实现多态,同时,在测试也可以利用protocol 来模拟真实的实例,减少对对象以及其它实现的依赖

3)消除动态分发的风险

POP面试题: 要给一个UIButton增加一个点击后抖动的 效果,应该怎么实现?

三种方案

1)方案一:实现一个自定义的UIButton类, 在其中添加点击抖动效果的方法【shake方法】;

2)方案二:写一个UIButton的Extension, 然后在其中增加share方法

3)方案三:定义一个protocol,然后将协议扩展protocol extension中添加shake方法

分析:
1)性能扩展性不好, 复用性不好
2)可读性很差, 因为不是每个人都知道有这个方法
3)解决了复用性、可读性、维护性 这个三个难题。

本文由mdnice多平台发布

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349