软件设计心得

Visual C++.NET学习心得

本学期我进行了Visual C++.NET的选修课学习,初步接触并体会到了C++编程的魅力。虽说学习时间不长,但在面向对象编程这方面的思维意识已有所提高。

在这一课程里,我们学习了几个项目。虽然我们还未能达到自己编程的那一步,但是在每一步的创建和修改,亲身的实践,亲身的体味,让我对编程的逻辑有所领悟。例如《创建宾馆管理系统的框架》这个项目。首先,我们学会了MFC应用程序的初步使用,通过在文件添加代码来设计窗口。学会了设置应用程序的标题,窗口背景颜色的设计。很神奇的,一个窗口在无意中产生了。第二个项目主要训练的是如何设计菜单、工具栏、状态栏。还是以《创建宾馆管理系统的框架》为例。以前,我们只会使用那些已经存在的窗口的菜单、工具栏、状态栏,当时就已经对它们很好奇了,通过这个项目,我们能自己设计属于自己风格的菜单、工具栏、状态栏了,这更增加了我对Visual C++.NET的兴趣,我还想继续去探险它的奇妙之处。第三个项目主要学习的是《对话框的设计》。我们可以用计算机设计一些简单的对话框,虽然是那么索然无味,但在其中我们能掌握一些设计的基本方法,还是受益匪浅的。最重要的是我们一步一步做出了宾馆管理系统,了解了其中的一些程序算法,也通过加入一些实质性的

代码来实现我们的预想功能,最后形成一个相对较为人性化的界面,这不仅使我们在编写程序、实现算法、人机对话方面等都有了进一步的了解。

当然,能走到完成这几个项目的最后一步也不是一帆风顺。刚开始时每次调试后出现的错误让我烦恼。修改再调试,还是错误,实在是不会了,可以和旁边的同学探讨一下,或者是上网求助。陆续的调试错误后的成功让我感到满足,有时,我不知道自己是不是有点疯了,竟然会期待调试后会出现错误。因为往往我遇到的错误,当别人问我时,我能很清楚的解决及解释清楚。而那些一帆风顺,我有时也不知道它为什么会正确。这就是我们所说的在错误中成长得更好吧。这一次实训,要学习的是很新的知识,难度很大,但是,我却学了不少,思考问题的思维,与人探讨问题的技术,这其中是很有趣也是很有意义的。

 

第二篇:小车软件设计心得

小车软件设计心得本来我打算做一个实现寻迹和避障等功能的小车,但由于暂时在硬件上只做好了由STC12C5410AD主控的最小系统及MOS管搭建的H桥电机驱动模块和码盘采样电路,另外手上还有一个可以直接使用的已经转换为串口的无线接发模块,做一个寻迹小车貌似暂时还不行,又由于受了圆梦小车作者的文章的影响,因此我在软件的设计上便萌生了另外的想法——先对小车的机械运动建模(即简单的机器人建模),把小车的机械运动逻辑独立出来,使小车可以方便地用于各种用途而不一定就是寻迹或者避障,以后若需再作扩展时能更方便、快捷。这必然要求使用模块化的程序设计方法,并且在整个软件的架构上做好考虑。因此,我便以不同的硬件为单位,分别为其编写相应的驱动程序模块,并把一些实现相应的功能代在模块中进行封装,形成接口函数,以方便以后使用,并使结构更清晰,这样,就可以灵活地利用这些模块实现各功功能的小车,而不用在作扩展时再重写整个主控程序的代码了。在最底层的是对应着各个硬件模块的驱动程序,都分别为它们编写了代码进行封装和抽象,整个程序的结构变得较为清晰,小车主程序的编写变得更简单,因为主程序的编写基本不需要考虑硬件的细节了,这些硬件细节已经被驱动程序模块隐藏起来了,这下可以把精力放在如何利用这些模块实现小车的功能上,根据目据有的硬件条件已实现无线遥控小车的功能,另外,各个硬件驱动的模块,只需要修改一下就可以应用在别的项目上,使代码的重用性更高,同时,编写程序时我已尽量注意提高代码的移植性(诸如使用typedef来定义变量类型,以及尽可能地使用宏来定义常量),因此,代码也可以作一些修改并移植到另外的硬件平台上,总的来说,还是较为方便的。在程序的编写过程中,我使用了一些在面向对象程序设计中的一些概念,虽然C语言程序本身是面向过程的,不能实现面向对象的编程(本来就不是用来干这个的),但一些设计理念我认为还是可以应用在整个程序的架构设计里的,并且,虽然整个程序因为模块化而使代码变得庞大,额外的资源开销也变得更大了,引用别人的话来说就是“清晰的逻辑容易带来更大的代价”,但是在小车的软件设计里,我也认为只要在硬件的性能足够的情况下,这些额外的开销是可以接受的,是值得的。另外,软件设计中使用了事件驱动的思想,虽然,也用了回调函数——这一从Windows里抄来的东西,它让我感觉不太好,因为事件的响应——也就是回调函数这被调用,实质是在中断中调用的

,也就是说,如果这个回调函数执行的时间较长,则有可能影响系统的实时性,虽然目前硬件足够快,但这样做终究不是太好。其实有一个办法代替这种做法,就是变为使用一个全局变量做事件标志,然后在主程序中去调用函数处理它,但是由于我在软件中的使用的全局变量均是模块内部的变量——也即是说,各模块之间的全局变量是无法直接访问的,如果要在包含串口中断驱动的模块设置主程序模块中的标志(也就是要“访问数据”),就要设计新的接口函数,这就就面向对象的方法了(其实回调函数的做法实质上也是通过对应于每个模块的init函数来实现访问的),代码的开销也会变得更大,模块间的耦合性当然也会变得更高,好与不好,由于个人的水平目前有限,因此暂时无法作评价。其实,做单片机的软件系统设计,我认为应当注意打好自己的软件设计的功底。在现在做学生的阶段,对于同样的简单的用于学习的单片机的项目,要实现同样的功能,若由一个人来负责设计软件,则不同水平的人在设计其架构的时候会有不同的做法,最后的结果可能是,都能实现相应的功能,编出来的整个软件的结构可能会天差地别。至于是什么样的区别,在以后做真正产品的时候我相信自然会体现出来的。在此点上鄙人相当的惭愧,平日总听说要在软件设计时就要设计什么什么高效率的、结构清晰的,因此在小车的程序设计上花了N多时间来空想这个问题,由于经验有限,结果还是想不出什么东西来,就只好按照目前的水平来做了,然而做到了现在这样的程度,再回头来看的时候,就发现原来自己把这个事情做得有点“不伦不类”了,有的思想是从以前搞Windows编程时偷来的,有的则是后来在学单片机时道听途说地从一些文章里看来的,也厚脸皮地从中偷一点点师,结果也不知道到底是不是最好的。不过无论如何,多年以来的软件的调试经验告诉我,有一点可以肯定的就是,采用模块化的设计方法,把软件的各个功能按模块独立进行设计,并且在这些模块之间使用一些规定的较为被大多数人认可的接口来产生关联,协调合作,这样,在模块的调试上就可以一步一个脚印的实施了,也就能按照定下的进度来完成整个项目了,要知道,有时候写程序不是最花时间的,调试程序并使这个程序正确运行起来才是最花时间的,本人没有参与过多少正式的商业项目,但是可是说的是,程序员都像是蚂蚁,当一只蚂蚁发现食物太大,以至于无法连续一次性吃完时,那么它就会找来其他的蚂蚁一起把整个大块头一天一点的吃完,并且,是有组织地吃完

,从此以后,蚂蚁们爱上这种吃东西的方式了,因为他们碰到的食物都很大。

相关推荐