OC中面向对象语法类与对象

本文深入探讨了面向对象和面向过程编程的区别,通过实例展示了如何在Objective-C(OC)中实现面向对象编程,包括类的声明与实现、对象的创建与赋值、对象方法的使用等关键概念。


1.面向对象与面向过程的区别:

OC是面向对象的,C是面向过程的。面向对象和面向过程只是解决问题的两种不同思想

面向过程关注的是解决问题需要哪些步骤,而面向对象关注的是解决问题需要哪些对象

以我们听音乐为例:

面向过程的方法是:

1》打开电脑

2》播放音乐

3》关闭电脑

面向对象的方法是:

电脑作为对象

开电脑、播放音乐、关机则作为对象的方法,供对象使用

2.OC中面向对象的类:

对于类的设计,我们常关注三样东西,分别是 事物名称(类名)、属性、行为(功能)

拥有相同(或者类似)属性和行为的对象都可以抽像出一个类

对于类分为类的声明和实现,与函数中的函数的声明和定义类似。

以建立一个汽车类为例:

定义一个Car类,拥有2个属性:轮子数、时速,1个行为:跑
类名\属性的命名规则:标示符的规则
类名的命名规范:有意义、驼峰标识、首字母大写

#import <Foundation/Foundation.h>
// 类的声明
@interface Car : NSObject
{
    @public
    int wheels; // 多少个轮子
    int speed; // 时速
}
- (void)run; // 跑的行为
@end
成员变量必须声明在@interface中,且用大括号括住,默认初始化为0

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

3.OC中面向对象的对象:

创建对象:

Car *car = [Car new];

在OC中想执行一些行为,就必须写上一个中括号  [ 行为执行者  行为名称 ]

利用类来创建对象,执行了Car 的这个类的new行为来创建了一个对象

定义了一个指针变量car ,car将来指向的是Car类型的对象,利用[ car new ]每次都会创建出来一个新对象,并且返回新像本身

4.给对象进行赋值:

对象在声明的时候初始化都是0 ,必须进行赋值,比如我们创建了一个car对象,对car对象的speed属性进行赋值,其格式为:

car->speed = 20;


5.对象的行为(方法):

对象的方法(行为)也分为声明和实现,声明必须放在类的声明里面,即在@interface中,而实现则放在@implementation中。

方法包括:方法名、参数、返回值三部分

OC中对象的方法一般都是以减号开头 - 

OC中方法任何数据类型都必须用小括号括住,即OC中小括号括住数据类型

如下:返回值为空的run方法

- (void)run;

综合实例如下:

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

// 因为使用了NSObject,所以必须使用Foundation框架
#import <Foundation/Foundation.h>

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

//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;
}


总结:

   对于类分为声明和实现,声明必须在@interface和@end 之间

   对于类的实现必须在@implementation和@end之间

   对于成员变量必须放在类的声明中,并且以大括号括起来

   对于行为(方法)的声明也必须放在类的声明中,对于对象方法是以减号 - 开头,对于类方法是以加号 + 开头,方法的实现放在类的实现中

   对于成员变量的赋值常以指针来实现,如上例,Car *p = [Car new]; p->speed = 20;对speed属性进行赋值

    [Car new]每次都会创建出一个新对象,并且会返回新对象本身(新对象的地址)

   在OC中,想执行一些行为,就写上一个中括号   [ 行为执行者  行为名称 ]


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值