钢七连四门实战课,前两集的视频片段:https://space.bilibili.com/484762714
学生在大学学一年的技术等级。
学生在大学学两年的技术等级。
课程复习:
- C3 P1:面向对象的一般问题。 java对象数组的常见错误举例。
- C3 P2:难题举例
面向对象OOP基本技术:封装,继承,多态
面向对象的语言无关。可以是java/c++/js/python.
用浏览器在线编程(C++),重现java的数组编程错误。
结论:1.java对象数组的原理是C/C++的对象指针组成的数组
- 观察指针变量本身、所指地址的十六进制变化。局部变量是分配在栈中,为指针分配的新空间在系统的堆中。
不了解P1、P2的难题、原理,依然可以正常完成一个小项目。
- C3 P3: 一个专业技术20%是原理和难点,60%是人人都能学会的基础知识。
20%的内容:怎样把基础知识应用于项目。
只要按照高效的学习路线,就能快速掌握主要内容和项目应用。
C3 P3 面向对象具体技术
- OOP基本技术:封装、继承、多态
封装:参考C3 P2. 成员变量、成员函数,封装成一个类。以此构建软件项目。
比如:学生类,老师类,商品类,购物车类,订单类,坦克类,子弹类。
成员变量(属性):学号(字符串),成绩(小数),商品数量(整数)
成员函数(方法):输出成绩求和、求平均。求购物车金额。坦克移动。发出子弹。计算伤害。
继承:父类、子类。子类拥有父类已经定义好的属性、方法。
一个父类,派生出多个子类。坦克类,有普通坦克、高级坦克。
子类再增加新属性、新方法。
多态:父类、子类,相同的函数名、不同的函数实现。(更精确的概念,这个叫重写、覆盖Override))
比如:坦克类,有一个函数:绘制坦克drawtank()。高级坦克,有同名函数,但子类增加了新功能、新模块。
子类函数:void drawtank(){
super.drawtank();// 调父类函数
//增加子类的新功能: 画血条、画特效...
}
同一个类之内,可以是相同的函数名、不同的参数列表(更准确的概念,叫重载Overload)。比如:
void drawtank(); void drawtank(int x, int y );
void drawtank(int x, int y, int state, int type );
https://www.runoob.com/java/java-override-overload.html
- 集合类和数组:多个对象怎样存放?
大一期末实训、培训班的基础案例教学要求
集合类:
ArrayList<String> a=new ArrayList<String>();
ArrayList<Tank> a=new ArrayList<Tank>();// 多个坦克
ArrayList<Bullet> a=new ArrayList<Bullet>();// 多个子弹
基本类型int,float,char的数组:值的数组。
Java对象的数组,本质上是对象指针构成的数组。(参见C3 P2)
传统的数组:
String s[]= new String[3];(本质上是3个指针,参见C3 P2)
s[0]=”沧海一声笑”; s[1]=”滔滔两岸潮”;
集合类:
ArrayList<String> a=new ArrayList<String>();
add(”沧海一声笑”); a.add(”滔滔两岸潮”);
- 面向对象应用:各种语言的上转型、下转型
定义一个存放父类的数组,但实际的元素是不同的子类对象。
学校/培训机构的基础案例:
ArrayList<Tank> a=new ArrayList<Tank>();
ArrayList<Bullet> a=new ArrayList<Bullet>();
大二之前,可以拓展达到高级案例要求:
培训班的高级案例教学要求:
一个大数组,存放所有元素,包括:我方坦克、敌方坦克、我方子弹、敌方子弹、高级特效、BOSS、道具、物品等等。
Tank,Bullet的统一父类:Sprite
ArrayList<Sprite> a=new ArrayList<Sprite>(); //Element ,Item
a.add(tank1); a.add(tank2);
a.add(bullet1); a.add(boss1); // 上转型
学设计模式之前,不仅了解OOP的多态,可以掌握多态的应用。
ArrayList<Sprite> a=new ArrayList<Sprite>();
for(a的每一个元素)
{ Sprite m=a.get(i);
m.draw();// 同一个函数名,执行的是各个子类不同的函数。
// Tank的draw() 画/不画血条; Bullet的draw()可能画一个动画序列。
}
多态的应用:抽象函数、接口、虚函数。
函数的写法:
对于一个Sprite类组成的数组,判断某一个元素是什么子类。
Sprite tmp= a.get(i);
强制类型转换:
Tank t_tank = (Tank )tmp; // 转成子类,下转型
t_tank.draw(); //已经转换成子类,当然触发的是子类的draw
//子类函数中,可以通过super.draw() 调用父类的draw函数
Java的关键字:对象 instanceof 子类类名/接口名称
Java的反射机制:类名.class
- 设计模式(大二下学期)
高级的项目功能,对应各种设计模式的应用。
项目功能:1.创建和初始化一个对象 2. 行为,业务逻辑 3. 对象之间的组织结构
魂斗罗,棋牌。网友的大型作品。
- 设计模式举例
行为型模式:业务逻辑
观察者模式做应用软件:用户关注、取消关注,关注以后收到私信。
观察者模式做游戏软件:多个客户端、一个服务端,接收、转发各个用户的消息。
各个大学教材、进度、难度基本一致。学生能做其他项目、改进功能?
第一章知识,第二章知识,... 期末最后一章整合案例,小项目的实训。
华中科大启明学院学生创新作品?
挑战5个有难度的问题,在打的过程中,又产生5个新问题。最后成功解决两个,失败八个。成功和失败的经验,共同组成了技术竞争力。
成功、失败的经验和技术积累,拉开了技术等级差距。
最后,有人变成了高手、变成了老师,能成功解决八个,失败两个。
老师学习技术的时间,不是从零学起,比学生快。学生可以早一点接触实战,项目实战贯穿学习过程。
老师解决问题的办法,比学生好。