`
庄表伟
  • 浏览: 1152354 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

软件设计中的分解难题

阅读更多

很有意思的分析,我也很想直接加入这个讨论,但是沿着T1的消息分派的思路往下谈,一时也不知从何说起,就扯远一点吧。

通常我们做软件开发,往往是最难的事情,就是分解。

对于将要做出来的那个系统,进行合理的分解。庖丁解牛,是一个不错的“隐喻”。解牛之前,也只能看得到牛的“表象”,对于牛的身体结构并无了解,贸然去做分解切割的工作,就会吃力不讨好。但是庖丁的活毕竟还是容易的,因为不同的牛的身体结构,还是大同小异的。

更加困难的是,我们面对着一个不同的动物,以前可能没有见过,当然,我们希望他不过是牛的一个变种或者近亲,这样过去的经验,还能派上一些用处。

再进一步,这个被我们分解的动物,并不是死的,他还是活的,不但会不断的动来动去,甚至还会长出些新的器官和骨骼来。这就太恐怖了。

通常我们所做的分解的决策,一般会从上自下的进行(分解这个词,就隐含了这个意思)。这样的分解有两层意思:
一是:在本层面看来,几个部分可以相对独立的分工的。
二是:从上一层面看来,这几个部分是为了同一个目的合作的。

麻烦的就是,当这种分解逐渐细化之后,原本就不太了解的细节浮现出来了,这下才发现,原本的那种分解,并不合理,需要在某一层次上,重新分解,最糟糕的,就是需要整个系统设计推倒重来。

一般我们能够用到的分解策略,也无非就是两种,纵向的业务分解,横向的技术分解,然后再把这横向纵向的参合在一起,搞成更加复杂的网状结构。。。

从上自下的分解,可以分为两个重要的阶段,一个是与语言无关的分解,一个是与语言相关的分解。前者,可以称之为设计,后者,可以称之为实现。而T1 探讨的内容,我的理解是:在实现阶段,不同语言,对于各种分解需求的支持。不同的消息分派机制,对于同样的分解、再分解需求的支持能力是不同的。这也就是 各种语言,在实现同样的设计时的难易区别。当然,我们也经常会碰到这样的情况,特定语言的功能限制,会迫使我们去修改原本很自然的,语言无关的设计结构, 这就是无奈但自然的现象了。

再进一步探讨,为什么设计这么困难,因为存在未知的复杂性。灵活方便的语言,有助于开发设计人员,快速、轻松的调整已有的实现、甚至设计方案。而那 些使用死板、僵硬的语言的工程师们,就要为此付出更大的努力。这也正是我为什么要发明一种新的语言的原因。在我看来,语言应该更进一步,对于设计,尤其是 开发过程中的再设计,提供更好的支持。

关于DJ的开发思路
http://zbw25.spaces.live.com/Blog/cns!1pA6-3FOo9yNp_4lmEHxdDqA!344.entry

为什么DJ要将Event提出作为语法概念
http://zbw25.spaces.live.com/Blog/cns!1pA6-3FOo9yNp_4lmEHxdDqA!358.entry

这样的思路,其实是一种实验主义的方法,而再次之前,软件设计,要么就是凭借工程师在丰富经验之后,具有的技术直觉。要么就是试错,再试错,在付出了巨大的成本之后,完成一次系统开发。

先说到这里吧......

原本的讨论帖《失踪的链环》
http://www.iteye.com/topic/25649

分享到:
评论

相关推荐

    软件设计师讲义

    在当今信息高速发展的社会中,软件设计师的角色日益重要,不仅要求他们拥有扎实的理论知识,还要求他们能够紧跟时代潮流,掌握最新技术。《软件设计师讲义》正是为了满足这一需求,为准备参加软件设计师考试的考生...

    软件项目文档(项目开发计划,需求说明书,设计概要,详细设计,安装计划,软件合同,....)

    需求说明书是软件设计和开发的基础,确保产品满足用户期望。 3. **设计概要**:设计概要(也称为概要设计或系统设计)是将需求转化为技术实现的初步步骤。它涵盖了架构设计、模块划分、接口定义、数据结构和算法...

    软考 软件设计师 复习资料

    - **RSA**: 基于大数分解难题的安全加密算法。 - **报文摘要**: 通过哈希函数生成固定长度的摘要,用于验证数据的完整性。 - **PKI体制**: 公钥基础设施,保证数字证书的有效性和真实性。 - **CA的私钥对数字证书...

    软件详细设计说明书

    通过以上内容,软件详细设计说明书成为连接需求分析与实际开发的桥梁,它将复杂的软件系统分解为可操作的部分,为实现高质量的软件产品奠定了坚实基础。在编写和使用过程中,应不断更新和优化,以适应项目的发展和...

    软件架构设计

    软件架构设计是软件开发过程中至关重要的一环,它涉及了软件工程的核心问题,包括如何将一个复杂系统分解为不同部分,各部分间如何交互,以及如何保证软件系统的质量特性。架构师作为负责制定软件架构的角色,其任务...

    软件分析方法与设计

    面向对象设计(Object-Oriented Design, OOD)是一种以对象为中心的软件设计方式,它强调的是如何组织软件系统来满足用户的需求,并且使系统具有良好的可扩展性和可维护性。面向对象设计的核心思想包括封装、继承、...

    08年上半年软件设计师答案

    【软件设计师】这一标签指的是国家软考(全国计算机技术与软件专业技术资格(水平)考试)中的一个级别,这个级别的考试主要面向那些从事软件分析、设计、测试和维护工作的专业人士。"08年上半年软件设计师答案"显然...

    浅谈计算机软件开发设计的难点及解决措施.docx

    软件开发环境的局限性是我国软件设计面临的另一个客观难题。与发达国家相比,我国的软件开发工具和环境仍有待完善。改善这一状况需要投入更多资源,提升开发环境的标准化和专业化,以支持更高效的设计和开发工作。 ...

    论文研究-正交软件体系结构设计和演化方法应用研究.pdf

    2. 正交软件体系结构模型:这是指将正交性原理应用于软件设计,形成的具体结构模型。模型中会详细描述不同维度之间的关系,以及如何通过这些维度组织软件系统的各个组成部分。模型是实现正交体系结构的基础,它通常...

    软件工程课程设计 网上书店

    - **关键问题:** 预估项目中可能出现的关键难题及其解决方案。 **4. 支持条件:** - **硬件资源:** 说明项目所需的硬件设施。 - **软件资源:** 列出项目所需的应用软件和其他工具。 - **人力资源:** 分析项目的...

    基于组件的河网水流模拟软件的设计

    本文探讨了河网水流模拟软件的设计问题,特别是在传统面向过程的软件设计方法面临的难题以及基于组件设计的优势。在河网水流模拟领域,传统的面向过程编程方法存在一些问题,如程序结构复杂、数据和函数关系混乱以及...

    (完整word版)软件详细设计说明书(例).doc

    - 结构:采用某种设计模式(如模块化、面向对象设计等)来组织和分解软件系统,描述各个模块及其相互关系。 - 功能需求与程序的关系:将需求细化为可执行的代码逻辑,说明每个功能模块如何映射到具体的程序单元。 ...

    基于LabVIEW的EMD降噪软件设计与实现

    在这一背景下,我们提出了一种基于虚拟仪器技术的解决方案,即利用LabVIEW软件设计实现经验模态分解(EMD)算法,以达到降噪的目的。 首先,我们来简要了解一下经验模态分解(EMD)算法。EMD算法是一种时频分析方法...

    EBS分解培训提纲(铁路工程管理系统).pdf

    9. 面临的挑战和解决方案:探讨在实施EBS过程中可能遇到的挑战,比如分解过程中的过度或不足、跨专业协作的难题等,以及可能的解决方案和优化措施。 10. 案例研究和经验分享:通过其他行业或铁路工程的成功案例,...

    图书管理系统软件工程课程设计作业

    在本篇图书管理系统软件工程课程设计中,我们将深入探讨软件工程的基本原则和实践,以及如何应用于实际项目中。首先,我们需要理解软件工程是一门综合性的学科,它涉及到软件的整个生命周期,包括需求分析、设计、...

    RSA算法加密软件的设计网络与信息安全课程设计报告

    RSA算法是一种非对称加密算法,它基于大整数分解难题来保证安全性。该算法最早由Ron Rivest、Adi Shamir和Leonard Adleman于1978年提出,因此得名RSA。 **密钥生成**: 1. **选取两个大素数**:选择两个不同的大...

    文件加密及解密小型软件设计与实现学位论文.doc

    本章将解释RSA的数学基础——大整数因子分解难题,以及RSA的加密和签名机制。还将讨论RSA的性能特点,包括其安全性、效率和密钥管理。 第五章 文件加密软件设计 基于上述密码学原理,本章将阐述如何设计一个小型的...

    基于python的RSA算法数字签名生成软件源码数据库论文.docx

    RSA 算法的安全性基于大数分解难题和欧拉函数的难题。 3. Python 语言在数字签名软件设计中的应用 Python 语言是一种流行的编程语言,具有良好的可读性和易用性。Python 语言广泛应用于数字签名软件设计中,能够...

    1、软件开发设计CMMI3.rar

    在CMMI3级的软件开发设计过程中,涵盖了多个关键领域: 1. **立项管理**:此阶段主要涉及项目的启动,包括项目提案、预算编制、资源分配以及项目目标设定。确保项目符合组织的战略目标,且具有明确的范围和预期成果...

Global site tag (gtag.js) - Google Analytics