面向对象思想
opp:面向对象编程
1.面向对象核心:类和对象
2.面向对象的特点:封装、继承、多态
3.全动态语言
4.优点:(1)可重用性(以五子棋为例,有三个对象:旗手,棋盘,规则,若需要改为围棋游戏,只需要修改规则对象)
(2)可扩展性(给棋盘对象添加悔棋功能)
类和对象
类:具有相同特征和行为的事物的抽象。
对象:对象是类的实例,类是对象的类型;
定义类 —创建对象—使用对象
类的定义:接口部分(.h)和实现部分(.m)
接口部分(@interface...@end):声明类的实例变量(特征)和方法(行为)
包含:类名、父类名、实例变量
实现部分(@implementation...@end)实现方法
创建对象:申请内存—初始化
(1)初始化方法1:初始化方法init中实现
(2)初始化方法2:用public修饰符修饰的实例变量,可以直接通过 对象名->实例变量 访问
具体代码
Person.h接口文件
// 接口部分标志 @interface...@end
@interface Person : NSObject// 类名Person 继承父类NSObject
{
// @public 修饰实例变量,让实力变量可以被外界访问
@public
NSString *_name; // 姓名
int _age; // 年龄
NSString *_gender; // 性别
}
// 声明一个打招呼的方法,-实例方法,由对象调用,+类方法,由类调用
- (void)sayHi; // '-'方法类型 ‘(void)’返回值类型 ‘sayHi’方法名称
- (void)eat;
@end
Person.m文件 方法实现
// 引入Person.h文件
#import "Person.h"
// 实现文件标志@implementation...@end
@implementation Person
// 初始化方法
- (id)init
{
// 给实例变量赋值
_name = @"小王";
_age = 20;
_gender = @"男";
// 返回当前对象
return self;
}
// 实现sayHi方法
- (void)sayHi
{
NSLog(@"我叫:%@ 年龄:%d 性别:%@", _name, _age, _gender);
}
// 实现eat的方法
-(void)eat
{
NSLog(@"吃饭了");
}
@end
主函数 .m文件
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
// 创建一个对象
// 1.申请内存
Person *p = [Person alloc]; // alloc是类方法 init实例方法
// 2.初始化
p = [p init];
// 不用在init方法中初始化的方法
p->_name = @"kitty";
p->_age = 22;
p->_gender = @"女";
// 3.使用对象
[p sayHi]; // 给对象p的sayHi方法发送消息(通俗讲就是调用对象p的sayHi方法)
}
return 0;
}