|
几乎所有3D软件的二次开发,基本上都是基于面向对象编程,而搞清楚几个基本概念对理解程序是非常重要的:
% H# I S6 S# K/ |4 b% N' J6 M5 ]5 L+ U
面向对象的基本概念
& P* {1 X2 P1 s I# i( m# ?9 j/ H对象:对象是要研究的任何事物。从一本书到一家图书馆,单的整数到整数列庞
9 [6 E3 f' A* U& E' J& V [大的数据库、极其复杂的自动化工厂、航天飞机都可看作对象,它不仅能表示有形的实体,也能表示无形的(抽象的)规则、计划或事件。对象由数据(描述事物的属性)和作用于数据的操作(体现事物的行为)构成一独立整体。从程序设计者来看,对象是一个程序模块,从用户来看,对象为他们提供所希望的行为。在对内的操作通常称为方法。: C. T1 l. E/ `8 x9 D# j. f9 I
对象的状态用数据来表示称为属性
" F. z- M; r4 s! z4 I% |- L对象的行为用代码来实现称为方法8 l6 v* \" t: G* G8 \ O: v% x' F% J
类:类是对象的模板。即类是对一组有相同数据和相同操作的对象的定义,一个类所包含的方法和数据描述一组对象的共同属性和行为。类是在对象之上的抽象,对象则是类的具体化,是类的实例。类可有其子类,也可有其它类,形成类层次结构。
0 s; q) d6 O4 q0 b" H类与对象的关系:例如设计图纸就是类,依据图纸制造的零件就是对象
9 b/ b9 l/ r6 t( E! R' {4 Q* |
1 @& K R6 I8 |/ R9 x* g$ g7 ]$ q面向对象编程有三大特性,封装、继承和多态。
6 H; ~& f0 y1 ?% x* L0 V; }) ~1. 封装封装是把客观事物封装成抽象的类,并隐藏实现细节,使得代码模块化。比如,我们可以把“汽车”这个客观事物封装成一个类,这个类有颜色、型号等属性,有启动、加速、刹车等方法,而这些属性和方法的具体实现则被隐藏起来,使用者只需要知道这个类有哪些属性和方法,不需要知道这些方法是如何实现的。
& H+ X1 M% k7 Q2 B9 w8 v# @2. 继承继承是面向对象编程的另一个重要特性,它提供了一种无需重新编写,使用现有类的所有功能并进行扩展的能力。比如,我们可以定义一个“电动车”类,它继承了“汽车”类,就自动拥有了“汽车”类的所有属性和方法,比如颜色、型号等属性,启动、加速、刹车等方法,然后我们还可以在“电动车”类上增加一些新的属性和方法,比如电池容量、充电方法等。
& f6 U, u0 {& H- B8 p3. 多态多态是指同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。比如,我们定义了一个“汽车”类,它有一个“启动”方法,然后我们又定义了一个“电动车”类,它继承了“汽车”类,也有一个“启动”方法,但是“电动车”类的“启动”方法的实现可能与“汽车”类的不同,这就是多态。8 q, M( n+ N: l z3 d( S
% s9 t* X2 K1 n' I
, G# V7 E% Y1 N9 B. K( r5 J6 t( i- r
面向对象编程的理念面向对象编程有两个主要的理念,基于接口编程和组合优于继承。
4 l- [, W$ A: z6 k q8 a7 N1. 基于接口编程基于接口编程的理念是,使用者不需要知道数据类型、结构和算法的细节,只需要知道调用接口能够实现功能。这就像我们使用电视遥控器一样,我们不需要知道遥控器内部的电路设计和工作原理,只需要知道按哪个按钮可以打开电视,按哪个按钮可以调节音量。
# Q1 ~; D! W- y2. 组合优于继承尽管继承可以使我们更容易地重用和扩展代码,但是如果继承层次过深、继承关系过于复杂,就会严重影响代码的可读性和可维护性。比如我们修改了基类,就可能影响到继承它的子类,这会增加迭代的风险。因此,我们更倾向于使用组合而不是继承。比如,我们可以定义一个“电动车”类,它包含“电池系统”、“制动系统”、“车身系统”、“转向系统”等组件,而不是继承“汽车”类。5 J5 v: O1 w! T
6 B" L5 V0 x$ \0 r" Q% G6 P6 w
|
评分
-
查看全部评分
|