需求分析和程序设计的过程都是需要的。但是基础理论完全相反。结构化设计,基本上是自顶向下地功能分解,现在看来属于“拼凑”型。而面向对象设计,既不是自顶向下也不是自底向上的,而是“从中间向两边”的,也就是先实现一个成功的原型,然后进行扩展。例如实现了3种ATM机与3种银行卡的流程设计,然后再扩展出50种ATM真实的机分别对它们各自的父类(是这三种ATM机原型中的一种)的细微扩展,因此仅仅需要少量的代码,就能通过父类对象与3种银行卡交互(而不是50种具体的ATM机直接跟200种具体的银行卡交互)。 结构化设计者,无法理解为什么“子类可以继承父类,同时也可以对消(重写)父类方法”的原理,无法接受多态。 在面向对象系统的动态模型设计中,一样需要处处考虑扩展。如果你只是“基于对象”(而不是面向对象)第去使用什么“用例图、活动图、时序图、功能计算”之类的东西,那么跟结构化也就没有什么区别了! 这个年头由于OOPL已经普及了二十年,许多人其实都是打着面向对象的幌子而仅仅会结构化地去进行设计。例如有些人水平低到只会“分解一下最终界面,你做这几个画面、她做那几个画面”,去搞简单的开发。而不会通过开发工具、平台、自动生成其等等来逐步扩展自己的产品。
“不断分解、不断细化”,我们在结构化设计者那里经常听到这样的话。其实还有一句话“等下一个项目就推倒重建”,这就是结构化设计者的写照。 因此学究容易成为这种方法的俘虏,因为不需要变通、不需要高强度的灵活性,不需要先承认“软件架构设计是经常重构的”,不需要预先承认“用户需求是千变万化的,用户总是在得到试用版本之后才知道该如何重新告诉程序员需求变更“。不承认变动,那么就是学究,适合做老师去忽悠涉世未深的学生。 而软件工程的实践者(而不是死记硬背的学生)则需要非常高的灵活性。
结构化概要设计->功能的划分 与面向对象概要设计->模块的划分
1,265
社区成员
28,324
社区内容
加载中
试试用AI创作助手写篇文章吧