zoukankan      html  css  js  c++  java
  • 闲谈软件设计方法(一)----抽象

    http://blog.csdn.net/j00105840/article/details/5862350

    闲谈软件设计方法(一)----抽象

    在我的短文《职业程序员是否就是代码民工》http://www.feifanbbs.com/thread-978-1-1.html中提到,职业程序员不只是优秀的编码者,更应该是优秀的设计者。书店里面关于软件设计的书籍也不少,有许多国外经典的,但都是厚厚的一大本,也有许多攒字数骗钱的,看着憋气。于是,产生了一个想法,何不将我这几年软件开发的心得,结合实践经验,总结出来与大家分享呢。《闲谈软件设计方法》便在这种情况下产生了。

    今天开始闲谈软件设计的第一个方法,本人写代码还行,写文章文笔就不行了,只能想到哪写到哪,希望尽可能将我的想法表达清楚。

    (一)、抽象

    软件不同于硬件,硬件一旦设计完成批量生产了就不会做太大的改变,而软件则会面临各种不同的新需求。一个大型软件架构的生命周期可以达到几年或十几年。所以,优秀的软件架构要适应相当长时间的各种变化。

    很多人不解,现在计算机技术飞速发展,有谁能预知这么长时间内的变化呢?所以,优秀的软件架构一定要有很好的扩展性。

    抽象是可扩展性设计最重要的方法。有一个原则,抽象层次低的设计一定不会有好的扩展性,反之,扩展性好的设计一定是基于高度的抽象。那么,该如何抽象呢?

    我们知道,每个项目开始都是做需求分析,在分析需求时,我们其实已经在做一次抽象的工作了,这时我们将用户的需求抽象成软件概念。对于java/c++这种面向对象的编程语言来说,类就是一种抽象的思想。我们将用户的需求分解为不同的类,这是需求层面的抽象。同时,在后期的详细设计时,我们会进一步将一些公共流程、共有概念、公共数据等抽象为类,这些是软件开发层面的抽象。

    而对于面向过程语言,如C语言,我们则是通过模块的划分、函数的提取等方式来达到抽象的目的。

    说了这么多,就我的经验来说,抽象其实就是在软件开发的各个阶段,提取不变部分,分离变化部分。将变化的部分做成组件,将不变的部分高度抽象(剔除可能变化的部分)设计成平台。这样的设计具有高度的可扩展性。总结一下,下面的设计具有好的可扩展性。

    这里的可扩展性体现在组件上,如果需要扩展,那么只需要对各种组件进行修改,平台不需要改动。

    总之一句,我理解的抽象就是分离变与不变。而抽象的好处就是可扩展。

  • 相关阅读:
    什么是MongoDb
    Python之人工智能:PyAudio 实现录音 自动化交互实现问答
    Python人工智能之初识接口
    cordova(安卓)(腾讯信鸽注册绑定与反绑定) 插件开发
    sencha touch 在安卓中横屏、竖屏切换 应用崩溃问题
    Sencha Touch 实战开发培训 电子书 基础篇
    wps 批量调整图片大小 宏
    使用 crosswalk-cordova 打包sencha touch 项目,再也不用担心安卓兼容问题!
    Sencha Cmd 5.0.1.231 是坑爹货
    sencha touch api 使用指南
  • 原文地址:https://www.cnblogs.com/feng9exe/p/7653533.html
Copyright © 2011-2022 走看看