找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 1418|回复: 1

二次开发学习贴之面向象对象编程

[复制链接]
发表于 2024-10-4 14:13:53 | 显示全部楼层 |阅读模式
几乎所有3D软件的二次开发,基本上都是基于面向对象编程,而搞清楚几个基本概念对理解程序是非常重要的:
% G3 R2 S, W* [4 p, N/ ~
5 t. L$ s$ l8 W面向对象的基本概念5 U4 a) G4 A' L7 P: Y
对象:对象是要研究的任何事物。从一本书到一家图书馆,单的整数到整数列庞( d. I5 a# Q7 n7 [0 G7 {
大的数据库、极其复杂的自动化工厂、航天飞机都可看作对象,它不仅能表示有形的实体,也能表示无形的(抽象的)规则、计划或事件。对象由数据(描述事物的属性)和作用于数据的操作(体现事物的行为)构成一独立整体。从程序设计者来看,对象是一个程序模块,从用户来看,对象为他们提供所希望的行为。在对内的操作通常称为方法。
( [4 g6 [  S+ G5 w, }9 e& _9 Q9 s对象的状态用数据来表示称为属性+ U/ M1 l$ c: j1 v' W5 `
对象的行为用代码来实现称为方法" y* [/ {1 H8 M/ i3 Q) [$ n
类:类是对象的模板。即类是对一组有相同数据和相同操作的对象的定义,一个类所包含的方法和数据描述一组对象的共同属性和行为。类是在对象之上的抽象,对象则是类的具体化,是类的实例。类可有其子类,也可有其它类,形成类层次结构。5 ]4 _5 L& L: F+ ]" C1 Z# O; w
类与对象的关系:例如设计图纸就是类,依据图纸制造的零件就是对象) s5 C( w( Z1 B0 U5 S. `

1 n! @* Y: s9 C面向对象编程有三大特性,封装、继承和多态。
8 E$ f5 j) y. z- O1. 封装封装是把客观事物封装成抽象的类,并隐藏实现细节,使得代码模块化。比如,我们可以把“汽车”这个客观事物封装成一个类,这个类有颜色、型号等属性,有启动、加速、刹车等方法,而这些属性和方法的具体实现则被隐藏起来,使用者只需要知道这个类有哪些属性和方法,不需要知道这些方法是如何实现的。2 c9 H6 h9 u6 Q2 b2 m# W
2. 继承继承是面向对象编程的另一个重要特性,它提供了一种无需重新编写,使用现有类的所有功能并进行扩展的能力。比如,我们可以定义一个“电动车”类,它继承了“汽车”类,就自动拥有了“汽车”类的所有属性和方法,比如颜色、型号等属性,启动、加速、刹车等方法,然后我们还可以在“电动车”类上增加一些新的属性和方法,比如电池容量、充电方法等。$ P9 X( j/ N, z7 q2 r3 ^
3. 多态多态是指同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。比如,我们定义了一个“汽车”类,它有一个“启动”方法,然后我们又定义了一个“电动车”类,它继承了“汽车”类,也有一个“启动”方法,但是“电动车”类的“启动”方法的实现可能与“汽车”类的不同,这就是多态。% y0 s" ?8 j: |3 c
1 }9 z% r  d, v( h9 R
" R: G- r8 y" _( K5 ]
面向对象编程的理念面向对象编程有两个主要的理念,基于接口编程和组合优于继承。
1 W$ Y5 u4 A* M' O# f4 u4 O1. 基于接口编程基于接口编程的理念是,使用者不需要知道数据类型、结构和算法的细节,只需要知道调用接口能够实现功能。这就像我们使用电视遥控器一样,我们不需要知道遥控器内部的电路设计和工作原理,只需要知道按哪个按钮可以打开电视,按哪个按钮可以调节音量。0 X0 x- N$ f. v# Y/ w; {' k. \
2. 组合优于继承尽管继承可以使我们更容易地重用和扩展代码,但是如果继承层次过深、继承关系过于复杂,就会严重影响代码的可读性和可维护性。比如我们修改了基类,就可能影响到继承它的子类,这会增加迭代的风险。因此,我们更倾向于使用组合而不是继承。比如,我们可以定义一个“电动车”类,它包含“电池系统”、“制动系统”、“车身系统”、“转向系统”等组件,而不是继承“汽车”类。8 t/ T- I5 D( g+ u2 f9 k
( }: l0 M" i9 q/ t( |

评分

参与人数 1威望 +1 收起 理由
564156415gdr + 1

查看全部评分

回复

使用道具 举报

发表于 2024-10-4 14:34:02 | 显示全部楼层
你是不是还少说了几个:' w2 n- g: ^: u1 l
抽象是指识别事物的本质特征并将其从非本质特征中分离出来的过程。在OOP中,抽象通常通过创建抽象类或接口来实现,它们定义了一组通用的方法,但没有具体的实现。抽象帮助我们管理复杂性,关注高层次的设计,而忽略不必要的细节。8 d* Y+ C2 K0 p# F% \0 ?" g0 H
方法是与类或对象相关联的函数,用于定义对象的行为。它们可以访问和修改对象的状态。
* F& q% D% S6 ^: d( r+ |+ B属性是与类或对象相关联的变量,用于描述对象的状态。在某些语言中,属性可能被称为字段(field)。( r+ t# d( g1 l- ]. A3 @% Q
' E6 y# Z4 c: F( c) `
关于理念,是不是也少说了几个。, l. S' k" U+ n6 }% Y5 c
模块化是指将程序分解成独立的、可管理的部分(模块)。每个模块负责程序的一小部分功能。在面向对象编程中,类是模块的基本单位。通过模块化,开发者可以更容易地理解、测试和维护代码。3 [7 V* P  y! J2 l8 P9 ~4 r
依赖注入是一种设计模式,它通过外部配置而非硬编码来指定对象之间的依赖关系。这有助于降低组件间的耦合度,提高代码的可测试性和可维护性。
0 H. U8 K) Y6 s! ^; H  j开闭原则是面向对象设计的一个重要原则,指出软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。这意味着应该可以通过添加新代码来扩展系统的行为,而不需要修改现有代码。
6 r2 g0 t4 s) J1 {单一职责原则指出一个类应该只有一个引起它变化的原因。换句话说,一个类应该只有一个职责或功能。这有助于保持类的简洁性和可维护性。
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Archiver|手机版|小黑屋|机械社区 ( 京ICP备10217105号-1,京ICP证050210号,浙公网安备33038202004372号 )

GMT+8, 2025-9-1 11:05 , Processed in 0.059406 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表