作业信息
教材学习内容总结
1.功能设计与面向对象设计
功能设计:侧重于确定系统需要实现的功能。它从用户需求出发,详细分析系统应具备的各项操作和行为。例如,设计一个图书馆管理系统时,功能设计会涵盖借书、还书、查询书籍信息、管理用户账户等功能的规划。这种设计方法更关注系统的流程和功能实现逻辑,往往以功能模块为单位进行组织。
面向对象设计:将系统看作是由一系列相互协作的对象组成。每个对象都有自己的属性(数据)和行为(方法)。在图书馆管理系统中,会有 “书籍” 对象(具有书名、作者、编号等属性和借出、归还等方法)、“用户” 对象(姓名、账号、借阅记录等属性和借书、还书等操作方法)等。面向对象设计强调对象之间的关系和交互,具有更好的可维护性、可扩展性和可复用性。
2.面向对象设计过程
问题域分析:深入理解需要解决的问题领域,识别其中的实体、概念和它们之间的关系。比如在设计电商系统时,要分析商品、订单、用户、商家等实体以及它们在购物流程中的关系。
识别对象和类:根据问题域分析的结果,找出系统中的对象,并将具有相同属性和行为的对象抽象为类。例如,多个不同商品可以抽象为 “商品类”。
确定对象的属性和行为:对于每个类,明确其属性(如商品类的价格、名称、库存等)和行为(如购买、添加到购物车等行为对应的方法)。
设计对象之间的关系:包括关联(如用户和订单之间的一对多关联,一个用户可以有多个订单)、聚合(如订单和订单项之间的聚合关系,订单由多个订单项组成)、继承(如会员用户类继承自普通用户类,具有更多特殊属性和方法)等。
创建对象模型:可以使用 UML(统一建模语言)等工具来创建类图、对象图等,直观地表示系统的面向对象设计结构。
优化设计:检查设计的合理性,如是否存在冗余、是否符合开闭原则(对扩展开放,对修改关闭)等,并进行必要的调整。
3.面向对象语言三要素
封装:将数据和操作数据的方法封装在一个类中,对外部隐藏对象的内部实现细节。只通过特定的接口(如公共方法)来访问和修改对象的属性。例如,在 Java 中,使用 private 关键字修饰成员变量,通过 public 的 getter 和 setter 方法来访问和修改这些变量。这样可以提高代码的安全性和可维护性,防止外部代码随意篡改对象的状态。
继承:允许创建新的类(子类)从现有的类(父类)继承属性和行为。子类可以重写父类的方法来实现特定的功能。比如,在 C++ 中,class Child : public Parent 就表示 Child 类继承自 Parent 类。继承可以实现代码的复用,提高软件开发效率,但过度使用可能导致类层次结构过于复杂。
多态:指不同的对象对同一消息(方法调用)有不同的响应方式。包括编译时多态(如函数重载,在 C++ 中,多个同名函数但参数不同)和运行时多态(通过虚函数实现,如在 Java 中,父类的引用可以指向子类的对象,根据对象的实际类型调用相应的重写方法)。多态增强了程序的灵活性和可扩展性。
4.汇编、编译、解释、执行
汇编:是一种将汇编语言源程序转换为机器语言目标程序的过程。汇编语言是一种低级编程语言,与机器硬件密切相关,它使用助记符来表示机器指令。例如,MOV AX, 10 在汇编中表示将数值 10 传送到 AX 寄存器。汇编程序通过对汇编源文件进行处理,生成可由计算机直接执行的机器码文件。
编译:将高级编程语言(如 C、C++、Java 等)编写的源程序一次性转换为目标机器可执行的机器语言程序(对于 Java 等,是字节码等中间形式)。编译过程包括词法分析(将源程序分解为单词符号)、语法分析(构建语法树)、语义分析(检查语义正确性)、代码生成等阶段。例如,使用 C 编译器(如 GCC)将.c 文件编译成可执行文件。编译后的程序执行效率通常较高,但修改源程序后需要重新编译。
解释:解释器直接读取并执行高级语言源程序,逐行或逐块地将源程序转换为机器指令并立即执行。例如,Python 程序就是通过解释器来执行的。解释型语言具有较好的跨平台性和灵活性,在开发过程中可以快速看到结果,但执行效率相对编译型程序可能较低,尤其是对于复杂程序。
执行:无论是编译后的程序还是解释执行的程序,最终都是在计算机的硬件环境中运行。对于编译型程序,操作系统将可执行文件加载到内存并分配资源后开始执行;对于解释型程序,解释器在执行过程中管理程序的运行状态和资源分配。执行过程涉及到 CPU 从内存中读取指令、执行指令、数据的读写等操作,同时可能还会涉及到操作系统的进程管理、内存管理等功能。
教材学习中的问题和解决过程(先问 AI)
- 问题1:IP 地址和 MAC 地址在网络通信中的作用区别有些模糊,不太理解为什么要有这两种不同的地址。
- 问题1解决方案:查阅资料得知,IP 地址是网络层地址,用于在不同网络之间进行逻辑寻址。它能让数据包在复杂的网络环境中找到目标网络。例如,在互联网上,IP 地址可以确定数据从源主机所在网络到目标主机所在网络的路径。
MAC 地址是数据链路层地址,用于在同一局域网内的物理寻址。当数据包到达目标网络的局域网后,通过 MAC 地址来找到目标设备。在局域网内设备之间通信时,交换机就是根据 MAC 地址来转发数据帧的。
为了加深理解,我通过搭建一个简单的包含路由器和交换机的网络实验环境进行实践。在实验中,观察数据在不同网络段和局域网内传输时,IP 地址和 MAC 地址的变化情况,从而更清晰地理解它们各自的作用。
- 问题2:在学习网络拓扑结构时,对于星型拓扑和总线型拓扑的优缺点在实际应用场景中的体现不太清楚。
- 问题2解决方案:资料显示,星型拓扑的优点是易于维护和管理,某个节点出现故障不会影响其他节点的正常通信(除了与故障节点直接相连的中心节点端口),中心节点可以是交换机等设备。例如在企业办公网络中,如果某台电脑故障,不会导致其他电脑之间不能通信。缺点是对中心节点的依赖性强,如果中心节点出现故障,整个网络可能瘫痪。
总线型拓扑优点是结构简单、成本低,所需电缆长度短。但缺点明显,如同一时刻只能有一个节点发送数据(存在冲突问题),而且如果总线出现故障,整个网络就无法工作。在早期的一些小型局域网中,由于成本限制可能会使用,但随着网络规模和性能要求的提高,逐渐被其他拓扑结构替代。
我模拟了这两种拓扑结构的小型网络,通过在不同节点模拟数据传输和故障情况,体会它们在实际场景中的表现,比如在总线型拓扑中观察到多个节点同时尝试传输数据时产生的冲突现象,从而更好地理解了它们的优缺点。
代码调试中的问题和解决过程
- 问题1:忘记定义变量就直接使用
- 问题1解决方案:在使用变量之前进行定义
- 问题2:遗漏分号,编译器报错,有时候可能会在不该加分号的地方加分号,比如在if语句的条件后面
- 问题2解决方案:对于分号缺失的情况,在正确的位置添加分号。对于分号多余的情况,仔细检查逻辑语句,删除多余的分号
学习进度条
|
代码行数(新增/累积) |
博客量(新增/累积) |
学习时间(新增/累积) |
重要成长 |
目标 |
5000行 |
30篇 |
400小时 |
|
第一周 |
200/200 |
2/2 |
20/20 |
|
第二周 |
300/500 |
0/2 |
18/38 |
|
第三周 |
500/1000 |
1/3 |
22/60 |
|
第四周 |
300/1300 |
1/4 |
30/90 |
|
第五周 |
300/1600 |
1/5 |
30/120 |
|
第六周 |
300/1900 |
1/6 |
30/150 |
|
第七周 |
300/2200 |
1/7 |
30/180 |
|
第八周 |
300/2500 |
1/8 |
30/210 |
|