面向对象程序设计

设计如何去使用面向对象的思维考虑问题

  1. 类:确定最大化分工协作
  2. 封装:类中属性,方法,属性的名称,方法的名称

属性: getter 方法的属性 setter 方法的属性

目的:属性私有化,再提供开放属性的接口

  1.  继承:  分析共性方法,提取共性方法后,分析个性

       共性方法设置父类, 个性继承后重写

         目的: 把重码率降到最低   

  1. 多态:在编程过程中,可以涉及到的关系

父转子  向下转化

子转父  向上转化

剪刀石头布

游戏: 至少两个角色(玩家,电脑)

逻辑: 游戏规则(出拳,判断大小)

  1. 分析几个类

两个玩家  ----à  两个类  玩家类   电脑类

裁判类----à判断 (根据游戏规则判断输赢)

平台类-à 选择服务器,玩的难度系数,房间号,桌号 (省略)

主程序--àmain主函数

  1. 封装的内容

玩家类:

(属性)

   名字 name

   出拳名称: choice

(方法)

   出拳

电脑类:

                  (属性)

     名字:name

   出拳名称:choice

(方法)

出拳

             隐性裁判类:

                  (属性)

             埋点(私有化)

                (方法:算法)

             判决 judge

            主程序:

            main函数

  1. 继承关系:

就是方法相同,属性相同的找一个父类来处理,其它类是继承关系。

玩家类和电脑类应该有一个共同的父类,

父类作用:第一点:限定了玩家和电脑的属性和方法

          第二点:取名规范化

             父类:参与者类 --------继承---à玩家类

                 --------继承---à电脑类

  1. 发生多态关系: 玩家类或者电脑类转化成参与者类

归纳,有继承关系和没有继承关系的类

参与者类  玩家类  电脑类

裁判类

主程序   

 实现:

  1. 封装类时,私有化变量后,3步必须要做.
  1. 做所有的变量的getter和setter方法
  2. 做当前类的无参和全参构造器。
  3. 重写当前类的toString()方法
  1. 重写方法的操作

(1)鼠标右键,选择“Generate。。。。。”

(2)在出现的菜单中选择” Override method”.

 

(3)在出现的对话框中选择重写的方法

这里选择的是choice和name_setting(),选择这两个方法可以配合ctl+鼠标左键。

自动产生方法后,代码中自动有句话

Super.choice

Super代表父类,后面指示的方法,super.choice()指的是父类choice()方法的代码是否需要继续执行。

        

  1. 在程序中用户输入序号,这个序号代表字符串的意义,可以采用数组结合角标,把这一系列字符串看成数组,用输入数字代表数组中的角标。

//定义数组

String[] computer_names={"蜡笔小新","葫芦娃"};
System.out.println("****************");
System.out.println("1----蜡笔小新");
System.out.println("2----葫芦娃");
System.out.println("****************");
System.out.println("请选择对阵的英雄编号");
Scanner scanner = new Scanner(System.in);
try{

//用户输入的整型做为角标
    this.setName(computer_names[scanner.nextInt()-1]);
}
catch(Exception e ){

}

  1. 裁判类中裁决胜负方法中一定有参,这个参数传入所有玩家或者当前正在判断的两个玩家。根据异常情况的结果用数组的方法来反应:输,赢,平。
String[] arrs= {"平局","",""};

try{

    System.out.println("玩家"+arrs[sub_player]);

}catch(Exception e){

    //电脑应用Math.abs绝对值函数,

    System.out.println("电脑"+arrs[Math.abs(sub_player)]);

}
  1. 在主类中先实例化所有类.

实例化过程中定义父类一般不用。

  1. 注意:保证scanner.next()这种语句只接收一次,把scanner.next()先定义成变量,然后再后面调用,避免太多next引起输入控制台一直进入输入.
  2. 把条件性的内容用数组来解决,翻译成字节码比较快,某种情况还引有StringBuilder,这是变长的字符串类。

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值