一个电子表

这篇博客通过BlueJ的电子表案例讲解了Java编程中的模块化、抽象、类与对象、构造器重载、零填充以及模运算符的应用。博主介绍了如何将电子表拆分为小时和分钟的两位数显示,并通过NumberDisplay类来实现,强调了Java中类名作为数据类型使用以及对象引用的概念。此外,还讨论了补零方法getDisplayValue()和模运算符在时间递增及归零逻辑中的作用。
摘要由CSDN通过智能技术生成

这节课以 BlueJ 的一个电子表为例:

在这里插入图片描述

新建一个ClockDisplay 的对象后, 点击它, 里面有一个实例变量:

在这里插入图片描述

String displayString.

现在显示的是 “00:00”, 也代表在现实中电子表会显示的字符串

在 Java 中, 我们要想跟 object 互动 就需要 使用 method:

在这里插入图片描述

里面只有三个 methods, 是个很简单的 interface.

getTime() 和 setTime(int hour, int minute) 就是我上文讲到的 accessor 和 mutator.

timeTick() 以某种方式被物理计时器调用. 在现实的时钟里会产生有规律的时间信号. 在这个例子当中, 我们每 call 一次这个方法, 电子表的显示就会增加一分钟.

现在我们来研究在 Java 中怎样用代码来实现这些.


Modularisation & Abstraction

如果说这是我们要做的东西:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5bdZtdqJ-1635579379516)(C:\Users\Lee\AppData\Roaming\Typora\typora-user-images\image-20211029213958124.png)]

我们现在想一下怎么样来实现这样一个东西.

modularisation (模块化) 和 abstraction (抽象化) 的思想告诉我们要先把大个事物细分成小的部分.

就这个例子, 我们可以把这个四维数显示的电子表显示器看成 两个 两位数 的显示, 然后一个一个的去实现它们, 这样就容易多了.

时间的单位都是从"0"开始计时, 到某一个临界值就会归零.

public class NumberDispaly
{
   
    private int limit;
    private int value;
    
    // Constructor and methods omitted.
}

按照这个想法, 我们只需要先把分钟做出来, 再照着模子把时钟做出来就行了

现在, 我们管整个四位数显示 “00:00” 叫 ClockDisplay, 管两个分别代表时, 分的两位显示叫 NumberDisplay.

在 NumberDisplay 中:

minute, 从"0" 走到 “59”, hour, 从"0" 走到 “23”

最低值永远是零, 但是最高值是不固定的, 所以在最高值这里不得不有一个 variable

在上面的代码中, 我们用 limit 来存储这个变量, 而 value 用来存储现在的时间. 假如说现在 ClockDisplay 显示的是 “22:03”, 在时针里, value 存储的就是 “22”, “03” 则被存储到分针中.


Class & Object

在深入 Constructor 和 method 之前, 我们继续探讨一下这个表的结构.

两个两位显示分别代表 hour 和 minute, 换句话说, hour 和 minute 都是 NumberDisplay 的 对象,

public class ClockDisplay 
{
   
    private NumberDisplay hours;
    private NumberDisplay minutes;
    
    // Constructor and methods omitted.构造器和方法略
}

有了两个 NumberDisplay, 就可以合成一个 ClockDisplay, 也就是我们最终要做的电子表.

在 ClockDisplay类 里存储两个变量分别代表 minute 和 hour 就是上面的代码.

在这里我们要注意到一个细节, “NumberDisplay” 在 field declaration (字段声明) 中出现了.

这里就体现了Java的强大之处: 在 Java 中 名是可以当作 数据类型 来使用的, 也就是说我们可以在 Java 中通过新建类的方式来创造数据类型.

现在我们有了两个类型为 NumberDisplay 的变量, 那就意味着这两个变量可以存储 NumberDisplay 的 对象. 所以, ClockDispaly类 的 对象 会在 实例变量 “hours” 和 “minutes” 中分别存储一个 NumberDisplay 的 对象.
在这里插入图片描述

这里有一个非常重要的细节需要提一下, 当一个 Java 对象存储另一个 Java对象时 (比如说这种情况), 它 并不是直接存储这个对象, 而是存储了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值