OOP,iOS,MVC
何政达
【前言】:写这篇文章的目的是总结一下这几天学到的有关 iOS 编程的有关知识点。主要分三部分: OOP 的设计理念; iOS 的构成; MVC 的具体应用。
Part I : OOP
说起 OOP ,大家都知道是什么——面向对象程序设计( Object-OrientedProgramming )。但是我们为什么要使用这样的一种设计模式来进行我们的程序设计呢?记得一开始学习编程的时候是小学六年级,当时学习的是 BASIC ;上了初中以后学习 PASCAL 语言;上了高中开始学习 C 语言;到了大学之后逐渐熟悉了 Java , Python , Object-C 。在常用的设计模式当中,面向过程和面向对象这两种设计模式是使用最广泛的。面向过程往往用于一个具体任务的设计实现(比如在科学计算当中具体算法的实现);而面向对象的设计模式往往是针对可视化程序、网络以及移动程序设计的;在这些程序当中,可能没有一个真正线性的从头到尾的“流程”。比如一个程序上有许多按钮,用户可能随意按任何一个按钮,而且人和人之间选择的方式又有所区别,因此顺序式的程序设计显然不能满足我们对于程序的高要求。那么下面我们就用非常简单的语言来描述一下什么叫面向对象程序设计。
面向对象程序设计的灵魂概念是“对象”(别想歪了。。。。)。一个对象就是一个“实例物体”,它具有两种最基本的属性:( 1 )将自己与别人进行区分的 instantvariable ( 2 )自己可以执行的一些 method 。从这我们就可以知道我们使用一个对象的方式其实非常简单:利用 instant variable 找到我们想用的对象,然后再使用方法调用来运用相关的方法来完成任务 。对象与对象之间的协作也是非常重要的一个方面,我们使用一种所谓“ protocol ”的方法来进行这样的协作,用来完成更复杂的任务。当然还可以有 delegate 这样的复杂关系(一个对象的方法会使用另一个对象的方法)。
那么我们如何去 build 一个对象呢?这就需要一个抽象化的思维:类。比如我们人,你和我都是人的实例(也就是对象),我们有自己的名字、年龄、身高、体重,这些数据就是我们的 instantvariables ;同时我们还拥有一些方法:说话、唱歌、吃饭等等,这些方法说明了我们可以做什么事情。但是人作为一个概念却具有广泛的共性,这样我们就可以将这样的共性提取出来,和对象一样,进行两部分的设计:( 1 ) instantvariables ( 2 ) methods 。当我们建立好了一个类以后,我们就可以利用类中的 Init (初始化)方法来新建一个对象并对其进行初始化。而对于 Instantvariable (在 Object-C 当中称为 property )我们也会有相应的 getter 与 setter 来进行选择和处理。
要想良好的使用 OOP 的程序设计模式,思考方式的转变必不可少。原来我们都是以“算法”为中心,以具体的步骤为中心。但是在 OOP 设计模式中,我们更关心的是 Object 之间的相互协作来完成复杂的任务。而且在 OOP 当中,重用性和封装程度是非常重要的两个指标,我们需要尽可能增加我们类的重用性以及尽可能将我们需要的功能封装到类当中。当然如果我们需要对类进行进一步的细节化(但又不是直接新建一个 object ),那么这个时候就开始了 inherite (继承)的观念。目前我还没有学到有关于继承的深层次的东西,因此这次就不在这里叙述。
总结一下, OOP 的核心就是:类 à Object à Object 之间的协作。
iOS
什么是 iOS ? iOS 包括哪些东西?这是我们在进行 iOS 开发之前必须要搞清楚的问题。 iOS 是运行在 iphone 以及 ipad 上的操作系统。它是 Unix 为底层的一个移动端操作系统。而在 unix kernel 之上又加了许多的应用和接口( API ),以及相应的框架( Framework )。因此 iOS 最核心的应该是:( 1 ) Objective-C 语言( 2 ) Cocoa Touch 框架( 3 )其他的重要服务(视频、音频、网络、游戏等等)。在 StanfordCS139P 第一讲的 PPT 当中有详细的介绍。因此在这里就不赘述了,如果好奇想了解更多,不妨去看看第一讲的 PPT 。因此学习 iOS 程序设计最困难的也就是掌握 Cocoa Touch 以及 iOS 包含的众多 Framework 。我们要清楚:所有的 Framework 都是 OOP 的,它们都使用 OOP 的设计理念来进行设计并进行整合的。因此整个 iOSprogramming 就是 OOP 。这点非常的重要。
MVC
在 iOS 编程当中,我们使用的设计模式是 MVC ( Model-View-Controller )。那么下面就分别按照 Model , View , Controller 进行总结。
Model 顾名思义就是你的程序是做什么的,你的程序的具体实现思路怎样(注意:在 model 当中的逻辑是完全不考虑 UI 的,我们就在纯粹的思维上去进行思考)。它会包含你的程序所需要的所有数据结构以及数据结构之间的相互作用关系。这就是 model 。有了 model ,就知道程序是如何去做的了。
View 就是我们程序和用户进行交互的地方,也是我们如何设计让我们的程序去执行的地方,但是注意: View 完全不知道我们要执行的是什么东西。它只听 Controller 的话。 Controller 让它干嘛,它就干嘛。让它显示什么就显示什么。
Controller 是连接 Model 和 View 的桥梁,也是我们需要在 Xcode 编程当中花大力气去编写的。 Controller 可以向 Model 询问,也可以向 View 询问。
Model , View , Controller 之间的关系:
(1) Controller 可以指向 Model 以及 View
(2) Model 绝对不能和 View 进行互动
(3) Model 如果改变想提醒 Controller ,需要使用一种类似于“ radio ”的方式进行
(4) View 如何受到互动(比如用户按了一个按钮),那么它会以 target-action 的方式告诉 Controller ,然后等待 Controller 告诉它下一步应该如何去做。
(5) View 也会和 Controller 有两种方式的互动:一种称为 Data Source ,另外一种是“ did,should, would” 形式的。这个在不同的 UIView 的 Object 中会有应用。
如果我们熟练掌握了上面 5 种 MVC 中的交互方式,我们就能很好的使用 Xcode 以及 iOS 中的 Framework ,因为它们的设计都是基于 MVC 的。
【总结】:在上面我们简单的总结了 OOP , iOS 以及 MVC 的相关知识点。当然我才刚刚开始接触 iOS ,后面还有很长的路要走,要写许多许多自己的 class ;也要熟悉 iOS 所提供的 Framework 以及相应的 SDK 。千里之行始于足下,加油吧。
本文出自 “jameshzd” 博客,请务必保留此出处http://9838873.blog.51cto.com/9828873/1602288
原文:http://9838873.blog.51cto.com/9828873/1602288
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!