——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——
今天开始 oc 学习的 first day.
整理回顾一下,并做一个记录.也希望能帮到一些朋友们.
面向对象语言中有两个重要的概念。即类和对象。
我们的开发步骤:
1.创建类
2.利用类的描述创建相应对象
(其实到了这里我也还没太明白类和对象是啥)
如何设计一个类呢?
大致又分为三个步骤
1.类的名称
2.描述清楚属性
3.描述清楚功能
哪些东西需要类呢?
类就好比是设计蓝图(我个人更倾向认为和模子比较类似,不过模子造出来的东西都是一样的.这点不太相似)
首先我们把大量看见来感觉相似的'对象'的相似部分给抽象出来.
然后抽象出来的许多规则,就可以做出一个模子(类)
接着,有了模子的我们就可以大批量的生产'对象'只要将不同对象的熟悉稍作修改,就有了'看起来很像,但是五花八门的对象'
举个例子
一般名词都是类。
坦克 飞机 炸弹
我们以最直观的人为例子.
人是不是都长的很像呢?
让我们把相似的规则抽取出来!比如:
身高 性别 体重... (等等等,只要你愿意,可以抽象出一大堆规则)
有了这个模子(类) 我们不就可以造'人'了吗!
拿着模子一印,咣唧.不就出来个'人' 再咣唧,又出来一个'人'
然后很据你的喜欢,改一改身高,体重,长的帅还是丑.
那我们不就造出了一大堆!
'看起来很像,但是五花八门的人(对象)'
这下我们制造东西是不是超级方便?
这就是我感受到的好处了.
oc 中只能用指针来操作对象
这点让我感觉像是在使用 malloc 的升级版.
下面上代码!
#import <Foundation/Foundation.h>
//1.类的声明
@interface Car : NSObject
//加上: NSobject 目的是:
//让 Car 这个类具备创建对象的能力(这点还没学清楚,后面的文章有机会再补)
{
@public // 要加,否则实例变量是受保护的.无法修改对象成员变量
int wheels; // 这里称之为: 实例变量/成员变量
int speed;
}
// 方法声明
// 方法(行为)写法: 方法名` 参数` 返回值(声明` 实现)
- (void) run; // 只要是 oc 对象的方法,必须以 - 开头 / 任何数据类型都已() 括住
// oc 方法中小括号()仅有的功能: 括住数据类型.
// 所以 run 后面没有加()的必要 ps:基本和 c 相似
@end
//2.类的实现 --用来实现@ interface 中的方法
@implementation Car
// 方法的实现(说清楚方法里面有什么代码) 写法参照上述规则
- (void)run
{
NSLog(@"车子 run 中");
}
@end
int main()
{
//在 oc 中,想执行一些行为,就写上一个中括号 [行为执行者 行为名称]
//利用类来创建对象
//执行了 car 类创建了新对象
Car *p = [Car new]; // 并返回新对象地址 (感觉和 malloc 超级像)
Car *p2 = [Car new]; // 又创建一个新对象
p->wheels = 11; // 对吧, oc 中只能用指针来操作对象
p->speed = 100;
p2->wheels = 3;
p->speed =5;
[p run]; // 给指针所指的对象发送 run 消息, car 对象便会调用 run 方法.
// 难道这里有消息的机制? 看来这个问题得以后深入了再进行思考了.
NSLog(@"车子有%d个轮子",p->wheels);
NSLog(@"车子有%d的速度",p->speed);
return 0;
}
1.完成类的定义
2.用类创建了对象 ———– Car *p = [Car new];
3.修改了对象的属性值 —– p->wheels = 11;
4.调用了对象的方法 ——– [p run];
最后在来段代码
@implementation Person
- (void)walk
{
NSLog(@"%d岁 %f公斤的人行走中", age, weight);//对象调用自己的方法,可以直接找到自己的成员变量
}
@end
初次学习面向对象的思想,有不对之处还望大家指正.
要共同进步啊~