OC中的面向对象编程思想<一>
来源:互联网 发布:head first sql pdf 编辑:程序博客网 时间:2024/05/21 11:26
漫谈面向对象
如果转载, 请注明出处http://blog.csdn.net/uxyheaven/article/details/50174499
Objective-C 常写作Objc或者OC. 它的流行归功于Iphone的成功。编写iPhone应用程序主要编程语言就是Objective—C(2014年6月的时候,apple为了新商业战略,吸引更多的开发者入门,推出了Swift。)
Objective-C语言是一种简单的基于当下先进的面向对象的一种计算机语言。它作为标准的ANSI C语言的扩展,轻量但很强大。相对C, Objective-C新加入的一些内容更多是基于Smalltalk语言,Smalltalk是面向对象编程语言的创始者之一。Obejctive-C被设计赋予C语言完整的面向对象编程的能力,并以一种简单和直接的方式来实现。
相信各位读者最早接触OC的时候就看过以上摘自百度和官方文档的介绍, 之所以在本文里再次提出来, 是为了告诉大伙OC是在C的基础上, 赋予了面向对象的能力. 我们当初在看到这段话的时候可曾思考过什么是面向对象, OC的这种能力具体是如何实现的, 能带来哪些不一样的特性呢?
我们虽然用的是面向对象的语言, 可是很多同学码出来的代码还是大段的面向过程的思想. 我们只是把面向对象的特性当作OC语言本身的一种语法, 然后为了方便, 快速实现需求, 就这么用罢了. 或者干脆就不用.
设想一种场景, 下班回家, 用面向过程采用的是谓语(主语, 宾语).
写出来像下面这样:
工作结束, 下班啦{ 吃饭(小张, 食堂); 吃饭(小王, 食堂); 如果时间是6点到9点之间: 回家(公交, 小张); 塞车(小张); 否则的话, 如果是9点以后: 打车(小张); // or 回家(出租车, 小张); 打车(小王); // or 回家(出租车, 小王);}
面向的对象用的是主语.谓语(宾语).
写出来则是另外一种风格:
工作结束, 下班啦{ [小张 下班啦:晚上8点]; [小王 下班啦:晚上8点];}小张下班的时候: [小张自己 吃饭]; 如果时间是6点到9点之间: [小张自己 坐车]; [小张自己 塞车]; 否则的话, 如果是9点以后: [小张自己 打车];小王下班的时候: [小王自己 吃饭]; [小王自己 打车];
面向过程是一种以过程为中心的编程思想, 可以清晰的知道下班的步骤是吃饭, 做公交, 小王还塞了车; 面向对象则以对象为主体, 强调了人下班了, 人在下班后人吃饭, 人坐车. 面向对象的语法显然更加符合人类的习惯一些.
大伙的日常开发中, 哪种写法比较多呢?
面向对象的基本基本概念
我们先来解决第一个问题, 什么是面向对象编程, 他和普通的编程有什么区别.
面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算是一种计算机编程范式, 它将对象作为问题空间的基本元素, 利用对象和对象之间的相互作用来设计程序.
对象的概念
面向对象思想把整个世界看成由各种对象来组成的. 这些对象具有属性和行为, OC中称之为属性和方法. 从最简单的整数到复杂的飞机等均可看作对象, 它不仅能表示具体的事物, 还能表示抽象的规则, 计划或事件.
比如, 我身上的手机是一个对象. 它有自己有名字, 屏幕尺寸, 重量大小等属性。它的名字是: “Heaven’s ip6”, 这个就是这个属性的值。这台手机还可以打电话发短信,这些就是它的方法。
// 初始化一个手机 IPhone6 *ip = [[IPhone6 alloc] init]; // 我的手机的名字叫 Heaven's ip6 ip.name = @"Heaven's ip6"; // 它拨打电话, 给电信打个电话玩玩 [ip call:@"10000"];
类的概念
面向对象思想的中, 具体的事物是对象, 具有相同或相似性质的对象的抽象或者说描述就是类. 因此, 对象的抽象是类, 类的具体化就是对象, 也可以说类的实例是对象.
比如我身上的土豪金是一个对象, 你身上东北银是一个对象, iPhone6是一个类. 我们可以这样描述这台手机:
@interface IPhone6 : NSObject// 智能手机有名字@property (nonatomic, copy) NSString *nickname;// iPhone有颜色@property (nonatomic, copy) NSString *color;// 手机可以打电话- (void)call:(NSString *)phoneNum;@end
元类的概念
对象的抽象是类, 类的抽象又是什么呢?
前文提到OC是在C的基础上, 赋予了面向对象的能力. OC和其他的面向对象语言有一点区别, 它有元类的概念. OC中的’类’, 它的抽象叫做元类(meta class). 我们可以认为元类的具体化的对象就是类.
元类的结构定义如下:
struct objc_class { Class isa; Class super_class; const char *name; long version; long info; long instance_size; struct objc_ivar_list *ivars; struct objc_method_list **methodLists; struct objc_cache *cache; struct objc_protocol_list *protocols;} OBJC2_UNAVAILABLE;
类也有自己的属性: 比如, name是类的名字, 这里是IPhone6
. 对象的属性则是在ivars里, 这里姑且先让我用属性来称呼. methodLists是类的方法列表, 就手机的类的来说, 他的methodLists里就有call这个方法.
类也是一个具体的对象, 正因为OC是这样实现OOP的, 我们可以修改这个对象的属性的值, 从而实现一些特殊的用途.
我们可以动态的添加一个方法.
class_addMethod(Class cls, SEL name, IMP imp, const char *types)
比如最早用功能机的时候是不可以安装app的, 我用的iPhone6是智能手机, 可以给他安装一个APP, 这样就可以干一些原本不能干的事情.
还可以通过swizzle技术交换2个方法的实现. 从而做出AOP编程.
后面的runtime花式玩法章节会对这里做出补充, 这里只是先给出些基本概念.
- OC中的面向对象编程思想<一>
- OC---面向对象编程思想
- OC面向对象思想
- 一、浅谈oc中的面向对象
- 编程思想(一):面向对象思想及衍生特性
- 面向对象编程思想
- 面向对象编程思想
- 面向对象思想编程
- 面向对象编程思想
- 面向对象编程思想
- 面向对象编程思想
- 面向对象编程思想
- 面向对象编程思想
- 面向对象编程思想
- 面向对象思想编程
- 面向对象思想编程
- 面向对象编程思想
- 面向对象编程思想
- epoll + 多线程实现并发网络连接处理
- android典型代码系列(十九)------将一个数组复制成为另外一个数组的方法
- 自定义控件解决重复编码问题
- Xcode7.1请求网络数据
- ExtJS 4无限制滚动条的Grid
- OC中的面向对象编程思想<一>
- 大白书 2.4节 组合游戏(博弈论)
- viewpager 滑动 卡死 死机
- 移动端网络基础--HTTP
- 爬取新浪搜索内容遇到的问题及解决
- eclipse项目找不到build path
- IndexedColors 的颜色样式 POI
- Linux下source命令
- 【Android】图片剪裁类库,解决com.android.camera.action.CROP在4.4版本以上遇到的intent类型问题