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

news/2024/11/17 16:37:02/文章来源:https://www.cnblogs.com/zhaoshaoning/p/18550670

如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寄存器中,这种对寄存器的直接控制能够实现高效的数据处理,在一些对性能要求极高的场景下非常关键。
    • 硬件接口编程:在编写设备驱动程序等与硬件紧密相关的软件时,汇编语言的优势尤为明显。它可以直接与硬件的接口寄存器进行交互。以编写一个简单的串口通信程序为例,通过汇编语言能够精确地设置串口控制器的波特率寄存器、数据格式寄存器等,从而实现准确的数据发送和接收。这种对硬件接口的精细操作是高级语言很难直接实现的。
  1. 高效的执行性能
    • 指令执行速度:由于汇编语言非常接近机器语言,经过汇编程序翻译后的机器码在执行时几乎没有额外的开销。相比高级语言,汇编语言编写的程序在执行速度上往往更有优势。例如,在一些实时性要求很高的系统中,如工业控制中的嵌入式系统,对信号的快速响应至关重要。汇编语言能够以最快的速度执行指令,及时处理输入的传感器信号并输出控制信号,确保系统的稳定运行。
    • 代码优化潜力:汇编语言程序员可以根据具体的硬件特性和程序需求进行深度的代码优化。例如,通过合理安排指令的顺序、充分利用寄存器来减少内存访问次数、利用指令的并行性等方式来提高程序的性能。对于一些复杂的算法,如数字信号处理中的快速傅里叶变换(FFT),通过汇编语言优化后的代码执行效率可以得到显著提升。
  2. 程序的紧凑性
    • 代码体积小:汇编语言编写的程序通常具有较小的代码体积。这是因为汇编语言可以精确地使用硬件资源,避免了高级语言中可能存在的一些冗余代码。例如,在一些资源受限的嵌入式系统中,如智能手表或小型传感器设备,存储空间非常有限。使用汇编语言可以在有限的存储空间内实现更多的功能,使程序能够高效地存储和运行。
  3. 可用于操作系统和底层开发
    • 内核开发:在操作系统内核的开发中,部分关键代码需要使用汇编语言。例如,在操作系统启动阶段,需要用汇编语言编写初始化代码来设置CPU的工作模式、初始化内存管理单元(MMU)、加载内核的其他部分等。这些操作是操作系统运行的基础,汇编语言能够提供必要的精确控制,确保系统能够正确启动和运行。
    • 引导程序编写:计算机系统的引导程序(如BIOS或UEFI的部分代码)也经常使用汇编语言。引导程序是计算机启动时最先运行的程序,它负责检测硬件设备、加载操作系统内核等重要任务。汇编语言的高效性和对硬件的直接控制能力使其非常适合编写这些对系统启动至关重要的程序。
  4. 安全敏感应用场景
    • 加密解密:在加密解密领域,汇编语言有重要的应用。由于其高效性和对数据处理的精确控制,一些高级加密标准(AES)、数据加密标准(DES)等加密解密算法可以用汇编语言进行优化实现。这样可以在保证数据安全的同时,提高加密解密的速度,满足对数据安全性和处理效率要求较高的应用场景,如金融交易系统、企业数据安全系统等。
    • 反病毒和安全防护:在反病毒软件和安全防护软件的开发中,汇编语言也有应用。例如,在病毒特征码扫描过程中,使用汇编语言可以实现快速、精确的内存扫描,及时发现并清除病毒等恶意软件。同时,在软件的自我保护机制方面,汇编语言可以帮助构建更强大的反调试和反逆向工程技术,提高软件的安全性。

基于AI的学习



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/835398.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

爱码单车队-冲刺日志第二天

会议记录:在第二天的冲刺中,团队成员在接口文档设计与前端框架方面取得了一定进展。经过小组的共同努力,确定了前段设计与后端对接的接口, 为后续的开发工作奠定了基础。虽然目前前端设计与预期原型存在较大差距,但基本功能已经得以实现。 接下来,团队将继续优化功能,并…

猿人学web端爬虫攻防大赛赛题第20题——2022新春快乐

题目网址:https://match.yuanrenxue.cn/match/20 解题步骤解题之前需要先了解wasm是什么:https://docs.pingcode.com/ask/294587.html看数据包。sign是一串加密的字符串,t一看就是时间戳。全局搜索api/match/20,只有一处。打断点,触发。看下sign的生成逻辑。 "sign&q…

[Tricks-00004]CF1954F(自己胡的 trick,被 Burnside 完爆)

介绍下自己的离奇思路: 先读清楚题意!要求是旋转等价,即两个以 \(c\) 个 \(1\) 开头,总 \(1\) 个数不超过 \(k+c\) 的字符串算一种。 那怎么刻画"只算一种"这个条件呢?一个想法可以是,对每个字符串赋一个权值,一种字符串的权值即旋转出来的每个合法的,把它们…

工控机维修数据恢复

工控机是一种加固的增强型个人计算机,由于经常在环境比较恶劣的情况下运行,对数据的安全性要求也更高。 一、数据丢失的原因 用户误操作:如错误删除文件、不小心切断电源等,这些操作可能导致数据丢失或损坏。 入侵与感染:恶意程序可能破坏硬盘数据,甚至具有格式硬盘的功能…

RAG 系统高效检索提升秘籍:如何精准选择 BGE 智源、GTE 阿里与 Jina 等的嵌入与精排模型的完美搭配

RAG 系统高效检索提升秘籍:如何精准选择 BGE 智源、GTE 阿里与 Jina 等的嵌入与精排模型的完美搭配RAG 系统高效检索提升秘籍:如何精准选择 BGE 智源、GTE 阿里与 Jina 等的嵌入与精排模型的完美搭配 Text Embedding 榜单:MTEB、C-MTEB 《MTEB: Massive Text Embedding Benc…

Golang的GMP调度模型与源码解析

0、引言 我们知道,这当代操作系统中,多线程和多进程模型被广泛的使用以提高系统的并发效率。随着互联网不断的发展,面对如今的高并发场景,为每个任务都创建一个线程是不现实的,使用线程则需要系统不断的在用户态和内核态之间不断的切换,引起不必要的损耗,于是引入了协程…

有限状态机(FSM)的使用

有限状态机的使用 有限状态机在游戏制作中十分常见,它既可以作为玩家角色的控制框架,纯代码控制动画的播放,免去动画间的“连连看”;也可以制作简单的AI,甚至还可以搭配其它AI决策方式做出更复杂易用的AI控制……本文仅是个人对有限状态机的理解,与大家一同交流有限状态机…

【学习篇】patran设置阻尼

在数学和力学甚至机械专业中,质量-弹簧-阻尼系统是基础、经典的模型。其数学模型表示为: $$ m\ddot{x} +c\dot{x} +kx = 0 \qquad(1) $$ 有限元模型比较简单,就是两个质量点+弹簧假设上述式子的初值为 $$ \begin{cases} u(0)=0.2 \ \dot{u}(0)=0 \end{cases} $$ 各项系数为变…

mysql 查询每个订单总价和购买商品的总类数

数据表 CREATE TABLE goods ( order_id INT NOT NULL, goods_id INT NOT NULL, price DECIMAL(10, 2) NOT NULL ); 插入数据 INSERT INTO goods (order_id, goods_id, price) VALUES (1, 1, 3.5), (1, 2, 4.0), (2, 4, 6.0); 数据查询 SELECT order_id, SUM(price) AS total_pr…

【视频讲解】Python深度神经网络DNNs-K-Means(K-均值)聚类方法在MNIST等数据可视化对比分析

全文链接:https://tecdat.cn/?p=38289 原文出处:拓端数据部落公众号 分析师:Cucu Sun 近年来,由于诸如自动编码器等深度神经网络(DNN)的高表示能力,深度聚类方法发展迅速。其核心思想是表示学习和聚类可以相互促进:好的表示会带来好的聚类效果,而好的聚类为表示学习提…

时间

JDK7 时间 全世界的时间, 有一个统一的计算标准. 格林尼治时间/格林威治时间 (Greenwich Mean Time) 简称 GMT. 计算核心: 地球自转一天是 24 小时, 太阳直射时为正午 12 点. 后来发现计算误差较大, 现在格林威治时间已经不再作为标准时间来使用了. 到了 2012 年 1 月, 取消了用…