作业信息
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP/ |
---|---|
这个作业要求在哪里 | https://www.cnblogs.com/rocedu/p/9577842.html#WEEK08 |
这个作业的目标 | 功能设计与面向对象设计,面向对象设计过程,面向对象语言三要素,汇编、编译、解释、执行 |
作业正文 | https://www.cnblogs.com/wangsiqi828828/p/18551021 |
教材学习内容总结
-
功能设计与面向对象设计
功能设计
定义:功能设计主要关注系统或软件应该具备什么样的功能来满足用户需求。它侧重于从用户角度出发,确定软件需要完成的任务和操作流程。
特点:以功能为核心,将系统看作是一系列功能模块的组合。在设计过程中,通常先进行需求分析,梳理出所有需要实现的功能点,然后对这些功能点进行详细设计,包括输入输出、数据处理等方面。面向对象设计
定义:面向对象设计(OOD)是一种设计方法,它以对象为基础,将现实世界中的事物抽象成对象,对象包含数据(属性)和行为(方法)。通过对象之间的交互来实现系统功能。
特点:具有封装性、继承性和多态性。封装性使得对象的内部数据和实现细节对外部隐藏,只提供公共的接口来访问对象的功能;继承性允许创建新的类(子类)来继承现有类(父类)的属性和方法,从而实现代码的复用;多态性使得不同对象对相同消息(方法调用)可以产生不同的响应。 -
面向对象设计过程
需求分析、识别对象和类、 定义类的属性和方法、确定类之间的关系、设计用户界面(如果需要) -
汇编、编译、解释、执行
汇编
定义:汇编语言是一种低级编程语言,它使用助记符来代替机器语言的二进制指令。汇编过程是将汇编语言源程序转换为机器语言目标程序的过程。
特点:汇编语言与机器硬件密切相关,不同的CPU架构有不同的汇编语言。它能够直接访问和控制计算机硬件资源,如寄存器、内存等。但是,汇编语言的编程效率相对较低,因为它需要程序员对计算机硬件有深入的了解,并且代码的可读性和可维护性较差。执行
定义:执行是指计算机运行程序的过程,无论是编译后的程序还是通过解释器解释执行的程序。在执行过程中,计算机的CPU按照程序中的指令序列,从内存中读取数据和指令,进行运算和操作,完成程序设定的任务。
特点:执行的效率和程序的优化程度、计算机硬件的性能等因素有关。对于编译后的程序,执行速度通常较快,因为编译过程中已经进行了一些优化。而对于解释执行的程序,执行速度可能会受到解释器性能的影响。
教材学习中的问题和解决过程(先问 AI)
问题1:面向对象设计的原则有哪些?
- 问题1解决方案:
1.单一职责原则(SRP)
定义:一个类应该只有一个引起它变化的原因,即一个类只负责一项职责。
解释:如果一个类承担了过多的职责,那么这些职责的变化可能会影响这个类。例如,一个类既负责用户数据的存储,又负责用户界面的展示,当存储方式或者界面展示要求发生变化时,这个类就需要频繁修改,这样会导致代码的稳定性变差。
2.开闭原则(OCP)
定义:软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。
解释:这意味着当需要增加新功能时,应该通过扩展已有代码来实现,而不是修改已有的稳定代码。这样可以保证原有代码的稳定性,减少修改可能带来的错误。
3.里氏替换原则(LSP)
定义:子类型必须能够替换它们的父类型。也就是说,在任何使用父类型对象的地方,都可以用子类型对象来替换,而程序的行为不会发生改变。
解释:这保证了继承关系的正确性和合理性。如果违反了这个原则,可能会导致程序出现错误或者不符合预期的行为。
4.依赖倒置原则(DIP)
定义:高层模块不应该依赖低层模块,二者都应该依赖抽象;抽象不应该依赖细节,细节应该依赖抽象。
解释:这有助于降低模块之间的耦合度。当高层模块和低层模块都依赖抽象时,具体的实现可以方便地替换,而不会影响到其他模块。
5.接口隔离原则(ISP)
定义:客户端不应该被迫依赖于它不使用的接口。一个类对另一个类的依赖应该建立在最小的接口上。
解释:这避免了客户端因为依赖不需要的接口而导致的复杂性增加和潜在的错误。将大的接口拆分成多个小的、专门的接口,可以使客户端只依赖自己需要的部分。
6.迪米特法则(LoD),也叫最少知识原则
定义:一个对象应该对其他对象有最少的了解。也就是说,一个类应该尽量减少对其他类的依赖,只和直接的朋友(成员变量、方法参数、返回值等)进行交互。
解释:这样可以降低类之间的耦合度,使得系统更加灵活和易于维护。如果一个类过多地了解其他类的内部细节,当其他类发生变化时,这个类可能会受到很大的影响。
基于AI的学习
代码调试中的问题和解决过程
其他(感悟、思考等,可选)
无
学习进度条
|
| 代码行数(新增/累积)| 博客量(新增/累积)|学习时间(新增/累积)|重要成长
|
|
-------- | :----------------😐:----------------😐:---------------: |:-----😐
| 目标 | 5000行 | 30篇 | 400小时 | |
| 第一周 | 200/200 | 2/2 | 20/20 | |
| 第二周 | 300/500 | 2/4 | 18/38 | |
| 第三周 | 500/1000 | 3/7 | 22/60 | |
| 第四周 | 300/1300 | 2/9 | 30/90 | |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
参考:软件工程软件的估计为什么这么难,[软件工程 估计方法](http://www.cnblogs.com/xinz/archive/2011/04/06/2007294
.html)
-
计划学习时间
:XX
小时 -
实际学习时间
:XX
小时 -
改进情况:
(有空多看看[现代软件工程 课件
软件工程师能力自我评价表](
http://www.cnblogs.com/xinz/p/3852177
.html))
参考资料
- 《计算机科学概论(第七版)》
- ...