2024-2025-1 20241325 王向龙 《计算机程序与设计》第八周学习总结
2024-2025-1 20241325 《计算机基础与程序设计》第8周学习总结
这个作业属于哪个课程 | 2024-2025-1-计算机基础与程序设计 |
---|---|
这个作业要求在哪里 | 如2024-2025-1计算机基础与程序设计第八周作业 |
这个作业的目标 | 功能设计与面向对象设计 >面向对象设计过程 面向对象语言三要素 汇编、编译、解释、执行 |
作业正文 | https://www.cnblogs.com/wangxianglong999/p/18551105 |
教材学习内容总结
功能设计
- 功能设计主要着眼于系统应具备的具体能力和作用,围绕用户期望及业务需求展开。比如设计一款电商APP,要规划商品展示、下单、支付等功能,注重流程顺畅与实用性,它为后续开发奠定清晰的功能框架基础。
面向对象设计
-
面向对象设计把现实世界里的实体抽象成软件中的对象,像把汽车抽象成有属性(颜色、型号等)和行为(启动、行驶等)的对象。运用封装隐藏内部细节,通过继承复用代码,以多态实现不同形态下的灵活调用,让软件结构更灵活、易维护和拓展。
-
二者紧密联系,功能设计确定大方向,面向对象设计则以其独有的设计方式,将功能具体地用对象、类等元素构建实现,共同服务于高质量软件系统的打造。
面向对象语言有三个关键要素,分别如下:
封装
- 封装是指将对象的属性和操作方法结合在一起,形成一个相对独立的单元,对外隐藏对象的内部实现细节。就好比一台电视机,用户只需通过遥控器操作开关键、频道调节键等简单接口(相当于对外公开的方法),而不需要了解其内部电路构造(内部实现细节)等。通过封装可以增强数据的安全性,避免外部随意访问和篡改对象内部的数据,同时让代码的使用更加简单清晰,不同部分之间的耦合性降低。
继承
- 继承允许创建的新类(子类)基于已有的类(父类)来构建,子类会自动获得父类的属性和方法,并且还可以根据自身需求添加新的属性和方法或者重写父类的方法。例如,在动物分类体系中,“哺乳动物”类继承“动物”类,它就拥有了动物类的基本属性如“有生命”等,在此基础上“哺乳动物”类又可以定义自身特有的属性如“胎生”等。继承提高了代码的复用性,减少了重复代码的编写,也有助于构建更合理、有层次的类体系结构。
多态
- 多态意味着同一个操作作用在不同的对象上,可以有不同的解释和执行方式。比如在图形绘制系统中,有“圆形”“矩形”等不同图形类,它们都有“绘制”这个方法,但具体绘制圆形和绘制矩形的实现过程不同(即执行方式不一样)。多态让程序可以根据对象的实际类型灵活调用相应的方法,增强了程序的扩展性和灵活性,使得代码能更好地应对多种变化情况。
** 汇编**
- 汇编是将汇编语言源程序转换为机器语言目标程序的过程。汇编语言使用助记符来代表机器指令,比如用“MOV”代表数据传送指令等。程序员通过编写汇编语言代码,再借助汇编器进行汇编操作,生成对应的二进制机器码,这些机器码能够直接被计算机硬件识别并执行。汇编语言与硬件联系紧密,常用于编写对性能、硬件控制要求较高的程序,像底层的驱动程序等,不过其编写难度相对较大,代码可读性比高级语言要差一些。
编译
- 编译是把高级语言(如C、C++、Java等语言)编写的源程序一次性地转换成目标机器可执行的机器语言程序(在有些情况下是中间代码形式等)的过程。例如,使用C语言编写了一个程序,通过编译器(如GCC编译器)对其编译,编译器会对源程序进行词法分析、语法分析、语义分析等一系列处理,最终生成可执行文件。编译后的程序执行效率通常较高,不过如果源程序有修改,那就需要重新编译整个程序才能再次运行。
解释
- 解释则是另一种运行高级语言程序的方式,解释器会逐行读取源程序代码并立即执行相应的操作,不会像编译那样事先生成完整的可执行文件。比如Python语言,运行Python脚本时,解释器逐行解析代码,遇到一条语句就执行一条语句对应的功能。这种方式的优点是便于调试、修改代码后无需重新编译等,灵活性强,但相对编译型语言来说,执行效率往往会低一些,因为每次运行都需要重新解释代码。
执行
- 执行就是计算机运行已经经过汇编、编译或者可以直接被解释执行的程序代码,让计算机按照代码中设定的逻辑完成相应任务的过程。对于编译后的程序,操作系统可以直接加载可执行文件到内存中运行;对于解释型语言,解释器在后台持续对代码进行解读并驱动相应的操作,最终实现程序预设的功能,像让一个游戏程序运行起来展示游戏画面、实现游戏交互等就是执行程序的体现。
这几种概念在程序从编写到最终在计算机上运行发挥着各自关键的作用,并且相互配合推动软件开发和运行的顺利开展。
教材学习中的问题和解决过程
问题一:继承具体指什么,如何继承,通过头文件吗?
继承的含义
- 继承是面向对象编程中的一个重要概念,它指的是在创建新类(通常称为子类或派生类)时,基于已有的类(称为父类或基类)来构建的一种机制。子类会自动获得父类的所有非私有属性(成员变量)和方法(成员函数),就好像子类继承了父类所具备的“能力”和“特征”。
- 例如,假设有一个“动物”类作为父类,它具有属性“体重”“年龄”以及方法“进食”“睡觉”等。然后创建一个“哺乳动物”类作为子类,“哺乳动物”类就会自动继承“动物”类的“体重”“年龄”这些属性以及“进食”“睡觉”这些方法,在此基础上,“哺乳动物”类还可以根据自身特点添加新的属性如“胎生”,添加新的方法如“哺乳”等,同时也可以对从父类继承来的方法进行重写(修改其具体实现逻辑),以适应子类的特定需求。
如何实现继承(以常见编程语言为例)
C++语言中的继承实现
- 在C++中,通过使用
:
符号后面跟上继承方式(public、private、protected)来声明继承关系。例如:
class Animal {
// 动物类的属性和方法定义
int weight;
public:
void eat() {
// 进食方法的实现逻辑
}
};
class Mammal : public Animal {
// 哺乳动物类在继承动物类基础上添加新属性和方法
bool isViviparous; // 新增属性,表示是否胎生
public:
void lactate() {
// 哺乳方法的实现逻辑
}
};
这里 Mammal
类通过 public
继承方式继承了 Animal
类,就获取了 Animal
类的相关成员,同时可以扩展自身的内容。
Java语言中的继承实现
- 在Java中,使用
extends
关键字来表示继承关系。示例如下:
class Animal {
int weight;
public void eat() {
// 进食方法实现逻辑
}
}
class Mammal extends Animal {
boolean isViviparous;
public void lactate() {
// 哺乳方法实现逻辑
}
}
Mammal
类通过 extends
关键字继承了 Animal
类,从而继承了相应的属性和方法,并能进一步拓展。
关于头文件(主要针对C++)
- 在C++中,头文件在继承相关的使用场景中有重要作用,但它本身不是实现继承的核心机制。头文件常用于声明类、类的成员以及类之间的关系等信息。比如在上面
Animal
和Mammal
的例子中,通常会把Animal
类的定义放在一个头文件(假设叫animal.h
)中,像这样:
#ifndef ANIMAL_H
#define ANIMAL_H
class Animal {
int weight;
public:
void eat();
};
#endif
然后在 Mammal
类所在的源文件(假设叫 mammal.cpp
)中通过 #include "animal.h"
把头文件包含进来,这样 Mammal
类就能知晓 Animal
类的结构,进而实现继承等操作。不过要明确的是,头文件只是一种方便组织代码、进行类声明等的辅助手段,真正的继承还是通过类定义中的语法(如 :
符号及后面的继承方式)来达成的。
- 而在Java等语言中,并没有像C++这样严格依赖头文件的概念,Java通过包(package)机制等来管理类的组织和引用等,在实现继承时重点还是在使用
extends
关键字构建类之间的继承关系上。
总之,继承是面向对象编程构建类层次结构、实现代码复用的关键特性,不同编程语言有着各自相应的语法来实现它,头文件在部分语言中起到辅助声明等作用但并非继承的本质实现方式。
问题二:还是没听懂?捂脸
继承的含义
- 继承是面向对象编程中的一个重要概念,它指的是在创建新类(通常称为子类或派生类)时,基于已有的类(称为父类或基类)来构建的一种机制。子类会自动获得父类的所有非私有属性(成员变量)和方法(成员函数),就好像子类继承了父类所具备的“能力”和“特征”。
- 例如,假设有一个“动物”类作为父类,它具有属性“体重”“年龄”以及方法“进食”“睡觉”等。然后创建一个“哺乳动物”类作为子类,“哺乳动物”类就会自动继承“动物”类的“体重”“年龄”这些属性以及“进食”“睡觉”这些方法,在此基础上,“哺乳动物”类还可以根据自身特点添加新的属性如“胎生”,添加新的方法如“哺乳”等,同时也可以对从父类继承来的方法进行重写(修改其具体实现逻辑),以适应子类的特定需求。
如何实现继承(以常见编程语言为例)
C++语言中的继承实现
- 在C++中,通过使用
:
符号后面跟上继承方式(public、private、protected)来声明继承关系。例如:
class Animal {
// 动物类的属性和方法定义
int weight;
public:
void eat() {
// 进食方法的实现逻辑
}
};
class Mammal : public Animal {
// 哺乳动物类在继承动物类基础上添加新属性和方法
bool isViviparous; // 新增属性,表示是否胎生
public:
void lactate() {
// 哺乳方法的实现逻辑
}
};
这里 Mammal
类通过 public
继承方式继承了 Animal
类,就获取了 Animal
类的相关成员,同时可以扩展自身的内容。
Java语言中的继承实现
- 在Java中,使用
extends
关键字来表示继承关系。示例如下:
class Animal {
int weight;
public void eat() {
// 进食方法实现逻辑
}
}
class Mammal extends Animal {
boolean isViviparous;
public void lactate() {
// 哺乳方法实现逻辑
}
}
Mammal
类通过 extends
关键字继承了 Animal
类,从而继承了相应的属性和方法,并能进一步拓展。
关于头文件(主要针对C++)
- 在C++中,头文件在继承相关的使用场景中有重要作用,但它本身不是实现继承的核心机制。头文件常用于声明类、类的成员以及类之间的关系等信息。比如在上面
Animal
和Mammal
的例子中,通常会把Animal
类的定义放在一个头文件(假设叫animal.h
)中,像这样:
#ifndef ANIMAL_H
#define ANIMAL_H
class Animal {
int weight;
public:
void eat();
};
#endif
然后在 Mammal
类所在的源文件(假设叫 mammal.cpp
)中通过 #include "animal.h"
把头文件包含进来,这样 Mammal
类就能知晓 Animal
类的结构,进而实现继承等操作。不过要明确的是,头文件只是一种方便组织代码、进行类声明等的辅助手段,真正的继承还是通过类定义中的语法(如 :
符号及后面的继承方式)来达成的。
- 而在Java等语言中,并没有像C++这样严格依赖头文件的概念,Java通过包(package)机制等来管理类的组织和引用等,在实现继承时重点还是在使用
extends
关键字构建类之间的继承关系上。
总之,继承是面向对象编程构建类层次结构、实现代码复用的关键特性,不同编程语言有着各自相应的语法来实现它,头文件在部分语言中起到辅助声明等作用但并非继承的本质实现方式。
基于AI的学习
代码调试中的问题和解决过程
问题一:写的代码不够简洁,繁琐不易看懂且无法正确运行。
解决:询问学长有关问题的解决办法,知晓了对于题目分析的重要性——不要着急去解决问题,而是要先分析,再选择语句体系,确定循环体和循环条件,最后才是敲写代码。
问题二:在for(i=0;flag&&i<n;i++)中flag的作用是什么?
解决:通过阅读整段代码,以及分析题目,知道了flag的作用是确定在何时结束内层循环
上周考试总结:
感觉没达到自己的预估水平,写的代码繁琐且缺少逻辑性,事后做了如下总结
1、心态不好,着急解决问题没有分析;
2、写代码的习惯不好,并没有分析问题,确定循环语句和循环条件而直接进行代码的编写,从这点看考试失利是理所当然。
3、个人逻辑习惯不好,需要慢慢更正;
学习进度:
|-------||代码行数|
|第八周| 300/500|