您的位置:首页 > 移动开发 > Objective-C

黑马程序员——Objective-C语言知识整理——封装、继承与多态

2015-06-27 10:10 471 查看
------- android培训java培训、期待与您交流! ----------

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) 如果不存在多态,则不可以使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息