Java中数据的表示/建模(类与实例变量)



它似乎是如此基本,以至于我可能会错过一些东西,但目前当我寻找数据的正确表示时,它比其他任何东西都更幸运。

我正在开发一个扑克应用程序。例:我想表示一些东西,比如一张牌,一个对手,或者一个对手可以持有的起始手牌(由两张牌组成)。

现在一些数据可能更琐碎,例如,一张牌可能成为一个类,花色和排名作为实例变量。对手也可能被建模为一个类。对于初学者来说,这变得更加困难。我应该将其建模为包含两张牌作为实例变量的自己的类,还是将其变成包含两张牌的对手类中的数组?

我什么时候建模作为一个类,什么时候作为另一个类中的实例变量?什么时候使用集合或数组,而不是类?它们可以保存多个数据,就像类一样?

是否有正确或错误,或一些最佳实践?我不知何故感到迷失在为程序建模的大量可能性中。

谢谢大家如小马的

您正在寻找Java composition .

组合是实现类中has-a关系的设计技术。我们可以使用java继承或对象组合来实现代码重用

Java组合是通过使用引用其他对象的实例变量来实现的。例如, 有一个工作

你可以在这里找到一个合成的例子

在你的例子中,HandCard s。所以你应该在Hand类中为Card创建实例变量。例:

class Card{
    //....
}
class Hand{
    private Card card1, card2;
    //....
}

Java是一种面向对象的编程语言。它是一种基于"对象"概念的编程范式,对象是包含数据的数据结构,以字段的形式出现,通常称为属性;而以过程形式出现的代码,通常被称为方法。

所以你可以用一个类来表示现实世界中的任何东西。Card, Hand, Player, Game都可以表示为类。类基本上是对象的蓝图。它包含关于如何创建该对象的信息。

那么现在的问题是为什么你应该使用Hand类而不是数组?原因如下。让我们举一个面向对象的例子。

class Hand{
    //.....
}
class Player{
    Hand h;
}

这里Player的属性是什么?Player有一个Hand。这就是Player类和Hand类之间的关系。这在现实世界中也很有意义。

现在让我们看一个数组的例子。

class Player{
    int[] s;//s stands for suit
    int[] r;//r stands for rank
}

如果我没有把这些评论,你很可能会想知道s, r是什么。这是因为它们没有意义,因为它们是intPlayer s在现实世界中没有int s,所以这没有任何意义。

编译器不会报错,无论我们使用什么方法,它都会编译代码。但是第一种方法是面向对象的方法,它是最容易理解的。

最新更新