您的位置:首页 > 其它

OC面向对象三大特征

2014-07-21 15:31 253 查看
1.封装

封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

好处:

使用更加简单

变量更加安全

可以隐藏内部实现细节

开发速度加快

注意:

属性封装了实例变量,方法封装了具体的实现代码, 类封装了属性和方法。子类可以继承父类中的方法,还可以重写(override)父类的方法。

封装的实现

set方法

作用:

提供一个方法给外界设置成员变量值,可以在方法里面对参数进行相应过滤

命名规范:

方法名必须以set开头

set后面跟上成员变量的名称,成员变量的首字母必须大写

返回值一定是void

一定要接收一个参数,而且参数类型跟成员变量类型一致

形参的名称不能跟成员变量名一样

get方法

作用:

返回对象内部的成员变量

命名规范:

肯定有返回值,返回值类型肯定与成员变量类型一致

方法名跟成员变量名一样

不需要接收任何参数

示例:

<span style="font-size:14px;">#import <Foundation/Foundation.h>

@interface Score : NSObject

{
int _score; // C语言成绩
}

- (void)setScore:(int)score;
- (int)score;

@end

@implementation Score

- (void)setScore:(int)score
{
_score = score;
}

- (int)score
{
return _score;
}

@end

int main()
{
Score *s = [Score new];
[s setScore:85];
NSLog(@"总分:%d", s.score);

return 0;
}</span>


2.继承

面向对象编程(OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。

通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。

继承的过程,就是从一般到特殊的过程。在考虑使用继承时,有一点需要注意,那就是两个类之间的关系应该是“属于”关系。

例如,Employee 是一个人,Manager也是一个人,因此这两个类都可以继承Person 类。但是 Leg 类却不能继承Person 类,因为腿并不是一个人。

继承的好处:

抽取重复代码

建立了类之间的关系

子类可以拥有父类中的所有成员变量和方法

继承的使用场合

当两个类拥有相同属性和方法的时候,就可以将相同的东西抽取到一个父类中
当A类完全拥有B类中的部分属性和方法时,可以考虑让B类继承A类

注意点

基本上所有类的根类是NSObject

示例:

@interface Animal : NSObject
{
int _age;
}

- (void)setAge:(int)age;
- (int)age;

@end

@implementation Animal

- (void)setAge:(int)age
{
_age = age;
}

- (int)age
{
return _age;
}

@end

@interface Dog : Animal
@end

@implementation Dog
@end


3.多态

多态性(polymorphism)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。

简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。不同对象以自己的方式响应相同的消息的能力叫做多态。

特征:

没有继承就没有多态

代码的体现:

父类类型的指针指向子类对象

好处:

如果函数\方法参数中使用的是父类类型,可以传入父类、子类对象

局限性:

父类类型的变量 不能 直接调用子类特有的方法。必须强转为子类类型变量后,才能直接调用子类特有的方法

示例:

@interface Animal : NSObject
- (void)eat;
@end

@implementation Animal
- (void)eat
{
NSLog(@"Animal-吃东西----");
}
@end

@interface Dog : Animal
- (void)run;
@end

@implementation  Dog
- (void)run
{
NSLog(@"Dog---跑起来");
}
- (void)eat
{
NSLog(@"Dog-吃东西----");
}
@end

@interface Cat : Animal

@end

@implementation Cat
- (void)eat
{
NSLog(@"Cat-吃东西----");
}
@end


4.总结:

封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。

5.个人小结

任何一门面向对象的高级编程语言都包含有封装的概念,这是一种人性化的思维方式的体现。对于个人软件开发工作来讲,我们只需要设计好每一个模块的功能,其它模块直接使用它的功能即可,模块之间尽可能的降低关联程度,减小耦合,来实现重用;对于团队开发项目来讲,项目成员之间的开发可以实现相对的独立,只要在整体项目目标上保持一致即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: