本文中介绍到得概念有:
- 对象(Object)的概念
- 继承(inheritance)
- MVC(Model-View-Controller是一种软件设计典范)
(之后的OC都指代Objective-C)
一、 对象的概念
- 对象指的是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可以看做对象,它不仅能代表具体的事物,也可以表示抽象的规则、计划或事件。
- 比如交通工具(Vehicle)是一个类,它具有一些属性,包括轮子、商标、出产日期等。还具有一些方法,比如,向前,向后,拐弯等。在面向对象编程中,我们就可以通过继承的方法,生成交通工具的子类比如自行车、摩托车和轿车。交通工具就是自行车的父类,父类可以将自身的方法传递给子类。子类也可以通过重写父类的方法来实现自身的功能,还可以增加自身的特有的方法。比如轿车可以添加别的属性,比如引擎、多少个侧门、后备箱等,也可以增加一些方法,比如鸣笛、打灯等等。在轿车的基础上,你还可以再产生新的子类。
- 对象则是上面提到的类的一个实例。面向对象有很好地可维护性、可扩展性、可重用性。
- 在OC中对象拥有属性(properties)以及方法(method)
创建一个Vehicle类
在Vehicle.h文件中添加以下属性
@interface Vehicle : NSObject
@property (nonatomic, assign) NSInteger numberOfWheels; //轮子的个数
@property (nonatomic, assign) NSInteger modelYear; //出产日期
@property (nonatomic, copy) NSString *brandName; //商标
+ (instancetype)vehicleWithBrandName:(NSString *)brandName modelYear:(NSInteger)modelYear wheels:(NSInteger)numberOfWheels;
- (NSString *)goForward;
- (NSString *)goBackward;
- (NSString *)stopMoving;
@end
其中以-开头的是实例方法,只有对象才可以调用。
+开头的是类方法,对象是不可以调用的,只有类才可以调用,一般都是用来实现初始化的
然后在Vehicle.m中实现方法,把代码放在@implementation下面。
- (NSString *)goForward
{
return nil;
}
- (NSString *)goBackward
{
return nil;
}
- (NSString *)stopMoving
{
return nil;
}
+ (instancetype)vehicleWithBrandName:(NSString *)brandName modelYear:(NSInteger)modelYear wheels:(NSInteger)numberOfWheels
{
Vehicle *newVehicle = [[self alloc] init];
//设置实例变量
newVehicle.brandName = brandName;
newVehicle.modelYear = modelYear;
newVehicle.numberOfWheels = numberOfWheels;
//返回对象
return newVehicle;
}
二、继承
我们通过继承Vehicle类来生成一个新的类Car
- 新建一个Class命名为Car,继承自Vehicle。通过这个操作,我们的Car类继承了所有Vehicle在头文件中命名的属性和方法,(类似于继承了C++中public下的一些变量和方法)
- 在Car.m下添加初始化方法在@implementation下方
- (id)init
{
if (self = [super init]) {
//Since all cars have four wheels, we can safely set this for every initialized instance of a car.
self.numberOfWheels = 4;
}
return self;
}
其中 self = [super init] 是用父类的init方法进行初始化后,如果初始化成功则执行if(){}中的语句。然后return self。
如果初始化失败,则self = nil,那就不会进入if中的语句,直接return一个nil。
3. 在Car.h中可以添加Car独有的一些属性,像(一)中所说的比如侧门的数量,是否有后备箱等。还可以重写(override)Vehicle类中的goForward等方法。也可以添加自身独有的方法。
//重写父类的方法
- (NSString *)goForward
{
return [NSString stringWithFormat:@"%@ %@ Then depress gas pedal.", [self start], [self changeGears:@"Forward"]];
}
- (NSString *)goBackward
{
return [NSString stringWithFormat:@"%@ %@ Check your rear view mirror. Then depress gas pedal.", [self start], [self changeGears:@"Reverse"]];
}
- (NSString *)stopMoving
{
return [NSString stringWithFormat:@"Depress brake pedal. %@", [self changeGears:@"Park"]];
}
//添加自身的方法
- (NSString *)makeNoise
{
return @"Beep beep!";
}
三、MVC设计模式
Model模型:负责数据的存储
View视图:负责数据的展示
Controller控制器:协调模型和视图之间数据调度和请求响应等。
在iOS开发中,比如生成项目后会产生storyboard文件和ViewController文件
其中storyboard属于视图,ViewController属于控制器,负责将数据展示在视图上。
模型则需要自己来创建,比如(一)(二)中的Vehicle和Car类。
我们可以创建一个VehicleList类来保存Vehicle或者Car的对象。那么这个VehicleList就是所谓的模型了。
当我们需要添加更多地车辆信息,我们只需要在VehicleList中添加实例即可,就可以不需要去修改视图或者控制器文件。
这样在大型的app工程下就可以使工程更容易维护。
参考链接:
http://www.raywenderlich.com/45940/intro-object-oriented-design-part-1