zoukankan      html  css  js  c++  java
  • 20192329 2020-2021-1 《数据结构与面向对象程序设计》课程总结

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

    课程总结

    第一章 绪论

    Java是面向对象程序设计语言
    类是对象的蓝图
    三大特性:封装 继承 多态
    重要术语:对象 属性 方法
    注释、标识符:class、public、static、void、main、String、args、System
    Java是高级语言

    第二章 数据和表达式

    字符串的使用、字符串的连接及转义字符
    变量的说明和使用
    介绍Scanner类

    基本数据类型
    Java一共有8种基本数据类型:boolean、byte、short、int、long、float、double、char
    这8种基本数据类型可以分为
    逻辑类型:boolean
    常量:true、false
    整数类型:byte、short、int、long
    表达式
    表达式由运算符及操作数组成,用来执行一个计算。
    数据转换
    Java中数据的基本类型(不包括逻辑类型)按精度从低到高:
    byte short char int long float double
    当把精度低的赋值给精度高的(从左到右)变量时,系统自动完成转换:例如:float x = 100;
    当把精度高的赋值给精度低的(从右到左)变量时,必须显示加强制类型转换,例如: int x=(int)3.14;
    把一个int类型的常量赋值给一个byte或者一个short类型变量时,如果超出byte或者short的范围必须加强制类型转换,例如
    byte a = (byte)128;
    读输入数据
    输入数据
    可以使用Scanner类创建一个对象:
    Scanner reader = new Scanner(System.in);
    输出数据
    System.out.println()和System.out.print()都可输出数据,区别是前者换行、后者不换行。

    第三章 使用类和对象

    创建对象
    String类

    Random类
    Math类

    第四章 条件和循环

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

    第五章 编写类

    讨论类定义的结构和内容
    探讨方法定义的结构,包括参数和返回值
    讨论类之间的关系

    第六章 图形用户界面

    GUI 组件 布局

    第七章 数组

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

    第八章 继承

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

    第九章 多态

    定义多态
    讨论动态绑定的概念
    使用继承来创建多态引用
    探讨Java接口的用途和语法
    使用接口创建多态引用
    在多态背景下讨论面向对象设计

    第十章 异常

    探讨异常
    检查异常消息并调用堆栈跟踪
    检查处理异常的try-catch语句
    探讨异常传播的概念
    描述Java标准类库中异常类的层次结构
    探讨I/O异常和文本文件的编写

    第十一章 递归

    递归思想
    递归程序设计
    使用递归

    第十二章 算法分析

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

    第十三章 树

    介绍使用引用创建链式结构
    链式结构与基于数组结构的比较
    探讨管理链表的技术
    讨论是否需要单独节点对象形成链式结构使用链表实现栈集合

    第十四章 栈

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

    第十五章 队列

    讨论队列的处理
    探讨队列的不同实现方式

    第十六章 树

    根节点:唯一
    节点的度:节点拥有的子树数。度为0:称为终端节点或叶节点
    树的度:树内各节点的度的最大值
    内部节点:除根节点外的节点
    孩子(child):节点的子树的根 称为该节点的孩子,反过来,称为双亲(parent)
    兄弟(sibling):同一双亲的孩子之间的关系
    节点的祖先:从根到该节点所经分支上的全部节点
    节点层次:根为第一层,根的孩子为第二层
    树的深度(Depth):树中节点的最大层次

    第十七章 二叉查找树

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

    第十八章 堆和优先队列

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

    第十九章 图

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

    二,总结做过的作业

    任务1安装虚拟机

    实践一,虚拟机编写简单程序

    编写简单的类

    作业4:类继承作业

    作业5:复数计算器

    作业6:栈实践

    作业7:二分查找(折半查找)实践

    作业8:二叉树的建立和层序遍历法实践

    作业9:哈夫曼编码实践

    作业10:查找及ASL作业(计算)

    作业17:地图染色问题

    Dijkstra(迪杰斯特拉)算法测试

    拓扑

    三、实验报告链接汇总

    实验一 :Linux基本操作与简单JAVA程序编写
    (1)基于命令行和IDE(Intellj IDEA 简易教程](http://www.cnblogs.com/rocedu/p/4421202.html)进行简单的Java程序编辑、编译、运行和调试。
    (2)练习Linux基本命令;
    (3)学习Java程序的JDB调试技能:https://www.cnblogs.com/rocedu/p/6371262.html
    (4)编写简单的Java程序。

    实验二:编写简单的计算器,完成加减乘除模运算
    (1) 编写简单的计算器,完成加减乘除模运算。
    (2) 要求从键盘输入两个数,使用判定语句选择一种操作,计算结果后输出,然后使用判定和循环语句选择继续计算还是退出。
    (3) 编写测试代码,测试验证。(https://www.cnblogs.com/rocedu/p/4472842.html)

    实验三 :IDEA的使用
    下载安装并使用IDEA,完成下面实验(https://www.cnblogs.com/rocedu/p/6371315.html)。
    (1)初步掌握单元测试和TDD。
    (2)理解并掌握面向对象三要素:封装、继承、多态。
    (3)初步掌握UML建模。
    (4)完成蓝墨云上 (1)-(5)实验。

    实验四
    (1)Java Socket编程
    学习蓝墨云上教材《Java和Android编程》“第16章 输入/输出 ”和“第22章 网络”,学习JavaSocket编程并与结对伙伴实现客户端与服务器。
    (2)Java和密码学
    以结对的方式完成Java密码学相关内容的学习。提交学习成果码云链接和代表性成果截图,要有学号水印。
    (3)编写有理数/复数计算器
    (4)远程有理数计算器
    (5)远程复数计算器

    实验五:Android Stduio的相关测试
    (1)学习Android Stuidio调试应用程序
    (2)Activity测试
    参考《Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)》第二十五章:
    构建项目,运行教材相关代码
    创建 ThirdActivity, 在ThirdActivity中显示自己的学号,修改代码让MainActivity启动ThirdActivity
    (3)UI测试
    参考《Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)》第二十六章:
    构建项目,运行教材相关代码
    修改代码让Toast消息中显示自己的学号信息
    (4)布局测试:
    参考《Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)》第二十七章:
    构建项目,运行教材相关代码
    修改布局让P290页的界面与教材不同
    (5)事件处理测试:
    参考《Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)》第二十八章:
    构建项目,运行教材相关代码
    提交代码运行截图和码云Git链接,截图要有学号水印,否则会扣分

    实验六:链表练习
    1.链表练习,要求实现下列功能:
    通过键盘输入一些整数,建立一个链表;
    这些数是你学号中依次取出的两位数。 再加上今天的时间。
    例如你的学号是 20172301 ;今天时间是 2018/10/1, 16:23:49秒
    数字就是20, 17,23,1, 20, 18,10,1,16,23,49
    打印所有链表元素, 并输出元素的总数。
    在你的程序中,请用一个特殊变量名来纪录元素的总数,变量名就是你的名字。 例如你叫 张三, 那么这个变量名就是int nZhangSan = 0; //初始化为 0.
    做完这一步,把你的程序签入源代码控制(git push)。

    2.链表练习,要求实现下列功能:
    实现节点插入、删除、输出操作;
    继续你上一个程序, 扩展它的功能,每做完一个新功能,或者写了超过10行新代码,就签入代码,提交到源代码服务器;
    从磁盘读取一个文件, 这个文件有两个数字。
    从文件中读入数字1, 插入到链表第 5 位,并打印所有数字,和元素的总数。 保留这个链表,继续下面的操作。
    从文件中读入数字2, 插入到链表第 0 位,并打印所有数字,和元素的总数。 保留这个链表,并继续下面的操作。
    从链表中删除刚才的数字1. 并打印所有数字和元素的总数。

    3.链表练习,要求实现下列功能:
    使用冒泡排序法或者选择排序法根据数值大小对链表进行排序;
    如果你学号是单数, 选择冒泡排序, 否则选择选择排序。
    在排序的每一个轮次中, 打印元素的总数,和目前链表的所有元素。
    在(2)得到的程序中继续扩展, 用同一个程序文件,写不同的函数来实现这个功能。 仍然用 nZhangSan (你的名字)来表示元素的总数。
    4.在android上实现实验(1)和(2)
    5.在android平台上实现实验(3)

    实验七
    1、定义一个Searching和Sorting类,并在类中实现linearSearch,SelectionSort方法,最后完成测试。
    要求不少于10个测试用例,提交测试用例设计情况(正常,异常,边界,正序,逆序),用例数据中要包含自己学号的后四位
    提交运行结果图。
    2、重构你的代码
    把Sorting.java Searching.java放入 cn.edu.besti.cs1823.(姓名首字母+四位学号) 包中(例如:cn.edu.besti.cs1823.G2301)
    把测试代码放test包中
    重新编译,运行代码,提交编译,运行的截图(IDEA,命令行两种)
    3、参考http://www.cnblogs.com/maybe2030/p/4715035.html ,学习各种查找算法并在Searching中补充查找算法并测试
    提交运行结果截图
    4、补充实现课上讲过的排序方法:希尔排序,堆排序,二叉树排序等(至少3个)
    测试实现的算法(正常,异常,边界)
    提交运行结果截图(如果编写多个排序算法,即使其中三个排序程序有瑕疵,也可以酌情得满分)
    5、编写Android程序对实现各种查找与排序算法进行测试
    提交运行结果截图

    实验八
    (一)参考教材PP16.1,完成链树LinkedBinaryTree的实现(getRight,contains,toString,preorder,postorder)
    1、用JUnit或自己编写驱动类对自己实现的LinkedBinaryTree进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息
    2、课下把代码推送到代码托管平台
    (二)基于LinkedBinaryTree,实现基于(中序,先序)序列构造唯一一棵二㕚树的功能,比如给出中序HDIBEMJNAFCKGL和后序ABDHIEJMNCFGKL,构造出附图中的树
    1、用JUnit或自己编写驱动类对自己实现的功能进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息
    2、课下把代码推送到代码托管平台
    (三)自己设计并实现一颗决策树
    1、提交测试代码运行截图,要全屏,包含自己的学号信息
    2、课下把代码推送到代码托管平台
    (四)输入中缀表达式,使用树将中缀表达式转换为后缀表达式,并输出后缀表达式和计算结果(如果没有用树,正常评分。如果用到了树,即使有小的问题,也酌情给满分)
    1、提交测试代码运行截图,要全屏,包含自己的学号信息

    实验九:图的综合实践
    (1) 初始化:根据屏幕提示(例如:输入1为无向图,输入2为有向图)初始化无向图和有向图(可用邻接矩阵,也可用邻接表),图需要自己定义(顶点个数、边个数,建议先在草稿纸上画出图,然后再输入顶点和边数)
    (2) 图的遍历:完成有向图和无向图的遍历(深度和广度优先遍历)
    (3) 完成有向图的拓扑排序,并输出拓扑排序序列或者输出该图存在环
    (4) 完成无向图的最小生成树(Prim算法或Kruscal算法均可),并输出
    (5) 完成有向图的单源最短路径求解(迪杰斯特拉算法)


    给出statistic.sh的运行结果,说明本学期的代码量目标达到没有?
    还需要一些代码
    代码托管链接:https://gitee.com/li-yuanhe
    加点代码,改点代码是理解的最好方式,参考编程的智慧,谈谈你的心得
    在已有代码的上并且可以很好的理解此代码的基础上,加点代码,改点代码比较容易。
    先把眼前的问题解决解决好,再考虑将来的扩展问题。

    积极主动敲代码做到没?教材实践上有什么经验教训?
    做到一半,基本上都是为了完成任务而去写代码,前期把教材上的代码敲了一半,且多练习方能学好学精。
    课程收获与不足

    4.问卷调查

    你平均每周投入到本课程有效学习时间有多少?
    两到三天
    每周的学习效率有提高吗?你是怎么衡量的?
    有提高,在精力最充沛时刻打开idea
    蓝墨云班课的使用对你的学习有促进吗?有什么建议和意见吗?
    有促进,抢答环节请加大力度
    你觉得这门课老师应该继续做哪一件事情?
    抢答环节,既可回顾知识点,又可提高积极性,充满了趣味性QWQ。
    你觉得这门课老师应该停止做哪一件事情?
    代码截图加水印,他太麻烦了wwww
    其他任意发挥

    王志强老师永远最帅!!!

  • 相关阅读:
    JAVA闰年测试与解决非法输入
    Junit介绍与实现
    等价类划分方法的应用
    使用Visual Studio 2013进行UI自动化测试
    简谈软件测试
    【Software Project Management】Quizs
    White box testing
    peer review
    闰年问题
    热烈庆贺清明小长假的到来
  • 原文地址:https://www.cnblogs.com/qwerasdfzxcxc/p/14219645.html
Copyright © 2011-2022 走看看