编程|多视角简单理解面向对象

编程|多视角简单理解面向对象,第1张

效率最高,对机器最友好的自然是机器语言程序(按机器指令集直接编写机器可以识别的二进制代码序列)。对机器友好,对人却不是很友好,难写,难读,难维护。就如同象形文字一样,虽然够形象,但不够抽象,不方便表达和交流。

所以,机器语言需要抽象,用一些英文词或字母组合缩写来表示机器指令,做成一个手册来描述机器或CPU,程序员按这些字母组合来写程序,然后替换一下,这样似乎可行,而查找替换正是计算机所擅长的,另写一个这样的查找替换的翻译程序即可,其实这就是汇编语言,翻译程序就是汇编器。

人的欲望是没有止境的,我们希望写程序更快捷,更易读,更易维护,更接近人类语言,那就来更高一层的抽象吧,将一些复用场景较高的代码块规范化为一个英文词,由汇编的一对一的关系转变为一对多的关系,一些 *** 作直接用运算符来代替,流程跳转用goto代替,后来甚至发现,只用三种流程结构(顺序、选择、循环)和 和任意数量的布尔型标志就能表示任何功能或算法,这就是结构化编程语言。结构化编程语言也叫面向过程编程语言,用数据描述问题,对函数描述解决问题的步骤,将关联性较高的数据和函数放到同一文件中,通过文件来区隔接口和模块。

当面对成百上千、成千上万的函数时?是不是有心乱如麻的感觉?一种常用的方法就是分类,自然又会是更高一层的抽象,使用更大一点颗粒,如果组装产品,组件越大,组件的接口越友好,组装更便捷(需要注意的是,有些产品是不适合组装的)。这种更高抽象,更大颗粒的编程思想就是面向对象(OOP, Object Oriented Programming )。

在面向对象编程中,抽象的核心是数据, *** 作这些数据的成员函数是辅助, 以数据为中心,由 成员 函数提供接口,以消息进行联系。相对而言, 面向过程抽象的核心是处理数据的过程。

面向过程也只是一种抽象方式而已。

面向对象编程的主要思想非常简单:尝试将一个功能强大的程序整体分解为功能同样强大的多个部分。这样就可以将一些数据和那些只在相关数据上使用的函数耦合起来。

注意,这仅涵盖封装的概念。也就是说,位于对象内部的数据和函数对于外部是不可见的。我们只能通过消息(通常通过 getter 和 setter 函数)与对象的内容进行交互。

继承性和多态性并没有包含在最初的设计想法中,但是对于现在的面向对象编程而言是必需的。继承基本上意味着开发者可以定义具有其父类所有属性的子类。直到 1976 年,即面向对象的程序设计的概念问世十年之后,继承性才被引入。

又过了十年,多态性才进入面向对象的编程。简单来讲,这意味着某种方法或对象可以用做其他方法或对象的模板。从某种意义上说,多态性是继承性的泛化,因为并不是原始方法或对象的所有属性都需要传输到新实体。相反,你还可以选择重写一些属性。

多态性的特殊之处在于,即使两个实体在源代码中互相依赖,被调用实体的工作方式也更像插件。这使得开发人员的工作变得轻松,因为他们不必担心运行时的依赖关系。

值得一提的是,继承性和多态性并不是面向对象编程所特有的。真正的区别在于封装数据及其包含的方法。在计算资源比今天稀缺得多的时代,这是一个天才的想法。

结构化编程,面向对象编程、函数式编程)这三个编程范式分别限制了goto语句、函数指针和赋值语句的使用。

结构化编程是对程序控制权的直接转移的限制。

面向对象编程是对程序控制权的间接转移的限制。

函数式编程是对程序中赋值 *** 作的限制。

这三个编程范式都对程序员提出了新的限制。每个范式都约束了某种编写代码的方式,没有一个编程范式是在增加新的能力。

也就是说,我们过去50年学到的东西主要是:什么不应该做。

应当说,面向对象和函数式不冲突。但还是很多人觉得用函数式就等于要丢下面向对象。

但只有小孩子才做选择,单一范式总是存在缺陷的。

最初的时候,代码都很短小精干,几十上百行而已,一行一行的语句写下去就OK了;

随着需求的增加,慢慢地,代码量开始加大,出现了成千上万行的代码。这时候,代码的组织管理就出现了问题。怎么办?引入函数。上万行代码被组织成了百十来个函数,是不是好管理多了?就像上万名士兵,按师团连排组织起来一样。

然而,软件工程的规模进一步扩大,导致一个项目出现了成千上万个函数!这时候怎么办?我们是不是又只能“分门别类”地把这些函数组织起来?于是出现了类,继而出现对象和面向对象……

一开始学习的时候,你不要去管什么“重用”“耦合”、“可扩展”、“封装变化”……等等这些东西,首先理解:不得已!

使用函数,使用类是我们不得已而为之的事情啊!

不能理解“不得已”,是不能理解“面向对象”的关键。

我们很多课程书籍,一介绍面向对象,就开始介绍面向对象的优势,吧啦吧啦,这其实是一个……一个什么呢?不能说这样做错了,但是,会增加入门者理解面向对象的难度。

更进一步,不能理解“不得已”,也会阻碍理解“设计模式”:

理解面向对象,一定要首先理解:面向对象解决的是“代码组织”的问题。不是代码实现。

在 历史 上OOP最辉煌的时刻之一,应该是MFC。

虽然MFC现在看起来十分简陋和难用,但是这套复杂系统从出现到普及,到解决很多实际问题、提供了各种扩展方案。这个庞大而复杂的系统成功解决了windows这种基于GUI的软件的开发,完成了当时的 历史 使命。

OOP的普及和程序界面图形化的大潮是密不可分的,GUI恰恰是OOP最擅长的领域之一。甚至到了今天,在某些纯C语言编写的 游戏 引擎中,一旦到了UI部分,还是要在C语言里使用OO的写法和思路。在设计控件时使用继承真的是再合适不过了。

在 游戏 引擎中,都没有也不可能脱离OOP,或多或少。因为模拟世界中的各种物体,这件事也是OOP所擅长的。但是现在很多人在编写具体逻辑时,确实喜欢避免继承,这和纯粹的OOP思路不太一样。简单来说,引擎提供的组件本身是用到了继承的,但是进一步编写 游戏 逻辑时又要避免深一步的继承。

-End-

1、Autodesk

Autodesk用于建筑设计、土地资源开发、生产、公用设施、通信、媒体和娱乐。Autodesk始建于1982年,Autodesk提供设计软件、Internet门户服务、无线开发平台及定点应用,帮助遍及150多个国家的四百万用户推动业务,保持竞争力。

2、ArchiCAD

ArchiCAD提供基于BIM的施工文档解决方案,简化了建筑的建模和文档过程,即使模型达到前所未有的详细程度。ArchiCAD自始至终的BIM工作流程,使得模型可以一直使用到项目结束。

3、Vectorworks

Vectorworks产品系列由NemetschekVectorworks公司出品,是建筑设计领域里十分强大而有用的软件。

Vectorworks在欧美及日本等工业发达国家都是设计师的首选工具软件。Vectorworks提供了许多精简但强大的建筑及产品工业设计所需的工具模组;在建筑设计、景观设计、舞台及灯光设计、机械设计及渲染等方面拥有专业化性能。

4、BentleyGEOPAK

是一款集成的土木设计和工程的软件,是开展各类土木工程和运输项目的理想之选。

GEOPAK应用程序由经验丰富的土木工程师和专业测量师开发和提供支持,在围绕规划-生产为重心的理念指引下,工程师们能够通过连续不断的勘查和施工过程提供高质量的项目成果。

5、DigitalProject

DigitalProject可细分为Designer、Manager与Extensions等3部分,软件功能偏重于建筑工程的设计及施工作业,具备整合大型且复杂项目的能力。

做3d建模可以用到MODO12、Blender、AutodeskMaya、Rhino、Silo、Zbrush、GoogleSketchup、HeadusUVLayout、BodyPaint3D等软件。

列举如下:

1、Blender

Blender是一款开源的跨平台全能三维动画制作软件,提供从建模、动画、材质、渲染、到音频处理、视频剪辑等一系列动画短片制作解决方案。

Blender拥有方便在不同工作下使用的多种用户界面,内置绿屏抠像、摄像机反向跟踪、遮罩处理、后期结点合成等高级影视解决方案。同时还内置有卡通描边(FreeStyle)和基于GPU技术Cycles渲染器。以 Python 为内建脚本,支持多种第三方渲染器。

2、AutodeskMaya

AutodeskMaya是美国Autodesk公司出品的世界顶级的三维动画软件,应用对象是专业的影视广告,角色动画,**特技等。Maya功能完善,工作灵活,易学易用,制作效率极高,渲染真实感极强,是**级别的高端制作软件。

Maya售价高昂,声名显赫,是制作者梦寐以求的制作工具,掌握了Maya,会极大的提高制作效率和品质,调节出仿真的角色动画,渲染出**一般的真实效果,向世界顶级动画师迈进。

3、Rhino

Rhino是美国RobertMcNeel&Assoc开发的PC上强大的专业3D造型软件,它可以广泛地应用于三维动画制作、工业制造、科学研究以及机械设计等领域。它能轻易整合3DSMAX 与Softimage的模型功能部分,对要求精细、d性与复杂的3DNURBS模型,有点石成金的效能。

能输出obj、DXF、IGES、STL、3dm等不同格式,并适用于几乎所有3D软件,尤其对增加整个3D工作团队的模型生产力有明显效果,故使用3DMAX、AutoCAD、MAYA、Softimage、Houdini、Lightwave等3D设计人员不可不学习使用。

4、Silo

Silo是Nevercenter公司出品的一款专注于建模的三维软件,既适合生物建模也适合规则物体建模。可用它为视频游戏及**创建角色或建筑。Silo目前被全球顶尖工作室所使用着,既可以单独用它也可以配合多个软件平台使用。

5、Zbrush

ZBrush是一个数字雕刻和绘画软件,它以强大的功能和直观的工作流程彻底改变了整个三维行业。在一个简洁的界面中,ZBrush为当代数字艺术家提供了世界上最先进的工具。以实用的思路开发出的功能组合,在激发艺术家创作力的同时,ZBrush产生了一种用户感受,在 *** 作时会感到非常的顺畅。ZBrush能够雕刻高达10亿多边形的模型,所以说限制只取决于的艺术家自身的想象力。

参考资料来源:百度百科-Blender

参考资料来源:百度百科-AutodeskMaya

参考资料来源:百度百科-Rhino

参考资料来源:百度百科-Silo

参考资料来源:百度百科-Zbrush

手机端实现的建模技术已经支持3D扫描、数字雕刻、3D打印等高端技术,指尖触摸和拖动创很精确,对用户来说,触摸界面更加友好,适合随时随地发挥创意。以下是手机上的3D建模软件总结:

PhotoSynth for iPhone

一款微软开发的全景拍摄应用,该应用会判断出照片和照片之间的共同点,快速建构将各种不同角度和来源照片的360度平面全景照片。

Qlone Mat

一个黑科技感满点的 AR+3D 扫描建模工具,可以超级方便快速地把现实物品扫描成 3D 模型文件。目前仅支持英文语言。

Sculpt+建模app

一款数字雕刻和绘画应用程序,用户在线可以简单的绘制3D图形。

Putty 3d

一款超好用的手机在线3D素描簿,支持3D建模、3D打印等高端 *** 作,实现简单触摸和拖动雕刻。

如果想偷懒的话,可以利用ThingJS 3D模型库,有十万个3D模型、场景供选择,不用重复建模,直接拖动到3D场景中。效果还不错滴资源中心下载

工具类

植物类

建筑类

maya能用其它角度的建模。因为maya需要很多的角度构成去进行建模,所以用其他的角度去建模是没有问题的。三维物体是立体的、多维的,单从一个角度去观察很难判断物体其他视角的构造,制作出来的模型也就一个平面化的物体。一般制作一个三维模型,用来参考的最少要包含正、侧、顶三个视图,这样就可以制作出对称性的三维模型了,比如人体建模。而对于不具有对称性的物体的建模,则需要更多角度的参考图了。

3D MAX。

3D Studio Max,常简称为3d Max或3ds MAX,是Discreet公司开发的(后被Autodesk公司合并)基于PC系统的三维动画渲染和制作软件。其前身是基于DOS *** 作系统的3D Studio系列软件。在Windows NT出现以前,工业级的CG制作被SGI图形工作站所垄断。

3D Studio Max + Windows NT组合的出现一下子降低了CG制作的门槛,首先开始运用在电脑游戏中的动画制作,后更进一步开始参与影视片的特效制作,例如X战警II,最后的武士等。在Discreet 3Ds max 7后,正式更名为Autodesk 3ds Max 最新版本是3ds max 2020

扩展资料:

与其它软件建立的简单的3D模型不同,德国Hartmann公司应用的“3D建筑模型技术”以多视角的智能建筑构件为基础提供了一个完全的3D环境,是一个包含了全部建筑信息的3D中心数据库,可以跟踪建造一个建筑物所需的的所有组成部分。

在建筑物施工的任何阶段,都可以从多个视角观察施工和进度对建筑物产生的效果,或者深入建筑内部,身临其境的感受建筑内部的空间效果。

应用这种“3D建筑模型技术”后,所有的建筑构件都是智能物体,是包含了特殊的建筑构件的工程量、造价、建造时间和属性等综合信息的智能化三维物体。只要点击一下鼠标,就会显示你想得到的三个月甚至建筑物竣工以后的所有数据和3D效果。

参考资料来源:百度百科-3ds max

以上就是关于编程|多视角简单理解面向对象全部的内容,包括:编程|多视角简单理解面向对象、常用的BIM建模软件有哪些(BIM系列软件具有强大的建模)、做3d建模可以用到哪些软件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10210322.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存