Objective-C 编程全解-第01章 面向对象的编程

01 面向对象的编程


1.1 对象的概念

1.1.1 面向功能的软件设计的局限性

    面向过程的程序设计语言主要使用顺序、选择和循环三种基本结构来编写程序。

    在面向对象技术问世之前,程序设计被看为一个个功能系统的集合。程序员根据设计文档实现各个函数,完成目标软件。所以,那个年代软件开发最关心的是如何从需求中提取出要实现的功能,决定数据格式,并将其组合在一起。简而言之,整个系统设计的过程就是将需求分解成一个个小的功能,同时定义每个功能所需要的数据格式。

    但是软件的核心是功能,而需求又非常容易变更,所以围绕功能设计软件,会比较难与对应需求的变更,维护成本会比较高。


1.1.2 面向对象的模块化

    面向对象(object-oriented)中,对象(object)指的就是人能够识别的东西。而且,对象具有属性(attribute),并且能够接收消息(message)来进行相应的处理。属性指的是对象的性质和所具有的信息。属性也可以称为状态。消息是指对象与对象之间的信息传递。

        object |ˈɒbdʒɪkt| noun 物品、对象、目的。

        orient |ˈɔːrɪənt| verb 使朝向、使适应。

        attribute |ˈætrɪbjuːt|noun 属性、标志。

    面向对象的编程指的是,以对象作为程序的基本模块来进行软件的分析、设计和开发的一种思考方法。

    基于面向对象的软件开发,比较接近于人的思考方式,更善于应对需求变更。


1.1.3 消息传递

    消息是对象之间通信的唯一手段。请求、查询、应答和异常通知等,所有的通信和控制都是通过收发消息完成的。

    通过消息协调各个对象的运作,使其作为一个整体运行,这就是面向对象的软件的运行模式。

1.1.4 模块的抽象化

    综上所述,具备以下特征的东西可称为对象。

        可认为分辨出这是一个对象

        拥有属性

        能够向其他对象发送消息,能够接收消息,并作出相应的处理

        消息的处理是通过对象的方法完成的

    像这样使用对象的概念对问题进行抽象化的方法叫做面向对象。

    使用对象的概念来分析如何做一个软件叫做面向对象的分析(OOA,Object-Oriented Analysis)

    以对象为基础来设计软件叫做面向对象的程序设计(OOPObjectOriented Design)

    编程过程中使用面向对象的概念叫做面向对象的程序设计(OOPObjectOriented Program)。

    通过使用面向对象的语言,可在面向对象的分析和设计的基础上来编程。它不像传统的以功能为核心的软件开发,需要明确指明每个函数所对应的功能。面向对象的软件开发,从需求分析、设计到编程都适用统一的模型,以及善与应对需求变更。

    抽象化(abstraction)指的是尽可能地不考虑相关细节,只关注对象的核心和本质。通过抽象可以用简单概念的集合来描述一个复杂的对象,这是非常重要的。


1.1.6

    我们可以把相同变量和方法的对象提炼出来,做成模块。这样以后就可以使用模版来创建具体的对象。这种模版就是类(class)。

    类包含了一组特定对象的共有特性。

    用类创建对象的过程叫做实例化(instantiation),生成的对象叫做实例对象(instance object),或简称为实例(instance)。

        instance |ˈɪnstəns| noun 情况、例子。

    实例所拥有的变量称为实例变量(instance variable)。

    CocoaMac OS上面应用软件的核心类库。Cocoa API中开头的“NS”,就是NextStep的缩写。


1.2 模块和对象

1.2.1 软件模块

    模块是工业制品中的概念,指的是整体的一部分,它具备独立的功能,更换是不会影响其他部分,例如电源模块。

    软件开发的模块也是一个功能单位,构成一个软件的各个相互独立的部分叫做模块。一个模块由变量、方法甚至其他模块构成。所有模块具有层次性。


1.2.2 高独立性的模块

    独立性高(低耦合、高内聚)的模块划分是最佳的划分方式。

    如果一个模块中实现的内容需要参照其他模块的内容才能理解,或一个模块发生变动之后其他模块需要相应地改变,这样的模块就是独立性比较差的模块。


1.2.3 模块的信息隐蔽

    模块独立性的划分原则是只对外提供做小限度的接口信息,内部实现不对外公开。也就是把模块做成一个黑盒子(black box)。

    这个原则叫做信息隐蔽(information hiding)或封装(encapsulation)。

        capsule |ˈkæpsjuːl, American ˈkæpsl| noun 胶囊、航天舱。

        encapsulate |ɪnˈkæpsjʊleɪt| verb 概括、包含。


1.2.4 类的定义和接口

    类是由实例变量和方法构成,所以类的定义中包含了实例变量和方法的定义。

    对象的使用者只关心到底该如何使用这个对象,而不关心他的内部实现。

    类公开给外部的、关于如何使用这个类的信息叫做接口(interface),接口中定义了这个类所包含的实例变量和可接受的消息。

你可能感兴趣的:(面向对象,实例变量,黑盒子)