软件工程学习心得体会
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件工程学习心得体会
曾经看过一本书叫《道法自然》,内容略记得一二,但我最欣赏的是它的书名.软件设计没什么太神秘有东西,只要用心体会,其实一切都很自然.软件的设计之“道”,也不在于设计有多么的华丽、精巧,而在于其朴实、自然,最终达到“以无招胜有招”,进入一个全新的境界.
一、软件设计理论的层次
以我的拙见,软件设计领域中的各种概念,可以分为以下几个层次来进行理解:
1、软件设计的目的:重用性、扩展性.
这是最高的层次,是应对软件危机的需要.
2、设计原则:低耦合、高聚合.
各种软件设计的原则,如依赖倒置原则、单一职则原则、面向接口等,以及各种设计模式,其根本的目的其实只是为了降低耦合这么简单.因为只有低耦合才能更好的适应变化,更好的重用和扩展.
3、实现方法:运用设计模式封装变化、降低耦合.
设计模式只是用来“封装变化、降低耦合”的工具而已.它是面向对象设计时代的产物,其本质就是充分运用面向对象的三个特性,即:封装、继承和多态,进行灵活的组合运用.
二、关于耦合
1、耦合的粒度
耦合无论如何也是不可避免的.当我们实现接口、继承父类的时候,就会不可避免的产生耦合.耦合是有不同粒度的,我们解耦到什么粒度为止,我认为应以模块的重用粒度为准.尽量解除重用模块或对
象之间的耦合.而重用模块之内的耦合,应属于聚合的范畴,所以不要盲目的去解耦,否则就陷入了误区.
2、解耦的原理
怎样才能解耦呢,或者说为什么各种设计模式能达到解耦的目的呢?我觉得有以下几个思路:
(1)将具体的东西抽象处理
(2)将分散的东西集中处理
而面向对象中的接口、继承正为我们提供了这样的一种机制.通过访问接口或基类或抽象类,而不是具体的实现类,从而与具体的实
现类达到了解耦的目的.我们还可以设计一些控制类,像润滑剂一样,协调各实现类之间的访问,也可以达到耦的目的.
事实上,各种设计模式的基本思想也就是这样.创建型模式是为了解除创建对象时产生的耦合,实际上是解除对类称名的依赖,而结构
型和行为型是为了解除对象属性或方法的直接调用.不管什么设计模式,都是将对具体实现类的访问提升为对接口、基类或用于协调的控制类的访问.
三、关于接口
这一节更具体,谈一谈接口,因为使用接口是软件设计的重要手段,但已经不属于“道”了~
1、接口与继承
接口描述的是对象某一个方面行为特征.使用接口与使用继承关系各有优缺点,使用子类继承可以继承父类的功能,体现了重用的精神.而接品更加灵活,因为它解除了子类与父类之间的高度耦合,它体现在灵活扩展的精神.
2、接口与纯虚类
理论上接口可以由纯虚基类实现类似的功能,那为什么还我们不去掉接口的概念,而直接使用虚类呢?
接口存在的理由就是它更加灵活,关系简单,易于理解.比如一个类可以实现十几个甚至几十个接口,但一般开发工具只支持单继承(由于多继承太容易导致混乱和冲突),如果要继承十几层,系统结
构想必会无法理解了,我以为这是接口存在的最重要的原因.
如果接口和虚类继承结合使用,可以产生强大的威力,这也是许多设计模式的“杀手锏”.
以上算是总结一下自己的心得.肯定有不少片面之处,请各位指教.
软件工程学习心得体会(篇二)
软件工程是一门实践性很强、交叉性很强的学科,它提供给我们的不仅是一种方法论,更是一种世界观.
在没有接触软件工程这门课时,我一直认为软件就是程序.能编出解决问题的程序就ok了,从没有想过,在写一个程序之前还要构思几份文档(可行性分析、需求分析、概要设计).不过对于那些大型软件如植物僵尸大战(至少对于我来说是比较大型的了)怎么去实现它,想得我一头雾水.绚丽的界面、40种植物、一大堆不同类型的僵尸,怎样编代码去实现它呢?
第一次上软件工程的课,裴老师问“软件是什么?”我的第一想法是:这个问题太过愚昧了!谁不知道软件就是程序呀?“软件是由计算机程序、数据及文档组成.”听到这句话,我心里先是一惊,慌忙翻了下书“软件是程序和所有使程序正确运行所需的相关文档和配
置信息.”赫然映入我眼帘.突然间我发现,就算是植物僵尸大战这样复杂的游戏,如果设计者实现分模块把每一部分如何实现用文档描叙出来,那这个软件实现起来不是很容易吗?
第一次课后我明白了软件工程是致力于专业化软件开发的理论、方法和工具的研究.虽然我从初中开始信息奥赛,高中继续这个爱好,但在大学二年级下学期才接触在软件开发中这么有引导意义的学科,
不觉有种相见恨晚的感觉.自然它的方法学三要素:方法、工具、过程,我牢记于心.
短短的四周,裴老师的课给我留下了深刻的印象,印象尤深的是:
做软件我们首先考虑的是团队的实力.
如果别人给你50万让你们团队开发一个软件,如果他要求你们团队给这个软件永久维护,那么你要去跟他协商付100万.很多软件公司倒闭就是因为维护上的问题.至此我才明白维护软件是软件生存周期中时间最长的一个阶段,它是最花费精力与钱财的一个阶段.
如果将来你们碰到了我,你跟我说你是se那么我会很高兴,如果你告诉我你是软件工程师,我只会“嗯嗯”两下.
其实在我接触软件后,渴望的是当一名软件工程师.现在才知道学软件工程专业后,去当一名软件工程师是最低层的也是最没“技术”含量的.要做就做系统构架师,当然这需要我们的不懈努力才能达到.系统构架师的职责是设计一个公司的基础构架,并提供关于怎样建立和维护系统的指导方针.恍然发现学软件不仅是学软件,相关的管理能力也是需要具备的.
当然理论知识是用来指导实践的,亲身体验才能领悟软件工程的妙用.课设我们选择了图书馆管理系统,主要是这个系统我们接触比较多,对于它的流程还是比较清楚的.虽然如此我们还是花了很大的时间去完成它.记得当时我们定下这个题目是晚上,在讨论用什么语言实现时,大家各自说出自己比较善于的语言.然后均衡了下,定下用java做开发语言.在实现过程中,突然发现java环境连接数据库和tomcat超级麻烦且数据库老是连接不上.趁时间还早我们三再次讨论,决定用c#做开发语言,主要是c#相对于c++与java来说简易写.同时我们定下不管以后遇到什么困难都要坚持下去的准则.在课设期间我们没少跑图书馆,查阅各种资料,对比各本书上实现图书馆管理系统的代码.终于在4月11日把所有课设的所有事情弄好了.当然这只是个概述.
我印象尤深记忆深厚的是最初实现文档那块.刚开始,软件工程这门课还没学多少,基本的设计理念就很模糊.文档到底该怎么写,很纠