黑马程序员——Objective-C语言知识整理——封装、继承与多态
2015-06-27 10:10
471 查看
------- android培训、java培训、期待与您交流! ----------
实现原理:使得实例变量默认只能被当前类的对象方法访问。
封装后的有机整体为:
封装后的数据访问与操作实现,需要通过实例化对象,通过调用对象方法获取数据访问与修改权限。实现流程为:
(1) 大大提高数据访问与修改的安全性。
(2) 对于新增数据增设添加权限,将不合法的数据过滤掉,进一步保证数据的正确性 。
(1) setter方法定义
1) 方法功能
提供类成员变量设置接口,设置成员变量的值。
2) 定义规范
◆ 方法命名以set开头。
◆ 使用格式:set+要设置的变量名(首字母大写)。
◆ 返回值为void类型。
◆ 仅接受与变量类型一致的参数。
◆形参名与变量名一致(去掉下划线)。
◆定义为对象方法。
3) 使用优点
◆ 提高数据使用安全性,不会暴露成员变量,被任意函数或方法修改。
◆ 对成员变量值的设置增设修改权限,过滤点不合法的数据修改。
(2) getter方法定义
1) 方法功能
为调用者提供成员变量访问接口,返回对象内部成员变量的值。
2) 定义规范
◆ 有返回值,且返回值类型与要访问成员变量的类型一致。
◆ 方法名与成员变量名一致(去掉下划线)。
◆ 方法类型为无参数对象方法。
3) 使用优点
为调用者提供数据问接口,用于查找和使用变量值。
NSString *astring = @“this is a string”;
(2) 字符串创建与初始化
方法一:NSString *astring = @“this is a string”;
方法二:NSString是一个类,可以实例化为:
方法三:格式化创建字符串:
方法四:用已初始化的字符串创建新的字符串:
NSString astring2 = [[NSString alloc] initWithString:astring1];
方法使用:long len = [s1 length];
C语言求字符串长度函数为:strlen(s1);
说明:在UTF-8编码中,一个汉字占用3个字符;Objective-C中,中英文均占用一个字符。
组合模式,将对象组合成树形结构,以表示部分-整体层次结构。
(2) 涉及到的角色
◆ 抽象接口类,提供对象声明接口。
◆ 叶结点类,叶子结点对象
◆ 枝节点类,提供有枝节点行为接口,如枝节点添加、删除子节点行为。
(3) 使用优点
◆ 客户可以统一使用单个对象或者整个组合对象,且组合结构不暴露内部表示与实现。
◆ 方便在组合体内添加新对象,减少代码修改量。
(1) 作为对象的成员变量
(2) 作为对象方法的形参
例如Person类中的shoot方法,需要Gun类的gun对象作为参数,调用其fire方法,代码示例:
主要有三种,公有继承、私有继承、保护继承方式。
5.2 继承的基本语法
@interface 子类名:父类名
5.3 继承使用的优缺点
使用继承可以减少代码量,减小代码冗余;但会增加代码耦合度。
5.4 使用注意事项
1) 子类不能定义与父类同名的变量,但可以继承父类的变量。
2) OC支持单一继承,不支持多继承。
3) OC支持多层继承。
5.5 基类与派生类的关系
动物->狗、猪,动物为基类,猪狗为派生类,基类与派生类是成对出现的。
6、多态
6.1 多态的概念
多态是某一类事物的多种形态,不同对象以其自己的方式响应相同名称方法的能力成为多态。
用父类类型的指针指向子类对象,动物 *a = [狗 new];
6.2 多态的条件
有继承关系、有方法重写。
6.3 多态的优点
简化了编程接口,允许在类与类之间重用一些习惯性的命名。
6.4 多态原理
动态绑定:程序直道执行时才确定对象调用的实际方法。
6.5 多态使用注意
(1) 如果存在多态,父类是可以使用子类的特有方法的,需要强制类型转化。
(2) 如果不存在多态,则不可以使用。
1、封装的概念与原理
封装是面向对象编程的特性之一,是将有关数据以及作用其上的数据操作结合起来,形成一个有机整体。其中这些数据具有相同的属性和数据行为,封装过程也是对同类是事物属性与操作的抽象。实现原理:使得实例变量默认只能被当前类的对象方法访问。
封装后的有机整体为:
封装后的数据访问与操作实现,需要通过实例化对象,通过调用对象方法获取数据访问与修改权限。实现流程为:
2、封装作用与实现
2.1封装的使用优点
使用封装技术可以:(1) 大大提高数据访问与修改的安全性。
(2) 对于新增数据增设添加权限,将不合法的数据过滤掉,进一步保证数据的正确性 。
2.2 封装的实现
通过getter与setter方法的定义与使用,实现对实例变量的访问与修改。(1) setter方法定义
1) 方法功能
提供类成员变量设置接口,设置成员变量的值。
2) 定义规范
◆ 方法命名以set开头。
◆ 使用格式:set+要设置的变量名(首字母大写)。
◆ 返回值为void类型。
◆ 仅接受与变量类型一致的参数。
◆形参名与变量名一致(去掉下划线)。
◆定义为对象方法。
3) 使用优点
◆ 提高数据使用安全性,不会暴露成员变量,被任意函数或方法修改。
◆ 对成员变量值的设置增设修改权限,过滤点不合法的数据修改。
(2) getter方法定义
1) 方法功能
为调用者提供成员变量访问接口,返回对象内部成员变量的值。
2) 定义规范
◆ 有返回值,且返回值类型与要访问成员变量的类型一致。
◆ 方法名与成员变量名一致(去掉下划线)。
◆ 方法类型为无参数对象方法。
3) 使用优点
为调用者提供数据问接口,用于查找和使用变量值。
3、NSString类介绍
NSString类是Objective-C中处理字符串的类。3.1 NSString类常用方法
(1) 创建常量字符串NSString *astring = @“this is a string”;
(2) 字符串创建与初始化
方法一:NSString *astring = @“this is a string”;
方法二:NSString是一个类,可以实例化为:
NSString *astring = [NSString new]; astring = @“this is a string”;
方法三:格式化创建字符串:
for(int i=0; i<3;i++){ //以xxxxxxxxxx01.jpg格式初始化字符串, //%02d以整型格式录入或输出,占用两个字符,空位补0。 NSString *imgName = [NSString stringWithFormat:@"xxxxxxxxxx%02d.jpg",i]; NSLog(@"%@",imgName); }
方法四:用已初始化的字符串创建新的字符串:
NSString astring2 = [[NSString alloc] initWithString:astring1];
3.2 NSString类字符串长度的计算
NSString类的length方法,可以计算字符串长度。其返回值为长整形。方法使用:long len = [s1 length];
C语言求字符串长度函数为:strlen(s1);
说明:在UTF-8编码中,一个汉字占用3个字符;Objective-C中,中英文均占用一个字符。
4、对象之间的关系
4.1 组合关系
(1) 组合模式概述组合模式,将对象组合成树形结构,以表示部分-整体层次结构。
(2) 涉及到的角色
◆ 抽象接口类,提供对象声明接口。
◆ 叶结点类,叶子结点对象
◆ 枝节点类,提供有枝节点行为接口,如枝节点添加、删除子节点行为。
(3) 使用优点
◆ 客户可以统一使用单个对象或者整个组合对象,且组合结构不暴露内部表示与实现。
◆ 方便在组合体内添加新对象,减少代码修改量。
4.2 依赖关系
对象A作为对象B对象方法的形式参数或者局部变量,则对象B依赖于对象A。(1) 作为对象的成员变量
(2) 作为对象方法的形参
例如Person类中的shoot方法,需要Gun类的gun对象作为参数,调用其fire方法,代码示例:
#import <Foundation/Foundation.h> typedef enum{kSexman,kSexwoman} Sex;//定义Sex枚举类型 //定义Person类 #pragma mark Person类 @interface Person : NSObject { @public NSString *_name;//姓名 int _life;//血量 } + (void)Run;//奔跑 - (void)Shoot:(Gun *) gun;//射击 @end //Person类的实现 @implementation Person + (void)Run//奔跑 { NSLog(@"可劲跑呢"); } - (void)Shoot:(Gun *) gun//射击 { [gun Fire]; } @end //定义Gun类 #pragma mark 枪类Gun @interface Gun : NSObject { @public NSString *_size;//型号 int _bullet;//子弹数 } - (void)Fire;//射击 @end//Gun类的实现@implementation Gun - (void)Fire//射击 { NSLog(@"突突突……,剩余子弹%d",gun->_bullet); } @end int main(int argc,const char * argc[]){ @autoreleasepool{ //创建p与p1对象 Person *p = [Person new]; Gun *gun = [Gun new]; //初始化p p->_name = @"张三"; p->_life = 100; //初始化gun gun->bullet = 10; gun->size = @"国产87式5.8MM步枪弹"; [p Shoot gun];//对象方法调用 } return 0; }
4.3 关联关系
对象B作为对象A的局部变量时,则对象B与对象A存在关联关系。5、继承
5.1 继承方式主要有三种,公有继承、私有继承、保护继承方式。
5.2 继承的基本语法
@interface 子类名:父类名
5.3 继承使用的优缺点
使用继承可以减少代码量,减小代码冗余;但会增加代码耦合度。
5.4 使用注意事项
1) 子类不能定义与父类同名的变量,但可以继承父类的变量。
2) OC支持单一继承,不支持多继承。
3) OC支持多层继承。
5.5 基类与派生类的关系
动物->狗、猪,动物为基类,猪狗为派生类,基类与派生类是成对出现的。
6、多态
6.1 多态的概念多态是某一类事物的多种形态,不同对象以其自己的方式响应相同名称方法的能力成为多态。
用父类类型的指针指向子类对象,动物 *a = [狗 new];
6.2 多态的条件
有继承关系、有方法重写。
6.3 多态的优点
简化了编程接口,允许在类与类之间重用一些习惯性的命名。
6.4 多态原理
动态绑定:程序直道执行时才确定对象调用的实际方法。
6.5 多态使用注意
(1) 如果存在多态,父类是可以使用子类的特有方法的,需要强制类型转化。
(2) 如果不存在多态,则不可以使用。
相关文章推荐
- 自己简单封装的一个CDialog类实例
- 封装好的一个万能检测表单的方法
- jquery datatable后台封装数据示例代码
- c#基础学习之封装
- GET方法URL中传递中文参数乱码的解决方法
- 纯JavaScript实现的兼容各浏览器的添加和移除事件封装
- PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
- javascript的函数、创建对象、封装、属性和方法、继承
- Objective-C的内省(Introspection)用法小结
- C++封装IATHOOK类实例
- WebService 的简单封装接口调用方法
- Node.js中对通用模块的封装方法
- 原生Javascript封装的一个AJAX函数分享
- javascript 面向对象封装与继承
- JavaScript的模块化:封装(闭包),继承(原型) 介绍
- C++封装远程注入类CreateRemoteThreadEx实例
- C++选择文件夹代码的封装
- php封装的smarty类完整实例
- PHP封装分页函数实现文本分页和数字分页
- 自己封装的常用javascript函数分享