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

------- 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) 如果不存在多态,则不可以使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值