基于Objective-C的面向对象编程入门
2015-09-22 00:02
435 查看
本文中介绍到得概念有:
对象(Object)的概念
继承(inheritance)
MVC(Model-View-Controller是一种软件设计典范)
(之后的OC都指代Objective-C)
一、 对象的概念
对象指的是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可以看做对象,它不仅能代表具体的事物,也可以表示抽象的规则、计划或事件。
比如交通工具(Vehicle)是一个类,它具有一些属性,包括轮子、商标、出产日期等。还具有一些方法,比如,向前,向后,拐弯等。在面向对象编程中,我们就可以通过继承的方法,生成交通工具的子类比如自行车、摩托车和轿车。交通工具就是自行车的父类,父类可以将自身的方法传递给子类。子类也可以通过重写父类的方法来实现自身的功能,还可以增加自身的特有的方法。比如轿车可以添加别的属性,比如引擎、多少个侧门、后备箱等,也可以增加一些方法,比如鸣笛、打灯等等。在轿车的基础上,你还可以再产生新的子类。
对象则是上面提到的类的一个实例。面向对象有很好地可维护性、可扩展性、可重用性。
在OC中对象拥有属性(properties)以及方法(method)
创建一个Vehicle类
在Vehicle.h文件中添加以下属性
其中以-开头的是实例方法,只有对象才可以调用。
+开头的是类方法,对象是不可以调用的,只有类才可以调用,一般都是用来实现初始化的
然后在Vehicle.m中实现方法,把代码放在@implementation下面。
二、继承
我们通过继承Vehicle类来生成一个新的类Car
新建一个Class命名为Car,继承自Vehicle。通过这个操作,我们的Car类继承了所有Vehicle在头文件中命名的属性和方法,(类似于继承了C++中public下的一些变量和方法)
在Car.m下添加初始化方法在@implementation下方
其中 self = [super init] 是用父类的init方法进行初始化后,如果初始化成功则执行if(){}中的语句。然后return self。
如果初始化失败,则self = nil,那就不会进入if中的语句,直接return一个nil。
3. 在Car.h中可以添加Car独有的一些属性,像(一)中所说的比如侧门的数量,是否有后备箱等。还可以重写(override)Vehicle类中的goForward等方法。也可以添加自身独有的方法。
三、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
对象(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
相关文章推荐
- 分享微信开发Html5轻游戏中的几个坑
- PostgreSQL新手入门教程
- Lua面向对象编程学习笔记
- Ajax PHP简单入门教程代码
- Zend的MVC机制使用分析(二)
- ASP.NET MVC 4 捆绑和缩小实例介绍
- ASP.NET MVC中将控制器分离到类库的实现
- asp.net实现在非MVC中使用Razor模板引擎的方法
- ASP.NET MVC中的AJAX应用
- Nodejs学习笔记之入门篇
- jQuery入门 构造函数
- jQuery入门介绍之基础知识
- 如何在MVC应用程序中使用Jquery
- 针对初学者的jQuery入门指南
- jquery 指南/入门基础
- JDBCTM 指南:入门
- ASP.NET MVC小结之基础篇(二)
- ASP.NET小结之MVC, MVP, MVVM比较以及区别(一)
- Asp.net实现MVC处理文件的上传下载功能实例教程
- ASP.NET MVC小结之基础篇(一)