程序设计基础
程序设计方法与风格
1.程序设计方法
程序设计: 指设计、编制、调试程序的方法和过程。
程序设计方法是研究问题求解如何进行系统构造的软件方法学。常用的程序设计方法有:结构化程序设计方法、软件工程方法和面向对象方法。
2.程序设计风格
程序设计风格:指编写程序时所表现出的特点、习惯和逻辑思路。
良好的程序设计风格可以使程序结构清晰合理,程序代码便于维护。因此,程序设计风格深深地影响着软件的质量和维护。以下例举的是一些良好的程序设计风格,也是程序设计时应遵循的规范。
(1)源程序文档化。
源程序文档化是指在源程序中应包含一些内部文档,以帮助阅读和理解源程序。
(2)数据说明方法。
①次序应规范化:是数据说明次序固定,使数据的属性容易查找,也有利于测试、排错和维护。
②变量安排有序化:当多个变量出现在同一说明语句中时,变量名应按字母顺序排序,以便于查找。
③使用注释:在定义一个复杂的数据结构时,应通过注释来说明该数据结构的特点。
(3)语句的结构。
为使程序简单易懂,语句构造应该简单直接,每条语句都能直截了当地反映程序员的意图,不能为了提高效率而把语句复杂化。
(4)输入和输出。
输入和输出信息是用户最关心的,系统能否被用户接受,往往取决于输入和输出的风格。
结构化程序设计
1.结构化程序设计的原则
由于软件危机的出现,人们开始研究程序设计方法,其中最受关注的是结构化程序设计方法,其重要原则一下几点:
◎自顶向下:设计的原则是先总体,后细节;先全局目标,后具体问题。
◎逐步求精:对复杂问题,应设计一些小问题做过渡,细分为逐个的小问题依次求解。
◎模块化:把程序要解决的总目标分解为若干目标,再进一步分解为具体的小目标,每个小目标称为一个模块。
◎限制使用goto语句:滥用goto语句将导致程序结构混乱的现象,应尽量避免使用。
2.结构化程序设计的基本结构
(1)顺序结构。
顺序结构是指按照程序语句行的先后顺序,自始至终一条语句一条语句地顺序执行,它是最简单也是最常用的基本结构。
如图所示。顺序结构中在执行A中的运算后,必然执行B中的运算,然后执行C中的运算,没有分支,也没有转移和重复。
(2)选择结构。
选择结构又称分支结构,简单选择结构和多分支选择结构都属于这类基本结构。如下图中A语句和B语句只会执行一个,在程序执行中出现了分支,即选择结构。
顺序结构( 图例) 简单选择结构(图例)
(3)循环结构。
循环结构又称重复结构,可根据给定条件,判断是否需要重复执行某一部分相同的运算(循环体)。利用重复结构可以大大简化程序的语句,有两类主要的循环结构:当型(WHILE型)循环结构和直到型(UNTIL型)循环结构。
WHILE型循环结构 (UNTIL型)循环结构(do-while)
3.结构化程序设计的原则和方法的应用
结构化程序设计是一种面向过程的程序设计方法。在结构化程序设计的具体实施中,需要注意以下几个问题:
◎使用程序设计语言的顺序、选择、循环等有限的控制结构表示程序的控制逻辑;
◎选用的控制结构只能有一个入口和一个出口;
◎用程序语句组成容易识别的块,每块只有一个入口和一个出口;
◎应用嵌套的基本控制结构进行组合嵌套来实现复杂结构;
◎采用前后一致的方法来模拟语言中所没有的控制结构;
◎严格控制goto语句的使用。
编程范式
编程范式
编程: 程序员 用 语法+数据结构+算法组成的代码,告诉计算机如何执行任务
更具设计的思路分成两种范式: 面向对象和面向过程
面向过程
通俗概念:通过计算机指令告诉计算机一步一步的做
procedures top-down languages
优点:清晰计算机执行的每一个步骤、效率高、适合小脚本 缺点:维护难度高,程序越来越大
面向对象
基本概念:面对对象方法的本质就是主张从客观世界固有的事物出发来构造系统,提倡用人类在现实生活中常用的思维方法来认识、理解和描述客观事物,强调最终建立的系统能够映射问题域。简单来讲就是通过我们能感知到的事物,利用“类”、“对象”来创建模型,使人更容易理解你的代码逻辑,从而是团队开发变得更从容。
世间万物,皆可分类
世间万物,皆为对象
只要是对象就肯定属于某种类
只要是对象就肯定有属性
但是都涵盖对象及对象属性与方法、类、继承、多态性几个基本要素。
(1)对象(Object)
面对对象方法中最基本的概念。对象可以用来表示客观世界中的任何实体,它既可以是具体的物理实体的抽象,也可以是人为的概念,或者是任何有明确边界和意义的东西。例如,书本、课桌、老师、电脑等都可看做是一个对象。
对象有以下基本特点:
◎标识唯一性:是指改对象是可以区分的,并且由对象的内在本质来区分,而不是简单描述来区分。
◎分类性:指可以将具有相同属性和操作的对象抽象成类。
◎多态性:指同一个操作可以是不同对象的行为,也可以是不同对象执行同一操作产生不同的结果。
◎封装性(Encapsulation):从外面看只能看到对象的外部特性,对象的内部对外是不可见的。
◎模块独立性好:由于完成对象功能所需的元素都被封装在对象内部,所以模块独立性好。
(2)类(Class)和实例(Instance)
类,是具有共同属性、共同方法的对象的集合,是关于对象的抽象描述,它反映属于该对象类型的所有对象的性质。实例是一个具体的对象,它是其对应类的一个实例。
注意:实例必然是指一个具体的对象。对象则既可以指一个具体的对象,也可以泛指一般的对象。
类是关于对象性质的描述,它同对象一样,包括一组数据属性和在数据上的一组合法操作。
简单讲类就是一个模型
(3)消息(Message)
消息传递是对象间通信的手段,一个对象发送消息给另一对象来请求其服务。消息只告诉接收对象需要完成的操作,消息完全由接收者解释,独立决定采用什么方法来完成所需的操作。
(4)继承
广义地说,继承是指能够直接获得已有的性质和特征,而不必重复地定义它们。
继承是面向对象软件技术的最强有力的功能和突出的优点。继承是使用已有的类定义作为基础建立新类的定义技术。在面向对象技术中,类组成为具有层次结构的系统:一个类的上层可有父类,下层可有子类;一个类直接继承其父类的描述(数据和操作)或特性,子类自动地共享基类中定义的数据和方法。
例如,“四边形”类是“正方形”类的父类,“四边形”类可以有“顶点坐标”等属性,有“移动”、“旋转”、 “求周长”等操作。而“正方形”类除了继承“四边形”类的属性和操作外,还可定义自己的属性和操作,“边长”属性和“求面积”等操作。
继承具有传递性,如果类C继承类B,类B继承类A,则类C继承类A。因此,一个类实际上继承了它上层的全部基类的特性,即属于某类的对象除了具有该类定义的特性外,还具有该类上层全部基类定义的特性。一个子类只有唯一的一个父类,这种继承称为单继承。一个子类也可以有多个父类,它可以从多个父类中继承特性,这种继承称为多重继承。
例如,“水陆两用交通工具”类既继承“陆上交通工具”类的特性,又继承“水上交通工具” 类的特性。
(5)多态性
多态性,是指对象根据所接收的消息而做出的动作,同样的消息被不同的对象接收时可导致完全不同的行为。
例如:一堂体育课,老师说自己去把,同学们会更具自己的心中要做的动作自己执行了,有的去乒乓、有的篮球、有的下象棋。
多态性机制不仅使得面向对象软件系统更加灵活,减少了信息冗余,而且显著提高了软件的可重用性和可扩充性。
2.面向对象方法的优点
面向对象方法有以下主要优点:
◎与人类习惯的思维方法一致;
◎稳定性好;
◎可重用性好;
◎易于开发大型软件产品;
◎可维护性好。