黑马程序员——OC---面向对象之类和对象

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

一 面向对象思想

1 面向对象和面向过程的区别

面向过程关注的是解决问题需要哪些步骤;面向对象关注的是解决问题需要哪些对象。面向对象的常用术语有:面向对象 Object Oriented,简称OO,面向对象编程 Object Oriented Programming,简称OOP。

二 类和对象的关系

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

2 类的设计,只关心3样东西:事物的名称,属性,行为,哪个对象最清楚这个行为,就把这个行为写到哪个对象中去。

三 定义OC的类和创建OC的对象

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

定义一个新类分为2 部分:
@interface 部分
描述类、类的数据成分以及类的方法
@implementation 部分
实现这些方法的实际代码

1 interface 部分(声明)

@interface 部分的一般格式:
@interface NewClassName : ParentClassName
{
memberDeclarations;
}
methoddeclarations;
@end

命名规则:以字母或下划线开头,之后可以是任何字母,下划线或者0~9 数字组合
约定:类名以大写字母开头,实例变量、对象以及方法的名称以小写字母开始。
每次创建新对象时,将同时创建一组新的实例变量且唯一。注意:在对象类型的右边都有一个*号,
所有的对象变量都是指针类型。Id 类型已经被预定义为指针类型,所以不需要加一个*号。
函数开头的(-)号或者(+)号表示:
(-) 该方法是实例方法(对类的特定实例执行一些操作);
(+)是类方法(即对类本身执行某些操作的方法,例如创建类的新实例)

2 @implementation 部分(类的实现)

@implementation 部分的一般格式:
@implementation NewClassName
methodDefinitions;
@end

3 创建对象

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

4 具有多个参数的方法

具有多个参数的方法:
-/+ (return type) function_name : (parameter type) parameter1 otherParameter : (parameter_type) parameter2;
如果只有一个参数,在: 后面声明参数的类型和名称;如果有多个参数的话,每个参数前面都要有一个: , 然后接着是参数类型和参数名称。可是大家可能还是觉得很奇怪。比如上面这个例子中,otherParameter 这个是什么意思,在objective c 中,对于有多个参数的函数,可以理解为将函数的名称拆成了几个部分,每个部分都是对紧接着的参数的一个解释。

5 一个OC类的举例

/*
 类名:Car
 属性:轮胎个数、时速(速度)
 行为:跑
 */

// 因为使用了NSObject
#import 

// 完整地写一个函数:函数的声明和定义(实现)
// 完整地写一个类:类的声明和实现

// 1.类的声明
// 声明对象的属性、行为
// : NSObject 目的是:让Car这个类具备创建对象的能力
@interface Car : NSObject
{// 用来声明对象属性(实例变量\成员变量,默认会初始化为0)
    // @public可以让外部的指针间接访问对象内部的成员变量
    @public
    int wheels; // 轮胎个数
    int speed; // 时速(xxkm/h)
}

// 方法(行为):方法名、参数、返回值(声明、实现)
// 只要是OC对象的方法,必须以减号 - 开头
// OC方法中任何数据类型都必须用小括号()扩住
// OC方法中的小括号():括住数据类型
- (void)run;

@end

// 2.类的实现
// 用来实现@inteface中声明的方法
@implementation Car
// 方法的实现(说清楚方法里面有什么代码)

- (void)run
{
    NSLog(@"车子跑起来了");
}

@end

int main()
{
    // 在OC中,想执行一些行为,就写上一个中括号[行为执行者 行为名称]
    // 利用类来创建对象
    // 执行了Car这个类的new行为来创建新对象
    
    // 定义了一个指针变量p,p将来指向的是Car类型的对象
    // [Car new]每次都会创建出一个新对象,并且会返回新对象本身(新对象的地址)
    Car *p = [Car new];
    
    
    Car *p2 = [Car new];
    p2->wheels = 5;
    p2->speed = 300;
    [p2 run];
    
    // 给p所指向对象的wheels属性赋值
    p->wheels = 4;
    p->speed = 250;
    
    // 给p所指向对象发送一条run消息
    [p run];
    
    NSLog(@"车子有%d个轮子,时速位:%dkm/h", p->wheels, p2->speed);
    
    return 0;
}


你可能感兴趣的:(黑马程序员——OC---面向对象之类和对象)