Objective-C——类的设计

2016-11-12  本文已影响41人  T92

注:
定义类时类名应该加上两个大些字母前缀,以下代码类名并没有规范,比如例子中Car类可以更改为CDCar

面向过程和面向对象

  1. 面向过程是祈使句,面向对象是主谓(宾)结构。

  2. 面向过程注重数据的存储和操作,面向对象注重用程序模拟生活逻辑。

  3. 面向过程数据和操作数据的过程是分离的,没有逻辑上的必然联系;面向对象中数据和操作数据的方法是逻辑上的整体,称之为对象。

面向对象的基本概念

面向对象的三大支柱

类的定义和实现

数据抽象和行为抽象

从问题描述中勾出所有的名词和动词,名词会称为类或者类中的属性,动词会成为类中的方法。

类的.h文件

#import <Foundation/Foundation.h>

@interface Student : NSObject {
    @private char _name[10];
    @private int _age;
}

- (instancetype) initWithName:(const char *) name age:(int) age;

- (void) study:(const char *) courseName;

- (void) watchJapaneseAV;

@end

类的.m文件

#import "Student.h"

@implementation Student

- (instancetype) initWithName:(const char *) name age:(int) age {
    if(self = [super init]) {
        strcpy(_name, name);
        _age = age;
    }
    return self;
}

- (void) study:(const char *) courseName {
    printf("%s正在学习%s\n", _name, courseName);
}

- (void) watchJapaneseAV {
    if(_age >= 18) {
        printf("%s正在观看岛国爱情动作片\n", _name);
    }
    else {
        printf("%s未满18岁不允许观看岛国爱情动作片\n", _name);
    }
}
@end

构造方法

见上面的代码。

类的实例化

#import <Foundation/Foundation.h>
#import "Student.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Student *stu = [[Student alloc] initWithName:"王小二" age:16];
        [stu study:"Objective-C程序设计"];
        [stu watchJapaneseAV];
    }
    return 0;
}

创建对象的语法

见上面的代码。

访问对象属性及访问修饰符

给对象发消息

Objective-C中给对象发消息使用中缀符(infix notation)语法,方法的名称及其参数都是合在一起的,如上面的代码所示。

示例

写一个汽车类并为其拟定一个速度属性,汽车的速度只能通过踩油门和踩刹车两个行为来改变。

#import <Foundation/Foundation.h>

@interface Car : NSObject{
    @private NSInteger _speed;
}

-(instancetype)initWithSpeed:(NSInteger) speed;


- (NSInteger) speedUp: (NSInteger) num;

- (NSInteger) speedDown:(NSInteger) num;

@end
#import "Car.h"

@implementation Car

-(instancetype)initWithSpeed:(NSInteger)speed{
    if (self = [super init]){
        _speed = speed;
    }
    return self;
}

-(NSInteger)speedUp:(NSInteger)num{
    _speed += num;
    return _speed;
}

-(NSInteger)speedDown:(NSInteger)num{
    _speed -= num;
    return _speed;
}

@end
#import <Foundation/Foundation.h>
#import "Car.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        Car *car = [[Car alloc] initWithSpeed: 30];
        
        NSLog(@"起始速度%d",30);
        
        //加速
        NSLog(@"加速后%ld",(long)[car speedUp:20]);
        //减速
        NSLog(@"减速后%ld",(long)[car speedDown:40]);
        
    }
    
    return 0;
}
上一篇下一篇

猜你喜欢

热点阅读