黑马程序员-OC语言-封装
2015-12-19 13:34
363 查看
——- ios培训、ios培训、期待与您交流! ———-
封装的实质
是指隐藏对象的属性和实现细节,对外提供公共访问方式,封装是一种思想.
方法默认就是用了封装的思想.
属性有两种方式操作:
1直接操作.public
2.封装操作:通过给外部暴露两个方法:set方法用于设置值.get方法用于获取值.
一个属性的set与get方法不是必须的,看情况,如果你希望让外部调用者可以设置值,
则你就给定义set方法.如果你希望外部能获取值,就定义get方法.
一切看需求.
封装的好处:
• 将变化隔离。 • 便于使用。 • 提高重用性。 • 提高安全性。
封装原则:
• 将不需要对外提供的内容都隐藏起来。
• 把属性都隐藏,提供公共方法对其访问。
代码体现:
关于封装的一些思考:属性默认的方式是@protected,假如不通过封装,而是把属性的访问方式改为@pubulic,这样外部的对象可以任意操作属性,比如可以让年龄设置为-1,这明显是不符合逻辑的,所以我们需要把属性封装起来,限制给属性的赋值.这就是常用的设置器(set方法),对应的,如果想要获取某一个属性的值,需要设置一个接收器(get方法),这样就保证了属性赋值的安全型,而且其他对象想要操作封装的属性的时候也可以直接调用以上两个方法,提高了效率.
类方法封装
好处: 不需要创建对象,可以直接通过类名调用的方法,称为类方法.
作用:调用方便.执行效率高.在定义方法的时候尽量用类方法.
类方法不能使用属性–局限性.
注意:定义方法时:到底是用类方法还是对象看在方法里是否要用到属性.如果要用到属性则用对象方法.反之,用类方法.
封装的实质
是指隐藏对象的属性和实现细节,对外提供公共访问方式,封装是一种思想.
方法默认就是用了封装的思想.
属性有两种方式操作:
1直接操作.public
2.封装操作:通过给外部暴露两个方法:set方法用于设置值.get方法用于获取值.
一个属性的set与get方法不是必须的,看情况,如果你希望让外部调用者可以设置值,
则你就给定义set方法.如果你希望外部能获取值,就定义get方法.
一切看需求.
封装的好处:
• 将变化隔离。 • 便于使用。 • 提高重用性。 • 提高安全性。
封装原则:
• 将不需要对外提供的内容都隐藏起来。
• 把属性都隐藏,提供公共方法对其访问。
代码体现:
#import <Foundation/Foundation.h> @interface Person : NSObject{ //@public 表示这个属性能被外部直接访问. /* 属性命名规范: 属性名以_开头. 以便于与参数区分.同时.便于与局部变量区别. */ char *_name; int _age; } -(void) smile; /* 规范: 1.不能有返回值. 2.必须有参数,且参数类型与属性类型一致. 3.参数名不能与属性名一致 4.set+属性名:首字母大写(驼峰命名) 作用:就是给属性(成员变量)去赋值 */ -(void) setAge:(int) age; /* 规范: 1.必须有返回值. 2.不能有参数. 3.返回值类型必须跟属性类型一致. 4.get+属性名:首字母大写(驼峰命名) 作用:就是把属性值传递给调用者. */ -(int) getAge; @end @implementation Person -(void) smile{ NSLog(@"%s笑了--年龄是:%d",_name,_age); } -(void) setAge:(int) age{ if(age<=0){ _age=1; }else{ _age=age; } //NSLog(@"当前的年龄是:%d",age); } -(int) getAge{ return _age; } @end int main(){ Person *p=[Person new]; // [p smile]; // p->name="fred"; //public的方式,外部拿到对象可以直接操作对象的属性,没有限制. // p->age=-100; //用封装的方式去设置值 [p setAge:100]; //用封装的方式去获取值. //NSLog(@"当前的年龄是:%d",[p getAge]); [p smile]; return 0; }
关于封装的一些思考:属性默认的方式是@protected,假如不通过封装,而是把属性的访问方式改为@pubulic,这样外部的对象可以任意操作属性,比如可以让年龄设置为-1,这明显是不符合逻辑的,所以我们需要把属性封装起来,限制给属性的赋值.这就是常用的设置器(set方法),对应的,如果想要获取某一个属性的值,需要设置一个接收器(get方法),这样就保证了属性赋值的安全型,而且其他对象想要操作封装的属性的时候也可以直接调用以上两个方法,提高了效率.
类方法封装
好处: 不需要创建对象,可以直接通过类名调用的方法,称为类方法.
作用:调用方便.执行效率高.在定义方法的时候尽量用类方法.
类方法不能使用属性–局限性.
注意:定义方法时:到底是用类方法还是对象看在方法里是否要用到属性.如果要用到属性则用对象方法.反之,用类方法.
#import <Foundation/Foundation.h> @interface Person : NSObject{ char *_name; } -(void)setName:(char *)name; -(void)smile; +(void)smile; +(void)haha:(char *)str; @end @implementation Person -(void)setName:(char *)name{ _name=name; } //这里是对象方法:可以直接调用属性 -(void)smile{ NSLog(@"哈哈..很开心..%s",_name); } //这里是类方法:不可以直接访问属性 +(void)smile{ NSLog(@"呼呼..很开心.."); } //这里也是个类方法,不可以*直接*访问属性,但是可以先把属性当做参数传进去,然后在方法里面使用属性. +(void)haha:(char *)str{ // NSLog(@"haha..很开心..%s",name); } @end int main(){ Person *p=[Person new]; [p setName:"fred"];//对象调用对象方法 [p smile]; [Person haha:"heihei"];//类调用类方法 [Person smile]; return 0; }
相关文章推荐
- 自己简单封装的一个CDialog类实例
- PHP类的封装与继承详解
- javascript封装简单实现方法
- 封装好的一个万能检测表单的方法
- jquery datatable后台封装数据示例代码
- c#基础学习之封装
- Java游戏服务器之数据库表存取封装
- 纯JavaScript实现的兼容各浏览器的添加和移除事件封装
- PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
- javascript的函数、创建对象、封装、属性和方法、继承
- 异步的SQL数据库封装详解
- 深入解析C++编程中类的封装特性
- C++封装IATHOOK类实例
- javascript封装 Cookie 应用接口
- WebService 的简单封装接口调用方法
- Node.js中对通用模块的封装方法
- 学习JavaScript设计模式(封装)
- 原生Javascript封装的一个AJAX函数分享
- javascript 面向对象封装与继承
- JavaScript的模块化:封装(闭包),继承(原型) 介绍