11测试和调试debug。得到一个错误信息,要去理解它并解决问题,这需要学习一些检测的技巧。如当我们写错函数名或变量名就会得到一条名称错误信息,因为它们没有被定义。拼错了在句号之后的部分都会得到一个属性错误。每一个函数头,“if“和“else“都以冒号结尾。注意全局变量和局部变量的区别。
编码风格和可读性:良好的命名(变量有意义)并确保命名一致,将相关信息放进文档字符串,清晰的注释。用多种途径简化条件和其他内容,产生更容易理解的代码。在定义之间加空行,在表达式之间加入空格,更具可读性。
12程序的控制流程取决于程序结构以及具体输入,这是面向过程的方法。而由事件驱动的编程模型,可用来构建交互式应用。不同的程序块等待不同的输入作为响应条件,然后运行处理程序的函数,处理程序运行完成后函数块继续等待。于是这些函数的处理的组合数是指数级爆炸增长的,从而可以灵活地处理各种情况。这和顺序分支循环语句的组合思想是一致的。最后用某种事件来触发程序的退出,即停机。
13事件有很多种,它们取决于你运行系统的类型和你的兴趣所在:输入事件(按钮或文本框输入),键盘事件(按键按下事件或按键抬起事件),鼠标事件(点击事件或拖动事件)和计时器事件(周期性触发)。对于一个事件,要写个处理程序,但不会给所有同一事件都写同一个处理程序。系统的大部分时间都在等待事件发生。有一个计时器事件的周期性触发,避免等待用户的动作。我们使用计时器来触发,然后我们再设计触发的操作。
事件队列:事件一发生系统就会把它们放到队列里。程序在等待时,系统会查看事件队列,然后运行直到事件队列是空为止。写出的程序应该能响应事件做出相应的操作,不管它们发生的顺序如何。处理程序正在运行时是独占的,如果有新事件,它们仅仅被排进内部的事件队列(而不触发相应的处理程序),因而如果有个死循环在里面,就阻断了所有其他事件的处理。
14编程模型:先编写处理函数--注册这些函数--响应事件并被执行--程序结束。当系统在运行时,程序大多数时间都在等待,当事件发生时,它首先被放进事件队列中,然后系统从事件队列中依次抽取一个,并运行相应的处理程序。程序员不能决定函数什么时候被调用和发送,而是事件发生时系统调用处理函数。我们只知道如果事件发生,特定的处理函数就会运行。这是图形用户界面编写的底层思维,即事件驱动编程,事件处理程序对事件作出回应。
15在事件驱动的程序里,不同的处理程序需要共用一组信息来令交互式程序得以运行:让所有处理函数一起工作,即让它们共享一组全局变量。
全局变量(在函数外部定义变量,在函数内部修改全局变量是不可能的,除非声明该变量是全局变量global;使用全局变量实现各种处理函数之间的数据通讯是最简便的方法,也可以隐藏信息,控制信息可见度)和局部变量(在函数内部创建的变量,只能在该函数内部修改和使用,函数调用结束之后局部变量也就不复存在了。应该优先使用局部变量)
16ui程序结构:1定义全局变量,这基本上是程序的状态;2定义程序所需的任意辅助函数,用来帮助事件处理函数完成特定的任务;3定义程序需要用到的类;4定义事件处理函数,可以使用你在程序中定义的全局变量,辅助函数和定义好的类;5创建frame;6注册所有我们需要的事件处理函数7启动frame和程序中的定时器。
17交互式应用程序(如同类的定义,需要有基本的属性(存储数据的变量)和操作):首先需要搭建一定的框架,然后确定相应的控制区(创建按钮,输入框等等),迭代式开发,不断添加需要的功能,最后形成有一定功能的整体。
18计算机是如何工作的以及它们是如何组织绘图过程的:显示器根据电脑所作的显示某种视觉输出,分辨率对应到二维的像素网格,按逻辑存储在帧缓存的地方(跟踪你在屏幕上看到的像素的值的数据结构);电脑是如何实际地让这些东西移动:它快速地把帧缓存扫一遍并且重新绘制其内容。刷新率表示了计算机把帧缓存的内容显示在实际屏幕上的频率。每个应用或屏幕要给自己注册一个绘画处理程序的特殊函数。
字符串处理,大多数情况下都是将字符串打印输出到控制台。计算机科学从零开始计数。可以写复杂的条件语句以构造适合的程序的字符串
喜欢学医路漫漫请大家收藏:(m.dmbook2.com),第一版主小说网更新速度最快。