Ontology与OO作为一种需求分析或软件构建方法的存在意义
为什么80%的码农都做不了架构师?>>>
面向功能,面向对象,ONTOLOGY(其实是一种面向概念的手段),强调的其实只不过描述的层次或角度而已。
一切形式系统的目的都是为了表达。形式系统的工作原理或者说内在特征其实与人体大脑是一样的。人类的思维系统其实本身也是一个形式化系统,或者说至少我们可以把它假设为一个形式系统。只有在有了这个形式系统以后,才有可能存在或发生建立在这个系统基础上的行为。
符合化即人脑外形式系统与人脑内形式系统的区别在于,人脑系统的基于机理仍不清楚。但显然绝对是比功能,对象,概念层次都要深得多的东西。
如果不讨论应用建模,计算机的底层元素其实非常简单。在冯诺依曼体系中就是内存或者指令。没有别的东西。再往下抽象的话其实已经没有意义了。因为计算机只提供这个层次的服务。所有的上层服务都是在内存与指令的基础上建立起来的。
但实际上现在要讨论的或者说值得讨论的正是应用建模。
应用建模。
好好思考一下这个词。什么是“应用”?
应用这个词的语义,正是所有建模技术或方法的“发源地”。
“应用”意味着作为一种人类认识的“应用”。它首先是一种人类认识。然后才是一种拥有“应用”语义的人类认识。记住它是一个认识这一点很重要,因为对它的一步步深入认识,正是建模方法史的根本发展动力。
而“功能”是对“应用”的第一步,也是最直接解释。因为所谓“应用”,那么肯定就是为了“用”而产生的东西嘛。既然目的是“用”而不是东西,那么显然一个正确的划分就是对“用”本身进行划分。这是一种最自然不过的逻辑手段。也是人们始终都没有或说不能摆脱“功能”这个概念进行软件分析,建模或构建的原因。
是的,它是一种最“自然”的软件构建方法。
我要把它曲解成“朴素”。贡文说naive。这个词其实比朴素更有说服力。因为它有点“傻瓜”的意思!
But it turned out to be a very bad methodology. It has to be a reason? And we're not worried yet, because we are human, we have brains. We can think!
其实原因就是:软件太复杂。
如果“用”是清楚的,或者说人们最终能够清楚地说清楚对软件的“用”,那么显然面向功能将是一种最简单,最直接且最高效的建模方法。为什么我要拐着弯去形式化那些没有直接使用价值的其它任何东西比如说,“对象”或“概念”呢?再者,就算你真正在软件内部形式化了这个东西,因为软件的无外在形式的原因,用户也“看”不到啊!
并且,仅仅思考上的不方便,也并不足以推动人们去形式化它们。因为虽然你不方便,但有的人比方主专家们,对于他们来说,思考,特别是在他们领域内的思考,没有什么是比那更方便的事情了。比如摩天大楼的设计,飞机的设计,,,这些东西都不是很“方便”的东西,但那并不影响或并不严重地影响行业本身的发展。事实上,从某个程度讲,“不方便”正是很多人选择进入某些行业的原因。因为那样才更容易造成稀缺价值。难道不是吗?
对象,概念,它们本身并不能帮助构建者提供“应用”或“用”以外的价值。也就是说,有了它们并不能帮肋我们构建比一开始的假设更多的东西。也就是说,它们并不能或者说并没有,拓展软件本身的价值。价值仍旧是一样的。这说明面向对象或面向概念,与面向功能一样,其目标仍然是那个老目标:应用。
价值系统本身并没有发生改变。
改变的是构建这个价值系统或者说完善这个价值的方法。
这样一来,就可以很容易地看清楚,面向对象也好,面向概念也好,它们都只在方法论的范围内有意义。除了方法论,它们并没有任何其它范围上的意义。因为它们并没有提供增量价值。也正因为此,所以用户不知道也不必要知道它们。
对象与概念,对应的是一种更好的功能构建手段。它们更好的原因是,它们在整个人类认识系统中的位置更低,因此它们拥有更强的表达能力。
一个拥有更强表达能力的形式系统,当然是我们想要的东西。因为它意味着一个更好的工具。
转载于:https://my.oschina.net/digerl/blog/35679
Ontology与OO作为一种需求分析或软件构建方法的存在意义相关推荐
- mysql剪标_一种数据库检索机制的构建方法及系统与流程
本发明属于网络存储技术领域,尤其涉及一种数据库检索机制的构建方法及系统. 背景技术: 随着互联网技术的发展,云端整套的服务解决方案也在与时俱进.传统的KTV应用数据的落地和使用方案比较单调低效,缺乏先 ...
- 四种卸载Mac软件的方法
从 Mac 电脑上卸载已经安装的应用程序可能是你知道的操作系统里面最简单的一种了.而如果你是一名新买了 Mac 电脑的用户,那么你可能比较困惑:怎么没有控制面板中的相应板块来卸载它们呢?但是其实你想不 ...
- 一种破解加密软件的方法
在网上看到一个这样的脚本,基本功能是遍历当前目录树,然后把每个子目录下后缀为c.java.cpp的文件内容以a到b,b到a的形式重写一遍. 是不是觉得没什么用?它可是可以避开某些加密杀毒软件的,太多的 ...
- 四种禁止下载软件的方法
方法一: 要禁止下载当然要先把下载工具从电脑全部卸载掉. 方法二: 禁止IE下载文件.步骤:先在开始--运行里输入"gpedit.msc"打开注册表,然后依次展开HKEY_CURR ...
- c语言中软件去干扰,10种常用的软件滤波方法及示例程序
一.限幅滤波法 A.方法: 根据经验判断,确定两次采样允许的最大偏差值(设为A) 每次检测到新值时判断: 如果本次值与上次值之差<=A,则本次值有效 如果本次值与上次值之差>A,则本次值无 ...
- Andrej Karpathy发文谈神经网络:这不仅仅是分类器,这是一种新的软件开发思想
作者: 晓凡 概要:有越来越多的传统编程语言(C.C++.Java)等程序员开始学习机器学习/深度学习,而对机器学习/深度学习的研究人员来说,编程也是必备技巧. 有越来越多的传统编程语言(C.C++. ...
- 距离矢量算法matlab实现,一种基于最小费用距离模型的城市生态网络构建方法与流程...
本发明涉及生态网络构建技术领域,特别是涉及一种城市网络的构建方法. 背景技术: 最小费用距离是网络分析的一种计算方法,这种方法被用于物种保护.自然保护区功能规划.动物栖息地的确定.区域生态安全格局设计 ...
- 产品经理懂点技术:几种常用的系统开发方法
常用的系统开发方法有: 结构化系统开发方法 原型法 面向对象方法 计算机辅助软件工程方法 下面一一为大家详细介绍: 1 结构化系统开发方法 结构化系统开发方法(Structured System An ...
- 《大话软件工程—需求分析与软件设计》,给出了分析与设计过程中需要的理论、方法、工具和标准
□ 做好一款软件从哪里开始呢?→ 客户需求的调研: □ 一款软件的价值高低由哪个环节决定呢?→ 软件的分析与设计: □ 软件顺利完成开发靠什么?→ 高效的项目管理: □ 软件开发的主要角色?→ 客户. ...
最新文章
- 文字识别技术在内容安全中的应用
- GE刚刚换帅,就向艾默生出售智能平台业务?刚刚换帅,GE又向艾默生出售智能平台业务,未来究竟何去何从?...
- 图片轮播html实现原理,纯CSS实现图片轮播
- 时间序列总结.pptx
- oracle基表恢复,查找V$PARAMETER 基表 – 专业Oracle数据库恢复,或许是您恢复数据的最后机会@phone:13429648788 - 专业Oracle数据库恢复技术支持...
- Libra 骗局来了;嫦娥五号将利用 AI 确定登陆位置;GitHub 移除色情应用 DeepNude 的开源库 | 开发者周刊...
- Python 处理各种编码的字符串
- MySQL慢查询分析方法
- tcpreplay,tcprewrite的使用
- Android 11源码下载和编译
- cmos和ttl_TTL和CMOS的比较
- 手把手 VM虚拟机安装deepin系统
- 【JZOJ】 【NOIP2014】【模拟试题】保镖排队
- 随机生成小球(HTML5)
- java 支付宝帐单_java后台实现支付宝对账功能的示例代码
- 第一次写ssm项目经验总结
- linux 隐藏进程 - crux实现
- 第9章 初识STM32固件库—零死角玩转STM32-F429系列
- vue生命周期钩子函数有哪些
- 安卓将数据库里Fri Jun 22 19:50:49 GMT+08:00 2018格式转化为正常格式
热门文章
- sklearn查看数据
- JAVA 一个或多个空格分割字符串
- 在命令提示符中运行c语言程序,【命令提示符运行exe】命令提示符运行文件_命令提示符运行程序-系统城...
- Java中各种引用(Reference)解析
- Codeforces - 706B - Interesting drink - 二分 - 简单dp
- 如何把局域网内不同数据库的两个表的数据进行传输?
- [转]Spring Cloud在国内中小型公司能用起来吗?
- Centos 6.5 安装 Nginx+MySQL+PHP
- 10、存储过程、while语句
- 查天气43课-46课