什么是面向协议的编程?

面向协议的编程,是一种编程范式。

编程范式,是一个计算机科学用语。维基百科中的解释是,计算机编程的基本风格或典型模式。通俗来说,就是解决某一个问题的方法不同方法和思路。

像大家很熟悉的,面向对象编程以及面向过程编程,都是一种编程范式。

面向过程编程,关心的焦点是解决某一个问题需要多少步。而面向对象的编程关心的是解决问题需要多少个对象,以及这些对象之间的组织联系。

解释完了编程范式这个名字含义之后,我们继续回到正题上来。

既然面向协议编程,与面向对象,面向过程一样,是一种编程范式。那么这种编程范式相对其他其他两种范式有什么优点和优势呢。

在回答这个问题之前,我们先来回顾一下面向对象。

大家知道面向对象,相对面向过程已经是一种进步,能够让一个复杂的的工程划分为若干个小的独立的模块,减少了软件的复杂度。

这主要得益于面向对象编程里的几个核心概念,封装,继承,多态。

在面向对象的编程世界中,对象是构建程序的基本单元,

封装提供代码一个安全和便捷的访问机制

继承让子类很容易复用父类的代码

多态是对象具有更多抽象能力,写出更加通用的代码。

但是大家你在使用它们的时候,也是有成本的。主要有三个

1、implicit data sharing

2、Inheritance issues

每当你创建一个对象的时候,你第一件事就是得考虑它集成谁。并且呢,集成一般是单继承,只能有一个父类,不能有多个。而且,如果在开发中期你想改变自己的父类是一个非常难得事情。还有,父类的所有属性和方法,你都必须得都集成过来,不管你想要还是不想要,没有任何商量的余地。

3、Lost Type Relationship

虽然多态让对象具有更多抽象能力,但是我们必须得写很多类型转换代码。例如,一些基类在调用某些方法的时候,基类没有实现,子类实现了。这个时候你必须将基类转化成子类才能够调用,这造成了类型的缺失。

面向协议这个概念的提出,就是为了解决以上面向对象所遇到的问题。

我们以一个具体的例子来看一看面向协议编程是如何写的。

待写

Swift中面向协议的编程的更多相关文章

  1. 为什么swift是面向协议的编程--对面向对象机制的改进

    主要目标是提供抽象能力和解决值类型的多态问题 Actually, Abrahams says, those are all attributes of types, and classes are j ...

  2. 为什么说swift是面向协议编程--草稿

    为什么说swift是面向协议编程 public protocol ReactiveCompatible { /// Extended type associatedtype CompatibleTyp ...

  3. Swift 中的协议

    Swift 中的协议协议是为方法.属性等定义一套规范,没有具体的实现,类似于Java中的抽象接口,它只是描述了方法或属性的骨架,而不是实现.方法和属性实现还需要通过定义类,函数和枚举完成. 协议定义 ...

  4. Swift -POP( 面向协议编程)与OOP(面向对象编程)

    面向协议编程(Protocol Oriented Programming,简称POP),是Swift的一种编程范式,Apple于2015年WWDC提出的,如果大家看Swift的标准库,就会看到大量PO ...

  5. Swift中声明协议中的class关键字的作用

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 最近在Cocos2D编程for Swift中看到以下一个代码片 ...

  6. Swift中的协议

    协议: 1.Swift协议用于定义多个类型应该遵守的规范 2.协议定义了一种规范, 不提供任何实现 3.协议统一了属性名, 方法, 下标, 但是协议并不提供任何实现 4.语法格式: [修饰符] pro ...

  7. 用 Swift 编写面向协议的网络请求

    和我一起参加9 月 1 日 - 9月 2 日在纽约举办的 Swift 社区庆典

  8. Swift 学习笔记(面向协议编程)

    在Swift中协议不仅可以定义方法和属性,而且协议是可以扩展的,最关键的是,在协议的扩展中可以添加一些方法的默认实现,就是在协议的方法中可以实现一些逻辑,由于这个特性,Swift是可以面向协议进行编程 ...

  9. fir.im Weekly - 揭秘 iOS 面向协议编程

    本期 fir.im Weekly 重点推荐关于 iOS 面向协议编程相关文章,还有 iOS 多线程安全.Swift 进阶.Android MVVM 应用框架.Android 蓝牙实践等技术文章分享和工 ...

随机推荐

  1. 你好,C++(34)有一只叫做多利的羊 6.2.4 拷贝构造函数

    6.2.4  拷贝构造函数 在C++世界中,除了需要使用构造函数直接创建一个新的对象之外,有时还需要根据已经存在的某个对象创建它的一个副本,就像那只叫做多利的羊一样,我们希望根据一只羊创建出来另外一只 ...

  2. underscorejs-every学习

    2.10 every 2.10.1 语法: _.every(list, predicate, [context]) 2.10.2 说明: 对list集合的每个成员根据predicate进行真值检测,如 ...

  3. underscorejs-sortBy学习

    2.17 sortBy 2.17.1 语法 _.sortBy(list, iteratee, [context]) 2.17.2 说明 返回一个排序后的list拷贝副本. list为集合,如数组.对象 ...

  4. JavaScript 学习-变量的作用域和块级作用域

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. python:open/文件操作

    open/文件操作f=open('/tmp/hello','w') #open(路径+文件名,读写模式) #读写模式:r只读,r+读写,w新建(会覆盖原有文件),a追加,b二进制文件.常用模式 如:' ...

  6. python处理mysql慢查询日志

    # -*- coding:utf8 -*- ''' Created on 2017年1月9日 @author: qiancheng ''' import re import os from email ...

  7. function的粗浅理解

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. 一个md5加密的工具类,用的虚拟机的包,不需要额外导包

    package com.yun.park.service.utils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import jav ...

  9. Forms & HTML 组件 - laravelcollective/html

    简书链接 :Forms & HTML 组件 - laravelcollective/html 安装 方法一: composer require laravelcollective/html 方 ...

  10. 蓝牙-b

    最近智能家居比较火,好多公司开始开发通过蓝牙对智能家居进行连接控制!下面,我就把自己总结的蓝牙方面的知识分享一下!求吐槽!!!!O(∩_∩)O... 1.导入头文件#import <CoreBl ...