钢七连实战C3-P3:java具体技术

钢七连四门实战课,前两集的视频片段:https://space.bilibili.com/484762714

学生在大学学一年的技术等级。

学生在大学学两年的技术等级。

课程复习:

  • C3 P1:面向对象的一般问题。 java对象数组的常见错误举例。
  • C3 P2:难题举例

面向对象OOP基本技术:封装,继承,多态

面向对象的语言无关。可以是java/c++/js/python.

用浏览器在线编程(C++),重现java的数组编程错误。

结论:1.java对象数组的原理是C/C++的对象指针组成的数组

  1. 观察指针变量本身、所指地址的十六进制变化。局部变量是分配在栈中,为指针分配的新空间在系统的堆中。

   不了解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个新问题。最后成功解决两个,失败八个。成功和失败的经验,共同组成了技术竞争力。

成功、失败的经验和技术积累,拉开了技术等级差距。

最后,有人变成了高手、变成了老师,能成功解决八个,失败两个。

老师学习技术的时间,不是从零学起,比学生快。学生可以早一点接触实战,项目实战贯穿学习过程。

老师解决问题的办法,比学生好。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值