用面向对象编程思想——构建用户调查的理论基础

1 评论 3718 浏览 25 收藏 21 分钟

用户调查是开发产品的重要依据,更是产品能否被用户认可的第一步。本篇文章将深入用户调查的基础理论方面,尝试从基础理论方面为用户调查提供更多有共性、有规律性、有理论的依据。

前言:

“没有调查就没有发言权”,这句话很多人都非常熟悉,其实这句话还有下半句,知道下半句的人相对少了很多。

完整的一句话是这样的:“没有调查就没有发言权,没有正确的调查同样没有发言权”。

这句话不仅强调了调查的重要性,更强调了正确调查的重要性。

在互联网行业,用户调查绝对是最高频的词汇之一。用户调查是开发产品的重要依据,更是产品能否被用户认可的第一步。

随着用户调查的权重越来越高,参与过用户调查的人越来越多。每个做过用户调查或者对用户调查研究过的人都有自己的看法。

个人对用户调查的看法就像读者看《哈姆雷特》一样,一千个读者眼中有一千个《哈姆雷特》。

本篇文章将深入用户调查的基础理论方面,尝试从基础理论方面为用户调查提供更多有共性、有规律性、有理论的依据。

为了更好的阐述用户调查基础理论,文章中将首次引面向对象的编程方法,通过面向对象的编程方法类比,运用编程理论为用户调查找到可行性基础理论。

在互联网的发展过程中,随着市场的变化,用户调查也一直在变化当中。目前为止,在用户调查方面还没有可行性的基础理论。没有基础理论的支持,让用户调查像“薛定谔的猫一样”,变化莫测。

在编程中有两种不同的编程思想:

  1. 面向过程(Procedure Oriented):一种以过程为中心的编程思想;
  2. 面向对象 (Object Oriented) :一种以事物为中心的编程思想。

用户调查正在进行这种演化,需要从面向过程演化到面向对象。通过采用面向对象的方式,将现实世界的事物抽象成对象,现实世界中的关系抽象成类、继承,帮助我们实现对现实世界的抽象与数字建模。

通过面向对象的方法,更利于用人理解的方式对调查的复杂问题进行分析、归纳和演绎。

在我们过去采用的用户调查方法中,由于某些主观和客观因素的存在,让调查结果和实际情况存在不可逆偏差,且存在的偏差随着调查人的不同被放大或者缩小。

正是因为存在这样的问题,我们在做决策时通常依赖过往的经验,而非调查结果。

一、面向过程和面向对象的区别

两种编程思想的演化,从面向过程到面向对象,让编程思想形成了方法论和理论支持。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。

面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

以拿生活中的实例来理解面向过程与面向对象。

例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1)开始游戏,2)黑子先走,3)绘制画面,4)判断输赢,5)轮到白子,6)绘制画面,70判断输赢,8)返回步骤2,9)输出最后结果。把上面每个步骤用不同的方法来实现。

如果是面向对象的设计思想来解决问题,则是另外一种思路。

整个五子棋可以分为:1)黑白双方,这两方的行为是一模一样的,2)棋盘系统,负责绘制画面,3)规则系统,负责判定诸如犯规、输赢等。

第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。

可以明显地看出,面向对象是以功能来划分问题,而不是步骤。

同样是绘制棋局,这样的行为在面向过程的设计中分散在了多个步骤中,很可能出现不同的绘制版本,因为通常设计人员会考虑到实际情况进行各种各样的简化。

而面向对象的设计中,绘图只可能在棋盘对象中出现,从而保证了绘图的统一。

二、过往用户调查方法存在的问题

过往的用户调查主要针对产品的功能角度进行模块化调查,将用户调查的反馈结果看成是实现产品迭代的某些功能模块。面对日趋复杂多变的市场环境,这种思路逐渐在以下几个方面暴露了一些弱点:

1. 审视问题域的视角

在现实世界中存在的客体是问题域中的主角,所谓客体是指客观存在的对象实体和主观抽象的概念,他是人类观察问题和解决问题的主要目标。

例如,对于一个C2C的交易平台来说,无论是简单还是复杂,始终是围绕用户和商家这两个客体实施。

在自然界,每个客体都具有一些属性和行为,例如用户有账号、年龄、性别等属性,以及登录、浏览、下单等行为。因此,每个个体都可以用属性和行为来描述。

通常人类观察问题的视角是这些客体,客体的属性反应客体在某一时刻的状态,客体的行为反映客体能从事的操作。

这些操作附在客体之上并能用来设置、改变和获取客体的状态。任何问题域都有一系列的客体,因此解决问题的基本方式是让这些客体之间相互驱动、相互作用,最终使每个客体按照依据调查结果做出的决策改变其属性状态。

过往采用的调查方法不是将 客体作为一个整体,而是将依附于客体之上的行为抽取出来,以功能为目标来进行用户调查。

这种做法导致在进行用户调查的时候,不得不将客体所构成的现实世界映射到由产品功能模块组成的解空间中,这种变换过程,不仅增加了用户调查的复杂程度,影响了调查结果的准确性,而且背离了人们观察问题和解决问题的基本思路。

过去不规则的用户调查将审视问题的视角定位于不稳定的操作之上,并将描述客体的属性和行为分开,使得调查结果不具有指导性,甚至一个微小的变动,都会波及到整个调查结果。

面对问题规模的日趋扩大、环境的日趋复杂、需求变化的日趋加快,将用户调查的基本方法统一到人类解决问题的习惯方法之上,这是需要采用面向对象编程思想进行用户调查的首要原因。

2. 抽象级别

抽象是人类解决问题的基本法宝。良好的抽象策略可以控制问题的复杂程度,增强调查结果的通用性和可扩展性。

抽象主要包括过程抽象和数据抽象。过去的用户调查方法是过程抽象。所谓过程抽象是将问题域中具有明确功能定义的操作抽取出来,并将其作为一个实体看待。这种抽象级别对于用户调查结果来说得有些武断,并且准确性差,导致很难得到一份准确性很高的用户调查结果。

一旦某个客体属性的表示方式发生了变化,就有可能牵扯到已有结果的很多部分。而数据抽象是较过程抽象更高级别的抽象方式,将描述客体的属性和行为绑定在一起,实现统一的抽象,从而达到对现实世界客体的真正模拟。

3. 封装体

封装是指将现实世界中存在的某个客体的属性与行为绑定在一起,并放置在一个逻辑单元内。

这样做既可以实现对客体属性的保护作用,又可以提高调查结果的通用性。只要客体的属性和行为不变,任何封装体内部的改变都不会对调查结果的其他部分造成影响。

过往的用户调查没有做到客体的整体封装,只是封装了各个功能模块,而每个功能模块随着产品功能的改变会改变客体的属性,并且由于描述属性的数据与行为被分割开来。

所以一旦某个客体属性的表达方式发生了变化,或某个行为效果发生了改变,就有可能对整个调查结果产生影响。

4. 可重用性

可重用性标识着调查结果的可复用能力,是衡量一次调查结果有用与否的重要标志。

当今互联网行业,人们越来越追求更多规律性、更有通用性的调查结果,从而使商业决策更有据可源、有律可循,即从过去“瞎猫碰到死耗子”的商业决策,演化到科学客观的商业决策,从而推动公司的快速扩张和发展。

然而,过去用户调查的基本单位是功能模块,每个功能模块只是实现特定功能的过程描述,因此,它的可重用单位只能是模块。

例如,诺基亚在过去进行用户调查时,调查得到的结论是用户需要摔不坏、质量更好、通话时间更长的手机,但对于这样的调查结论来说,这样的重用性显得微不足道,当通信网络发生变化时,这样的调查结果没有一点价值,诺基亚也为采用这样的用户调查付出了惨重的代价。

三、面向对象用户调查方法的概念

1. 对象

对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。一个用户即可是一个对象。

2. 对象的状态和行为

对象具有状态,一个对象用数据值来描述它的状态。

对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为。

对象实现了数据和行为的结合,使数据和行为封装于对象的统一体中。

3. 类

具有相同特性和行为的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象,类实际上就是一种数据类型或一种抽象规则的类型。

类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。

类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。

4. 类的结构

在客观世界中有若干类,这些类之间有一定的结构关系。通常有两种主要的结构关系,即一般–具体结构关系,整体–部分结构关系。

一般–具体结构称为分类结构,也可以说是“或”关系,整体–部分结构称为组装结构,它们之间的关系是一种“与”关系。

四、面向对象用户调查方法的特征

1. 对象唯一性:

每个对象都有自身唯一的标识,通过这种标识,可找到相应的对象。在对象的整个生命期中,它的标识都不改变,不同的对象不能有相同的标识。

2. 抽象性:

抽象性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。

一个类就是这样一种抽象,它反映了与调查结果有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的调查有关。

3. 继承性:

继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。

继承性是面向对象用户调查不同于其它调查的最重要特点,是其他调查所没有的。

在类层次中,子类只继承一个父类的数据结构和方法,则称为单重继承。

在类层次中,子类继承了多个父类的数据结构和方法,则称为多重继承。

在用户调查中,类的继承性使所调查结果具有开放性、延伸性,这是信息组织与分类的行之有效的方法,它简化了对象、类的调查工作量,增加了调查结果的可重用性。

采用继承性,提供了类的规范的等级结构。通过类的继承关系,使调查结果能够共享,提高了调查结果的重用性。

4. 多态性:

多态性是指相同的操作(行为)或过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一调查问题时可以产生不同的结果,这种现象称为多态性。

多态性允许每个对象以适合自身的方式去反馈调查结果,多态性增强了调查结果的灵活性和重用性。

五、面向对象用户调查的要素

1. 抽象:

抽象是指强调实体的本质、内在的属性。在用户调查中,抽象指的是在决定如何实现对象之前的对象的意义和行为。使用抽象可以尽可能避免过早考虑一些细节。类实现了对象的数据(即状态)和行为的抽象。

2. 封装性:

封装性是保证调查结果具有优良的模块性基础。

面向对象的类是封装良好的模块,类定义将其说明(被调查用户可见的信息)与实现(被调查用户的不可见内在规律)显式地分开,其调查结果内部实现按其具体定义进行抽象划分。

对象是封装的最基本单位。封装防止了调查结果相互依赖性而带来的变动影响。面向对象的封装比传统用户调查的封装更为清晰、更为有力。

3. 共享性:

面向对象的调查结果在不同级别上促进了共享。同一类中的对象有着相同数据结构、相同的行为特征。这些对象之间是结构、行为特征的共享关系。

六、面向对象用户调查的对象模型

对象模型表示了静态的、结构化的调查结果数据性质,描述了调查结果的静态结构,它是从客观世界实体的对象关系角度来描述,表现了对象的相互关系。该模型主要关心系统中对象的结构、属性和操作。

1. 对象和类

(1)对象:

对象建模的目的就是描述对象。

(2)类:

通过将对象抽象成类,我们可以使问题抽象化,抽象增强了模型的归纳能力。

(3)属性:

属性指的是类中对象所具有的性质(数据值)。

(4)操作和方法:

操作是类中对象所使用的一种功能或变换。类中的各对象可以共享操作,每个操作都有一个目标对象作为其隐含行为。方法是类的操作的实现步骤。

2. 关联和链

(1)关联和链的含义:

关联是建立类之间关系的一种手段,而链则是建立对象之间关系的一种手段。

链表示对象间的物理与概念联结,关联表示类之间的一种关系,链是关联的实例,关联是链的抽象。

(2)角色

角色说明类在关联中的作用,它位于关联的端点。

(3)关联的多重性:

关联的多重性是指类中有多少个对象与关联的类的一个对象相关。重数常描述为“一”或“多”。

3. 类的层次结构

(1)聚集关系:

聚集是一种“整体-部分”关系。在这种关系中,有整体类和部分类之分。聚集最重要的性质是传递性,也具有逆对称性。

聚集可以有不同层次,可以把不同分类聚集起来得到一颗简单的聚集树,聚集树是一种简单表示,比画很多线来将部分类联系起来简单得多,对象模型应该容易地反映各级层次。

(2)一般化关系:

一般化关系是在保留对象差异的同时共享对象相似性的一种高度抽象方式。它是“一般—具体”的关系。

一般化类称为你类,具体类又能称为子类,各子类继承了父类的性质,而各子类的一些共同性质和操作又归纳到你类中。

因此,一般化关系和继承是同时存在的。一般化关系的符号表示是在类关联的连线上加一个小三角形。

4. 对象模型

(1)模板:

模板是类、关联、一般化结构的逻辑组成。

(2)对象模型:

对象模型是由一个或若干个模板组成。模板将模型分为若干个便于管理的子块,在整个对象模型和类及关联的构造块之间,模板提供了一种集成的中间单元,模板中的类名及关联名是唯一的。

#专栏作家#

老漂,微信公众号:老漂运营笔记,人人都是产品经理专栏作家。4年用户增长、互联网营销、微信生态探索者。

本文原创发布于人人都是产品经理。未经许可,禁止转载

题图来自 Unsplash ,基于 CC0 协议

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
评论
评论请登录
  1. 你要不要自己读一遍你写的啥?

    来自广东 回复