2024-2025-1 20241415《计算机基础与程序设计》第八周学习总结
如2024-2025-1 20241415 《计算机基础与程序设计》第八周学习总结
作业信息
这个作业属于哪个课程 | 2024-2025-1-计算机基础与程序设计 |
---|---|
这个作业要求在哪里 | 2024-2025-1计算机基础与程序设计第八周作业 |
这个作业的目标 | 功能设计与面向对象设计,面向对象设计过程,面向对象语言三要素,汇编、编译、解释、执行 |
作业正文 | https://www.cnblogs.com/zhaoshaoning/p/18550670 |
教材学习内容总结
功能设计与面向对象设计
一、功能设计
定义
功能设计主要关注系统或产品应该做什么,它侧重于确定和描述系统的各种功能以及这些功能之间的相互关系。其目的是满足用户在特定场景下的需求。例如,设计一个电商网站的功能,需要考虑用户的购物流程,包括商品浏览、加入购物车、下单、支付、查看订单状态等功能。
流程
需求收集:通过与用户、利益相关者沟通,收集他们对系统功能的期望和要求。这可以通过问卷调查、用户访谈、竞品分析等方式来实现。例如,在设计一款健身APP时,通过对健身爱好者的访谈,了解他们希望有个性化的训练计划生成功能、运动数据记录功能等。
功能规划与分解:将收集到的需求进行梳理,规划出系统的主要功能模块,并进一步分解为具体的子功能。比如,对于上述健身APP,主要功能模块可能包括训练计划、运动记录、社交互动等。在训练计划模块中,又可以分解出根据用户身体数据生成计划、计划编辑、计划分享等子功能。
功能描述与定义:详细地描述每个功能的输入、输出、操作流程和预期效果。以购物车功能为例,输入是用户添加商品的操作,输出是购物车中商品列表的展示,操作流程包括添加商品、删除商品、修改商品数量等,预期效果是方便用户管理要购买的商品。
功能优先级排序:根据用户需求的重要性和紧急程度,对功能进行优先级排序。对于一个新的在线教育平台,视频课程播放功能可能是高优先级,而课程评价的点赞功能可能是相对低优先级。
工具和方法
用例图(Use Case Diagram):用于描述系统与外部参与者(用户、其他系统等)之间的交互关系,展示系统的主要功能。例如,在图书馆管理系统的用例图中,管理员和读者是参与者,管理员可以进行图书入库、借阅管理等功能,读者可以进行图书借阅、归还等功能。
功能流程图(Flowchart):以图形化的方式展示功能的执行流程,清晰地呈现操作步骤和决策点。比如,在一个审批流程的功能流程图中,会显示申请提交后,根据不同的条件(如金额大小、部门等),进入不同的审批路径。
二、面向对象设计
定义
面向对象设计(Object - Oriented Design,OOD)是一种软件设计方法,它以对象为中心,将现实世界中的事物抽象为软件对象,对象包含数据(属性)和行为(方法)。例如,将一辆汽车抽象为一个对象,它的属性可能包括颜色、品牌、速度等,它的方法可能包括启动、加速、刹车等。
原则
封装(Encapsulation):将对象的属性和方法封装在一个单元中,对外只提供必要的接口,隐藏内部实现细节。例如,在一个银行账户对象中,账户余额是属性,存款和取款是方法。这些属性和方法被封装在账户对象内部,外部用户(如银行柜员或客户通过网上银行)只能通过提供的接口(如存款接口、取款接口)来操作账户余额,而不能直接访问余额数据。
继承(Inheritance):允许创建新的类(子类)继承现有类(父类)的属性和方法,从而实现代码的复用和层次结构的构建。比如,在一个图形绘制系统中,有一个基类“图形”,它具有颜色、位置等属性和绘制方法。然后有子类“圆形”和“矩形”,它们继承了“图形”类的属性和方法,并可以添加自己特有的属性和方法,如圆形的半径属性和根据半径计算面积的方法。
多态(Polymorphism):同一种操作作用于不同的对象可以有不同的行为。例如,在一个动物模拟系统中,有一个“动物”类,它有一个“发出声音”的方法。不同的子类如“狗”和“猫”继承了“动物”类,它们对“发出声音”方法的实现不同,狗是“汪汪”叫,猫是“喵喵”叫。
流程
识别对象:从问题域中识别出相关的对象。例如,在设计一个餐厅管理系统时,可能识别出顾客、服务员、厨师、餐桌、菜品等对象。
定义对象的属性和方法:对于每个对象,确定其属性和方法。以菜品对象为例,属性可能包括名称、价格、口味等,方法可能包括显示菜品信息、修改价格等。
建立对象之间的关系:确定对象之间的关联、聚合、组合等关系。在餐厅管理系统中,服务员和顾客是关联关系,一个服务员可以服务多个顾客;餐桌和菜品是聚合关系,一张餐桌可以有多个菜品。
设计类层次结构(如有需要):根据继承关系,设计类的层次结构。例如,在员工管理系统中,有一个“员工”基类,下面可以有“管理人员”“技术人员”等子类,子类继承了员工类的基本属性(如姓名、工号等)和方法(如打卡等),并可以添加自己特有的属性和方法。
面向对象语言三要素
封装(Encapsulation)
定义:封装是指将对象的属性和操作(方法)组合在一起,形成一个独立的单元,并且尽可能地隐藏对象的内部细节。就好像把东西装在一个盒子里,只通过特定的开口(接口)来访问盒子里的东西。
示例:以银行账户类为例,账户余额(属性)和存款、取款操作(方法)被封装在银行账户这个类中。外部代码不能直接访问账户余额这个属性,而是需要通过存款、取款这些接口(方法)来间接访问和修改账户余额。在Java中,通常将属性定义为私有(private),然后提供公共(public)的访问器(getter)和修改器(setter)方法来控制对属性的访问。
作用:
数据保护:通过隐藏内部细节,可以防止外部代码对对象内部数据的非法访问和修改,保证数据的完整性和安全性。
降低耦合度:封装使得对象之间的相互依赖关系更加简单和明确。其他对象只需要知道如何调用接口,而不需要了解对象内部的实现细节,这样在修改对象内部实现时,对其他对象的影响较小。
继承(Inheritance)
定义:继承是一种在已有类(父类或基类)的基础上创建新类(子类或派生类)的机制。子类继承父类的属性和方法,并且可以根据需要添加新的属性和方法,或者重写(override)父类的方法。
示例:在一个动物分类系统中,有一个动物(Animal)基类,它有属性如名称(name)和方法如发出声音(makeSound)。然后有狗(Dog)和猫(Cat)子类。狗和猫类继承了动物类的属性和方法,并且狗类可以添加新的属性如品种(breed),同时重写发出声音方法,使其发出“汪汪”声;猫类也可以重写发出声音方法,使其发出“喵喵”声。
作用:
代码复用:子类可以直接继承父类的属性和方法,避免了重复编写相同的代码,提高了代码的开发效率。
层次结构建立:继承可以帮助构建类的层次结构,更好地反映现实世界中的事物关系或软件系统中的逻辑关系,使得代码结构更加清晰和易于理解。
多态(Polymorphism)
定义:多态是指同一种操作(方法调用)在不同的对象上可以产生不同的行为。它允许以统一的方式来处理不同类型的对象,这些对象可以属于同一个类层次结构中的不同类。
示例:在一个图形绘制系统中,有一个图形(Shape)基类,它有一个绘制(draw)方法。然后有圆形(Circle)和矩形(Rectangle)子类,它们都重写了draw方法。当有一个函数接受一个Shape类型的对象并调用draw方法时,根据实际传入的是圆形对象还是矩形对象,会执行相应的draw方法。
作用:
灵活性和可扩展性:多态使得代码更加灵活和可扩展。可以在不修改现有代码结构的基础上,添加新的类并实现相同的接口,这些新类可以与现有的代码无缝集成。
代码复用和统一处理:通过多态,可以用统一的方式处理不同类型的对象,提高了代码的复用性。例如,在一个游戏开发中,可以用一个函数来处理不同类型的游戏角色(如战士、法师等)的攻击行为,每个角色类重写攻击方法,根据自身特点实现不同的攻击方式。
汇编(Assembly)
定义:汇编是将汇编语言编写的程序转换为机器语言的过程。汇编语言是一种低级编程语言,它使用助记符来表示机器指令。例如,在x86汇编语言中,“MOV AX, 1”表示将数值1传送到AX寄存器中。这个指令对应的机器语言是一串二进制代码,汇编程序的任务就是将这些助记符指令转换为机器可以直接执行的二进制代码。
编译(Compilation)
定义:编译是将高级编程语言(如C、C++、Java等)编写的源程序一次性地转换为目标机器的机器语言程序(在有些情况下是中间表示形式,然后再进一步转换为机器语言)的过程。例如,将一个C++源程序编译为可执行文件,这个可执行文件包含了机器语言指令,计算机可以直接运行它。
解释(Interpretation)
定义:解释是指解释器直接执行高级编程语言编写的源程序,它逐行(或逐段)读取源程序,并立即执行相应的操作,而不是像编译那样先将整个源程序转换为机器语言。例如,Python程序通常是通过解释器来执行的。
执行(Execution)
定义:执行是计算机运行程序的过程,它可以通过直接运行机器语言程序(对于编译后的程序)或者通过解释器运行高级语言程序来实现。执行过程中,计算机的中央处理器(CPU)从内存中读取指令,进行解码和执行操作,不断重复这个过程,直到程序结束。
教材学习中的问题和解决过程(先问 AI)
-
问题1:功能设计与面向对象设计的关系是什么?
-
问题1解决:
相互依存
功能设计确定了系统要实现的功能,为面向对象设计提供了目标和方向。面向对象设计则是实现功能设计的一种有效手段,通过将功能分解到各个对象及其方法中,来构建系统。例如,功能设计确定了一个电商系统需要有商品搜索功能,面向对象设计就可以将这个功能分配到商品对象、搜索框对象等相关对象的方法中,通过这些对象之间的交互来实现搜索功能。
迭代过程
在软件开发过程中,功能设计和面向对象设计通常是一个迭代的过程。随着面向对象设计的深入,可能会发现功能设计中的某些功能不合理或者需要补充新的功能。同样,功能的调整也会影响面向对象设计的对象结构和方法。例如,在开发一个项目管理软件时,最初的功能设计可能没有考虑到任务依赖关系的可视化功能。在面向对象设计过程中,发现这种功能对于用户很重要,于是返回功能设计阶段重新规划这个功能,然后再调整面向对象设计的对象(如添加任务依赖关系对象)和方法来实现该功能。 -
问题2:汇编语言有什么优势?
-
问题2解决:1. 对硬件的精确控制
- 寄存器操作:汇编语言可以直接访问和操作计算机的寄存器。寄存器是CPU内部的高速存储单元,用于暂存指令、数据和地址。例如,在x86架构中,有通用寄存器如AX、BX、CX、DX等。通过汇编语言,可以精确地指定将数据加载到哪个寄存器,或者从哪个寄存器读取数据进行计算。如“MOV AX, [内存地址]”指令可以将指定内存地址的数据加载到AX寄存器中,这种对寄存器的直接控制能够实现高效的数据处理,在一些对性能要求极高的场景下非常关键。
- 硬件接口编程:在编写设备驱动程序等与硬件紧密相关的软件时,汇编语言的优势尤为明显。它可以直接与硬件的接口寄存器进行交互。以编写一个简单的串口通信程序为例,通过汇编语言能够精确地设置串口控制器的波特率寄存器、数据格式寄存器等,从而实现准确的数据发送和接收。这种对硬件接口的精细操作是高级语言很难直接实现的。
- 高效的执行性能
- 指令执行速度:由于汇编语言非常接近机器语言,经过汇编程序翻译后的机器码在执行时几乎没有额外的开销。相比高级语言,汇编语言编写的程序在执行速度上往往更有优势。例如,在一些实时性要求很高的系统中,如工业控制中的嵌入式系统,对信号的快速响应至关重要。汇编语言能够以最快的速度执行指令,及时处理输入的传感器信号并输出控制信号,确保系统的稳定运行。
- 代码优化潜力:汇编语言程序员可以根据具体的硬件特性和程序需求进行深度的代码优化。例如,通过合理安排指令的顺序、充分利用寄存器来减少内存访问次数、利用指令的并行性等方式来提高程序的性能。对于一些复杂的算法,如数字信号处理中的快速傅里叶变换(FFT),通过汇编语言优化后的代码执行效率可以得到显著提升。
- 程序的紧凑性
- 代码体积小:汇编语言编写的程序通常具有较小的代码体积。这是因为汇编语言可以精确地使用硬件资源,避免了高级语言中可能存在的一些冗余代码。例如,在一些资源受限的嵌入式系统中,如智能手表或小型传感器设备,存储空间非常有限。使用汇编语言可以在有限的存储空间内实现更多的功能,使程序能够高效地存储和运行。
- 可用于操作系统和底层开发
- 内核开发:在操作系统内核的开发中,部分关键代码需要使用汇编语言。例如,在操作系统启动阶段,需要用汇编语言编写初始化代码来设置CPU的工作模式、初始化内存管理单元(MMU)、加载内核的其他部分等。这些操作是操作系统运行的基础,汇编语言能够提供必要的精确控制,确保系统能够正确启动和运行。
- 引导程序编写:计算机系统的引导程序(如BIOS或UEFI的部分代码)也经常使用汇编语言。引导程序是计算机启动时最先运行的程序,它负责检测硬件设备、加载操作系统内核等重要任务。汇编语言的高效性和对硬件的直接控制能力使其非常适合编写这些对系统启动至关重要的程序。
- 安全敏感应用场景
- 加密解密:在加密解密领域,汇编语言有重要的应用。由于其高效性和对数据处理的精确控制,一些高级加密标准(AES)、数据加密标准(DES)等加密解密算法可以用汇编语言进行优化实现。这样可以在保证数据安全的同时,提高加密解密的速度,满足对数据安全性和处理效率要求较高的应用场景,如金融交易系统、企业数据安全系统等。
- 反病毒和安全防护:在反病毒软件和安全防护软件的开发中,汇编语言也有应用。例如,在病毒特征码扫描过程中,使用汇编语言可以实现快速、精确的内存扫描,及时发现并清除病毒等恶意软件。同时,在软件的自我保护机制方面,汇编语言可以帮助构建更强大的反调试和反逆向工程技术,提高软件的安全性。
基于AI的学习