一、两种常见的编程思想:
1、面向过程编程
面向过程编程事件(任务)为中心,程序围绕事件,列出了事件的每个步骤,一步一步完成。
2、面向对象编程
面向对象编程以事物为中心,程序围绕事物展开,完成事件只是一个小任务。
二、面向对象的三大特征
1、封装:
将现实世界中存在的某个客体的属性与行为绑定在一起,并放置在一个逻辑单元内。
2、继承:
子类自动共享父类数据结构和方法的机制,这是类之间的一种关系
3、多态:
指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果
三、Objective-C
Objective-C中某个类的规格需要两个不同的部分:接口和实现。
.h文件:头文件。头文件包含类、类型、函数和常量声明。
.m文件:实现文件。具有此扩展名的文件可以同时包含Objective-C代码和C代码。有时也称为源文件。
.mm文件:实现文件。具有此扩展名的实现文件,除了包含Objective-C代码和C代码以外,还可以包含C++代码。仅当你实际引用你的Objective-C代码中的C++类或功能时,才能使用此扩展名。
下图声明一个名为MyClass的类,它是从基础类(或根类)NSObject继承而来的。(根类是供其他直接或间接继承的类。)类声明以编译指令@interface开始,以@end指令结束。类名称后面(以冒号分割),是父类的名称
注意:在Objective-C中,一个类只能有一个父类
下图是类的实现,类实现的语法与类接口文件类似。它以@implementation编译器指令开始(接着是该类的名称),以@end指令结束。中间时方法实现。(函数实现应在@implementation...@end块之外。)一个实现应该总是将导入它的接口文件作为代码的第一行。
#import "MyClass.h"
@implementation MyClass
- (id)initWithString:(NSString *)aName
{
// code goes here
}
+ (MyClass *)myClassWithString:(NSString *)aName
{
// code goes here
}
@end
Objective-C的方法
1、实例方法:由类的实例来执行。换言之,在调用实例方法之前,必须先创建该类的实例。实例方法是最常见的方法类型。
2、类方法:可由它所在的类直接执行。它不需要对象的实例作为消息的接收者。
四、创建一个Person类
#import <Foundation/Foundation.h>
//类的接口部分
/*!
1、定义一个类
2、添加当前累属性
3、添加当前类行为(方法)
*/
@interface Person : NSObject
{
//大括号内部,添加当前类属性
//字符串类型
NSString *name;//姓名,NSString同样是一个类
//整型
NSInteger age;//年龄,NSInteger是数值类型
//字符串类型
NSString *gender;//性别
}
//大括号外部,添加当前类行为
- (void)sayHi;
@end
#import "Person.h"
@implementation Person
- (void)sayHi
{
//NSLog将字符串打印在控制台进行输出
NSLog(@"Hello World");
}
@end
五、创建Person类的实例对象
#import <Foundation/Foundation.h>
//类的接口部分
/*!
1、定义一个类
2、添加当前累属性
3、添加当前类行为(方法)
*/
@interface Person : NSObject
{
//大括号内部,添加当前类属性
//字符串类型
NSString *name;//姓名,NSString同样是一个类
//整型
NSInteger age;//年龄,NSInteger是数值类型
//字符串类型
NSString *gender;//性别
}
//初始化方法
//希望通过初始化方法,能够获得一个Person类的实例对象,并且希望对象具有自己的姓名属性
- (id)initWithName:(NSString *)_name;
//大括号外部,添加当前类行为
- (void)sayHi;
@end
#import "Person.h"
@implementation Person
- (id)initWithName:(NSString *)_name
{
//1、原始初始化
self = [super init];
//2、原始初始化成功之后,需要设置当前对象的姓名为行参
if(self != nil){
name = _name;
}
//3、返回当前对象
return self;
}
//大括号外部,添加当前类行为
- (void)sayHi
{
//NSLog将字符串打印在控制台进行输出
NSLog(@"Hello World");
}
@end
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
//1、创建Person类的实例对象
Person *person = [[Person alloc]initWithName:@"hehe"];
//2、给person发送实例消息sayHi
[person sayHi];
return 0;
}
六、Person类的GET和SET方法
#import <Foundation/Foundation.h>
//类的接口部分
/*!
1、定义一个类
2、添加当前累属性
3、添加当前类行为(方法)
*/
@interface Person : NSObject
{
//大括号内部,添加当前类属性
//字符串类型
NSString *name;//姓名,NSString同样是一个类
//整型
NSInteger age;//年龄,NSInteger是数值类型
//字符串类型
NSString *gender;//性别
}
//初始化方法
//希望通过初始化方法,能够获得一个Person类的实例对象,并且希望对象具有自己的姓名属性
- (id)initWithName:(NSString *)_name;
//大括号外部,添加当前类行为
- (void)sayHi;
//设置器 setter
- (void)setName:(NSString *)_name;
- (void)setAge:(NSInteger)_age;
- (void)setGender:(NSString *)_gender;
//访问器 getter
- (NSString *)getName;
- (NSInteger)getAge;
- (NSString *)getGender;
@end
2、实现部分Person.m
#import "Person.h"
@implementation Person
- (id)initWithName:(NSString *)_name
{
//1、原始初始化
self = [super init];
//2、原始初始化成功之后,需要设置当前对象的姓名为行参
if(self != nil){
name = _name;
}
//3、返回当前对象
return self;
}
//大括号外部,添加当前类行为
- (void)sayHi
{
//NSLog将字符串打印在控制台进行输出
NSLog(@"Hello World");
}
//设置器 setter
- (void)setName:(NSString *)_name
{
//设置给当前对象的属性
name = _name;
}
- (void)setAge:(NSInteger)_age
{
age = _age;
}
- (void)setGender:(NSString *)_gender
{
gender = _gender;
}
//访问器 getter
- (NSString *)getName
{
return name;
}
- (NSInteger)getAge
{
return age;
}
- (NSString *)getGender
{
return gender;
}
@end
3、在main函数中测试
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
//1、创建Person类的实例对象
Person *person = [[Person alloc]initWithName:@"hehe"];
//2、给person发送实例消息sayHi
[person sayHi];
//3、先打印当前person实例对象的姓名是什么
NSLog(@"person's name is %@",[person getName]);
//4、修改当前person实例对象的姓名,修改成Jack
[person setName:@"Jack"];
//3、第二次打印当前person实例对象的姓名是什么
NSLog(@"person's name is %@",[person getName]);
return 0;
}
七、总结