在面向对象问世之前,人们是使用面向过程来编程的,那时候程序设计被看成是功能系统的集合。那么,面向对象与面向过程的区别是什么呢 ?
一、面向对象 VS 面向过程
知乎上有个解释个人认为是很到位的,说:面向过程是一件事“该怎么做”,面向对象是一件事“该谁来做”,然后那个“谁”就是对象。
面向过程 ( Procedure Oriented )是以事件为核心,关注的是解决问题所需要的步骤,然后分析解决问题的步骤,然后用函数把这些步骤实现,并按顺序调用。
面向对象 ( Object Oriented ) 则是以对象为核心,关注需要哪些对象、对象需要具备哪些功能,然后创建出解决问题的对象,利用对象调用相应的方法即可。
二、对象消息
2.1 消息表达式
在 Objective-C 中,id类型的变量是可以存放任何数据类型的对象!对象!对象!定义一个 id 类型的 Object 的方法如下所示:
id object;
向 object 发送 message 消息的语法如下:
[object message];
这就是消息表达式的语法。其中接收者(object)是一个对象,消息(message)告诉它要做什么。
消息由消息关键字组成,消息关键字的命名规则同变量名的命名规则一样。与函数一样,消息也可以带有参数。没有参数的消息就只有消息名。
***消息名:又称为 消息选择器 、 选择器 或 方法。【以后统一称为方法】
如:[object message]; //其中“message”就是消息名
当方法中带有参数的时候:
[object message:123]; //123为传进来的实际参数
此时方法就是 “message:” ,注意,冒号也是方法名的一部分。
2.2 对象的生成和初始化
只声明一个 id 类型的变量时,改变量并不指向任何对象。所以,在使用一个对象之前,应该调用类的构造方法来生成对象。
对象的生成:[类名 alloc];
调用对象的 alloc 方法只是给对象分配储存空间,没有对对象进行初始化。初始化对象的方法成为 “初始化方法” 。Objective-C 的初始化方法通常是 init 或以 init 开头的函数。
对象创建并初始化:[[类名 alloc] init];
我们已经知道怎么给对象分配储存空间和初始化对象了,但我们还缺少类,那怎么去定义类呢?
三、类的定义
3.1 怎么设计一个类
类的设计,只需关心 3 样东西:1)、类名;2)、属性;3)、方法。
属性是指对对象的形态、构成及状态的描述,即描述对象的一些固有特征。方法是用来描述对象有所具备的功能,即对象能做什么。
3.2 定义类
3.2.1 类的接口声明
定义一个 人(Person) 类,拥有2个属性:年龄和姓名,一个行为:睡觉。
***类名的命名规范:类名要有意义、首字母大写、驼峰标识。
Objective-C中接口(interface)和实现(implementation)是分离的 ,先来了解一下类接口。类的接口部分定义了类的属性的和方法。类的接口声明通常声明为头文件,提供给要调用的类引用。
接口的定义如下:
@interface 类名 : 父类名
{
//属性的定义
}
//方法声明
@end
//Person类的定义
#import <Foundation/Foundation.h>
@interface Person :NSObject
{
@public
int age;//年龄
NSString *name;//姓名
}
- (void)sleep;
@end
3.2.2 类的实现
类的实现部分只要完成对在接口(interface)中声明的方法的实现即可。
类实现的语法:
@implementation 类名
//方法的实现(定义)
@end
//Person类的实现
#import" Person.h"
@implementation Person
- (void)sleep{
NSLog(@"人对象在睡觉");
}
@end
四、创建对象
#import <Foundation/Foundation.h>
#import"Person.h"
int main(int argc,const char* argv[]) {
@autoreleasepool {
//创建人对象p
Person *p = [ [Person alloc ] init ];
//给p对象的属性赋值
p->age = 20;
p->name = @"jack";
//调用p的sleep方法
[p sleep];
}
return 0;
}
网友评论