博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面向对象开发方法
阅读量:6682 次
发布时间:2019-06-25

本文共 1711 字,大约阅读时间需要 5 分钟。

  hot3.png

面向对象作为一种形式化的手段,因为其形式化的本质,其主要意义在于其作为开发方法的意义,而不是程序实现的意义。

这么讲的意思是,你是不是面向了对象,主要看的不是你的程序是不是有对象,是不是由对象组成的,而是看你在开发的过程中有没有使用面向对象的思想。

可见使用它是面向对象的关键。为什么说关键呢?

第一,如果你的对象仍然只存在于你的大脑里而没有形式化它,那么你当然也就没有使用它(作为一种形式化手段);

第一,如果你的大脑里面也没有它,但是程序里面有它。那么你还是没有使用它。你只是在使用面向对象的语言说话,但却并没有使用面向对象的思想进行开发。使用面向对象的思想进行开发意味着你要将问题域对象化,而不只是使你的程序“由对象组成”。从这个意义上讲,所谓“面向对象的系统”也是不对的。因为光从系统本身有没有“面向”对象并看不出系统是不是真的面向对象的。因为系统有对象并不意味着系统里的对象是从问题域转化过来的,或者说系统是问题域的形式化。

系统要成为问题域的形式化,必须要有一个非常完整的对象内核。在软件界,到底都在说内核是吧,OS有内核,服务器有内核,软件有内核,数据库也有内核。一切都有内核。唯独你(我)的程序没有内核。

有一个真正面向对象的内核非常重要,因为有了它,你才有了一个真正的可以去看的东西,真正的系统。没有它,我们就只能够从程序的代码以及所调用的库或程序生存环境去“猜”程序所做的事情。你会是一个分崩离析的东西,你的程序将以各个交互件的傀僵存在于系统中。没有任何人可以从中总结出任何东西,更别提程序本身的移植了。这样的系统,要想移植,只能采用机械的办法,没有任何逻辑可以遵循,因为程序本身就没有逻辑。有的只是一堆勉强跟其它系统连接起来并且勉强能工作的系统。没有可理解性,没有可进化性,也没有架构的稳定性。因为不知道什么时候,一个新功能的加入将会推翻整个系统的设计。因为你没有去形式化问题域,所以就不可能有对问题域的适当抽象化,所以系统不能进化,适应能力超差。

即使在以性能为主的程序中,面向对象仍然非常重要。重要在,你需要一个程序内核。你可能会觉得,我是追求性能的,所以必须牺牲面向对象。但其实这并不一定。经常性地,一个面向对象的系统因为更适合人类的自然思考方法,所以你更容易从代码复审中读出问题。而面对面向功能开发的系统,我们则经常性的无从下手。有可能是面向功能的抽象程度太高,以致于它把所有的东西都抽象掉了,唯独剩下功能,所以当然就难于理解了。要理解这样的东西,光有需求文档都不够,它还需要一个从需求到程序的重新映射过程。这样的程序,其形式化过程非常奇特,根据程序员各人的思维模式各有不同,所以非常难以理解。所以也不是一个有利于利用大众或团队智慧的系统。

面向对象这么难,一个很大的原因是我们的类库都宣称其是“面向对象”的。而实际上由于它们所处的层次,它们根本就不可能面向对象。因为问题域是未知的,没有人知道他写的这个库将来要被人用在哪里,用来干什么。不可能。

面向对象的难在于,它不能从任何地方抄到。不象平时的程序,网上一找一大把。这个东西它抄不到,因为它是问题域相关的。你的问题域,经常是非常独特的,你需要自己去理清里面的思维并且然后再把它对象化。上课也没用,现在很多大学都有开面向对象的课程,但是一个学生,在接触到真正的生产环境并且经历过大量实际工作以前,它不可能树立这么抽象的“抽象”思维方法。

抽象是很难的,非常非常难。往往要求对一个领域的非常深的理解。这一点并不是常人做得到,所以我们自己经常在做这样的事情的时候,自己也觉得自己没做到位。原因就是对问题域的理解不够。

你一定要理解问题域。至少要尝试花费比如几天几个月的时间,纯粹的什么都不想,就去理解问题域。当你想得差不多的时候,还不行,你还要在这个基础上进行第二遍的认识,第三遍的认识,甚至可能达到几十遍的认识。这个时候,你才是真正的可能接近了问题域的本质。

这不是程序员做的事情。它也不是普通学者做的事情。它是一件非常难的事情。

它是哲学家做的事情。

 

 

 

转载于:https://my.oschina.net/digerl/blog/95025

你可能感兴趣的文章
js想不通的地方
查看>>
刘若英《爱情限量版》摘录
查看>>
Requests请求库
查看>>
request.setCharacterEncoding("utf-8");
查看>>
Svn安装成功后的操作
查看>>
自定义EL函数、自定义JSTL标签
查看>>
多线程与网络之NSURLConnection发送请求
查看>>
走的最急的,都是最美的风景
查看>>
【后缀数组】【poj2774】【 Long Long Message】
查看>>
Javascript - Jquery - 事件
查看>>
linux常用命令--diff
查看>>
约瑟夫环问题
查看>>
游戏网络知识
查看>>
JIRA7.10迁移
查看>>
让oracle做定时任务【转】
查看>>
qt5 make 找不到QApplication
查看>>
关闭或开启memory_target
查看>>
100c之36:不同鸡的数量
查看>>
数据库对数字不限长度的冒泡排序
查看>>
slice切割数组arr=[[0,1],[2,3]]
查看>>