浅说编程中的框架

  买房子常听到“这房子是砖混结构还是框架结构?”的问题。框架结构的房子,是先用混凝土或钢材将梁和柱等连接起来构成承重体系,然后再用空心砖等材料在需要的地方填充起来做成墙。这种结构的建筑施工的周期短,房子的质量好,大型的建筑常用这种结构。我们观察工地发现,工人盖楼房就是在搭框架,好像哪个楼都差不多,但经过后期的分隔和装修之后,建筑的功能却又各异。这些不同的功能,依赖于搭好框架以后的工作。

  因为初学者对整个程序的结构把握起来有困难,我在给大一的学生布置作业时,会给出部分的代码,反映整个程序的骨架,学生只要将其中缺少的一部分填上即可。给出的这一部分代码,可以称得上是最简单的框架,降低了学生做作业的难度,不至于频受打击,至少是可以少写些代码了。

  在软件项目的开发中,具有一定规模的软件系统已经非常复杂,涉及到的问题也很多,开发周期也变得更长。而同类的软件,如不同机构的主页,在结构上有很多的雷同之处,区别只在于核心的业务实现部分。于是,将这些雷同的部分抽取出来,往往对应的就是关于软件整体结构的部分,形成的就是同类软件中可以重用的软件框架。有些大的公司和机构专门研究工程中的共性问题,将框架作为他们的产品推出。在软件项目开发中,技术人员使用成熟的框架,只需要集中精力完成系统的业务逻辑设计即可。这相当于盖楼时直接吊装来一个现成的建筑框架,让别人先期帮你完成一些基础工作,你所做的是根据具体的需要,在框架中砌墙,以及做装修。框架一般是成熟、稳健、安全的,经过了很多人使用,有良好的结构,在系统质量方面占有优势。框架其实就是某种应用的半成品,供你选用完成你自己的应用系统。这样,软件项目开发也像是做填空题,降低了难度,节省了时间,提高了质量。

  按照软件工程的术语,框架是可以复用的设计构件,规定了应用的体系结构,阐明了整个设计、协作构件之间的依赖关系、责任分配和控制流程。也有人给出定义:框架是在一个给定的问题领域内,一个应用程序的一部分设计与实现。

  目前流行的大部分语言在开发时都可以利用框架。Java语言在J2EE开发中常用Spring框架,在开发web应用时可以使用Struts框架,还有为数众多的开源框架支持Java语言在不同领域的开发。.NET框架是由微软开发,是一个致力于敏捷软件开发、快速应用开发、平台无关性的软件开发平台,主要的语言是C#。支持PHP web程序开发的框架也为数众多,Zend框架在开发社区中有大量的追随者。著名的Ajax框架整合了JavaScript、XML、CSS等已有技术,成为创建交互式web应用的主要开发技术。对于各种成熟的IDE,也为框架提供了支持。开发一个程序,常常从先设置框架开始。IDE中提供了模板,或者向导程序,通过用户自行选择一些参数,从而生成定制化的框架,供开发者进一步开发使用。

  了解了框架的初学者,常有的疑问是:“我刚接触计算机语言和程序,是否需要学习框架?”我的观点,可以暂缓。编程的基本功和核心能力,不涉及框架。在一般性程序设计学习中解决,而到了要学习做项目的阶段,框架才成为必要的选择。具备了较强的程序设计的一般能力,为理解和掌握框架提供了支持,才能够用好框架,也能带来学习的良好感受和较高效率。如果有机会,有额外的精力,可以在课外对框架进行先行体验。与框架类似和相关的话题,还有模式、架构,解决的也是大型软件生产中的质量、效率问题,这些可以放在高年级的时候解决。对于专业的学生,并不是会使用框架就可以的了。要从事应用开发领域的工作,应该能够驾驭框架,这需要对语言、编程方法有深刻理解,需要建立在对计算机和软件的体系结构有深入了解的基础之上,这是学习各种专业基础课要达到的目标。在我的学生中,就业出现困难的,往往是基础课没有投入学习,而临到毕业季就业潮了,匆忙从框架入手去学,纵使找得着工作,不论在工资上的差距,要想在行业中立足,也需要在走上工作岗位后再加倍努力了。

本文来源:《逆袭大学——传给IT学子正能量》一审过后,要压缩篇幅,将整理过的文字登在些处共享。

==================== 迂者 贺利坚 CSDN博客专栏=================

|==  IT学子成长指导专栏  专栏文章分类目录(不定期更新)    ==|

|== C++ 课堂在线专栏   贺利坚课程教学链接(分课程年级)   ==|

======== 为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 =======

时间: 2024-09-01 21:47:43

浅说编程中的框架的相关文章

在C++ Builder中使用OpenGL编程的优化框架

姑且不谈论OpenGL的名贵背景和光明前途,单凭其实用性和有效性就足以使其成为我们图形输出编程的首选.但是在实际工程应用中程序员没必要仔细地深究OpenGL的运作机制,也往往不需要掌握各种高级的效果制作,真正需要的是最简捷地利用这个得力的工具实现输出数据的可视化,如波形.谱图.立体统计图表等的显示.有鉴于此,本文总结出了在C++Builder中OpenGL编程的实用框架.笔者经过实践,对于一般的图形输出的应用,此框架足以应付.对于复杂些的程序可以在本框架的基础上进行扩充. 在Windows环境下

hibernate-求助!!!!java编程中框架的使用流程

问题描述 求助!!!!java编程中框架的使用流程 开始接触框架,对框架的概念还不是很理解,我想问问,框架是什么?在编程中使用一个框架的大致流程,比如hibernate如果我想使用hibernate框架,是要先做环境搭建吗? 框架使用的流程都是相似的吗? 解决方案 框架和类库都是别人事先编写好的程序,供你重用的.类库重用的是功能,框架重用的是流程(当然框架一般也附带类库) 用hibernate很简单,导入对应的jar包,根据文档或者例子,配置好配置文件(一般是jdbc连接),在程序中就能使用了.

VB编程中钩子的实现及应用

编程 前言 Windows系统中钩子具有相当强大的功能,通过这种技术可以对几乎所有的Windows 系统中的消息进行拦截.监视.处理.这种技术可以广泛应用于各种软件,尤其是需要有监控.自动记录等对系统进行监测功能的软件.本文针对这个专题进行了探讨,希望可以为读者朋友们起到抛砖引玉的作用. 一.钩子的机制及类型 Windows的应用程序都是基于消息驱动的,应用程序的操作都依赖于它所得到的消息的类型及内容.钩子与Dos中断截获处理机制有类似之处.钩子(Hook)是Windows消息处理机制的一个平台

Node.js编程中客户端Session的使用详解

  这篇文章主要介绍了Node.js编程中客户端Session的使用详解,是Node.js入门学习中的基础知识,需要的朋友可以参考下 静态网站很容易扩展.你只需要全部缓存,不需要考虑从不同服务器组合有状态的内容给用户. 可惜,大多数Web应用使用有状态的内容提供个性化体验.如果你的应用可以登录,就需要记住用户的Session.经典的处理方法是客户端设置包含随机唯一Session标识的Cookie,被标识的Session数据保存到服务端. 扩展有状态服务 当扩展服务的时候,你肯定有三种选择: 不同

实际编程中需要多少算法?

问题描述 实际编程中需要多少算法? 实际编程(主要是Android开发方向)中需要多少算法?有必要参加ACM校队吗? 解决方案 低端开发者(典型的xxx方向开发者)不需要任何算法,这种开发者我们叫做"胶水程序员",他们不创造可以重用的,有价值的程序,他们的工作是把现成的组件和框架按照需求粘合起来. 程序员当然需要算法.因为实际项目中各种各样的需求,没有任何现成的算法可以直接解决. 解决方案二: 就拿现在你用的这个csdn问答为例,当你输入一个问题,它会自动给你匹配一些标签.旁边有其他相

详解JavaScript异步编程中jQuery的promise对象的作用_jquery

Promise, 中文可以理解为愿望,代表单个操作完成的最终结果.一个Promise拥有三种状态:分别是unfulfilled(未满足的).fulfilled(满足的).failed(失败的),fulfilled状态和failed状态都可以被监听.一个愿望可以从未满足状态变为满足或者失败状态,一旦一个愿望处于满足或者失败状态,其状态将不可再变化.这种"不可改变"的特性对于一个Promise来说非常的重要,它可以避免Promise的状态监听器修改一个Promise的状态导致别的监听器的行

Java编程中10个最佳的异常处理技巧_java

在实践中,异常处理不单单是知道语法这么简单.编写健壮的代码是更像是一门艺术,在本文中,将讨论Java异常处理最佳实践.这些Java最佳实践遵循标准的JDK库,和几个处理错误和异常的开源代码.这还是一个提供给java程序员编写健壮代码的便利手册.Java 编程中异常处理的最佳实践 这里是我收集的10个Java编程中进行异常处理的10最佳实践.在Java编程中对于检查异常有褒有贬,强制处理异常是一门语言的功能.在本文中,我们将尽量减少使用检查型异常,同时学会在Java编程中使用检查型VS非检查型异常

Android编程中的四大基本组件与生命周期详解_Android

本文实例讲述了Android编程中的四大基本组件与生命周期.分享给大家供大家参考,具体如下: Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器. 一:了解四大基本组件 Activity : 应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应. Activity之间通过Intent进行通信.在Intent 的描述结构中,有两个最

mapreduce 多线程-mapreduce编程中reduce函数可否使用多线程下载一个网页

问题描述 mapreduce编程中reduce函数可否使用多线程下载一个网页 想编写一个程序用到mapreduce框架,实现多线程下载网页 不知能否实现, 我的理解是:一个key/value对调用一次reduce函数,对一个网页没有必要用多线程.这里传入的key就是url