当前位置: 首页 > news >正文

计算机导论08-程序设计

文章目录

  • 程序设计基础
    • 程序与程序设计
      • 程序设计的起源
      • 程序设计的概念与分类
        • 程序设计的概念
        • 程序设计分类
    • 程序设计过程
      • 程序设计基本步骤
      • 程序设计的规范化要求
  • 程序设计语言
    • 程序设计语言概述
      • 程序设计语言的结构
      • 程序设计语言的演化
      • 程序设计语言的流行趋势
    • 程序设计语言的类型
      • 机器语言
      • 汇编语言
      • 高级程序设计语言
    • 语言处理(翻译)系统
    • 高级语言的分类
      • 过程化语言
      • 函数式语言
      • 逻辑式语言
      • 面向对象语言
      • 专用语言
  • 程序设计方法
    • 结构化程序设计
      • 结构化程序设计的思想
      • 基本控制结构
    • 面向对象程序设计
      • 面向对象基本原理
      • 面向对象程序设计
  • 补充题

程序设计基础

程序与程序设计

  • 程序(program)是指一组预定的工作指令流(指令序列),可以直接通过计算机执行,完成特定的任务并得到预期的结果。
  • 程序设计是程序的形成过程,它使得人类运用逻辑思维能力以及符号处理能力来构造程序,并借助于计算机设备,能够完成预定的计算。
  • 程序设计是软件构造活动中的重要组成部分。由于程序是软件的本体,软件的质量主要通过程序的质量来体现,程序设计工作在计算机软件构造中占有重要地位。

程序设计的起源

  • 程序设计并不是计算机诞生后才有的。
  • 人将复杂的解决问题的步骤转化成机器能接受的特定指令,而机器可以按照指令去执行任务。这就是程序设计的思想。

程序设计的概念与分类

程序设计的概念

程序设计(programming)是指设计、编制、调试程序的方法和过程。它是目标明确的智力活动,程序设计是一种创造性的劳动,反映了人类思维的规律和模式。

程序设计分类
  • 按照结构性质:结构化程序设计、非结构化程序设计

    • 结构化程序设计: 应用基本程序结构形成复杂程序结构的层次性
    • 结构化程序设计方法的基本结构:顺序结构、分支结构(选择结构)、循环结构(递归结构)
    • 非结构化程序设计: 没有明确的程序结构及层次
  • 按照用户的要求: 过程式程序设计、非过程式程序设计

    • 过程式程序设计: 使用过程式程序设计语言
    • 非过程式程序设计: 使用非过程式程序设计语言
  • 按照程序设计的成分性质:

    • 顺序程序设计、
    • 并发程序设计、
    • 并行程序设计、
    • 分布式程序设计
  • 按照程序设计风格:

    • 逻辑式程序设计、
    • 函数式程序设计、
    • 对象式程序设计

程序设计过程

程序设计基本步骤

  • 分析问题(建模)
    • 现实问题(相关实体因素)→→→物理模型(物理量及其关系)→→→数学模型(变量及其关系—数学函数)
  • 设计算法
    • 确定解决问题的完成方案及过程,明确IPO的具体流程、步骤及内容

Input—输入(源数据), Processing—处理(详细过程及步骤、逻辑关系、先后顺序), Output—输出(结果)
算法描述:流程图、伪代码等

  • 编写程序(编码)

    • 应用程序设计语言将算法转换为指令序列
  • 程序测试(程序调试-Debug)

  • 编写文档

    • 编制程序使用说明书:程序名称、功能、运行的软硬件环境、安装及启动、数据类型、变量说明等等
      -设计过程实际成为算法、数据结构以及程序设计方法学3个方面相统一的过程,这3个方面又称为程序设计三要素

程序设计的规范化要求

成分要求
标识符基本字符集
常量、变量等“单词”,遵守相应的语法规则、正确命名、
使用(按义取名、望名生义、顾名思义),不能使用程序设计语言本身的保留字、关键字等预定义字符
表达式由常量、变量、运算符按语法规则构成的运算式,
通常包括:算术表达式、关系表达式、逻辑表达式
函数和过程具有特定功能的程序单元,作为程序模块可以独立使用,也可以在其它程序中调用
程序行的排列格式结构化程序设计中,通过恰当的行缩进格式可以清晰地分辨程序结构及其层次
注释不参与程序运行,对程序功能、变量、函数、版权等给出解释说明,增强程序的可读性,便于用户理解、使用。

程序设计语言

程序设计语言概述

  • 程序设计语言(programming language)是用于编写计算机程序的语言。
  • 语言的基础是一组符号和一组规则,根据程序设计语言指定的字符集按一定的语法规则编写的符号串(符号序列、符号集合)就是程序。
  • 程序设计语言通常简称为编程语言,通常含有一个标准的字符集和一组用来定义计算机程序的语法规则。 它是一种被标准化的交流工具,用来向计算机发出指令。
  • 程序设计语言的描述一般分为语法及语义。语法表示程序的结构或形式,即表示构成语言的各个记号之间的组合规律,但不涉及这些记号的特定含义;语义则是对于程序的解释,即表示按照各种方法所表示的各个记号的特定含义。

程序设计语言的结构

  • 自然语言的基本结构与程序设计语言基本体系结构对照见表
自然语言程序设计语言注 释
基本符号(字符)基本符号有限字符的集合
词汇常量、变量、保留字、运算符按一定的规则形成的字符组合
短语表达式常量、变量、运算符的组合:算术表达式、关系表达式、逻辑表达式
句子语句具有明确功能的语法单位:注释语句、赋值语句、输入/输出语句、程序控制语句
段落函数相同计算逻辑抽象出的程序单元(若干语句组成,实现特定的功能),可以在不同数据集上重复使用(函数调用)
描写类、包类:用于描述实体,静态的数据+动态的函数包:类的组合或集合
文章程序

程序设计语言的演化

在这里插入图片描述

程序设计语言的流行趋势

下表为TIOBE编程语言社区发布的2017年8月排行榜

序号程序设计语言热门度(%)序号程序设计语言热门度(%)
1Java12.96111Swift1.825
2C6.47712Delphi/Object Pascal1.825
3C++5.55013Visual Basic1.809
4C#4.15914Assembly Language1.805
5Python3.69215R1.766
6Visual Basic .NET2.56916Go1.645
7PHP2.29317MATLAB1.619
8JavaScript2.09818Objective-C1.505
9Perl1.99519Scratch1.481
10Ruby1.96520Dart1.237

程序设计语言的类型

  • 低级语言: 包括机器语言(二进制代码)、汇编语言(助记符+机器语言),贴近硬件,与机器硬件(指令系统)相关,方便机器理解、执行,移植性较差;

  • 高级语言: 种类繁多,介于人类自然语言于低级语言之间的程序设计语言的统称,是由独立的符号集合加上完备的语法规则组成的计算机语言系统,贴近软件,方便人类理解、编程,与机器硬件(指令系统)无关,具有良好的移植性和通用性。

机器语言

机器语言(Machine language)是第一代计算机语言。由计算机的指令系统组成,计算机能够直接理解并执行;依赖于特定的计算机(即与硬件系统相关联,不具有通用性),用户难于书写、理解、记忆。

在这里插入图片描述

汇编语言

符号(助记符) 来代表机器语言中的二进制代码,相对于机器语言便于书写、理解和记忆;能够直接描述计算机硬件的操作,灵活性强。必须通过汇编程序翻译成机器语言才能在机器上执行。

在这里插入图片描述

高级程序设计语言

与机器的指令系统无关;表达形式更接近于自然语言,方便问题描述,容易理解; 适用于不同硬件系统的计算机,必须翻译(编译、解释)成机器语言才能在机器上执行。

在这里插入图片描述

语言处理(翻译)系统

  • 系统软件的重要组成部分,其功能是将高级语言程序转换为汇编语言程序或机器语言程序

解释程序(边解释边执行)

  • 解释程序将高级程序设计语言书写的源程序作为输入,解释一句后就提交计算机执行一句,并不形成目标程序。就像外语翻译中的“口译”一样,说一句翻译一句,不产生全文的翻译文本。(容易查错、方便修改,执行效率较低)

编译程序

  • 编译程序是把用高级程序设计语言书写的源程序,翻译成等价的计算机汇编语言或机器语言书写的目标程序。编译出的目标程序通常还要经历运行阶段,以便在运行程序的支持下运行,加工初始数据,算出所需的计算结果。(不方便查错、纠错,执行效率较高

(高级语言)源程序→编译→汇编语言程序→汇编→(机器语言)目标程序→运行

高级语言的分类

过程化语言

  • 过程化语言又称为命令式语言或强制性语言,它采用与计算机硬件执行程序相同的顺序来编写程序,过程化语言的程序实际上是一套指令,这些指令从头到尾按一定的顺序执行,除非有其他指令强行控制。
  • 过程化语言要求程序员通过寻找解决问题的算法来进行程序设计,即将算法表示成命令的序列。每一条指令都是一个为完成特定任务而对计算机系统发出的命令。
    如FORTRAN、COBOL、Pascal、Basic、Ada、C等等

函数式语言

  • 定义一系列基本函数,可供其他任何需要者调用。 函数就象“黑盒”,处理输入并产生输出,表示输入与输出的对应关系。通过若干个基本函数来组合创建新的函数。适合于进行人工智能等工作的计算。
  • 用函数式语言设计程序实际上就是将预先定义好的“黑盒”联结在一起

在这里插入图片描述

逻辑式语言

  • 逻辑式语言的语义基础是基于一组已知规则的形式逻辑系统。这种语言主要用在专家系统的实现中。逻辑式语言又称为声明式语言或说明性语言,它依据逻辑推理的原则回答查询,解决问题的基本算法就是反复地进行归结和推理。

面向对象语言

  • 面向对象语言设计程序时将对象和操作是绑定在一起使用的。程序员要先定义对象和对象允许的操作及对象的属性,然后通过对象调用这些操作去解决问题。
  • 比较典型的面向对象语言有:Smalltalk、C++、Java、C#、Python等等,它们各有一些特性。

专用语言

  • 随着Internet的发展,出现了一些更适合网络环境下的程序设计语言,这些语言或者属于上述某一种类型的语言,或者属于上述多种类型混合的语言,适合特殊的任务,称为专用语言。如HTML、PHP、Perl和SQL等。

程序设计方法

结构化程序设计

结构化程序设计的思想

  • 结构化程序设计方法的主要观点
    • 采用自顶向下、逐步求精的程序设计方法;(设计风格-顶层设计、分治策略、精致细化)
    • 使用顺序、选择(分支)、循环三种基本控制结构构造程序。(结构化编码)
    • 以模块化设计为中心,将待开发的软件系统划分为功能相互独立又互相联系的若干个模块,使得完成每一个模块的工作变单纯而明确,为设计一些较大的软件打下了良好的基础。(模块化设计)

基本控制结构

顺序结构
在这里插入图片描述

选择结构
在这里插入图片描述

循环结构
在这里插入图片描述

面向对象程序设计

面向对象基本原理

  • 根据人类对客观世界的认知规律、思维方式和方法,面向对象方法学对复杂的客观世界进行如下抽象和认识。
    • 客观世界(事物)由许多各种各样的实体组成,这些实体称为对象。(对象)
    • 每个对象都具有各自的内部状态和运动规律,在外界其他对象或环境的影响下,对象本身根据发生的具体事件做出不同的反应。(对象的属性与关系)
    • 按照对象的属性和运动规律的相似件,可以将相近的对象划分为一类。(类-属性相似或相近的对象集合)
    • 复杂的对象由相对简单的对象通过一定的方式组成。(复杂对象-相互关联的简单对象的集合)
    • 不同对象的组合及其间的相互作用和联系构成了各种不同的系统,构成了人们所面对的客观世界。(系统=对象+对象属性+对象组合+作用与联系)

将上述5项基本观点形式化就可以得到面向对象语言的主要语法框架。如果根据上述基本观点,结合人类认知规律制定出进行分析和设计的策略、步骤,就产生了面向对象的分析与设计方法。

  • 从哲学方法论的角度看面向对象的程序设计思想:从小到大,从个体到集合,从简单到复杂,从浅显到深奥

面向对象程序设计

  • 面向对象程序设计(Object Oriented Programming,OOP)方法的本质是以建立模型体现出来的抽象思维过程和面向对象的方法。
  • 面向对象的基本概念有对象、类、消息、封装、继承和多态等。
  • 面向对象程序设计语言使用数据抽象技术,把数据和对数据的操作作为一个整体(对象)来描述。即使其中的数据发生变化,只需单独修改或重写这部分有关的对象即可。可以像搭积木一样组成需要的软件项目。

补充题

结构化程序设计限制使用GOTO语句。

  • T

面向对象程序设计方法的主要优点是程序结构清晰。

  • F

软件重用是提高软件开发生产率和目标系统质量的重要途径。

  • T
  1. Java语言是一种面向对象的、适用于环境的(网络)程序设计语言。
    1. 面向过程程序设计将(数据)和(数据处理)分离。
  2. 对于先判断条件,然后再执行循环体的重复结构称为(当型循环结构);对于先执行循环体,然后再判断条件的重复结构称为直到型循环结构。
  3. 对象和类的关系可以表示为(具体)和(抽象)的关系。
  4. 在面向对象方法中,类之间共享属性和操作的机制称为(继承)。
  5. 一个类可以从直接或间接的祖先中继承所有属性和方法。采用这个方法提高了软件的可(重用性)。
  6. 计算机程序由以下两部分(指令部分和数据部分)组成。
  7. 在面向对象方法中,一个对象请求另一个对象为其服务的方式是通过发送(消息
  8. 信息隐蔽的概念与下述概念直接相关(模块耦合度
  9. 下述概念中,不属于面向对象基本机制的是(** 模块调用 **)

相关文章:

  • 微信小程序 - 视图与逻辑 介绍
  • DML的基本操作
  • 风力发电防雷监测浪涌保护器的应用解决方案
  • LeetCode 每日一题 2024/1/8-2024/1/14
  • 使用scipy处理图片——滤镜处理
  • Rust 错误处理(上)
  • 爬虫之Cookie获取:利用浏览器模拟一个cookie出来、面对反爬虫、加密的cookie的应对方法
  • 如何在CentOS 7 中搭建Python 3.0 环境
  • 项目管理十大知识领域之项目整体管理
  • 车载音频EMI的产生及典型音频功放AW836XX的解决方案
  • C#使用Stopwatch实现执行耗时及性能监测
  • JavaScript类型检测【全】
  • 20240116-唯一出现次数
  • Java后端学习路线
  • ssh -T git@github.com Connection timed out 解决方案-自测有效
  • [数据结构]链表的实现在PHP中
  • Apache Zeppelin在Apache Trafodion上的可视化
  • codis proxy处理流程
  • Less 日常用法
  • Linux各目录及每个目录的详细介绍
  • Python socket服务器端、客户端传送信息
  • python大佬养成计划----difflib模块
  • React+TypeScript入门
  • scala基础语法(二)
  • Sublime Text 2/3 绑定Eclipse快捷键
  • Vultr 教程目录
  • 大型网站性能监测、分析与优化常见问题QA
  • 关于springcloud Gateway中的限流
  • 记一次和乔布斯合作最难忘的经历
  • 利用DataURL技术在网页上显示图片
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 入门到放弃node系列之Hello Word篇
  • 三分钟教你同步 Visual Studio Code 设置
  • 用Canvas画一棵二叉树
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • #{}和${}的区别?
  • #前后端分离# 头条发布系统
  • (1)Nginx简介和安装教程
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (33)STM32——485实验笔记
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (剑指Offer)面试题34:丑数
  • (小白学Java)Java简介和基本配置
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)visual stdio 书签功能介绍
  • (转)程序员疫苗:代码注入
  • .axf 转化 .bin文件 的方法
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .NET和.COM和.CN域名区别
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复