Part 1. 类,对象,方法的概念及相互关系
类:
具有归纳性,抽象意义的事物。(比喻:汽车)
对象:
属于某类的一个特定的实例,某类的独特存在。(比喻:你的车,你朋友的车)
方法:
每个对象包含一些数据,方法提供访问和改变这些数据的手段。
类方法:对类执行的方法。(比喻:找出一家制造厂制造了多少款汽车)
实例方法:对实例执行的方法。(比喻:驾驶;加油;洗车;维修)
类 :抽象的概念;
对象:属于某抽象概念的具体实例;
方法:对于某具体事例的操作;
方法的语法:方法的本质上是向类或实例发送信息,消息的接受者成为接受者
类方法的语法:
- [Class method];
- [类名称 方法名称];
类方法举例:从类中获得一个对象。
例:yourCar = [Car new_car]; /*向Car类发送一条信息从汽车厂获得一辆新车,存储到yourCar中。*/
实例方法的语法:
- [Instance method];
- [实例(对象)名称 方法名称];
实例方法举例:对对象的具体操作,影响对象的状态
例:[yourCar drive]; //开车 [yourCar wash]; //洗车 [yourCar getGas]; //加油 currentMileage = [yourCar odometer]; //观察里程表,里程数存储在currentMileage变量内
Part2. @interface;@implementation;@program;三个部分
@interface 部分:描述类,和类的方法, 也可以为类声明实例变量。
@implementation 部分:添加实例变量, 实现在接口中声明方法的实际代码。
@program 部分:实现程序的预期目的。
@interface部分
@interface部分的职能
1. 定义新类:告诉编译器该类来自何处,命名父类。
2. 定义处理该类的对象的时候用的各种操作或方法的类型。
命名:富有意义的名称可以显著增强程序的可读性。
- 类:大写字母开头。例子:AddressBook
- 对象,方法,实例变量:小写字母开头。例子:currentEntry/current_Entry
@interface部分语法:
@interface NewClassName: ParentClassName
propertyAndMethodDeclarations;
@end
@interface部分实例:
@interface Fraction : NSObject //新类的名称是Fraction
-(void) print; //实例方法,无返回值,打印
-(void) setNumerator: (int) n; //实例方法,无返回值,向该方法传第一个名为n的整型参数,作为分子
-(void) setDenominator: (int) d; //实例方法,无返回值,向该方法传第一个名为d的整型参数,作为分母
@end
不能直接访问分数的实例变量(内部表示),所以必须编写方法来设置分子和分母,并打印。
返回值
实例方法:-;对类的实例执行一些操作。
类方法: +;创建类的新实例。
@implementation部分
@implementation部分的作用
- @interface中声明方法 (都有什么方法?)
- @implementation定义他们 (什么样的方法?)
@implementation部分的语法
@interface NewClassName
{
memberDeclarations; //哪种类型的数据存储到次类 实例变量
}
methodDefinations;
@end
@implementation部分的实例
- 实例变量声明部分
{
int numerator; // 实例变量
int denominator; //如果有两个类,则这两个类都有各的numerator和denominator。
}
- 方法声明部分
-(void) print
{
NSLog(@"%i/%i", numerator, denominator);
}
-(void) setNumerator: (int) n
{
numerator = n;
}
-(void) setDenominator: (int) d
{
denominator = d;
}
//methodDefinations; 的内容和 @interface 中声明的部分类似。
@program 部分
//==================建立对象===================//
Fraction *myFraction;
/*myFraction 是 Fraction对象的引用 myfraction不存储 Fraction的数据,而是存储了一个引用(内存地址)。*/
//===========创建一个分数实例,并初始化===========//
myFraction = [Fraction alloc];
/*为新分数分配内存存储空间,请求Fraction执行alloc方法。 向某个类发送alloc信息就是获得该类的新实例(对象).alloc保证对象的所有实例变量都变成初始状态。*/
myFraction = [myFraction init];
/*init方法用于初始化类的一个实例变量。init 方法返回一个值,即被初始化的对象,将返回值存储到Fractiond的变量myFraction中*/
//================设置分数为1/3================//
[myFraction setNumerator: 1];
/* 向myFraction发送 setNumerator 消息,并提供一个值为1的参数 方法调用。1 存储在 变量n 中,由实例变量numerator存储这个值 */
[myFraction setDenominator: 3];
/* 向myFraction发送 setDenominator 消息,并提供一个值为3的参数 方法调用。1 存储在 变量d 中,由实例变量denominator存储这个值 */
//==============使用打印方法打印分数==============//
NSLog(@"The value of myFraction is:");
[myFraction print];