------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
面向对象编程概念
1、编程的实质是什么
软件编程就是将人类的思维变成计算机可以识别的语言的一个过程。
2、面向对象和面向过程
面向对象(object - oriented 简称: OO)
定义:
采用基于对象(实体)的概念建立模型,模拟客观世界分析、设计、实现软件的方法。通过面对对象的理念使计算机软件系统能与现实世界的系统一一对应。
面向对象编程(object oriented Programming --OOP)
面向对象是相对于面向过程而言
好处:
大幅度提高软件项目的成功率
减少维护费用
提高可移植性和可靠性
面向对象设计的三个主要特征 : 1)封装性 2)多态性 3)继承性
面向对象和面向过程的区别分析:
面向过程关注的是解决问题需要那些步骤;面型对象关注的是解决问题需要那些对象
例如:打电话发短信
面向对象思维 :找一个手机
面向过程思维:建造基站 制造电话
3、类和对象的关系
类(class)和对象(object)
OC中描述事物通过类的形式体现,类是多个同种类型事物的抽象
类由3个部分组成
类的名称
类的属性
类的方法:允许对属性中的数据进行操作的方法
对象
是系统中的基本运行实体
对象就是类类型的变量
定义一个类,可以创建多个对象
一个类就是具有相同类型的对象的抽象
在OC中定义一个类需要两个步骤: 类的声明和类的实现
<span style="font-size:12px;">#import <Foundation/Foundation.h>
//类的声明
@interface Student : NSObject
{
//类的属性
int age;//年龄
NSString *name;//姓名
float weight;//多少体重
}
//类的方法
@end
//类的实现
@implementation Student
//行为的具体描述
@end
</span>
1)类名\属性名遵循标识符命名规则
2)@public
@public 可以让Student 对象的属性被外界访问
3)NSObject
NSObject 的目的是让Student 具有创建对象的能力
创建对象
<span style="font-size:12px;">#import <Foundation/Foundation.h>
//声明一个Car类
@interface Car : NSObject
{
@public
//时速
int speed;
//多少个轮子
int wheels;
}
-(void)run;//跑的行为,定义了一个无参方法
@end
//方法的实现
@implementation Car
-(void)run
{
NSLog(@"%d个轮子,以%d时速的车子跑起来了",wheels,speed);
}
@end
int main(int argc, const char * argv[]) {
//创建一个对象,对象名为 p
Car *p = [Car new];
p->speed = 200;
p->wheels = 4;
//调用方法
[p run];
return 0;
}</span>
对象的存储细节
[Car new] 做了3件事情
1)向计算机申请内存空间
2)给类中的成员初始化
3)返回新申请的空间的首地址。
A.申请的空间在内存的哪个区?
new 的时候申请的空间在内存的堆区(程序动态分配的内存空间)
B.实例变量保存在什么地方
堆区
C. p(指针变量)存放在栈区
对象方法保存在代码区
D.为什么使用 [p run]; 就可以调用方法?如何调用的?
首先找到p对应的堆区的空间,找到_isa指针,再找到_isa 指针指向的代码区的空间,在代码区中找方法。
下面是一个关于类的应用练习
<span style="font-size:12px;">#import <Foundation/Foundation.h>
//Person的声明
@interface Person : NSObject
{
@public
//类的实例变量(属性、成员)
NSString *_name; //姓名
int _age; //年龄
float _weight; //体重
}
-(void)eat:(NSString *)food;//定义了一个无参的eat 的方法
-(void)run:(int)mile;//定义了一个跑的方法
@end
//Person实现
@implementation Person
-(void)eat:(NSString *)food{
//每吃一次,体重就增加0.6
_weight+=0.6f;
NSLog(@"%@吃了%@",_name,food);
}
-(void)run:(int)mile{
NSLog(@"%@跑了%d",_name,mile);
//每跑2公里,体重减少0.2
_weight -=mile/2*0.2f;
NSLog(@"走了%d公里,当前体重为:%.2f",mile,_weight);
}
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
//创建对象
Person *p = [Person new];
//设置实例变量的值
p->_name = @"小明";
p->_weight = 120.0f;
[p eat:@"红烧肉"];
[p eat:@"巧克力"];
[p eat:@"巧克力"];
[p eat:@"巧克力"];
[p run:20];
}
return 0;
}
</span>