20192322 2020-2021-1 《数据结构与面向对象程序设计》课程总结

20192322 2020-2021-1 《数据结构与面向对象程序设计》课程总结

  • 课程:《数据结构与面向对象程序设计》
  • 班级:1923班
  • 姓名:罗皓楠
  • 学号:20192322
  • 任课教师:王志强
  • 必修/选修:公选课
  • 课程内容总结

第一章 绪论

Java是面向对象程序设计语言
类是对象的蓝图
三大特性:封装 继承 多态
重要术语:对象 属性 方法
注释、标识符:class、public、static、void、main、String、args、System
Java是高级语言
错误:1.编译时错误 2.运行时错误 3.逻辑错误

第二章 数据和表达式

print及prinlnt方法
System.out.println
Scanner
常量:final
基本数据类型
byte,short,int,long,float,double,boolean,char
算术运算符:+、-、*、/、%
关系运算符:、>、>=、<、<=、==、!=
逻辑运算符:&&、||、!
运算符优先级:相同优先级满足从左到右的结合律
自增,自减符:i++、i--、++i、--i

第三章

new:返回指向新建对象的引用
String类方法:compareTo (String str);equals();length()等。
Java标准类库中的类按包来组织。每个类都属于一个具体的包。
Random类:伪随机数生成器执行复杂的计算产生随机数
Math类:方法都是静态的,可以用Math.XXX()直接调用
枚举类型:列出这个类型的变量的所有可能取值。eg.enum
NumberFormat类:有两个方法getCurencyInstance和getPercentInstance返回用于格式化数值的对象。getCurencyInstance返回货币格式对象,getPercentInstance返回百分比格式对象。
DecimalFormat类:使用new运算符来实例化对象。
print,println,printf方法

第四章

if与if-else语句
字符比较:Unicode顺序
浮点数的比较:计算两个差值的绝对值,在与公差进行比较。
字符比较:Unicode顺序,大小写字母,数字要联系ASCII表中的编码。
对角比较:equals。
switch语句:switch(){case :break;default:}
迭代器:迭代器是一个对象,可以使用它的一些方法每次处理集合中的一个元素。也就是说,迭代器可以按需一项项地处理每一个元素
while语句 break跳出循环。
do-while 语句:do{}while();
for 语句:for( ; ; ),与while等价

第五章

类:属性(变量/常量)+方法(函数)。
类是对象的抽象\蓝图,而对象是类的具体实例。
UML类图:实现、关联、聚合、组合、继承。
封装public、private
静态类
1.静态变量(static):有时也称类变量,它由类的所有实例共享,在一个对象中修改静态变量的值,就等于修改了其他所有对象中该静态变量的值。
2.静态方法:不需要为了调用方法而实例化类的一个对象,只能访问静态变量或局部变量。
类关系:依赖,聚合
方法重载与重写:重载:根据参数类型与数量确定初始化方法 重写:重新编写父类方法
测试类:
缺陷测试:发现错误,质量保证
单元测试:模块测试,确保方法的正确性
集成测试:系统大组件的正确性
系统测试:与需求保持一致性
方法重载:参数类型与数量,不管返回值

第六章

GUI元素:
三类对象:组件、事件、窃1听1器。
四要素:组件、容器、布局、事件
第七章

数组索引从0开始。
数组是对象,要用new实例化,new指定大小,之后数组大小不能改变

第八章

讨论类继承的设计机制,说明抽象类的目的及使用方法,讨论与继承有关的可见性问题
extends继承,代码复用,Java只支持单继承
super与this常用于调用构造方法
方法重载与重写:重载:根据参数类型与数量确定初始化方法 重写:重新编写父类方法
Object类是所有类的父类
abstract抽象类达抽象概念,不能用new实例化
抽象类的子类:实现父类的抽象方法变成具体类,不实现父类抽象方法仍要用abstract修饰

第九章

多态引用在不同的时候可以指向不同类型的对象
多态引用运行时才将方法调用与它的定义绑定在一起
引用变量可以指向声明继承于它的任意类的任何对象
接口是一组抽象方法,与抽象类一样不能被实例化
接口层次:接口可以继承接口;类可以实现接口,但不能继承接口。
Comparable接口
方法的参数可以是多态的

第十章

研究用于处理异常的try-catch语句
错误和异常代表不常见的或不正确处理的对象
错误(Error)不用捕获
处理异常:在异常发生的地方处理;在程序的其他地方处理
程序中出现异常不捕获异常,程序会崩溃
try-catch 语句: Java中把正常流程放try块中,错误(异常)处理放catch块中,每个catch 子句处理try块中可能抛出的一种特定类型的异常,注意多个catch一定把父类放后面处理, finally:总会执行,用于资源管理
如果没有在异常发生处捕获及处理,异常会被传播给调用的方法
throw:方法中抛出Checked Exception,方法声明中必须有throws。
Java异常处理是要处理Exception类及其子类:
产生RuntimeException的问题在调用代码
I/O异常: 几乎所有的IO API都可能抛出异常

第十一章

讨论深化递归思想的几个例子
可以用数学思维理解递归,锻炼递归思想,需要注意与迭代的区分

第十二章

计算机系统中最重要的资源之一是CPU时间,完成具体任务的算法效率是决定程序执行速度的一个主要因素

第十三章

查找
线性查找:设置哨兵在数组开头或结尾,以便提高查找效率。
二分查找:从中间开始,要求表是有序的,每次比较后可以减少查找池中的一半元素
分块查找:先二分查找,再线性查找
哈希查找:直接通过关键字找到存储地址。
散列查找
排序
选择排序:分别将每个值放在排好序的最终位置,从而完成一组值的排序。
插入排序:将一个具体的值插入到表中已有序的子系列中,从而完成一组值的排序。
冒泡排序:重复地比较表中的相邻元素,如果它们不符合要求则交换他们。
快速排序:根据一个任意选定的划分元素来对表进行划分,然后再递归地对划分元素两边的字段进行排序,从而完成对表的排序。
归并排序:递归地对分表,知道每个子表只含有一个元素时为止,然后再将子表按序合并,从而完成对表的排序。

第十四章

栈:先进后出
栈常见方法
push():将元素添加到栈顶
pop():删除栈顶元素
peek():查看栈顶元素
isEmpty():判断栈是否为空
size():判断栈中元素的个数
使用栈计算后缀表达式:从左到右扫描表达式,操作数入栈,遇到操作符则pop两个数计算后再push。
链表:与有固定大小的数组不一样,链表没有容量上限。

第十五章

队列是一个线性集合,它在一端添加元素,在另一端删除元素————先进先出。
enqueue:将元素插入到队尾。
dequeue:从队头删除元素。
first:检测队头的元素。
isEmpty:判定队列是否为空。
size:断定队列中的元素个数

第十六章

树:节点+边
完全二叉树(满二叉树也是完全二叉树)
树的遍历: 先序遍历、 中序遍历、 后序遍历、 层序遍历
二叉树的实现
决策树:用二叉树来表示。

第十七章

二叉查找树: 查找、插入、 删除
二叉查找树的实现
平衡二叉查找树

第十八章

堆:完全二叉树(根节点小于左右孩子)
堆的实现
堆排序
优先队列:具有更高优先级的项排在前面,具有相同优先级的项按先进先出的规则排列。

第十九章

无向图:图中表示边的顶点对是无序的图是无向图,意味着两点间的连接是双向的。
有向图:图中的边是顶点的有序对的图为有向图,意味着有向图的边是有方向的边。
带权图:图中每条边都对应一个权值的图成为带权图,有时也称为网络。
图遍历:广度优先遍历、 深度优先遍历
无向图的最小生成树(Prim算法或Kruscal算法)
有向图的拓扑排序
有向图的最短路径求解(迪杰斯特拉算法)
图的实现策略:邻接表邻接矩阵

总结做过的作业

~(1)虚拟机的安装
~(2)使用虚拟机编写简单程序;
~(3)编写简单的类;
~(4)测试一
~(5)复数计算器
~(5)类的继承
~(6)概念常识问答
~(7)测试二;
~(8)栈实践;
~(9)二分查找实践;
~(10)树——计算;
~(11)二叉树建立,层序遍历实践;
~(12)哈夫曼编码实践;
~(13)测试三;
~(14)地图染色实践;
~(15)迪杰斯特拉算法实践;
~(16)拓扑排序;
~(17)最小生成树测试;

实验报告链接汇总:

实验一 linux命令行和编写简单java程序:

~基于命令行进行简单的Java程序编辑、编译、运行和调试
https://www.cnblogs.com/lhn20192322/p/13781842.html

实验二 编写简单的计算器

~简单计算器,完成加减乘除模的运算
https://www.cnblogs.com/lhn20192322/p/13792479.html

实验三 面向对象程序设计

~下载安装并使用IDEA
~初步掌握单元测试和TDD
~理解并掌握面向对象三要素:封装、继承、多态
~初步掌握UML建模
https://www.cnblogs.com/lhn20192322/p/13804907.html

实验四 Java Socket编程与密码学

~Java Socket编程
~Java和密码学
~编写有理数/复数计算器
~远程有理数计算器
~远程复数计算器
https://www.cnblogs.com/lhn20192322/p/13894436.html

实验五 Android程序设计

~Android Stuidio的安装测试
~Activity测试
~UI测试
~布局测试
~事件处理测试
https://www.cnblogs.com/lhn20192322/p/13913527.html

实验六 线性结构之链表

~通过键盘输入一些整数,建立一个链表
~实现节点插入、删除、输出操作
~使用冒泡排序法或者选择排序法根据数值大小对链表进行排序
~在android上实现以上操作
https://www.cnblogs.com/lhn20192322/p/13951730.html

实验七 查找与排序

~定义一个Searching和Sorting类,并在类中实现linearSearch,SelectionSort方法,最后完成测试
~重构你的代码
~参考http://www.cnblogs.com/maybe2030/p/4715035.html ,学习各种查找算法并在Searching中补充查找算法并测试
~补充实现课上讲过的排序方法:希尔排序,堆排序,二叉树排序等
~编写Android程序对实现各种查找与排序算法进行测试
https://www.cnblogs.com/lhn20192322/p/14057659.html

实验八 树

~参考教材PP16.1,完成链树LinkedBinaryTree的实现(getRight,contains,toString,preorder,postorder)
~基于LinkedBinaryTree,实现基于(中序,先序)序列构造唯一一棵二㕚树的功能,比如给出中序HDIBEMJNAFCKGL和后序ABDHIEJMNCFGKL,构造出附图中的树
~自己设计并实现一颗决策树
~输入中缀表达式,使用树将中缀表达式转换为后缀表达式,并输出后缀表达式和计算结果
https://www.cnblogs.com/lhn20192322/p/14095794.html

实验九 图

~初始化:根据屏幕提示(例如:输入1为无向图,输入2为有向图)初始化无向图和有向图(可用邻接矩阵,也可用邻接表),图需要自己定义(顶点个数、边个数,建议先在草稿纸上画出图,然后再输入顶点和边数)
~图的遍历:完成有向图和无向图的遍历(深度和广度优先遍历)
~完成有向图的拓扑排序,并输出拓扑排序序列或者输出该图存在环
~完成无向图的最小生成树(Prim算法或Kruscal算法均可),并输出
~完成有向图的单源最短路径求解(迪杰斯特拉算法)
https://www.cnblogs.com/lhn20192322/p/14220696.html
代码托管链接:https://gitee.com/besti1923/luohaonan20192322

哈夫曼编码实践

  1. 任务详情

设有字符集:S={a,b,c,d,e,f,g,h,i,j,k,l,m,n.o.p.q,r,s,t,u,v,w,x,y,z}。
给定一个包含26个英文字母的文件,统计每个字符出现的概率,根据计算的概率构造一颗哈夫曼树。
并完成对英文文件的编码和解码。
要求:

1.准备一个包含26个英文字母的英文文件(可以不包含标点符号等),统计各个字符的概率
2.构造哈夫曼树
3.对英文文件进行编码,输出一个编码后的文件
4.对编码文件进行解码,输出一个解码后的文件
5.撰写博客记录实验的设计和实现过程,并将源代码传到码云
6.把实验结果截图上传到云班课

https://www.cnblogs.com/lhn20192322/p/14220663.html

给出statistic.sh的运行结果,说明本学期的代码量目标达到没有?


代码量基本达到预期

加点代码,改点代码是理解的最好方式,参考编程的智慧,谈谈你的心得

一步一步调试虽然很繁琐,但也在这般苦痛中提升了自己的能力。
积极主动敲代码做到没?教材实践上有什么经验教训?

在平常的作业中并不是很积极主动,但作业来了我还是有积极的完成。
平时翻书还是翻得比较多,教材上的代码多数有敲。

课程收获与不足

自己的收获(投入,效率,效果等)

  • 自己的收获
    最大的收获是学会了自己啃书,出现问题自己上网去搜博客找解决方案。养成了一些好习惯,比如写学习总结博客、解决问题写博客、多看博客。学习了linux、Java、安卓和数据结构四大块知识。还有项目开发过程和项目管理的一些感性认识。
  • 自己需要改进的地方
    懒惰,数据结构没有留作业的部分有些没实现。缺乏一定心理素质和项目管理能力。担心的太多,没有掌握科学有效的方法,没能做到把团队紧密联系起来,达到集中力量办大事的效果。
    结对学习是不是真正贯彻了?写一下你提供的帮助或接受了什么帮助,并对老师提供参考建议
    好像只有最开始在做,后面就慢慢失去联系了...自己很少去问,等到后来结对伙伴不问了就失去联系了..
  • 参考建议:结对学习还是很有效的一种学习方式,互相讨论能够发现彼此知识的漏洞,促进学习热情,而且能够起到成绩好的带动稍差的同学的效果。要想要持之以恒的结对学习的话, 还是需要有分数的激励吧...

问卷调查

  • 你平均每周投入到本课程有效学习时间有多少?
    20小时以上,没有具体算过。周末就一整个下午/上午的看。
  • 每周的学习效率有提高吗?你是怎么衡量的?
    有,主要是博客越写越熟练了,完成学习所需的时间少了,花在其他课程上的时间多了。
  • 蓝墨云班课的使用对你的学习有促进吗?有什么建议和意见吗?
    有,可以按需查看所需要的资源。建议的话,希望资源能够更新一下,或者做下整理,资源太多了有时候也是一种烦恼...
  • 你觉得这门课老师应该继续做哪一件事情?
    坚持原来的上课内容。虽然学时被压缩了。
  • 你觉得这门课老师应该停止做哪一件事情?
    全英语测试,挫败感太强了。555
posted @ 2021-01-01 00:01  阿这阿这  阅读(131)  评论(0编辑  收藏  举报