2024-2025-1 20241304 《计算机基础与程序设计》第8周学习总结
作业信息
|这个作业属于哪个课程|<2024-2025-1-计算机基础与程序设计)|>
|-- |-- |
|这个作业要求在哪里|<作业要求的链接>(如2024-2025-1计算机基础与程序设计第八周作业)|
|这个作业的目标|<
学习目标
功能设计与面向对象设计
面向对象设计过程
面向对象语言三要素
汇编、编译、解释、执行>|
|作业正文|... https://www.cnblogs.com/xiaoyuanyuan999/p/18551158 |
教材学习内容总结
计算机科学概论第七章内容总结
《计算机科学概论》第八章主要内容总结
以下是一份关于《计算机程序科学概论》第八章学习总结:
《计算机程序科学概论》第八章学习总结
一、功能设计与面向对象设计
功能设计侧重于将系统分解为一系列的功能模块,每个模块执行特定的任务,通过数据的传递和处理来实现系统的整体功能。这种设计方法强调功能的独立性和模块之间的接口清晰性。
而面向对象设计则是以对象为核心,将数据和对数据的操作封装在一起形成类。对象之间通过消息传递相互协作来完成系统功能。它更符合人类认知世界的方式,具有更好的可维护性、可扩展性和代码复用性。例如,在一个图形绘制系统中,功能设计可能会划分出图形绘制模块、颜色管理模块等;而面向对象设计则会创建图形类、颜色类等,图形对象具有绘制自身的方法,颜色对象可以被图形对象引用以确定绘制颜色。
二、面向对象设计过程
问题分析:深入理解问题域,确定系统需要处理的对象、对象的属性以及对象之间的关系。例如开发一个图书馆管理系统,需要分析出图书、读者、管理员等对象,以及它们各自的属性如图书的书名、作者、馆藏位置,读者的姓名、借阅记录等,还有它们之间的借阅、管理等关系。
类的设计:根据问题分析结果,设计出相关的类,定义类的属性和方法。以图书类为例,属性可能包括书号、书名、出版社等,方法可能有借书、还书等操作对应的方法(可能会涉及到与其他类如读者类的交互)。
类的层次结构设计:确定类之间的继承关系,以实现代码复用和功能扩展。比如在图形类的继承体系中,可能有基础图形类,然后派生出圆形类、矩形类等,子类继承父类的通用属性和方法,并可以添加自身特有的属性和方法。
对象交互设计:规划对象之间如何通过消息传递进行协作。在图书馆管理系统中,读者对象向图书管理员对象发送借书请求消息,图书管理员对象再与图书对象交互完成借书操作,并更新相关信息。
三、面向对象语言三要素
封装:将数据和操作数据的方法包装在一个单元(类)中,隐藏内部实现细节,只对外提供公共的接口。例如在一个银行账户类中,账户余额数据被封装在类内部,外部只能通过存款、取款等公共方法来操作余额,这样保证了数据的安全性和完整性,防止外部随意修改数据。
继承:允许创建一个新类(子类)从现有类(父类)继承属性和方法,子类可以扩展或修改父类的行为。如前面提到的图形类继承体系,子类矩形类继承了基础图形类的坐标属性和绘制方法,并可以增加计算面积等自身特有的方法。
多态:同一操作作用于不同的对象可以有不同的行为表现。比如在一个动物类体系中,动物都有发出声音的方法,但不同种类的动物(如猫类、狗类)发出声音的具体实现不同,当调用动物对象的发声方法时,会根据对象的实际类型执行相应的发声行为,增强了代码的灵活性和可扩展性。
四、汇编、编译、解释、执行
汇编:汇编语言是一种低级编程语言,与机器语言密切相关。汇编过程是将汇编语言源程序转换为机器语言目标程序的过程。汇编语言使用助记符来表示机器指令,如用 “MOV” 表示数据传送指令等。汇编程序需要将这些助记符指令转换为对应的二进制机器指令,使得计算机能够直接理解和执行。例如,对于简单的计算任务,汇编语言可能需要详细地操作寄存器来完成数据的存储、运算和结果的存储。
编译:编译是将高级编程语言(如 C、C++、Java 等)编写的源程序一次性转换为目标机器的机器语言程序(可执行文件)的过程。编译器会对源程序进行词法分析、语法分析、语义分析、代码优化等一系列复杂的操作。例如,对于一个 C 语言程序,编译器会检查程序中的变量声明是否正确、语句语法是否符合规范等,然后生成对应的机器代码文件。这个可执行文件可以在特定的操作系统和硬件平台上直接运行,运行速度相对较快,但编译过程可能比较耗时,且如果源程序有修改,通常需要重新编译整个程序。
解释:解释执行是另一种高级语言执行方式,解释器逐行读取源程序代码并立即执行相应的操作,不需要像编译那样生成完整的目标程序。例如 Python 语言,解释器会在运行时依次处理每一行代码,遇到变量赋值就执行赋值操作,遇到函数调用就执行函数体。这种方式的优点是灵活性高,便于调试,因为可以随时修改代码并立即看到效果;缺点是执行效率相对较低,因为每次运行都需要重新解释代码。
执行:无论是编译后的可执行文件还是解释执行的程序,最终都是在计算机硬件上运行,计算机的中央处理器(CPU)按照指令序列依次执行操作,从内存中读取数据,进行计算处理,并将结果存储回内存或输出到外部设备。不同的执行方式在执行效率、资源占用、开发调试便利性等方面存在差异,在实际应用中需要根据具体需求选择合适的编程语言和执行机制。
通过对本章内容的学习,深入理解了功能设计与面向对象设计的特点与差异,掌握了面向对象设计的基本过程和面向对象语言的关键要素,同时明晰了汇编、编译、解释等不同程序处理方式的原理与优劣,为进一步深入学习计算机程序设计与开发奠定了坚实的基础。
基于AI的学习
AI:
编译到底是什么?它只是把代码从一种形式转变成另一种形式吗?
我:
编译不只是简单的形式转换。它是将高级编程语言编写的源代码转换为计算机能直接执行的机器代码或字节码的过程,这个过程包括词法分析、语法分析等多个复杂步骤。
AI
那词法分析在编译中是如何具体工作的呢?
我
词法分析是编译的第一步。它会将输入的源程序字符流按照词法规则分割成一个个单词,比如关键字、标识符、常量、运算符等,就像把一句话拆分成一个个有意义的词语一样。
AI
语法分析和词法分析有什么紧密联系呢?
我
语法分析基于词法分析的结果。词法分析得到单词后,语法分析依据语法规则来分析这些单词组成的序列是否符合该语言的语法结构,构建出语法树,以此检查程序结构的正确性。
AI
语义分析在编译中的作用是什么呢?
我
语义分析是检查源程序是否有语义错误。它会分析语法树中各表达式、语句的语义,比如类型是否匹配、变量是否先声明后使用等,确保程序在逻辑上是正确的。
AI
编译中的代码优化是如何实现的呢?
我
代码优化有多种方式。比如可以通过对中间代码或目标代码进行改进,减少不必要的计算、合并相同的表达式、提高寄存器的使用效率等,以此提高程序的运行效率。
AI
不同的高级编程语言编译过程有很大差异吗?
我
不同高级编程语言在编译过程有相似的阶段,但也有差异。比如语法和语义规则不同,导致词法、语法、语义分析的具体细节不同。有些语言可能还有独特的优化策略或编译特性。
AI
编译和解释有什么本质区别呢?
我
编译是一次性将源代码转换为目标代码,后续可以多次直接运行目标代码。而解释是逐行翻译并执行源代码,每次运行都需要重新解释,编译后的程序运行速度通常比解释执行的快。
AI
编译过程中出现错误如何处理呢?
我
编译过程中如果在词法分析阶段出错,会提示词法错误相关信息,比如非法字符。语法分析出错则指出语法结构不符合规则的位置。语义分析出错会提示类型不匹配等语义问题。错误处理机制会尽可能准确地指出问题所在,方便程序员修改。
AI
编译技术在现代软件开发中有哪些新的发展趋势呢?
我
现在编译技术有几个趋势。一方面,更注重跨平台编译,方便开发在不同操作系统上运行的软件。还有就是针对特定硬件的优化编译,比如为了充分利用 GPU 的性能进行特殊编译。另外,即时编译(JIT)技术在一些领域也得到了更广泛的应用,能在运行时动态优化代码。
总结
通过这一系列的问题与回答,我们对编译有了更深入的理解。编译是一个复杂的过程,包括词法分析、语法分析、语义分析、代码优化等多个阶段。不同编程语言的编译过程有异同,和解释执行有本质区别。编译过程中的错误处理能帮助发现程序问题。而且编译技术在现代有新的发展趋势,如跨平台、针对特定硬件优化和即时编译等,这些都对现代软件开发有着重要意义。
代码调试中的问题和解决过程
-
问题1:调用数组数据不正确
-
问题1解决方案: do
{
printf("input score,if over,input -1\n");
scanf("%d",&score[num]);
num++;
}while(score[num-1]!=-1);***** -
问题2:数组声明与调用规则不清楚
-
问题2解决方案:
int Num(int score[]);声明
num=Num(score);
ave=Ave(num,score);调用 -
...