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

一 面向对象思想

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类的举例

[objc]  view plain copy
  1. /* 
  2.  类名:Car 
  3.  属性:轮胎个数、时速(速度) 
  4.  行为:跑 
  5.  */  
  6.   
  7. // 因为使用了NSObject  
  8. #import <Foundation/Foundation.h>  
  9.   
  10. // 完整地写一个函数:函数的声明和定义(实现)  
  11. // 完整地写一个类:类的声明和实现  
  12.   
  13. // 1.类的声明  
  14. // 声明对象的属性、行为  
  15. // : NSObject 目的是:让Car这个类具备创建对象的能力  
  16. @interface Car : NSObject  
  17. {// 用来声明对象属性(实例变量\成员变量,默认会初始化为0)  
  18.     // @public可以让外部的指针间接访问对象内部的成员变量  
  19.     @public  
  20.     int wheels; // 轮胎个数  
  21.     int speed; // 时速(xxkm/h)  
  22. }  
  23.   
  24. // 方法(行为):方法名、参数、返回值(声明、实现)  
  25. // 只要是OC对象的方法,必须以减号 - 开头  
  26. // OC方法中任何数据类型都必须用小括号()扩住  
  27. // OC方法中的小括号():括住数据类型  
  28. - (void)run;  
  29.   
  30. @end  
  31.   
  32. // 2.类的实现  
  33. // 用来实现@inteface中声明的方法  
  34. @implementation Car  
  35. // 方法的实现(说清楚方法里面有什么代码)  
  36.   
  37. - (void)run  
  38. {  
  39.     NSLog(@"车子跑起来了");  
  40. }  
  41.   
  42. @end  
  43.   
  44. int main()  
  45. {  
  46.     // 在OC中,想执行一些行为,就写上一个中括号[行为执行者 行为名称]  
  47.     // 利用类来创建对象  
  48.     // 执行了Car这个类的new行为来创建新对象  
  49.       
  50.     // 定义了一个指针变量p,p将来指向的是Car类型的对象  
  51.     // [Car new]每次都会创建出一个新对象,并且会返回新对象本身(新对象的地址)  
  52.     Car *p = [Car new];  
  53.       
  54.       
  55.     Car *p2 = [Car new];  
  56.     p2->wheels = 5;  
  57.     p2->speed = 300;  
  58.     [p2 run];  
  59.       
  60.     // 给p所指向对象的wheels属性赋值  
  61.     p->wheels = 4;  
  62.     p->speed = 250;  
  63.       
  64.     // 给p所指向对象发送一条run消息  
  65.     [p run];  
  66.       
  67.     NSLog(@"车子有%d个轮子,时速位:%dkm/h", p->wheels, p2->speed);  
  68.       
  69.     return 0;  
  70. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值