黑马程序员——OC语言------类的声明实现、面向对象

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

面向对象

 

一、面向对象的思想

 C语言是面向过程,OC是面向对象,那么什么是面向对象呢?面向对象和面向过程的区别可以通过视频课程中形象的例子来体会。

1.以用电脑听歌为例子:

面向过程:

打开电脑

播放电脑中的歌曲

关闭电脑

 

面向对象:

电脑  

开机  

播放歌曲  

关机

区别分析:

面向过程关注的是解决问题需要哪些步骤;面向对象关注的是解决问题需要哪些对象,两种思想都能达到解决问题的目的,但是解决思路不一样

 

2.现实生活中面向对象的例子

想打电话\发短信à 找手机,不用分析电话要怎样才能拨通

去饭店吃饭 à 找服务员,不用分析怎么到厨房炒菜

汽车坏了 à 找汽车维修工,不用分析修车的步骤

万物皆对象

 

3.常用术语

面向过程 ProcedureOriented

面向对象 ObjectOriented,简称OO

面向对象编程 ObjectOriented Programming,简称OOP

 

二、类和对象的关系

1.如何创建对象

面向对象解决问题的时候必须有对象,那如何创建对象呢?

例如创建一个汽车对象:

需要先有汽车的建造图纸,图纸上描述清楚汽车应该具备的属性和功能(行为)

属性:轮子数、时速

功能(行为):跑

然后再根据图纸上的描述生成汽车

所以现在知道OC的面相对象:

OC中的类相当于图纸,用来描述一类事物。也就是说,要想创建对象,必须先有类,OC利用类来创建对象,对象是类的具体存在。因此,面向对象解决问题应该是先考虑需要设计哪些类,再利用类创建多少个对象

 

2如何设计类

类的设计有三个方面:

事物名称(类名):车(Car)

属性:轮子数(wheels)、时速(speed)

行为(功能):跑(run)

注意:类名首字母大写,不能有下划线,多个单词使用驼峰标识。拥有相同(或者类似)属性和行为的对象都可以抽像出一个类

 

三、类的声明和实现

还是以车为例:定义一个Car类,拥有2个属性:轮子数、时速,1个行为:跑

 

要描述OC中的类分2大步骤:类的声明、类的实现(定义)。跟函数类似,函数有分声明和定义

1.类的声明:

一般形式为:

@interface 类名

  成员变量1;

  成员变量2;

  .......

-(方法类型)方法名;

@end

#import
 @interface Car :NSObject
{
    @public
    int wheels; // 多少个轮子
    int speed; // 时速
}
- (void)run; // 跑的行为
@end


1> 成员变量

@interface的大括号{}中声明的变量:wheels、speed

@interface的大括号和函数的大括号是不一样的

默认会初始化为0

 

2> @public

@public可以让Car对象的wheels和speed属性被外界访问

 

3> NSObject

NSObject其实是一种基类,加上:NSObject的目的是让Car类具备创建对象的能力

 

4> -(void)的“-”代表是对象方法,对象可以调用,类不可以。

 

2.类的实现

一般形式:

@implementation 类名

- (方法的类型)方法名

{

   方法的具体实现;

}

@end

@implementation Car
- (void) run
{
    NSLog(@"%d个轮子,%d时速的车子跑起来了",wheels, speed);
}
@end

3.创建对象

int main()
{
    // 创建车子对象
    Car *c = [Car new];
    c->wheels = 4;
    c->speed = 200;
   
    [c run];
    return 0;
}


main函数的代码分析、内存分析(对象在内存中有成员)

[Car new]每次都会创建出新的对象,并且返回对象的地址,那么就应该用一个指针变量保存对象的地址。

Car *c = [Car new];

用一个指针变量c指向内存中的Car对象     

设置车子对象的属性

跟用指向结构体的指针访问结构体属性一样,用->

c->wheels = 4;

c->speed = 200;

四、常见错误

1.只有类的声明,没有类的实现

2.漏了@end

3.@interface和@implementation嵌套

4.两个类的声明嵌套

5.成员变量没有写在括号里面

6.方法的声明写在了大括号里面

 

五、语法细节

1.成员变量不能在{}中进行初始化、不能被直接拿出去访问

2.方法不能当做函数一样调用

3.成员变量\方法不能用static等关键字修饰,别跟C语言混在一起(暂时忽略)

4.类的实现可用写在main函数的后面,主要在声明后面就行了

 

 


你可能感兴趣的:(IOS学习)