第一篇:MFC Windows程序设计语言总结
MFC Windows程序设计语言总结
我在刚开始接触Windows编程时, 从Visual Basic开始, 从MFC开始, 虽然写出了程序, 但自己都不知道程序是如何运行的, 从而造成写程序“容易”修改难, 设计程序“容易”维护难的状况.经过MFC Windows程序设计的学习之后,明白了有关知识。
API函数是Windows提供给应用程序的编程接口, 任何用户应用程序必须运行在API函数之上.直接使用API编程是了解操作系统运行细节的最佳方式, 而且熟知API函数也是对程序开发者的一个最基本的要求.这课程以API函数作为起点介绍Windows编程, 使我撇开C++的特性专心熟悉Win32编程思路和消息驱动机制.但是, 在开发大型系统的时候, 往往并不完全直接使用API函数, 而是使用MFC类库框架程序.MFC对90%以上的API函数进行了面向对象化包装, 完全体现了对象化程序设计的特点, 是目前流行的类库.当我熟悉最基本的API函数编程以后, 就可以学习更高级的MFC编程了.但是, 虽然MFC仅仅是对API函数的简单封装, 由于我之前对C++语言的了解不够, 不清楚框架程序的工作机制, 即便是有经验的程序员在MFC复杂的结构面前也显得非常困惑.他们会“用”MFC, 却不知道为什么这么“用”, 在运行程序出错时这种现象带来的问题就很明显, 他们不会改.面对一个大的项目, 代码往往需要手工添加和修改, 而很少能够依靠VC++的向导.为此, 这门课程介绍了设计MFC中的类.函数和宏定义.通过对MFC类库的分析和了解, 不仅能够使我更好地使用MFC类库, 同时, 对于自己设计和实现框架和类, 无疑也有相当大的帮助.之后, 这课程还讲述了Windows系统编程中当前最为热门的话题--DLL注入技术.远程进程技术.HOOKAPI技术等, 并配有完整而具体的实例.从这门MFC Windows 应用程序设计,我掌握了 :.Windows应用程序的基础知识
Windows应用程序是靠消息来驱动的,消息是一个描述事件的结构。
在Windows应用程序的主函数中,首先要注册窗口类,然后创建并显示窗口。创建窗口后程序就进入消息循环,在消息循环中,程序不断地获得消息并将消息派送给对应的窗口函数进行处理。
窗口函数是处理事件的地方,它为switch-case结构,每一个case对应一段消息相应代码。
用函数对Windows应用程序进行封装可以使程序的结构更为清晰。
Windows应用程序的类封装
CWinApp类是MFC对Windows主函数的封装,通过派生 CWinApp可以得到自己的应用程序类,在应用程序类中主要实现了全局初始化操作,应用程序类创建了主窗口后便进入了消息循环。
应用程序的主窗口一般都是CFrameWnd的派生类,可以通过派生该类得到自己的主窗口类。
Windows应用程序的窗口函数封装到CCmdTarget类中,所有希望相应消息的类都应该以CCmdTarget为基类来派生。
MFC是用消息映射表来实现消息与消息相应函数之间的映射的。MFC通过四个
宏来声明和实现消息映射表。MFC的这种表驱动的机制使消息处理结构变
得更加清晰,明了。.MFC应用程序框架
应用程序类,框架窗口类,试图类,文档类构成了应用程序的框架,框架的功能是通过各类之间的协调工作实现的类。
MFC采用文档/试图结构来实现数据和数据表现的分离,文档试图的分离有利于数据和数据表现的单独改变。
MFC用类信息存储了动态创建类对象时所需要的消息。图形
Windows提供了图形用户接口使用户得以在窗口中绘图。
在MFC中使用CDC类的派生类来向窗口和打印机等输出设备绘图。每个设备环境中包含笔画.画刷,位图,调色板,字体等GDI对象。
可以通过创建GDI对象并将其选入设备环境来实现所需要的绘图操作。5MFC的通用类
在MFC中,仍然可以使用Windows及C的所有数据类型。但是,为了把数据与对数据的操作方法封装在一起,MFC又定义了一些和数据相关的类从而使得数据的使用更加方便。习惯上人们把这些类叫做通用类。
简单的数据类CPoint,CSize和CRect;
字符串类CString;
集合数据类的基本概念及CArray类;
文档类和视图类之间的数据传递。
视图类对象用成员函数GetDocument获得文档类对象指针,然后视图对象通过这个指针来访问文档对象中的数据。Windows应用程序的界面的设计
Windows应用程序的界面有单文档界面和多文档界面的区别,目前多文档界面已经不被人们所喜欢。
每次绘图操作结束后调用视图类成员函数InvalidateRect启动OnDraw函数以更新显示。
文档/视图类型的应用程序可以实现一个文档多个显示,但是在文档的内容发生改变的时候,要对所有的视图进行更新。
在需要时,应用程序的界面可以设计为带有滚动条的窗口形式。但在设计时要注意文档坐标与视图坐标之间的转换。
7鼠标和键盘
在应用程序的界面上,可以通过鼠标左击,右击,移动等事件来对用户的鼠标输入进行处理。
鼠标消息有用户区鼠标消息和非用户区鼠标消息两种,在应用程序中主要使用用户区鼠标消息。
可以用消息捕获函数来捕获窗口外的鼠标消息,以完成某些特殊的操作。可以通过处理字符消息,按键等键盘消息对用户的键盘操作进行相应。在计算机的显示器屏幕上,如果有多个窗口存在的话,则具有焦点的窗口所对应的应用程序是具有接收用户消息能力的程序,这个程序叫做“正在活动状态的应用程序”。可以用鼠标单击窗口使它具有焦点,当应用程序的窗口获得输入焦点时,会发出WM_SETFOCUS消息;而当窗口失去输入焦点时,会发出WM_KILLFOCUS消
息。资源
资源是供Windows应用程序使用的数据,它们驻留在执行文件中。程序运行时,随着程序的需要,这些数据可以被动态地加载进入内存。资源是程序用户界面的重要组成部分。常用资源有菜单,加速键,图标,位图。程序所需要的资源使用资源描述文件来说明,并在资源头文件中用标识符唯一地标识。资源可以使用VisualC++的资源编辑器来创建和编辑,也可以使用文本编辑器来编辑。菜单的使用与Windows的命令消息WM_COMMAND相关。
菜单项消息映射宏的格式是:
ON_COMMAND
菜单项动态修改的消息映射宏的格式是:
ON_UPDATE_COMMAND_UI
在文档/视图结构的程序中,资源的加载是由应用程序类的InitInstance函数通过构造CDocTemplate(包括其派生类)对象来完成的。
加速键在资源描述文件中与所对应的菜单项关联。
图标使用Visual C++开发环境的菜单ProjectAdd To Project/Files添加。
位图要用CBitmap对象来保存,由成员函数LoadBitmap来加载,在显示时需先绘制到内存DC中,然后再用BitBlt函数把它由内存DC复制到显示设备的DC上。MFC的文件处理机制
文件是存储在永久性存储介质上的数据的集合。在面向对象的应用程序中也涉及对象存盘的问题。对象存盘使用序列化的机制实现。
序列化就是把对象的当前状态以文件的形式写入永久性存储体中,在需要的时候从文件中读取它,并在应用程序中重建对象的过程。使用序列化机制把对象存盘称为对象的永久化,这样的对象称为永久性对象。
MFC通过宏DECLARE_SERIAL和IMPLEMENT_SERIAL给类添加动态重建对象和序列化操作的代码。宏DECLARE_SERIAL用在类声明中,宏IMPLEMENT_SERIAL用在类实现中。同时,该类必须从CObject类或其派生类派生,并重载Serialize函数。Serialize函数借助类CArchive对象实现对象的序列化。CArchive对象是一种I/O,它借助CFile对象完成磁盘文件数据的存取操作。MFC把文件的打开,关闭,读写操作封装在类CFile中。CFile对象代表一个磁盘文件,使用CFile对象可以直接对文件进行操作。控件
控件是应用程序窗口的子窗口。MFC的控件类封装了Windows的标准控件和通用控件,这些控件类都派生于类CWnd。
静态文本控件由类CStatic封装,按钮控件由类CButton封装,编辑控件由类CEdit封装,进度条控件由类CProgessCtrl封装,微调器控件由类CSpinButtonCtrl封装,图象列表控件由类CImageList封装,列表视图控件由类CListCtrl封装。控件类的使用与窗口类CWnd的使用基本相同。
控件自己有特有的行为特点,在各自的类中由相应的成员函数实现。
控件颜色的设置在Windows消息WM_CTLCOLOR的消息响应函数OnCtlColor中完成。其消息映射宏是ON_WM_CTLCOLOR()。
11对话框
对话框是Windows应用程序与用户交互的重要手段,分为模态对话框和非模态
对话框。对话框的基本行为由类CDialog封装,对话框的外观由模版资源定义。对话框模版资源可以使用Visual C++的资源编辑器来创建和编辑。
掌握了对话框模版资源描述文件,对话框的定义及使用,对话框的数据交换和检验,对话框的应用程序,通用对话框,非模态对话框,属性页方面的知识。12 进程与线程的管理
进程是一个正在运行的应用程序的实例,拥有应用程序的所有资源,进程由一个或多个线程组成。线程是进程中一个独立的执行路径。Windows按照一定的规则,如优先级和先后次序,给线程分配CPU时间。
还掌握了工作线程和用户界面线程,线程同步,线程通信。动态链接库
动态链接库(DLL)是程序运行时装载和连接的一种二进制文件,主要是通过它的各种导出函数,类和资源来向外界提供服务并允许同时被多个不同的进程所共享。
DLLMain是Windows的动态链接库的入口函数,主要作用是调用动态链接库时,完成初始化工作。
声明为导出函数有两种方法:在.def文件中用函数的名称来声明;使用关键字_declspec(dllexport)来声明。
在VisualC++中,动态链接库分为非MFC DLL,常规型DLL和扩展型DLL三种。创建第一种动态链接库使用向导Win32 Dynamic-Link Library,创建第二和第三种使用MFC AppWizard(dll)。
动态链接库的导出函数被其他程序模块调用,在这些程序模块中称之为导入函数。应用程序使用DLL文件中的导出函数有两种方式:隐式链接和显式链接。14 组件对象模型基础
掌握了组件对象模型(COM)概述;使用DOM组件;组件的包含和聚合;进程外组件;使用ATL设计COM组件。
15用MFC开发ActiveX应用
掌握了ActiveX技术的基本概念;ActiveX容器;ActiveX服务器;自动化;ActiveX控件与ActiveX文档的有关知识。
ActiveX是一种为了适应互联网需要而发展起来的基于COM的技术。16 用MFC设计数据库应用程序
数据库系统一般由数据库,数据库管理系统和数据库应用系统构成。数据库是存放数据的仓库。为使一个数据库应用系统适用于所有的数据库管理系统,人们在数据库应用系统和数据库管理系统之间增加一个公认的标准接口。ODBC和DAO是两个常用的标准接口。
MFC有两组数据库类:一组是基于ODBC的,一组是基于DAO的。
经过这门课程的学习不但使我掌握了Windows应用程序设计的基本方法,还可以使我进一步深刻,全面地理解面向对象程序设计的思想,从而把握程序设计方法的发展方向。
第二篇:程序设计语言
程序设计语言
一般分为机器语言、汇编语言和高级语言。
1、机器语言
机器语言是用二进制数表示的、计算机唯一能理解和直接执行的程序语言。机器语言不直观,编写难度大,易于出错,调试、修改繁琐,但执行速度最快。机器语言是最低级的程序设计语言。
2、汇编语言
汇编语言是将机器语言“符号化”的程序设计语言。
汇编语言编写的程序,机器不能直接识别,要由汇编程序将其翻译成机器语言才能执行。
特点:比机器语言程序更易于编写、检查和修改,也保持了机器语言编程质量高、运行速度快、占用存储空间少等优点。但汇编语言的通用性和可移植性差。汇编语言也属于低级语言。
3、高级语言
常用的高级语言有BASIC、FORTRAN、PASCAL、C、C++、JAVA等。
特点:与汇编相比,①更接近自然语言,一般采用英语单词表达语句,便于理解、记忆和掌握。②易于编写、查找错误和修改③通用性强。
第三篇:如何学习程序设计语言
如何学习程序设计语言
经常有人会问,“怎样才能学会某某语言?”、“我该怎么学好某某语言?”,其实在学习某种程序设计语言之前,你需要弄明白一个问题,编程的目的是什么?我们为什么要编程?编程就是为了解决各种问题,通过一系列的指令来解决这些问题。那我们学习编程,到底需要学什么呢?因为编程的目的是为了解决问题,显而易见,我们学编程,就是要学会如何解决问题。高手和新手就是看你解决问题的能力。
我们应该如何学习?举个例子,有一天你想买个空调(我想学编程),于是就是市场上了解空调的情况,进行比较,最终确定某个品牌的空调(对目前的编程语言作些了解,根据自身的情况,最终确定一门语言来学习)。空调买来后,有专业的安装工人给你安装调试(学习前先配置好程序的调试运行环境,让你编写的程序能在电脑上跑起来,通过网上的教程或者购买的书本来了解这方面的知识)。安装工人走了之后,你想学会控制空调,这时你就遇到问题了“我怎么才能学会控制它呢?”(我该如何学习编程呢?)首先,你会找来空调的说明书(程序语言的语法手册,可以从网上查找或者买本书来看)和遥控器(电脑),边看说明书,边通过遥控器来控制空调(边看资料边在电脑上编写程序解决某个问题),随着操作的熟练你就不再看说明书了。当说明书上的说明和你实际的操作对应不起来时,你会向厂家咨询,问明原因(可以在某个技术社区或聊天工具上向熟手请教)。总之,一句话,学习时边看资料边实践(在电脑上编写、运行、调试你的程序)。
在写代码前,一定要先养成良好的习惯,先把握住程序的整体,然后再细分,一步一步去完善、去实现全部功能。无论做哪一步时,你都要明白,你的程序在为你解决什么问题?不然,你的解决问题的能力无法提高,学习的目的性也不强。不是有句话,“书到用时方恨少”,就是在你实际操作时,会遇到各种各样问题,你通自己的探索来解决各种问题时,是最有针对性的学习,因为你有这个需求“要如何解决这个问题”,所以当你满足自己的这个需求时,也是最有动力学习的时候了。学习编程,特别在程序出现问题,不按照自己的意愿去运行时,一定要有耐心,一行、一行的去阅读程序,想办法输出它的运行结果,看看是否符合自己的意愿,然后找出出现错误的这一行代码,最后针对这行代码进行分析、调试来解决这个BUG。
当你完成一个学习任务后,其实你已经进入编程的大门了,以后只要按照这个思路继续学习,你就会掌握越来越多的知识和经验,解决问题的能力也会越来越强。
如何学习程序设计
有许多网友都曾迷惑地问我:“怎么样才能学好程序设计?”,这不是一两句话能说
清楚的,于是我就写了这篇文章,给广大爱好者一个能解惑的方法,无论你是什么样的“鸟”相信都能在这篇文章里找到你想要的什么是程序设计
话就从一个著名的公式说起:程序设计=数据结构+算法
每当我写下这个公式的时候,心中总有一种新的感悟,可是就这个程序界尽人皆知的公
式却难倒了一大批想和Bill·Gates一争高下的朋友,下面我为大家解剖这个公式:
“程序设计”说白了就是大家所谓编程,先不管这个词中有什么深刻的内涵,先看看等式
右面的这两个名词。
按照官方的定义:数据结构即非数值计算的程序设计问题中的计算机的操作对象以及它
们之间的关系和操作;算法是对特定问题求解步骤的一种描述,是对指令的有序序列。官方的解释就是经典,可是我们看了却更糊涂了。别急,听我给大家解释。
程序设计就像盖房子,数据结构就像砖、瓦,而算法就是设计图纸。你若想盖房子首先
必须有原料(数据结构),但是这些原料不能自动地盖起了你想要的房子;你必须按照设计图纸(算法)上的说明一砖一瓦地去砌。这样你才能拥有你想要的房子。程序设计也一样,你使用的编译工具中有各种功能语句或基本结构,它们不会自动排列成你要的程序代码。你得按照程序规定的功能去编写,而程序的功能是实现就是算法的具体体现。所以通俗地说:你必须按照特定的规则,把特定的功能语句和基本结构按照特定的顺序排列起来,形成一个有
特定功能的程序,这就是:程序设计=数据结构+算法。数据结构是程序设计这座大厦的基础,没有基础,无论设计有多么高明,这座大厦不可能建造起来的。算法则是程序设计的思想,它的灵魂!没有灵魂的程序不能叫程序,只是一堆杂乱无章的符号而已。在程序设计中,数据结构就像物质,算法就是意识。这就像哲学上说的:意识是依赖与物质而存在的,物质是由于意识而发展。双方是相互依存、缺一不可的!
数据结构内容不多仅仅有几个系统自带的基本结构(像顺序结构、分支结构、循环结构、函数过程)数据类型(整型、实型、布尔、字符等)和用户定义的高级点的数据结构(数组、集合、文件、指针(队列、栈、树、图等)······)就这么多。可是算法却不同了,它是多中多样的!它可以让你让数据以你想要的方式排列(当然要符合语法和功能要求^_^)。再打
个比方,数据结构是人体的各种组织、器官,算法则是人的思想。你可以用你的思想去支配你身体的各个可以运动的器官随意运动。如果,你想去取一个苹果,你可以走过去,也可以跑过去,只要你想,你甚至可以爬过去。但是无论如何,你你的器官还你的器官(没有变),目的还是同一个目的(取苹果),而方式却是随心所欲!这就是算法的灵活性,不固定性。因此可以这样说:数据结构是死的,而算法是活的!现在明白许多了吧!GO ON
怎样学习程序设计
上面说了许多数据结构的在程序设计中重要性,所以努力学习好数据结构是学好程序设计的第一步,也是关键的一步。你初学起来一定会觉得难,枯燥(其实我当时也是这么想的 ^_^),什么标准文件、标准类型、标准函数、标准过程搞的你烦不胜烦。于是,就有许多初学者就厌倦了,停滞不前了,退缩了。你若是想编好程序的话就想:难道就这么一点点小困难就难倒我了吗?我还要挑战Bill·Gates呢?我一定能行,相信自己,一定会闯过这一关的!这样以来,你就具备了程序员最基本的素质——毅力。这一点是程序员必备的,否则在后面开发程序的漫长时间里,你会熬不住的。而且只有这样你才能静下心来学习。这一端时间没有什么捷径,只有多看书、多练习,把所有结构和类型的用法都找掌握牢固。不懂就要问。最好呢,有一位老师指引,这样比自己在这条路是摸黑前进强多了,而且往往还事半功倍。切记!只要跨出了第一步,以后就容易多了,万事开头难嘛!一定要坚持,当你过了这一端时间以后,你就发现程序设计根本没有你想象的那样难。当你把所有的东东都学会时,程序设计的大门已经向你敞开了一扇,而另一扇就是······
算法,这个是程序设计的重点,也是难点。许多菜鸟和老鸟的区别主要在对算法掌握的熟练程度上面。有许多朋友曾这样问我:“我数据结构上面的都学会了,也知道该怎么样用,可是我为什么还是在编程时,不知道该怎样用呢?其实,这就是缺少算法思想的一个具体表现。并不是学好了数据结构就会编程了。算法是灵活多变的,它不像数据结构那样有固定的形式。算法是不固定性就决定了它的特点,你不可能把所有的算法都学会,因为它是无穷尽的。但是你要是能把自己学的有限的算法融会贯通了,那你就了不起了。就好象你只学会了1、2、3这三个数,但是你可以组成12、23、32、123······。所以算法这条路既长有短,既难又易。
学习好算法的方法不少,在此详细的给大家举几个例子。
首先,你要养成一个良好的程序设计风格和习惯。这也分许多种。其中最重要的是养成自上向下逐步求精的程序设计思想和方法。怎样才是自上向下逐步求精的程序设计呢。举个例子。有这样一个问题:已知三角形的两边及夹角,求第三边及面积。
现在,当你看到这个问题是,你不要立即下手去编写,而是要思考一下怎样才能求解(算法),然后把她写下来以免忘记。于是就写了:
一级算法:
1 输入两边的长度a、b以及夹角A
2 计算第三边c和面积s
3 输出c以及s
当你写完之后,你若觉得第2步不太清晰,还不能写出代码,那就继续求精。二级求精:
1、将α的角度转换为弧度;
2、c=sqrt(a*a+b*b-2*a*b*cos(α));
3、s=1/2*(a*b*sin(α))
哈哈,这样问题不就得到解决了吗?接着就可以轻松的编代码了。再仔细看看上面的步骤:先写出一级算法,如果觉得由此还是得不到源代码,或者是其中有一步还有很多步骤要写,那么就继续求精,直到你认为可以很清晰的写出代码为止。但是求精可以因人而异,像上面的题目,若是一个编过很多程序的大虾来说,可能不用什么求精,代码就可以直接写出来了;但要是一个菜鸟(像我一样)就可能要写到二级求精。
这样说来,你可能认为这个求精是不是太慢,抑或根本就是在浪费时间。我大声告诉你:根本不是!这可是众多的编程先驱、编程达人们推荐的基本方法。你知道编程中,主要时间用在了哪里吗?不是编写代码,而是用在了求解算法和调试程序上了!而算法的求精就是缩短这些时间的最好的方法。它可以使你不用再很费力的苦思冥想到底该怎样构造算法,使这个过程更条理、更简明;它也很可能使你不用再为了一个小小BUG而调试半天,因为,它给出的算法已经趋于完美。其实,列一个小提纲(算法)就可以解决很多的问题,生活中不也是如此吗?!所以,第一,求精算法这个最重要的习惯一定要养成哦!
还有一个好的习惯就是要做到:程序源代码的清晰度与可读性一定要高。
这是为什么呢?在源代码中,每行代码前面的空格的有无与多少并不影响程序的运行,但是它影响人的阅读。你想,当你看到一片代码,格式杂乱无章,没有什么主次内外一定会头痛不已,绝对是看了第一遍就不想再看第二遍了。而且当你调试这样的代码时,也会被一
个小错误弄的找不到北了。如果格式很清晰的话,这样的代码就非常易读,结构很清晰,begin..end都看的清清楚楚。我想这样的代码阅读和调试起来一定很顺手的。
还有就是在有些重要的代码块后加入注释,也可以提高程序的可读性。不说别人,就说我就深有体会:以前代码不加注释,当时对其结构很清楚,可是过了几个星期之后,再看代码简直就像看另外一个人写的一样,要费不少工夫才能弄懂,代码越多越如此。自己还很难理解自己的代码,更不用说别人了。因此费点力气加上注释还是值得的。
还有的人喜欢用 goto语句跳来跳去,虽然增加了编写代码的灵活性,可是却严重破坏了程序的结构化,容易造成程序运行和大脑思维的逻辑混乱,很可能导致一些很不容易发现的错误。而且所有的goto都可以用其他的语句来代替。所以在这里建议大家少用goto。能不用就不用。以上是说了要提高代码的清晰度与可读性。
上面用了不少字来介绍程序设计中良好习惯的作用与好处,这算是程序设计的一个基础,希望对大家能有所帮助。下面介绍其他促进编程水平的方法。
其次,就是多加练习和多多与别人交流心得,研究和欣赏别人优秀的程序代码(上面说的清晰度与可读性的重要的一点就在这里体现了)。无论干任何事情,只有经常练习才能熟练的掌握与应用。它不仅能帮你提高对算法的认知程度,还可以使你更好的理解数据结构;而交流心得与欣赏别人的代码则是要你学习别人优秀的独特的见解与逻辑思维,许多„老鸟‟就是在研究优秀代码中慢慢成长起来的。但研究和欣赏并不是意味着让你„全盘西化‟;它是说既不要拘泥于自己一成不变的思考方式,也不要成为别人思想奔驰的高速路,而是让你取长补短,取其精华,去其糟粕,这才是我要说的。另外,在编译一个程序时,要多想几种不同的算法,反复比较,看看究竟哪个更适合这个程序。这样,不仅有助于提高你程序的运行效率,更重要的是有助于提高你对算法的认识和思维的广度。
看完上面这么多,你会发现程序设计的这半扇门似乎并不是想象的那么容易打开;但是如果你能耐住寂寞与枯燥的考验,按部就班、循序渐进的练习,思考,不知不觉中你的水平已经提高了很多。
除了上面说的求精算法和数据结构外,数学方法和逻辑思想对你的程序设计也会有一定的影响(这也属于算法)先说数学方法,它是指导你学习的一个重要的助手。比如你要实现一个看似很复杂的函数,而且你编写了一大堆代码,什么结构和类型都用上了,可是还是实现不了。这时候先别着急,也许在你做这个函数前就要静下心来,仔细思考,看看有什么数学上学习的特别公式能够实现这个问题吗?如果你真的灵感大发,把它挖了出来,恭喜你!
(答对了!)我想这个时候你一定会高兴的手舞足蹈,这种感受,我想大家在做数学题OR其他难题时一定深有体会。
这样说太空洞,不如举个例子:将8个„车‟放在8X8的国际象棋棋盘上,如果它们两两均不能互吃,那么称8个„车‟处于安全状态。问总共有多少种不同安全状态?对于这样的题一般的解法是用„回溯法‟,即先有顺序的固定一个棋子,然后将剩下的逐行试探,如果可以则摆放下一个,要是不行就把该棋子换一个位置,直到所有的方法都用(遍历)一遍。这样看来这个方法真的很麻烦,不因需要编写大量代码,而且还要用到„递归‟(编程的一个重要的算法)。使程序的效率大大降低。但是我们可以想想有没有更好的数学方法。肯定有!你看在第一行中,棋子可以在8个空格内随意摆放而不会受到攻击;而第二行,棋子则只有在7个空格内再挑选一个了;第三行就只有6个……依次类推第8行就只剩下一个空格了。所以这个方法一共有8X7X6X5X4X3X2X1即8!种解法,这不就是数学中的排列与组合的问题吗?若不进一步思考,盲目地逐个枚举方案,其笨拙是可想而知的了。所以在设计算法时,一定要仔细思考有没有更好的数学公式或思想与之相关联,这样往往会收到意想不到的好效果。
说完数学,再说哲学。
其实,哲学是所有学科是总和。她当然也包括程序设计这门新兴的学科了。(不要以为它们之间没有关系哦!)
我这里说的是哲学的一小部分,那就是逻辑学。一个人若没有严格的逻辑思维,他/她的程序一定有不少虫子(bug)。然而对于这些虫子,他/她可能不知道;也很有可能知道了,但是就不知道哪里出错了。这就是因为他/她没有把问题出现的情况(包括出错的情况)考虑全面而造成的。虽然理论上所有的程序都有一定的漏洞(尤其是代码越多的程序越是如此),但是我们可以尽我们的全力把问题考虑全面,使错误发生的几率降低到最小,以确保程序的稳定性。咱们来看一个很有趣的反面例子:偶在很久以前编过一个小程序(老师布置的作业),其功能是输入你的生日,然后再输入某天的日期,最后计算出你到这一天一共活了多少天。我很快就完成了,用数据测试几次还不错,于是让老师来检查我的作业。他让我输入,我于是就输入了1989 1 28,然后回车,再输入1999 1 28,我太激动了把1999输入成了1899,而且我竟然没有发觉。于是偶自信的敲了回车。结果出来了,当时大家都笑翻了,此后,我有一段时间再也不敢让老师“欣赏”我作的题目…… 以上就是偶因为逻辑不严密造成的笑话,大家可不要学我啊!所以说,提高逻辑思维能力也是提高编程效率的很有效的方法。
世界上所有的学科都有联系。当数学与逻辑学擦出„爱情‟的火花时,程序设计就有了雏形。
其实还有其他的学科也会影响程序设计,比如英语,地球人都知道,现在绝大多数程序源代码是用英文编写的,而且很多开发工具、编译工具还有一些用来参考的小程序几乎都是英文界面。学好英语对代码的分析、对数据结构的了解以及对开发程序或软件的效率都有帮助。因此在学习程序设计这门课程时,可不要丢了其他啊!
学习编程心态要放低,虽然你可能梦想要打倒微软帝国,可是你不要以为自己真的就有实力把Bill PK掉,一定要从最简单的开始做起,不要眼高手低,荒于练习。否则你可能给他打工他都不要哦!(必备)
一颗坚定的信念。搞程序设计有时是很累人的(要不然大家都成软件工程师了,BILL的饭碗不就砸了),在某一个关键点是你要付出超乎想象的汗水和不计其数的脑细胞。这就叫“衣带渐宽终不悔,为伊消的人憔悴!”要保持一种吃苦耐劳的打不垮精神,革命才能成功啊!同志们。(必备)
其实总而言之呢,无论是新手还是大虾,要的就是勤学苦练,只有这样,你才能走上通向程序设计金殿的成功之路。
到了这里你会发现,这就是程序设计,就这么简单、有趣,而有充满的艰辛与苦涩。设计一个艰难的程序,就像母亲分娩一样,一定会有巨大的痛楚。但当你为你早已调试了N^N次的代码加上最后一笔时,一个崭新的生命就诞生了!Eureka!它带着羞涩而好奇的神态向这个世界发出第一句“Hello,World!”的问候时。你那种感觉就像是上帝面对自己亲手造出来的生命,你以往所有的不快都会烟消云散。你会发现程序设计,这项伟大的工程,教予你的不仅仅是一种技术,更是对生命的热爱,对人生的执着,对完美梦想的追求!
有人说,学习是无聊的,但有亿万芸芸学子不懈地投入其中。
有人说,科学是艰难的,但仍有大批科学家为之奋斗终生。
也有人说,编程是枯燥的,可是我要站起来最全世界说:”我爱她,就像爱我的生命!“
第四篇:程序设计语言的概念
1.“机器语言”是 直接用(二进制代码指令表达的计算机语言,指令是用0和1组成的一串代码,它们有一定的位数,并分成若干段,各段的编码表示不同的含义,例如某台计算机(字长)为16位,即有16个二进制数组成一条指令或其它信息。16个0和1可组成各种排列组合,通过线路变成电信号,让计算机执行各种不同的操作)。
2.汇编语言(AssemblyLanguage)是面向机器的程序设计语言。在汇编语合中,用“助记符”(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。于是汇编语言亦称为符号语言。使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编程序把汇编语言翻译成机器语言的过程称为汇编。
3.高级语言:由于汇编语言依赖于硬件体系,且助记符量大难记,于是人们又发明了更加易用的所谓高级语言。在这种语言下,其语法和结构更类似普通英文,且由于远离对硬件的直接操作,使得一般人经过学习之后都可以编程。高级语言通常按其基本类型、代系、实现方式、应用范围等分类。
4.源程序是一种计算机的代码。它会符合一定的语法,经过编译器编译或解释后生成具有一定功能的可执行文件或组件,也可以是某种接口。是用程序设计语言编写的程序。
用源语言如FORTRAN、BASIC等语言编写的程序。源语言是指可以导出另一种语言的语言,它所产生的语言称为目标语言。对于计算机操作而言,必须将源语言编写的程序编译成目标程序。
5.目标程序(Object Program)又称“目的程序”。
由语言处理程序(汇编程序,编译程序,解释程序)将源程序处理(汇编,编译,解释)成与之等价的由机器码构成的,计算机能够直接运行的程序,该程序叫目标程序。
6.可执行程序 一种可在操作系统存储空间中浮动定位的可执行程序。MS-DOS和MS-WINDOWS下,如文件扩展名为.exe;.com
第五篇:2008级程序设计语言(Java)教学大纲
《程序设计语言(Java)》教学大纲
课程名称: 程序设计语言(Java)英文名称:Programming Language(Java)课程编码: 212013 学 分: 4
学 时: 64(其中理论学时: 32,实践学时: 32)适用专业:非计算机专业理工类本科 先修课程: 《大学计算机基础》
一、课程的性质、目的与任务 课程性质:
该课程面向全校非计算机专业理工类本科生,是程序设计语言类必修的公共基础课之一。该课程的前导课程是《大学计算机基础》,侧重于Java语言的基本语法和面向对象编程方法的介绍。课程目的:
通过本课程的学习,学生不仅应掌握 Java语言的基本特点和编程方法,还应掌握面向对象程序设计的基本思想、基本概念和基本方法,并能运用所学的知识和技能对一般问题进行分析和程序设计,能解决本专业的一些实际问题。课程任务:
本课程采用引导式、启发式、实例讲解和实作演练等教学方法来组织教学,在注重Java语言基本概念和基本语法知识介绍的同时,注重培养学生面向对象的程序设计能力和思维方式,加强学生创新能力的培养,为进一步使用Java进行技术开发奠定坚实基础。
二、教学基本要求
通过本课程的学习,学生应达到下列基本要求:
1.掌握Java语言的基本语法、数据类型、运算符和表达式、流程控制语句、数组、向量和字符串、Swing界面设计、Applet小应用程序编制以及常见Java数据流的使用。
2.掌握对象和类的基本概念,学会使用Java进行面向对象程序设计开发的基本技能。
3.理解Java语言的特点、抽象类和内部类的概念、异常处理方法、控制组件外观的方法、Applet的安全机制和生命周期。
4.了解Java包的工作机制、对象持续化的基本概念、常见Java类的用法以及API文档的查阅方法。
三、教学条件
本课程教学在多媒体教室进行,实践教学要求在计算机机房进行,要为每个学生提供一台高性能计算机,并安装有JDK 6.0,UltraEdit,JCreator等开发工具。实践教学完成后,要上交相应部分的实验报告。
四、教学内容与学时安排
本课程共分三篇十章,内容涉及Java语言的基本概念和面向对象的编程方法。第一篇为Java编程基础篇,包括第1,2,3章,主要介绍Java的基本语法、数据类型及其流程控制语句;第二篇为Java编程提高篇,包括第4,5,6章,主要介绍数组、向量和字符串、Java面向对象的编程方法以及异常处理;第三篇为Java编程进阶篇,包括第7,8,9,10章,介绍Java图形界面设计、Applet以及数据流方面的知识。第1章 概述 1.1 什么是Java语言
1.2 一个基本的Java应用程序 1.3 程序的编译和运行 1.4 常见错误
1.5 使用Java核心API文档
第2章 标识符和数据类型 2.1 Java的基本语法单位 2.2 Java编码体例
2.3 Java的基本数据类型 2.4 复合数据类型
2.5 类和对象的初步介绍
第3章 表达式和流程控制语句 3.1 表达式 3.2 流控制
第4章 数组、向量和字符串 4.1 数组
4.2 Vector类 4.3 字符串类型
第5章 进一步讨论对象和类 5.1 抽象数据类型
5.2 对象的构造和初始化 5.3 this引用 5.4 子类 5.5 方法重写 5.6 Java包 5.7 类成员
5.8 关键字final 5.9 抽象类 5.10 接口 5.11 内部类 5.12 过时信息
第6章 Java语言中的异常 6.1 异常 6.2 异常示例 6.3 异常处理 6.4 异常分类 6.5 抛出
(2学时)
(4学时)
(4学时)
(4学时)
(4学时)
2学时)
(6.6 创建自己的异常
第7章 Java的图形用户界面设计(4学时)
7.1 AWT与Swing 7.2 容器 7.3 布局 7.4 事件处理
第8章 Swing组件(4学时)
8.1 按钮 8.2 标签 8.3 组合框 8.4 列表 8.5 文本组件 8.6 菜单组件
8.7 对话框、标准对话框与文件对话框 8.8 控制组件外观
第9章 Java Applet(2学时)
9.1 编写Applet 9.2 Applet的方法和Applet的生命周期 9.3 Applet的运行
9.4 在Applet中的多媒体处理 9.5 Applet的事件处理
9.6 Applet与普通应用程序的结合
第10章 Java数据流(2学时)
10.1 数据流的基本概念 10.2 基本字节数据流类 10.3 基本字符流 10.4 文件的处理
五、考核方式和成绩记载
本课程结束后由计算中心统一安排无纸化上机考试,成绩记载为: 总评成绩(理论)=平时成绩(40%)+无纸化上机考试成绩(60%)
其中:平时成绩=平时出勤和课堂提问(50%)+作业(50%)总评成绩(实践)=平时成绩(60%)+综合课题设计成绩(40%)
其中:平时成绩=上机出勤和表现(40%)+上机练习记录(30%)+单元实验报告(30%)
六、教学参考书 [1] 辛运帏等,《Java程序设计(第二版)》,清华大学出版社,2006年8月 [2] 辛运帏等,《Java程序设计题解与上机指导(第二版)》,清华大学出版社,2006年11月
七、说明
执笔人: 普运伟 审定人: 王建华 教学基层组织主任: 秦卫平