OO第三次博客作业
OO第二次博客作业
目录
1.前言
2.设计与分析
3.采坑心得
4.改进建议
5.总结
1.前言
面向对象设计(Object-Oriented Design,简称OOD)是一种软件设计方法,它基于面向对象编程(Object-Oriented Programming,简称OOP)的原则,将软件系统的设计表示为一组对象及其相互作用。面向对象设计的核心思想是将现实世界中的问题抽象成对象,每个对象都有其属性和方法,对象之间通过消息传递进行交互。
面向对象设计的关键概念包括:
1.类(Class):类是创建对象的模板或蓝图,它定义了对象的结构和行为。类包含属性和方法,属性用于描述对象的状态,方法用于定义对象的操作。
2.对象(Object):对象是类的实例,它是根据类定义创建的具体实体。每个对象都有其独特的属性值和方法执行。
3.封装(Encapsulation):封装是面向对象设计的基本原则之一,它意味着将对象的内部状态(属性)和对外提供的服务(方法)封装在一起,隐藏对象的内部细节,仅通过接口与外界交互。
4.继承(Inheritance):继承允许新的类(子类)继承一个已存在类(父类)的属性和方法。子类可以扩展父类的行为,也可以添加新的属性和方法。
5.多态(Polymorphism):多态性允许不同类的对象对同一消息做出响应,并以不同的方式执行相应的操作。这使得同一个接口可以有多种不同的实现。
面向对象设计的过程通常包括以下步骤:
1.需求分析:理解并分析用户需求,确定系统必须完成哪些任务。
2.抽象:将现实世界的实体抽象成类,确定类的属性和方法。
3.设计类:定义类及其属性和方法,确定类之间的继承和关联关系。
4.创建对象:根据类的设计创建对象,并实现对象之间的交互。
5.测试和验证:通过编写测试用例来验证设计是否满足需求,确保系统的正确性和健壮性。
面向对象设计的好处包括提高软件的可重用性、可维护性和可扩展性,同时也使得软件系统更加模块化和易于理解。通过使用面向对象设计,开发者可以构建出更加灵活、易于管理和更新的软件系统。
2.设计与分析
1.第七次pta作业:
设计思路:在上次pta作业上,迭代一个互斥开关和窗帘,互斥开关只有连接上面和下面两种情况,窗帘的开合与灯光的总强度相关
代码:
class H implements Comparable {
private String name;
private int h;
}
class S extends By {
private int r = 15;
public void Light() {
if (this.getLux() >= 0 && this.getLux() <= 50) {
lux = 100;
} else if (this.getLux() >= 50 && this.getLux() <= 100) {
lux = 80;
} else if (this.getLux() >= 100 && this.getLux() <= 200) {
lux = 60;
} else if (this.getLux() >= 200 && this.getLux() <= 300) {
lux = 40;
} else if (this.getLux() >= 300 && this.getLux() <= 400) {
lux = 20;
} else {
lux = 0;
}
System.out.println("@" + name + ":" + lux + "%");
}
}
设计思路:由于需要灯光的总强,所以需要算出,其他的与前一次差不多
代码:
else {
for (T t : ts) {
if (t.getKs().size() > 0) {
for (K k : t.getKs()) {
if (k.getK() == 0) {
s = 0;
break;
} else {
s = 1;
}
}
} else {
s = 1;
}
if (s == 1) {
t.setState(1);
} else {
t.setState(0);
}
double R = 0;
if (t.getState() == 1) {
if (t.getControls().size() > 0) {
for (Control control : t.getControls()) {
pressure = control.get(pressure);
}
R = t.getR();
for (By by : bies) {
by.setPressure(pressure * by.getR() / R);
}
} else {
R = t.getR();
for (By by : bies) {
by.setPressure(pressure * by.getR() / R);
}
}
} else {
for (By by : bies) {
by.setPressure(0);
}
}
}
}
(部分)
分析:第七次作业中,我有以下几个缺点:
1.不了解基本概念:Java是一门面向对象编程语言,因此了解基本概念,如类、对象、继承、封装、多态等,是必要的。如果您不了解这些基本概念,可以尝试阅读Java的入门书籍或在线资源,并多练习相关的实例代码。
2.代码不够可读:可读性是编写高质量代码的重要特征。可以通过使用有意义的变量名和函数名、添加注释和文档、遵循代码风格指南等方式来提高代码的可读性。
3.缺乏编程习惯:编程习惯可以帮助您编写更加可靠和可维护的代码。例如,可以尝试使用try-catch语句来处理异常,使用循环和条件语句来控制程序流程,使用集合和数组来存储数据等。
4.不了解设计模式:设计模式是一种解决常见问题的解决方案,可以帮助您编写更加可扩展和可维护的代码。如果您不熟悉设计模式,可以尝试阅读相关书籍或在线资源,并多练习相关的实例代码。
5.缺乏测试:测试是确保代码正确性和可靠性的重要手段。可以尝试编写单元测试和集成测试,以帮助您发现并修复代码中的错误。
总之,要想提高自己的Java编程能力,需要多练习,多学习,并多思考。不断地总结自己的不足和优点,并从中学习和提高自己。同时,也可以寻找志同道合的伙伴,一起交流和学习,共同进步。
2.第八次pta作业:
设计思路:在上次pta的前提下,完善了多个并联,并且多了一个二极管类来控制电路。
代码:
if (ms.size() > 0) {
for (T t : ts) {
if (t.getNamem().size() > 0) {
if (t.getKs().size() > 0) {
for (K k : t.getKs()) {
if (k.getK() == 0) {
s = 0;
break;
} else {
s = 1;
}
}
} else {
s = 1;
}
if (s == 1) {
t.setState(1);
} else {
t.setState(0);
}
}
}
for (T t : ts) {
if (t.getNamem().size() == 0) {
if (s == 0) {
t.setState(0);
} else {
if (t.getKs().size() > 0) {
for (K k : t.getKs()) {
if (k.getK() == 0) {
t.setState(0);
break;
} else {
t.setState(1);
}
}
}
}
}
}
for (T t : ts) {
if (t.getNamem().size() > 0) {
if (t.getState() == 1) {
if (t.getControls().size() > 0) {
for (Control control : t.getControls()) {
pressure = control.get(pressure);
}
}
s1 = 1;
} else {
s1 = 0;
}
} else {
if (t.getState() == 1) {
s2++;
}
}
}
if (s1 == 0 || s2 == 0) {
for (By by : bies) {
by.setPressure(0);
}
} else if (s2 == 1) {
double R = 0;
for (T t : ts) {
if (t.getState() == 1) {
R += t.getR();
} else {
R += 0;
}
}
for (T t : ts) {
if (t.getState() == 1) {
for (By by : t.getBies()) {
by.setPressure(pressure * by.getR() / R);
}
} else {
for (By by : t.getBies()) {
by.setPressure(0);
}
}
}
} else {
double R = 0;
double r = 0;
double r1 = 0;
for (T t : ts) {
if (t.getState() == 1) {
if (t.getNamem().size() > 0) {
R += t.getR();
} else {
r = (double) 1 / t.getR();
r1 += r;
}
}
}
R += 1 / r1;
for (T t : ts) {
if (t.getState() == 0) {
for (By by : t.getBies()) {
by.setPressure(0);
}
} else {
if (t.getNamem().size() > 0) {
for (By by : t.getBies()) {
by.setPressure(pressure * by.getR() / R);
}
} else {
for (By by : t.getBies()) {
by.setPressure(pressure / r1 / R / t.getR() * by.getR());
}
}
}
}
}
} else {
for (T t : ts) {
if (t.getKs().size() > 0) {
for (K k : t.getKs()) {
if (k.getK() == 0) {
s = 0;
break;
} else {
s = 1;
}
}
} else {
s = 1;
}
if (s == 1) {
t.setState(1);
} else {
t.setState(0);
}
double R = 0;
if (t.getState() == 1) {
if (t.getControls().size() > 0) {
for (Control control : t.getControls()) {
pressure = control.get(pressure);
}
R = t.getR();
for (By by : bies) {
by.setPressure(pressure * by.getR() / R);
}
} else {
R = t.getR();
for (By by : bies) {
by.setPressure(pressure * by.getR() / R);
}
}
} else {
for (By by : bies) {
by.setPressure(0);
}
}
}
}
(部分)
分析:在第八次作业中,由于是最后一次,态度有些懈怠,但也为此付出了不少的时间,也进行了一次小小的总结,总结如下:
1.在规划任务时,我会根据作业要求,规划任务的步骤和时间表。我会确保我有足够的时间来完成每个步骤,并且我会尽力地利用我的时间来完成作业。
2.在设计解决方案时,我会根据作业要求,设计一个解决方案。我会在纸上或在电子设备上进行草图和设计,并确保我的解决方案符合作业要求。
3.在编写代码时,我会遵循良好的编程习惯,例如使用有意义的变量名、注释和格式化代码。我会一步一步地编写代码,并确保每一步都符合我的设计。
4.在测试和调试时,我会编写测试用例来测试我的代码,并确保我的代码符合作业要求。如果我的代码出现问题,我会耐心地调试我的代码,直到我的代码符合作业要求。
5.在提交作业时,我会确保我已经按照作业要求完成了所有步骤,并且已经测试和调试过代码。我会仔细地检查我的代码,并确保我的代码符合作业要求。
总的来说,我在做Java作业时,我会尽力地完成任务,并确保我的代码符合作业要求。我会保持积极态度和好奇心,不断地学习和探索。即使遇到困难,我也会保持耐心和毅力,继续努力地学习和解决问题。
3.采坑心得
1.第七次pta作业:在这次作业中,我发现了许多问题,现列举以下三个
(1)互斥开关的闭合,只有1和2,没有不闭合的情况。
(2)由于要算出总亮度,所以灯有一个单独的类,其他子类继承它。
(3)这次又多个串联并联,要考虑多种情况。
2.第八次pta作业:这次作业,不仅发现了一系列问题,也自我作了一些总结
(1)注意二极管方向,方向不同情况不同。
(2)心态要好,尽管很痛苦,但是还得练。
(3)不能轻易放弃。
4.改进建议
1.审题!审题!审题!题目审不好,不仅会让信心递减,更会消磨做下去的斗志。
2.记住单一职责,合理运用封装、继承、多态。
3.动手前,设计好所需的类,做好设计,是好的程序员的第一步,也是根基。
5.总结
在这三次作业中,最主要的问题还是设计问题,其次就是审题,再者就是能力问题,为此,我要做出如下的策略:
1.花更多的时间去设计,而不是提笔就写。
2.一定要先审题,不然后续的编写会在你不知情的情况下出现很多错误。
3.认真对待每次作业,并为下一次做准备,争取把自己的编程能力培养上来。
4.坚持下去,不轻言放弃。

浙公网安备 33010602011771号