黑马程序员--Objective-C语言基础知识--面向对象

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

面向对象和面向过程思想

objective-c语言是面向对象,c语言是面向过程的。面向对象和面向过程是两种不同解决问题的思想。
以用挖掘机挖坑为例,面向过程就是上车——>启动挖掘机——>开到地点——>开挖——>挖完熄火,面向过程的思想关注的是解决问题需要哪些步骤。面向对象则是找一台能挖坑的挖掘机和会开挖掘机的人,然后把任务交给他们让他们去完成就好了,面向对象关注的是解决问题需要哪些对象。
现实生活中还有很多面向对象的例子,比如去饭店吃饭找服务员,不用管菜是怎么在厨房炒的;汽车坏了找汽修工,不用分析修车的步骤;等等。

类和对象

面向对象编程中有两个重要的概念:类和对象。对象就是根据类创建出来的。
类是抽象的不是具体的某一个事物,它描述了事物的属性和功能,我们根据类的描述便可以创造出一个具体的对象。就像现实生活中我们画图纸设计一辆车,图纸上包括车的属性:轮子数、时速、等等,以及车的功能(行为):启动、跑、倒车、熄火、等等,这个就相当于面向对象编程中的类。我们可以根据图纸的设计制造出具体的事物:汽车,这相当于面向对象编程中的对象。
由此可见:
1. 我们要创建对象必须先有类;
2. objective-c中用类来创建对象,对象是类的具体存在;
3. 面向对象解决问题应该是先考虑需要设计哪些类,再利用各种类来创建各种对象。

类的设计

那么如何设计类呢?类的设计只关心三样东西:事物名称(类名)、属性(成员变量或称实例变量)、行为(方法)。
比如设计一个人类:
事物名称(类名):人(person)
属性(成员变量):身高(height)、年龄(age)
行为(方法):跑(run)、跳(jump)
类名有几点要注意:1.类名的第一个字母必须是大写;2.类名当中不能带有下划线;3.类名如果是由多个英文单词组成,则要使用驼峰标识(每个单词的首字母大写)。

类的声明和实现

接下来讲一下如何在objective-c语言中设计一个类。oc(objective-c的简称)语言中的类分为两大部分,类的声明和实现。
示例1:

#import <Foundation/Foundation.h>//用#import关键词导入Foundation框架,我们会用到这个系统框架中的类库
@interface Car : NSObject/*@interface表示我们要声明一个类,后面跟类名,":"后面跟的是基类名,所有的类都继承它,它封装了一些东西供继承它的子类使用*/
{
    int wheels;//声明成员变量即类的属性:车轮数(wheels)
    int speed;//车速
}
- (void)run;//声明一个对象方法(行为),前面是“-”号则代表这是一个对象方法只能由具体的对象来调用
+ (void)test;//声明一个类方法,它可被类名直接调用,类方法不能直接访问成员变量
@end//@end意味着类的声明部分结束
@implementation Car/*@implementation表明这是类的实现部分,类的声明和实现可以分开写(不同的文件当中也可),但是声明必须在main函数前面*/
- (void)run
{
    NSLog(@"车子跑");//类的实现里面通常写方法是如何实现的即这个行为是什么
}
+ (void)test
{
    NSLog(@"做模拟实验");
}
@end//@end表明类的实现结束

示例1展示了一个完整的类是如何设计出来的,它包括两大部分:类的声明和实现。没有类的声明部分只有实现部分也可以设计一个类,为了规范和方便使用,通常我们都会完整的写出声明和实现。

OC中的对象

设计好了类就可以根据类来创建具体的对象了。
示例2:

#import <Foundation/Foundation.h>
@interface Car : NSObject
{
    @public
    int wheels;
    int speed;
}
- (void)run;
+ (void)test;
@end
@implementation Car
- (void)run
{
    NSLog(@"%d个轮子的车跑起来了时速达%d公里每小时", wheels, speed);
}
+ (void)test
{
    NSLog(@"做模拟实验");
}
@end
int main()
{
    [Car test];//用类名直接调用类方法,不依赖于对象
    Car *car;//声明一个指向Car类型的指针,oc语言中对象都是由指针变量来操作的
    car = [Car new];//用系统自带的一个类方法创建具体的车对象,赋值给指针变量car
    car->wheels = 4;//给成员变量wheels赋值为4即我们造的车有4个轮子
    car->speed = 200;//给成员变量speed赋值为200即我们的汽车速度为200km/h
    [car run];//用对象调用对象方法,车跑起来了
    return 0;
}

示例2展示了如何用类来创建对象以及对对象的使用,运行结果是:

2015-07-18 21:25:42.302 a.out[1313:691942] 做模拟实验
2015-07-18 21:25:42.304 a.out[1313:691942] 4个轮子的车跑起来了时速达200公里每小时

成员变量

成员变量不能在声明时直接初始化,必须得有对象才能初始化,默认值是0。成员变量跟随对象,对象消亡它也消亡,它只能由对象来访问和调用。

方法

一、
oc语言中的方法与函数的区别:
1. oc方法只能声明在@interface和@end之间,只能实现在@implementation和@end之间。不能独立于类存在;
2. 函数不属于类,跟类没有联系,函数只归定义函数的文件所有;
3. 函数不能访问oc对象的成员变量,指向对象的指针可以作为函数的返回值也可以作为函数的参数。
二、
与函数类似oc方法可以有返回值也可以没有返回值可以有参数也可以没有参数。
示例3:

-(doublesquare:(double)number;//参数类型写在小括号里

示例3声明了一个带返回值和参数的方法,注意此时的方法名是:square:
“:”也是oc方法名的一部分。
示例4:

-(double)square:(double)number
{
    return number * number;
}

示例4展示了示例3中声明的方法的实现。
示例5:

- (int)sumWithNumber:(int)number1 andNumber:(int)number2;

示例5声明了一个带有两个参数的方法,oc为了增强代码的可读性通常要在参数名前写些东西,说明这个参数是什么,这也是方法名的一部分,因而该方法的名称是:
sumWithNumber: andNumber:
示例6:

- (int)sumWithNumber:(int)number1 andNumber:(int)number2
{
    return number1 + number2;
}

示例6展示了示例5声明方法的实现。
类方法也可以有返回值和形参。
三、
类方法和对象方法的对比:
1.类方法:
1> 以加号“+”开头;
2> 只能由类名调用,对象不能调用;
3> 类方法中不能直接访问成员变量(实例变量);
4> 可以在类方法中通过调用对象方法访问成员变量;
5> 当不需要访问成员变量的时候尽量用类方法。
2.对象方法:
1> 以减号“-”开头;
2> 只能由对象调用,没有对象,这个方法根本不可能被执行;
3> 对象方法能访问实例变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值