在目前自己所学的语言中,了解到C语言是面向过程,C++是面向对象,在今天所学的OC也是面向对象。无论是面向对象还是面向过程,都是解决问题的两种方式。
2. 去饭店吃饭直接找服务员,不用分析怎么到厨房炒菜
3汽车坏了直接去找汽车维修工,不用分析修车的步骤
总结:面向对象来分析问题在生活中比比皆是, 面向过程关注的是解决问题需要哪些步骤;面向对象关注的是解决问题需要哪些对象OC面向对象最重要的两个概念就是类和对象,OC中类与对象描述:
OC中的类相当于图纸,用来描述一类事物。也就是说,要想创建对象,必须先有类。 OC利用类来创建对象,对象是类的具体存在 因此,面向对象解决问题应该是先考虑需
要设计哪些类,再利用类创建多少个对象。 拥有相同(或者类似)属性和行为的对象都可以抽像出一个类。
如生活中可设计的类
1.类的设计:
1> 类名
* 类名的第一个字母必须是大写
* 不能有下划线
* 多个英文单词,用驼峰标识
2> 属性
3> 行为(功能)
2.植物大战僵尸的僵尸
* 类名:Zoombie
* 属性:life、speed、gongjili
* 行为:walk、bite、die
3.雷电的飞机
* 类名:Plane
* 属性:life、gongjili、speed、bombCount
* 行为:fly、bomb、shoot、die
4.电脑
* 类名:Computer
* 属性:band、expireDate
* 行为:open、close
在面向对象编程时,OC中的类的使用与函数的使用相似,函数有声明和定义,类也有声明和定义(实现)
例如写一个关于汽车的类,并创建对象
类名:Car
属性:轮胎个数、时速(速度)
行为:跑
代码如下:
#import
//类的声明
@interface car:NSObject
{
@public //这些属性可允许外部的类间接访问
int wheel;
double speed;
}
-(void)run; //-减号可以区别与平时的函数,可知是类的方法
@end
//类的实现
@implementation car
-(void)run
{
NSLog(@"车子跑了!");
}
@end
int main()
{
car *p=[car new];
car *p2=[car new];
p2->wheel=4;
p2->speed=20.5;
[car run]
return 0;
}
其中知识点:
1.类的定义
因为使用了NSObject
所以用#import
: NSObject 目的是:让Car这个类具备创建对象的能力
声明用@interface @end 成对出现 如上面的代码
@interface Car : NSObject
{
用来声明对象属性(实例变量\成员变量,默认会初始化为0)
@public可以让外部的指针间接访问对象内部的成员变量
}
方法(行为)的声明:方法名、参数、返回值(声明、实现)
只要是OC对象的方法,必须以减号 - 开头
OC方法中任何数据类型都必须用小括号()扩住
OC方法中的小括号():括住数据类型
如: - (void)run;
@end
2.类的实现
用来实现@inteface中声明的方法
@implementation Car
方法的实现(说清楚方法里面有什么代码)
如:
- (void)run
{
NSLog(@"车子跑起来了");
}
在OC中,想执行一些行为,就写上一个中括号 [行为执行者 行为名称] 如 [p2 run];
利用类来创建对象,执行了Car这个类的new行为来创建新对象,定义了一个指针变量p,p将来指向的是Car类型的对象
[Car new]每次都会创建出一个新对象,并且会返回新对象本身(新对象的地址)
如:Car *p = [Car new]; Car *p2 = [Car new];
给p所指向对象的wheels属性赋值
如: p->wheels = 4; p->speed = 250;
NSLog与C语言中的printf 有相似的功能,屏幕输出
如: NSLog(@"车子有%d个轮子,时速位:%dkm/h", p->wheels, p2->speed);
通过以上的第一个OC程序的学习,初步认识了与C语言的不同,以及面向对象中重要的类的创建,对象的创建。OC 与C的差别不仅仅表现在语法的一些差异上,更总要是的解决问题的思路上。对于以后的学习充满了期待。
OC的方法注意:
如果方法只有声明,没有方法的实现这是错误的(经典错误)
如果方法没有声明,只有函数的实现,编译器虽然警告,但是也能够能调用,OC的弱语法)
访问没有的成员变量直接报错,
访问没有的方法,只是警告