学习怅然,望前辈指点!关于软件设计和构架
学习迷惘,望前辈指点!关于软件设计和构架。
本人学软件专业的,以前对面向过程的程序设计比较熟悉,数据结构和算法也学得可以。用C写一个经典算法之类的东西很熟练。
但是自从学习面向对象、软件工程以来,总感觉力不从心,无法像C一样运用自如。去年写过一个差不多1W行的网络程序,用C++和MFC写的,刚开始功能都没问题,程序也很稳定。但是后来慢慢完善的时候,发现功能扩展越来越难,而且一不小心就会导致软件崩溃。现在工作了,写上3W行的软件,也总是反反复复修改,总达不到理想的合理设计。
我知道是我没设计好、代码结构也不好,我的类与类之间的耦合性也很高。但是我确实不知道怎么去设计,看过相关的书,但是书上的知识都过于抽象,让我这种刚出象牙塔的人很难看懂和很难体会到,更难以应用。
我想请教各位前辈,为我指条路:
1.学习语法通过仔细看书就行了,但是学习设计要通过什么方法?看书?做项目?
2.有没有适合我这种阶段的人学习的书?关于软件设计的。
3.有没有那种经典的项目,我能边学边做的?光看书的话,看不怎么明白。
我是学c++的,最好是于windows开发相关,谢谢各位了。
------解决方案--------------------
你就差看一本书: 《设计模式》!
------解决方案--------------------
《大话设计模式》
------解决方案--------------------
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
判断是否越界访问,可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断,可将数组多声明一个元素,并设置数据读写断点在该多出元素对应的地址上。
对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!
程序员要做的不是尽力避免错误,而是聚焦在快速发现并改正错误。真正以快速方式轻易解决错误,“快速的失败”远胜过“预防错误”。Fred George
------解决方案--------------------
<设计模式> <敏捷开发 原则模式与实践> <代码大全2>
------解决方案--------------------
还有一本 重构-改善既有代码的设计,比较入门
------解决方案--------------------
我的理解:多看一些优秀的C++代码,多用心体会别人的用法
------解决方案--------------------
三点建议:
1、C++类设计方面,一要尽量满足功能单一、最小接口、开放/封闭原则(百度一下);二要类与类之间松耦合,如果实在要在一个类中要调用另一个类中的函数,用boost::function或boost::bind。
2、软件设计方面,注意数据、逻辑、界面的分离
3、可以用C++和其他语言混合编程,毕竟c++里现成的东西较少。
本人学软件专业的,以前对面向过程的程序设计比较熟悉,数据结构和算法也学得可以。用C写一个经典算法之类的东西很熟练。
但是自从学习面向对象、软件工程以来,总感觉力不从心,无法像C一样运用自如。去年写过一个差不多1W行的网络程序,用C++和MFC写的,刚开始功能都没问题,程序也很稳定。但是后来慢慢完善的时候,发现功能扩展越来越难,而且一不小心就会导致软件崩溃。现在工作了,写上3W行的软件,也总是反反复复修改,总达不到理想的合理设计。
我知道是我没设计好、代码结构也不好,我的类与类之间的耦合性也很高。但是我确实不知道怎么去设计,看过相关的书,但是书上的知识都过于抽象,让我这种刚出象牙塔的人很难看懂和很难体会到,更难以应用。
我想请教各位前辈,为我指条路:
1.学习语法通过仔细看书就行了,但是学习设计要通过什么方法?看书?做项目?
2.有没有适合我这种阶段的人学习的书?关于软件设计的。
3.有没有那种经典的项目,我能边学边做的?光看书的话,看不怎么明白。
我是学c++的,最好是于windows开发相关,谢谢各位了。
软件设计
c++
------解决方案--------------------
你就差看一本书: 《设计模式》!
------解决方案--------------------
《大话设计模式》
------解决方案--------------------
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
判断是否越界访问,可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断,可将数组多声明一个元素,并设置数据读写断点在该多出元素对应的地址上。
对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!
程序员要做的不是尽力避免错误,而是聚焦在快速发现并改正错误。真正以快速方式轻易解决错误,“快速的失败”远胜过“预防错误”。Fred George
------解决方案--------------------
<设计模式> <敏捷开发 原则模式与实践> <代码大全2>
------解决方案--------------------
还有一本 重构-改善既有代码的设计,比较入门
------解决方案--------------------
我的理解:多看一些优秀的C++代码,多用心体会别人的用法
------解决方案--------------------
三点建议:
1、C++类设计方面,一要尽量满足功能单一、最小接口、开放/封闭原则(百度一下);二要类与类之间松耦合,如果实在要在一个类中要调用另一个类中的函数,用boost::function或boost::bind。
2、软件设计方面,注意数据、逻辑、界面的分离
3、可以用C++和其他语言混合编程,毕竟c++里现成的东西较少。