2024-2025-1 20241329 《计算机基础与程序设计》第八周学习总结

作业信息

作业归属课程:https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP
作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK08
作业目标:功能设计与面向对象设计;面向对象设计过程;面向对象语言三要素;汇编、编译、解释、执行
作业正文:https://www.cnblogs.com/incamellia/p/18550414

教材学习内容总结

《计算机科学概论(第七版)》第9章

  1. 功能设计与面向对象设计
  • 功能设计:
    功能设计关注于软件系统的功能需求,即系统应该做什么。它通常涉及将问题分解为更小的、可管理的功能单元,并定义这些单元之间的接口。
  • 面向对象设计:
    面向对象设计(OOD)是一种以类和对象为中心的软件设计方法。它强调数据(对象的状态)和行为(对象的操作)的封装,以及类之间的继承和多态性。OOD的目标是创建一个可重用、可扩展和易于维护的系统。
  1. 面向对象设计过程
  • 需求分析:确定系统的需求,包括功能需求和非功能需求。
  • 概念性设计:定义系统的高级结构,包括主要的类和对象,以及它们之间的关系。
  • 详细设计:细化概念性设计,定义每个类的属性和方法,以及类之间的交互。
  • 实现:根据详细设计编写代码。
  • 测试:验证代码是否满足需求,并修复发现的问题。
  • 维护:根据用户反馈和系统变化,对软件进行持续的改进和更新。
  1. 面向对象语言三要素
  • 封装:
    封装是将数据(属性)和操作数据的方法(行为)捆绑在一起的过程。它隐藏了对象的内部状态,只通过一个清晰的接口与外部交互。
  • 继承:
    继承是一种创建新类(子类)的方式,新类可以继承现有类(父类)的属性和方法。这允许代码重用,并建立类之间的层次结构。
  • 多态:
    多态性允许不同的对象对同一消息做出响应。这意味着同一个方法调用可以有不同的行为,这取决于对象的实际类型。
  1. 汇编、编译、解释、执行
  • 汇编:
    汇编是将汇编语言代码转换为机器代码的过程。汇编语言是一种低级编程语言,它更接近机器代码,但仍包含一些助记符,以便于人类理解和编写。
  • 编译:
    编译是将高级编程语言(如C++或Java)代码转换为机器代码的过程。编译器会进行语法和语义分析,生成可执行文件。
  • 解释:
    解释是直接执行源代码的过程,而不需要将其转换为机器代码。解释器逐行读取源代码,并立即执行相应的操作。Python和JavaScript是使用解释器的编程语言的例子。
  • 执行:
    执行是计算机运行机器代码的过程。在执行过程中,CPU会逐条读取指令,并执行它们。

《C语言程序设计》第7章

  1. 函数的分类和定义
  • 函数分类:
    库函数:C语言标准库中预定义的函数,如printf、scanf等。
    用户自定义函数:用户根据需要编写的函数,用于执行特定的任务。
  • 函数定义:
    函数定义包括返回类型、函数名、参数列表和函数体。
    返回类型 函数名(参数类型 参数名, ...){ 函数体 }
  1. 向函数传递值和从函数返回值
  • 函数调用:
    调用函数时,需要提供与函数定义匹配的参数列表。
    函数名(实参1, 实参2, ...);
  • 函数原型:
    函数原型是函数定义的声明,它告诉编译器函数的返回类型、名称和参数类型。
    返回类型 函数名(参数类型 参数名, ...);
  • 函数的封装与防御性程序设计
    封装:封装是将数据(变量)和操作数据的代码(函数)组合在一起,对外隐藏内部实现细节。
    防御性程序设计:编写代码时考虑异常情况和错误处理,确保程序的健壮性。
  • 函数设计的基本原则
    模块化:将程序分解成独立的、可重用的模块,每个模块完成一个特定的功能。
    单一职责原则:每个函数应该只做一件事,并且做好这件事。
    开放/封闭原则:软件实体应该对扩展开放,对修改封闭。
  1. 函数的递归调用和递归函数
  • 递归调用:函数直接或间接地调用自身,直到满足某个条件停止。
  • 递归函数:递归函数必须有一个明确的结束条件,以避免无限递归。
  1. 变量的作用域和生存周期
  • 作用域:
    局部变量:在函数内部定义,只在该函数内部可见。
    全局变量:在函数外部定义,在整个程序中可见。
  • 生存周期:
    局部变量:在函数调用时创建,在函数返回时销毁。
    全局变量:在程序开始时创建,在程序结束时销毁。
  1. 模块化程序设计
  • 模块化:将程序分解成模块,每个模块完成一个特定的功能,通过函数接口与其他模块交互。
  • 头文件:使用头文件(.h)来声明函数原型和全局变量,实现模块间的接口定义。
  • 源文件:包含函数定义的文件(.c),每个模块一个源文件。
  • 编译和链接:编译每个模块的源文件,然后将它们链接在一起生成可执行文件。

教材学习中的问题和解决过程

问题:递归函数和循环结构有什么区别和共同点吗

  1. 区别
  • 实现方式:
    递归函数:递归是通过函数自己调用自己来实现重复操作的。每次递归调用都会创建一个新的函数调用栈帧,用于存储局部变量和返回地址。
    循环结构:循环是通过重复执行一段代码块来实现重复操作的,通常使用for、while或do-while循环。
  • 内存使用:
    递归函数:每次递归调用都会占用新的栈空间,如果递归深度过大,可能会导致栈溢出。
    循环结构:循环不涉及额外的栈空间分配,通常只使用循环变量和条件判断所需的内存。
  • 适用场景:
    递归函数:适用于可以分解为相似子问题的问题,如树的遍历、分治算法等。
    循环结构:适用于需要重复执行固定次数的操作,或者直到满足某个条件为止。
  • 性能:
    递归函数:递归函数可能会有额外的性能开销,因为每次递归调用都涉及到函数调用的开销,以及可能的栈空间分配和回收。
    循环结构:循环通常性能更好,因为它们避免了函数调用的开销。
  • 可读性和复杂性:
    递归函数:递归函数的代码通常更简洁,易于理解,特别是对于自然适合递归的问题。
    循环结构:循环结构可能需要更多的代码来处理迭代和条件判断,但它们通常更容易调试和优化。
  1. 共同点
  • 重复执行:递归函数和循环结构都可以用于重复执行一段代码。
  • 条件控制:两者都需要一个明确的结束条件,以避免无限递归或无限循环。
  • 代码块执行:递归函数和循环结构都可以执行一段代码块。
  • 可替代性:在某些情况下,递归函数可以用循环结构替代,反之亦然,尽管这可能会影响代码的可读性和性能。

基于AI的学习

image

参考资料

posted @ 2024-11-17 14:04  20241329刘沛妤  阅读(8)  评论(0编辑  收藏  举报