黑马程序员-OC-类与对象,以及类的基本设计

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

面向对象和面向过程思想

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

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

以用电脑听歌为例子

面向过程

打开电脑

播放电脑中的歌曲

关闭电脑

 

面向对象

找到电脑对象 包含下面功能

开机  

播放歌曲  

关机

 

区别分析

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

没有开发经验很难感受到它们的区别,两种思想都能达到解决问题的目的,但是解决思路不一样

 

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

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

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

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

所以关键就是创建一个对象

 

常用术语

面向过程 Procedure Oriented

面向对象 Object Oriented,简称OO

面向对象编程 Object Oriented Programming,简称OOP

 

类和对象的关系

面向对象中有2个非常重要的概念:类和对象

如何创建对象

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

 

现实生活的例子:如何创造汽车对象?

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

属性:轮子数、时速

功能(行为):跑

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

每一辆汽车都是对象,都有自己具体的属性值,都是图纸的实例

图纸是抽象的,房子是具体的。图纸是对房子对象的高度概括(也就是我们的类声明

 

OC中的面相对象

OC中的类相当于图纸,用来描述一类事物。也就是说,要想创建对象,必须先有类

OC利用类来创建对象,对象是类的具体存在

因此,面向对象解决问题应该是先考虑需要设计哪些类,再利用类创建多少个对象

 

需要设计哪些类,如何设计类

类的设计,只关心3样东西:

事物名称(类名):人(Person)

属性:身高(height)、年龄(age)

行为(功能):跑(run)、打架(fight)

 

一般名词都是类

坦克发射3颗炮弹轰掉了2架飞机

小明公车上牵着一条叼着热狗

 

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

哪个对象最清楚这个行为,就把这个行为写到哪个对象中去。打开电脑(开机)这个行为应该是属于电脑的。

 

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

接下来就在OC中模拟现实生活中的情况,创建一辆车出来。首先要有一个车子类,然后再利用车子类创建车子对象

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

类的声明

代码编写

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

类名\属性的命名规则:标示符的规则

类名的命名规范:有意义、驼峰标识(每个英文单词首字母大写)、首字母大写,不准有下划线

下面是详细代码:

/*

 类名:Car

 属性:轮胎个数、时速(速度)

 行为:跑

 */

 

// 因为使用了NSObject

#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;

}

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------详细请查看: www.itheima.com
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值