面向过程解决问题是考虑事物的发展过程:如音乐播放器有以下几个过程
->打开播放器
->播放音乐
->关闭音乐播放器
面向对象是把问题看着对象来解决(万物皆对象):
1.打开(方法功能)
2.播放(方法功能)
3.关闭(方法功能)
面向对象有三大特性:封装,继承,多态
一,封装
封装的目的主要是将对象的属性信息封装起来,避免暴露在外面任由其他对象调用修改或是设置的值不符合实际,
设置和调用对象的成员变量主要用到setter和getter
如:- //Person类的声明
- @interface Person :NSObject
- {
- int _age; //年龄
- double _weight; //体重
- }
- // 年龄的setter和getter
- - (void) setAge: (int) age;
- - (int) age;
- //体重的setter和getter
- - (void) setWeight:(double) weight;
- - (double) weight;
- @end
- //Person类的实现
- @implement Person
- // 年龄的setter和getter
- - (void) setAge: (int) age
- {
- if(age<=0)
- {
- NSLog(@"年龄应大于0,请重新输入,谢谢!");
- }else _age=age;
- }
- - (int) age
- {
- return _age;
- }
- //体重的setter和getter
- - (void) setWeight:(double) weight
- {
- if(weight<=0)
- {
- NSLog(@"体重应大于0,请重新输入,谢谢!");
- }else _weight=weight;
- }
- - (double) weight
- {
- return _weight;
- }
- @end
复制代码
二,继承
继承主要是扩充类的属性和方法,一般是子类继承父类的,这样子类就可以拥有与父类的所有属性和方法,子类就不用重复声明定义了,进而抽取了共同代码
如:Animal类
成员变量有:int _age; double _weight;
方法有: - (void) run; - (void) sleep;
子类Dog属于Animal的一种,应当有用和Animal的属性方法所有Dog类的声明如下:
@interface Dog :Animal
{
int _color; //毛色
}
@end
这样Dog类也拥有成员变量:int _age; double _weight;
方法:- (void) run; - (void) sleep;
同时还用自己的特色:int _color:表示Dog的毛色
三,多态
多态值事物具有多种形态,OC对象具有多态性
如:Student 类为Person类的子类
Person *p = [ Student new ]; //子类对象赋值给父类指针
p->_age=10; //父类指针访问对应的属性和方法
[ p walk ]; |