用1 + 2 = 3诠释面向对象思想
- 写一个计算的方法,计算1 + 2 。
- 面向对象,诠释万物皆对象思想。
思路:
- 写一个YGInteger主类,里面有一个integer属性,顺便配上description方法。
- 添加一个分类 ·YGInit· 重写一个初始化构造方法。
- 添加一个分类 ·YGMath· 有加、减、乘、除的四个方法。
- 最后添加一个扩展,把数字转换成字符串类型的方法。
YGInteger.h
#import <Foundation/Foundation.h> @interface YGInteger : NSObject @property(nonatomic,assign)NSInteger integer; @end
YGInteger.m 中写一个description方法,和 扩展中,将数字转换成字符串的方法
#import "YGInteger.h" #import "YGInteger_YGChangeValue.h" @implementation YGInteger - (NSString *)description { return [NSString stringWithFormat:@"%ld",self.integer]; } - (NSString *)changeValue { return [NSString stringWithFormat:@"%@",self]; } @end
YGInteger+YGInit.h 这是Integer的Init分类
#import "YGInteger.h" #import "YGInteger.h" @interface YGInteger (YGInit) - (instancetype)initWithInteger:(NSInteger)integer; + (instancetype)integerWithInteger:(NSInteger)integer; @end
YGInteger+YGInit.m 实现一下标配方法
#import "YGInteger+YGInit.h" @implementation YGInteger (YGInit) - (instancetype)initWithInteger:(NSInteger)integer { if (self = [super init]) { self.integer = integer; } return self; } + (instancetype)integerWithInteger:(NSInteger)integer { __autoreleasing YGInteger *i = [[YGInteger alloc]initWithInteger:integer]; return i; } @end
YGInteger+YGMath.h Integer的计算分类,里面有加、减、乘、除 四个方法声明。
#import "YGInteger.h" @interface YGInteger (YGMath) - (YGInteger *)add:(YGInteger *)i; - (YGInteger *)minus:(YGInteger *)i; - (YGInteger *)multiply:(YGInteger *)i; - (YGInteger *)divide:(YGInteger *)i; @end
YGInteger+YGMath.m 利用对象调用,充分体现面向对象编程。
#import "YGInteger+YGMath.h" @implementation YGInteger (YGMath) - (YGInteger *)add:(YGInteger *)i { YGInteger *result = [[YGInteger alloc]init]; result.integer = self.integer + i.integer; return result; } - (YGInteger *)minus:(YGInteger *)i { YGInteger *result = [[YGInteger alloc]init]; result.integer = self.integer - i.integer; return result; } - (YGInteger *)multiply:(YGInteger *)i { YGInteger *result = [[YGInteger alloc]init]; result.integer = self.integer * i.integer; return result; } - (YGInteger *)divide:(YGInteger *)i { YGInteger *result =[[YGInteger alloc]init]; result.integer = self.integer / i.integer; return result; } @end
YGInteger_YGChangeValue.h 最后,扩展方法中声明一下,转换的方法。
#import "YGInteger.h" @interface YGInteger () - (NSString *)changeValue; @end
先在storyBoard中先拖一个Label,用于显示结果,写一个show方法,用于把数据展示到模拟器中。
#import "ViewController.h" #import "YGInteger+YGInit.h" #import "YGInteger+YGMath.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UILabel *outputLabel; - (void)show:(YGInteger *)i; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; YGInteger *int1 = [[YGInteger alloc]initWithInteger:1]; YGInteger *int2 = [[YGInteger alloc]initWithInteger:2]; YGInteger *int3 = [int1 add:int2]; self.outputLabel.text = [NSString stringWithFormat:@"%@",int3]; // [self show:[int1 add:int2]]; } - (void)show:(YGInteger *)i { self.outputLabel.text = [NSString stringWithFormat:@"%@",i]; } @end
- 用对象add对象。形象的体现出面向对象编程。这是一种思想的体现。思想固有化,两个数相加,觉得这么做很麻烦,为什么不直接传入两个参数呢,还要用对象调用属性,脱裤子放屁多此一举。
- 因为,以后的需求不仅仅是单一的只做一件事,你用对象调用,你的选择会很多,不会局限于一种思维。如果真的选择了用单一化思维思考问题,那么,以后就真的只能停留在1 + 2 = 3了。
仅此。