- 浏览: 369149 次
- 性别:
- 来自: 北京
最新评论
-
litongke:
类比的方式总是能帮助我们快速的理解一个晦涩的理念。楼主的很厉害 ...
从面向对象到面向切面 -
snowflate_summer:
这是从数学上来论证面向对象和面向切面吗?很深奥
从面向对象到面向切面 -
奥义之舞:
我好像更迷茫了。、、、
从面向对象到面向切面 -
canonical:
很遗憾,从现在已知的物理学来看,所谓能量也只是一种偏移量而已。 ...
逆元:不存在的真实存在 -
suifeng:
关于最后一段:我也有类似的思考信息是能量的动态呈现, 也就相当 ...
逆元:不存在的真实存在
软件开发作为一种工程技术,它所研究的一个重点就是如何才能有效降低软件产品的研发成本。在这一方向上,组件技术取得了空前的成功。它所提供的基本图景是像搭积木一样从无到有的组装出最终的产品。在某种意义上,这是对现代建筑工业的模仿和致敬。新材料,预制件,框架结构,这些建筑学的进展在软件领域被一一复制,建筑工地上的民工自然也成为了程序员们学习的楷模。毕竟,在组件的世界中码代码,基本上也是一种“搬砖”的行为。
值得庆幸的是,软件开发作为一种智力活动,它天生具有一种“去民工化”的倾向。信息产品有着与物质世界产品完全不同的抽象本质。在物理空间中,建造100栋房屋,必须付出100倍的努力,老老实实的干上100遍。而在概念空间中建造100栋房屋,我们却可以说其他房屋与第一栋一模一样,加点平移旋转变换即可。一块砖填了地基就不能用来盖屋顶,而一段写好的代码却可以在任何可用的场合无损耗的被使用。一栋建好的房屋发现水管漏水要大动干戈,而在完成的软件中补个局部bug却是小菜一碟。在抽象的世界中有效的进行生产,所依赖的不应该是大干,苦干的堆砌,而应该是发现某种可用于推导的原理,基于这些原理,输入信息可以立刻转换为最终的结果,而不需要一个逐步构造的过程。即我们有可能超越组装性生产,实现某种类似于数学的原理性生产。http://canonical.iteye.com/blog/325051
代码复用是目前软件业中鼓吹降低生产成本的主要口号之一。但是在组件技术的指向下,一般所复用的只是用于构建的砖块,而并不是某种构造原理。即使在所有信息已经确定的情况下,我们仍然不可能从需求立刻得到可执行的产品。很多代码即使我们在想象中已经历历在目,却仍然需要一行行把它们誊写下来。当我们发现系统中已经没有任何组件值得抽象的时候,仍然留下来众多的工作需要机械化的执行。代码复用的理想国距离我们仍然非常的遥远。
子例程(subroutine)是最早的代码重用机制。这就像是将昨天已经完成的工作录制下来,在需要的时候重新播放。函数(function)相对于子例程更加强大。很多代码看起来并不一样,但是如果把其中的差异部分看作是变量,那么它们的结构就可以统一了。再加上一些判断和循环,很多面目迥异的东西其实是存在着大量共享信息的。面向对象技术是一次飞跃性的发展。众多相关信息被打包到一个名称(类型)中,复用的粒度和复杂度都大大提升。派生类从基类继承,可以通过重载实现对原有代码的细致调整。不过,这种方式仍然无法满足日益增长的复用需求。很多时候,一个名称并不足以标定我们最终需要的代码结构,在实际使用的时候还需要补充更多的信息。类型参数化,即泛型技术,从事后的角度看其实是一种明显的解决方案。根据参数动态的生成基类自然可以吸纳更多的变化。经历了所谓Modern C++的发展之后,我们现在已经非常明确,泛型并非仅仅能够实现类型共变,而是可以从类型参数中引入更丰富的结构信息,它的本质是一种代码生成的过程。http://canonical.iteye.com/blog/57244
认清了这一点,它的扩展就非常明显了
BaseClass<ArgClass> --> CodeGenerator<DSL>
DSL(或者某种模型对象)相对于普通的类型(Class),信息密度要大很多,它可以提供更丰富也更完整的输入信息。而CodeGenerator也不必拘泥于基础语言本身提供的各种编译机制,而是可以灵活应用各种文本生成技术。http://canonical.iteye.com/blog/309395 CodeGenerator在这里所提供的正是根据输入模型推导出完整实现代码的构造原理。
现在很多人热衷于开发自己的简易代码生成工具,这些工具也许可以在简单的情形下减轻一些体力工作,但是生成的代码一般不能直接满足需求,仍然需要手工执行大量的删改工作。当代码生成之后,它成为一种固化的物质产品,不再能够随着代码生成工具的改进而同步改进,在长期的系统演化过程中,这些工具并不一定能够减少累积的工作量。
修正过程 ==> CodeGenerator<DSL>
为了改进以上代码生产过程,一些人试图在CodeGenerator中引入越来越多的可配置性,将各种变化的可能内置在构造原理中。显然这会造成CodeGenerator的不正常的肿胀。当更多的偶然性被包含在原理中的时候,必然会破坏原理的简单性和普适性。
输入信息 + 一段用于推导的原理 + 修正补充 = 真实模型
必须存在[修正补充]这一项才能维持以上方程的持久平衡。
为了摆脱人工修正过程,将模型调整纳入到概念世界中,我们需要超越继承机制的,更加强大的,新的技术手段。其实在当前的技术背景下,这一技术已经是呼之欲出了。这就是AOP, Aspect Oriented Programming。http://canonical.iteye.com/blog/34941
Biz ==[AOP extends]==> CodeGenerator<DSL>
继承仅仅能够实现同名方法之间的简单覆盖,而AOP所代表的技术原理却是在代码结构空间中进行任意复杂的删改操作,它潜在的能力等价于人工调整。
为了实现上述生产模式,需要对编程语言,组件模型,框架设计等方面进行一系列改造。目前通用的AOP实现和元编程技术其实并不足以支持以上模式。http://canonical.iteye.com/blog/275015
这一生产模式将会如何演化,也是一个有趣的问题。按照级列理论,我们立刻可以得到如下发展方向:
Context0 + DSL1 + EXT0 = DSL0 Context1 + DSL2 + EXT1 = DSL1 ...
http://canonical.iteye.com/blog/33824
Witrix平台中BizFlow可以看作是对DaoWebAction的修正模型,但是它本身具有完整的意义,可以直观的被理解。在BizFlow的基础上可以逐步建立SeqFlow,StateFlow等模型。http://canonical.iteye.com/blog/126467
现在有些人试图深挖函数式语言,利用模式匹配之类的概念,做符号空间的全局优化。但是我们需要认识到通用的机制是很少的,能够在通用语言背景下被明确提出的问题更是很少的。只有在特定领域中,在掌握更多局部信息的情况下,我们才能提出丰富的问题,并作出一定背景下的解答。DSL的世界中待做的和可做的工作很多。http://canonical.iteye.com/blog/147065
对于程序员而言,未来将变得越来越丰富而复杂,它将持续拷问我们的洞察力。我们不是一行行的编写代码,把需求一条条的翻译到某种实现上,而是不断发明局部的生产原理,依靠自己制定的规则在抽象的空间中不断的创造新的表象。
评论
继承机制其实是一种非常僵化和原始的方式,AOP也只是提供了适合特定模式的描述方式,函数式也并非万能药。
简单举一个例子,就继承而言,继承实际上是一种缩减的表达:
A继承B,A是在B的基础上修改如下函数而得到的。
当我们这样看待继承的时候,一种继承关系就是一种描述,而这种描述本身,也是可以被继承的。
动态语言生成代码比AOP之流容易多了,加上作为一等公民的函数对象,"Write code that writes code"非常容易。
严格的说,Code Generation分为运行时生成和源代码生成。
脚本语言短小,无需编译,利用脚本语言作源代码生成也越来越流行。
很多重复性的工作如翻译已有的接口成另一种语言,集成数据到代码中……都可以利用源代码生成。
举个Ruby生成C源代码的简单例子:
class CGenerator def int var, val puts "int #{var} = #{val};" end end c = CGenerator.new c.instance_eval <<BLOCK var = 'a' val = 1 while var != 'z' int var, val var.succ! val += 1 end BLOCK
结果:
int a = 1; int b = 2; int c = 3; int d = 4; int e = 5; int f = 6; int g = 7; int h = 8; int i = 9; int j = 10; int k = 11; int l = 12; int m = 13; int n = 14; int o = 15; int p = 16; int q = 17; int r = 18; int s = 19; int t = 20; int u = 21; int v = 22; int w = 23; int x = 24; int y = 25;
当然这个例子可能不太实用,不过继续扩展CGenerator,可以给编写带重复性的源代码省下不少工夫。
再高级一点的实践,就是将Code Generator做成MVC的形式,读入数据,处理,然后填入模版,时间所限就不举例了。
有兴趣可以看看 http://www.codegeneration.net/
继承机制其实是一种非常僵化和原始的方式,AOP也只是提供了适合特定模式的描述方式,函数式也并非万能药。
简单举一个例子,就继承而言,继承实际上是一种缩减的表达:
A继承B,A是在B的基础上修改如下函数而得到的。
当我们这样看待继承的时候,一种继承关系就是一种描述,而这种描述本身,也是可以被继承的。
发表评论
-
从面向对象到面向切面
2011-05-08 12:01 18231. C语言抽象出了软件所在的领域(domain): 由变量v ... -
业务架构平台的自举问题
2011-02-11 14:00 1526业务架构平台的设 ... -
模型驱动的数学原理
2011-02-07 02:45 1917一种技术思想如果 ... -
结构的稳定性
2009-12-06 12:17 2660结构的稳定性,直 ... -
结构的自足性
2009-10-07 16:59 2430说到软件建模,一 ... -
行为聚集
2009-07-11 21:34 1287软件开发技术的技术本质在于对代码结构的有效控制. 我们 ... -
信道构建
2009-03-22 21:05 1429分层是最常见的软 ... -
同构与同态:认识同一性
2009-02-28 16:52 3225现代数学是建立在等价类这一概念的基础之上的。同构是对等 ... -
类型化:形而上学的信仰
2009-02-21 19:38 1598有一个心理 ... -
逆元:不存在的真实存在
2009-02-07 22:12 4299负数没有直接 ... -
文本化
2009-01-04 00:51 2050软件技术的发展是 ... -
关于代码生成和DSL
2008-11-23 11:52 5749代码生成(Code Ge ... -
软件不同于建筑
2008-09-01 23:26 1363软件系统的构建之所以与建筑工程不同,无法达到建筑工程的精 ... -
AOP on XML Tag
2008-07-07 00:09 1685AOP(Apsect Oriented Programm ... -
主从分解而不是正交分解
2008-05-26 00:36 2435说到分解,很多人心中的意象大概只有正交分解。正交分解无疑是 ... -
不完全的计算
2008-03-16 15:20 1644在与一些年岁较大的C程序员接触的过程中,可以比较明显的感 ... -
WebMVC之前世.今生
2008-02-18 22:23 1889所谓WebMVC即Model2模型是目前Web开发领域的主 ... -
关系模型与ORM
2008-01-06 19:20 2021关系数据库模型在理论上主要解决的是消除数据冗余的问题。 ... -
代码之外的结构
2007-12-15 19:49 1777我在各种场合一直都在强调结构问题是独立的,在程序语言之 ... -
结构的独立性
2007-12-11 00:00 2326设计考虑的是最终 ...
相关推荐
2025最新电工技师考试题及答案.docx
项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql8.0 部署环境:Tomcat(建议用 7.x 或者 8.x 版本),maven 数据库工具:navicat
骨科康复医疗领域知识图谱建立及其分析.pdf
基于交易能量框架的多微电网最优能源管理:配网协同优化以降低运营成本, 关键词:Transactive energy,微电网 配网 参考文档:《Optimal Energy Management for Multi-Microgrid Under a Transactive Energy Framework With Distributionally Robust Optimization》2021一区半完美复现 仿真平台:MATLAB YALMIP GUROBI 主要内容:我们制定了一个基于交易能量(TE)框架的上游网络和网络中电网的能源调度的优化问题,以最小化运营成本。 市电网与上游网络之间的能源管理由配电系统运营商(DSO)操作,这不同于传统电力系统中的直接控制信号和固定定价机制。 ,Transactive energy; 微电网; 配网; 能源调度; 运营成本; 配电系统运营商(DSO); 交易能量框架; 优化问题; MATLAB YALMIP GUROBI。,Transactive Energy驱动的微电网配网能源调度优化策略研究
西门子1200 PLC与欧姆龙E5cc温控器双重控制通讯程序:远程触摸屏与本地温控器485通讯实现轮询式控制及温度监测,西门子1200与欧姆龙E5cc温控器 远程+本地双重控制通讯程序 功能:实现西门子1200 PLC对欧姆龙E5cc温控器进行485通讯控制,在触摸屏上设定温度,读取温度 ,也可以在温控器本体设定温度。 达到双重控制 程序采用轮询方式,有通讯故障后再恢复功能,也可以后续根据需要在此基础上扩充台数 器件:西门子1200 1214DC DC DC.昆仑通态TPC7062Ti ,西门子KTP700 Basic PN,欧姆龙E5cc温控器。 说明:是程序,带详细注释程序,触摸屏程序,PLC设置和温控器设置,接线说明书。 ,关键词:西门子1200;欧姆龙E5cc温控器;485通讯控制;远程+本地双重控制;轮询方式;通讯故障恢复;昆仑通态TPC7062Ti;西门子KTP700 Basic PN;详细注释程序;触摸屏程序;PLC设置;温控器设置;接线说明书。,西门子1200与欧姆龙E5cc温控器通讯控制程序:远程本地双重控制及详解
2025专业技术人员继续教育公需课题库(附含答案).pptx
2025医院手术室应急预案考核试题及答案.docx
2025数字化技术基础试题(含答案).docx
2025最新电信5G协优资格认证考试题库附含答案.docx
项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql8.0 部署环境:Tomcat(建议用 7.x 或者 8.x 版本),maven 数据库工具:navicat
COMSOL裂隙动水注浆扩散模拟:研究水泥-水玻璃与高聚物改性水泥浆液扩散规律及黏度时变特性影响分析,COMSOL裂隙动水注浆扩散数值模拟 针对动水注浆中常用的2种速凝浆液,水泥–水玻璃浆液与高聚物改性水泥浆液,考虑浆液黏度时变特性,应用有限元计算软件COMSOL Multiphysics建立动水条件下裂隙注浆扩散的数值模型,研究动水条件下裂隙注浆扩散规律并分析不同黏度时变特性、初始动水流速与注浆速率对注浆扩散过程的影响。 ,关键词:COMSOL Multiphysics;裂隙动水注浆;扩散数值模拟;速凝浆液;水泥-水玻璃浆液;高聚物改性水泥浆液;浆液黏度时变特性;有限元计算;注浆扩散规律;动水流速;注浆速率。,COMSOL模拟动水注浆扩散规律及影响因素研究
Simulink模型下的纯电动汽车、混合动力汽车及染料电池电动汽车的制动优先与能量管理功能解析,纯电动汽车Simulink模型;混合动力汽车Simulink模型;染料电池电动汽车Simulink模型。 纯电动汽车模型: 制动优先;充电禁止车辆驱动;驱动控制;再生能量回收;紧急停机功能; ,纯电动汽车模型:制动优先;充电禁止驱动;驱动控制;再生能量回收;紧急制动系统; 混合动力汽车模型:燃料类型切换;动力输出控制;能量回收策略;模式切换;效率优化; 染料电池电动汽车模型:染料电池性能;能量转换效率;充电过程模拟;电池管理系统;安全保护措施。,Simulink模型研究:多种能源驱动车辆动力系统控制优化
2025最新初级保育员理论知识考试题库及答案.doc
项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql8.0 部署环境:Tomcat(建议用 7.x 或者 8.x 版本),maven 数据库工具:navicat
项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql8.0 部署环境:Tomcat(建议用 7.x 或者 8.x 版本),maven 数据库工具:navicat
2025最新计算机网络技术考试题及答案.docx
西门子PLC与触摸屏的多功能检测设备编程案例:上下双工位四轴步进控制,双相机通讯与Modbus RTU交互,集成多重画面与配方功能,西门子1214PLC博图程序例程,版本V16及以上,加KTP700Basic PN触摸屏画面,双相机四轴多工位检测设备案例。 程序主要有: 上下双工位4轴脉冲控制步进电机; 与上位机双相机的TCP IP通讯; 有一台第三设备的modbus rtu通讯; 触摸屏包含多重画面,配方功能,密码 项目编程,现场调试电柜集成 ,核心关键词: 西门子1214PLC; 博图程序例程; 版本V16及以上; KTP700Basic PN触摸屏; 双相机四轴多工位检测设备; 上下双工位4轴脉冲控制步进电机; TCP IP通讯; 第三设备的modbus rtu通讯; 触摸屏多重画面; 配方功能; 密码保护; 项目编程; 现场调试电柜集成。,西门子PLC双相机四轴检测系统:博图程序例程与KTP700触摸屏集成应用
基于STM32bms与Battery Simulink的电池管理仿真系统及电池平衡控制策略模型,STM32bms动力电池管理系统仿真 Battery Simulink电池平衡控制策略模型 动力电池管理系统仿真 BMS + Battery Simulink 控制策略模型, 动力电池物理模型,需求说明文档。 BMS算法模型包含状态切模型、SOC估计模型(提供算法说明文档)、电池平衡模型、功率限制模型等,动力电池物理模型包含两种结构的电池模型。 通过上述模型可以实现动力电池系统的闭环仿真测试,亦可根据自身需求进行算法的更新并进行测试验证。 ,核心关键词: STM32bms; 动力电池管理系统仿真; Battery Simulink; 电池平衡控制策略模型; BMS算法模型; 状态切换模型; SOC估计模型; 电池平衡模型; 功率限制模型; 动力电池物理模型; 需求说明文档; 闭环仿真测试。,STM32bms系统下动力电池管理系统仿真与控制策略研究