当前位置:  技术问答>linux和unix

我有一个很长的疑问,以至于都不知道该写成什么样的标题了,分析,设计到实现的困惑,你遇到过吗?帮帮我

    来源: 互联网  发布时间:2015-12-31

    本文导语:  这个问题真的是困扰我很久了,不知道过来人当年是否也遇到过这样的问题?    用c来做开发时,项目的需求分析和设计采用哪种建模的方法? 学校的软工课上主要讲的是数据流图,现在实际的开发中,用C这样没有面向对...

这个问题真的是困扰我很久了,不知道过来人当年是否也遇到过这样的问题?

   用c来做开发时,项目的需求分析和设计采用哪种建模的方法?
学校的软工课上主要讲的是数据流图,现在实际的开发中,用C这样没有面向对象
语法结构的语言,是不是分析设计阶段还是采用数据流图?学校教的很多都是过时的东西,对计算机技术来说,过时的东西学了是有害的.
  如果不是,主流的是采用那些建模方法?我个人理解是,虽然分析设计阶段和实现阶段是分离的,可以采用多种语言来实现同一套设计,但如果分析设计阶段采用了面向对象,比如,运用uml来进行建模,就会强制编码人员采用c++或java等支持oo语法的语言,
  如果在设计时采用数据流图,是不是实现时就没有办法用java这种强制oop的语言来编写代码了?
  个人感觉,如果是做练习,独立编写一个小软件,从分析到实现都采用面向对象的方式,就不得不去学习uml和有关面向对象分析设计方面的知识,用uml画图去分析需求,设计类,设计类之见的关系,描述对象之间的相互通讯,同样也避免不了还是要描述对象方法内部的算法细节,和过程式的编程比起来,似乎复杂了很多很多啊!
无论哪本书中,看到介绍面向对象的章节,都一致的大加称赞其如何如何的好,方便,直观,仿佛有了类以后,就是最完美的模块化了,概念是如何的形象直观,
    但就是没有什么书详细的探讨过哪怕是一个完完整整的例子(我是指那种能把分析设计和用某种语言进行实现的案例型的书),从头到尾完整的例子,比如:就探讨做一个很小的软件,功能很微小,只作为讲解的例子,并且是从需求分析到最后编码都用oo的方式,一气呵成,关注的是整个软件从无到有的过程,从头脑中模糊的需求开始,到变成纸上的uml图表,各种各样的图,从整体的,再到单个类的内部,从图表到实实在在的代码(比如,java,c++,c#,delphi),再到编译出来的软件的各个文件,都放在什么样的目录中,组织成一个文件树,各个文件有是如何在不容的物理机器上部署的(比如C/S类型的).
总感觉虽然看了uml,也学了java语言,学习了类库里的一些经典类,但就是很难把头脑中对一个软件的模糊构想变成实实在在能机器上跑动起来的程序!我真是太想编写一个完全由自己设计和编码的程序了,哪怕人人都觉得那是个垃圾,我在意的是开发的过程,
学习和体验的过程,把一个软件从概念变成活生生的机器码的过程,但我不能,倒底是在哪个环节中出了问题?谁能够帮助我?给我一点启示?

|
个人觉得,我们不应该专门关注于建模方法。而是首先关注于写软件的目的。
不为了建模而建模,而是有了需求有了问题,而采用某种方法、某种模式去分析去解决问题。
我们需要写一个软件,分析、设计。无非就是静态看它的最终代码怎么处理,动态看它的运行
过程流程。 静态分析、动态分析,架构设计、交互设计。这些都不会对具体的语言有依赖和限制的。
    结构化会划分静态层次,逐层细化;会标识数据,确定动态数据流向。 于是我们用层次图
用框图来做静态分析,我们用数据流图来分析动态数据流向。我们还可以用具体到协议交互或者
函数调用图来标识其他需要标识明确的动态内容。这,也是一个建模分析的过程吧。
    用面向对象的分析方法,确定边界、标识对象、边界缩小细化、类图、框图,用来静态分析,场景标识、场景交互过程的时序图、用例图、状态图用来做动态分析。
    其实分析的东西都是一样的,只是因为视角的不同而关注的方式方法略有不同。结构话关注
具体数据、流程;面向对象关注对象关系、接口。设计模式中讲要面向接口编程,Unix编程艺术也讲要写简单接口,这些都应该说是异曲同工的。
    软件的上层分析,设计,和语言无关。只有到了具体实现或者说设计和实现的中间层次,才会根据各种语言的特性会有一些表现形式上的不同。
    突破了语言的樊篱,那么怎么还会有建模工具的约束呢? 对,现成的建模工具往往都只是
针对具体的通常是面向对象的语言。但是要知道我们是用工具来解决问题表达意思,那么只要能够表达意思,显然我们就可以拿来用,所谓“拿来主义”是也。举个例子,时序图用来描述一个
场景中各个对象之间的交互,很好用,表达意思简单明了。但是在结构化的C中,没有现成的对象这样的概念。但是结构化中各个模块之间也是有交互的,那么我们用时序图来表现这个交互有
什么不可以呢。 只要能杀鸡,菜刀、牛刀都可以。
    当然,这些是分析、设计层面的。如果要用工具来生成代码,那确实不能做到通用。然而code在软件实现中的作用并不是关键作用(不是说不重要),更多时候决定一个软件成败的是最初的分析、设计,甚至是市场定位。
    再有一个观点,语言也是一个工具,是用于表达概念的。不同的语言表达概念的方式不同,
表现的范畴不同。就像世界上各种语言说我爱你都不同,但是意思都是类似的。在中国,我们可能是用“你真坏”来表达,在美国可能就是“I love you”。中国人学了英文以后,你就可以随时根据需要采用不同的方式来表达我爱你这样的一个意思。
    这个意思是说,类似面向对象等等特性,是一个概念,我们可以用不同的方式不同的语言来表达他。C++来源于C,C之前还有汇编,最终都变成二进制代码。很自然,理论上应该能够用C、汇编来实现很多(或者全部)C++的特性。实际上,现在很多公司都是这么干的。继承好用,多态好用,那么就用C实现之。
    语言的本质是一样的。工具的本质就是供我选用的。虽然很多语言、很多工具我都不会用。
但是这不应该制约我们去分析表达一个概念。 有了概念,维护这个概念,然后选择我会的学习我不会的,去分析概念,设计、实现这个概念。 道路是漫长的、过程是曲折的,但是前途一定是光明的。

    一家之言,必有不当之处,与大家讨论。

|
偶觉得很难说得清,说出来就是抄袭书上的了
最主要是得作过了项目,有了经验,慢慢就能体会得到作者为什么这么作,我怎么才能知道我的问题应该用哪种模式。

LZ很幸运嘛,现在就可以开始作设计,我是作了2年的代码后,才有机会作项目设计。Good luck!

|
你可以看一下c++primary,那里面讲这个比较清楚.起始不必在意用什么方式设计构架,有了整体思路后随便用那一种语言都可以实现.

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 关于java.util.EventObject的疑问?和abstract ,interface关键字的疑问?
  • 菜鸟的Linux练习疑问……
  • Linux文件系统结构的疑问
  • linux C编程中使用make时对 内部规则的疑问
  • 日志文件的疑问,请教
  • iptables的默认策略与accept的疑问
  • Linux 初学者的疑问 (各位老鸟进来看看)
  • ubuntu 10.10 安装的疑问
  • 多线程编程下关于gdb程序调试的一个疑问。
  • 操作系统为进程(程序)提供服务的疑问
  • 关于linux runlevel的疑问
  • 一个shell 的疑问!!!!
  • 关于jdbc的疑问?
  • 关于substring方法的疑问
  • 文件上传的疑问?
  • linux下gcc使用疑问?
  • GTK+2.0疑问,急
  • 配置FTP服务器一些疑问?
  • 能解答很多人疑问的好东西.
  • 消息队列的疑问2则


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3