程序设计基础

程序设计方法与风格

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.面向对象方法的优点

面向对象方法有以下主要优点:

◎与人类习惯的思维方法一致;

◎稳定性好;

◎可重用性好;

◎易于开发大型软件产品;

◎可维护性好。

学而精计算机公共基础学习之路TEST2(程序设计基础)的更多相关文章

  1. 学而精计算机公共基础学习之路TEST1

    算法 一:算法基本概念 算法是个什么概念学了这么久的程序尽然没有听说过,其实算法就是为了解决问题那么怎么准确完整的解决这个问题就是算法.所以我们所写的程序就可以说为对算法的描述,但是程序编制是不能有于 ...

  2. “戏精少女”的pandas学习之路,你该这么学!No.5

    如果文章图片无法观看,请前往CSDN博客观看 https://blog.csdn.net/hihell 戏精博主即将上线 就在上一篇,梦想橡皮擦这位博主经过艰苦的努力 终于能创建一个dataframe ...

  3. python 零基础学习之路 02-python入门

    不知不觉学习python已经两个月了,从一开始不知道如何对print的格式化,到现在可以手撸orm,这期间真的是 一个神奇的过程.为了巩固自己的基础知识,为后面的拓展埋下更好的伏笔,此文当以导师的博客 ...

  4. 【jq】c#零基础学习之路(1)Hello World!

    从今天起我会持续发表,这个就是一个日记型的,学习编程是枯燥的,况且我们还是零基础. 学前准备 1.编译环境 vs2010.vs2012.vs2015...(本人用的是vs2010旗舰版).vs2010 ...

  5. Android 零基础学习之路

    第一阶段:Java面向对象编程 1.Java基本数据类型与表达式,分支循环. 2.String和StringBuffer的使用.正則表達式. 3.面向对象的抽象.封装,继承,多态.类与对象.对象初始化 ...

  6. python基础学习之路No.3 控制流if,while,for

    在学习编程语言的过程中,有一个很重要的东西,它就是判断,也可以称为控制流. 一般有if.while.for三种 ⭐if语句 if语句可以有一个通俗的解释,如果.假如 如果条件1满足,则…… 如果条件2 ...

  7. JAVA基础学习之路(五)数组的定义及使用

    什么是数组:就是一堆相同类型的数据放一堆(一组相关变量的集合) 定义语法: 1.声明并开辟数组 数据类型 数组名[] = new 数据类型[长度]: 2.分布完成 声明数组:数据类型 数组名 [] = ...

  8. JAVA基础学习之路(一)基本概念及运算符

    JAVA基础概念: PATH: path属于操作系统的属性,是系统用来搜寻可执行文件的路径 CALSSPATH: java程序解释类文件时加载文件的路径 注释: 单行注释  // 多行注释 /*... ...

  9. 【jq】c#零基础学习之路(5)自己编写简单的Mylist<T>

    public class MyList<T> where T : IComparable { private T[] array; private int count; public My ...

随机推荐

  1. 多线程下QAxObject指针为NULL的解决办法

    项目中需要对Excel进行操作,把数据中的数据写入到Excel文件中.在数据量大的情况下,操作Excel是一件费时的操作. 但是执行到下列代码时就会出现空指针的情况: QAxObject *excel ...

  2. C# (类型、对象、线程栈和托管堆)在运行时的相互关系

    在介绍运行时的关系之前,先从一些计算机基础只是入手,如下图: 该图展示了已加载CLR的一个windows进程,该进程可能有多个线程,线程创建时会分配到1MB的栈空间.栈空间用于向方法传递实参,方法定义 ...

  3. 微信公众号H5支付遇到的那些坑

    简史 官方文档说的很清楚,商户已有H5商城网站,用户通过消息或扫描二维码在微信内打开网页时,可以调用微信支付完成下单购买的流程. 当然,最近微信支付平台也加入了纯H5支付,也就是说用户可以在微信以外的 ...

  4. js 向form表单中插入数据

    var newElement = document.createElement("input"); var nowtime=year+""+month+day+ ...

  5. SQL基础学习_02_查询

    SELECT语句 1. SELECT语句查询列(字段):     SELECT <列名>    FROM <表名>;     该语句使用了两个SQL子句,SELECT子句列举了 ...

  6. SegmentFault错误汇总

    在三个月的工作中,经常碰到SegmentFault的错误,有时候是因为计算集群问题导致,更多的时候是程序本身的问题,我计划将之后碰到的SegmentFault整合起来,一来方便日后查看,二来如果能帮助 ...

  7. 判断python对象是否可调用的三种方式及其区别

    查找资料,基本上判断python对象是否为可调用的函数,有三种方法 使用内置的callable函数 callable(func) 用于检查对象是否可调用,返回True也可能调用失败,但是返回False ...

  8. 扎实基础之从零开始-Nginx集群分布式.NET应用

    1       扎实基础之快速学习Nginx Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.其特点是占有内存少 ...

  9. 表单验证插件--formvalidation

    表单验证是一个非常基础的功能,当你的表单项少的时候,可以自己写验证,但是当你的表单有很多的时候,就需要一些验证的插件.今天介绍一款很好用的表单验证插件,formvalidation.其前身叫做boot ...

  10. Check whether a remote server port is open on Linux

    链接:https://www.pixelstech.net/article/1514049471-Check-whether-a-remote-server-port-is-open-on-Linux