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

时间:2015-09-17 18:50:17

标签: java class modeling instance-variables

似乎非常重要,我可能会错过一些东西,但是当我寻找正确的数据表示时,它现在比其他任何东西都更幸运。

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

现在一些数据可能更简单,例如一张牌可能会变成一个有西装的级别,并且等级为实例变量。对手也可能被建模为一个类。对于起手牌来说,它变得更加困难。我应该将它建模为一个自己的类,它包含两个卡作为实例变量,还是会成为对手类中的一个数组,它拥有两张卡?

我什么时候将某些东西建模为一个类,什么时候作为另一个类中的实例变量?我何时使用集合或数组,而不是类?那些可以容纳多个数据,比如类,对吗?

是对还是错,或是一些最佳做法?我在某种程度上感到失去了对程序建模的大量可能性。

谢谢大家 -cobby

1 个答案:

答案 0 :(得分:1)

您正在寻找Java Compositions。

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

通过使用引用其他对象的实例变量来实现Java组合。例如,作业

您可以找到合成here

的示例

在您的情况下,HandCard个。因此,您应该在Card类中为Hand创建实例变量。例如:

class Card{
    //....
}

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

Java是一种面向对象编程(OOP)语言。它是一种基于“对象”概念的编程范例,“对象”是包含数据的数据结构,以字段的形式,通常称为属性;代码,以程序的形式,通常称为方法。

因此,您可以使用类来表示现实世界中的任何内容。 CardHandPlayerGame都可以表示为类。类基本上是对象的蓝图。它包含有关如何创建该对象的信息。

所以现在问题是为什么你应该使用Hand类而不是数组? 这就是原因。让我们举个OOP例子。

class Hand{
    //.....
}

class Player{
    Hand h;
}

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

现在让我们举几个例子。

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

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

编译器不会抱怨,无论我们使用什么方法,它都会编译代码。但第一种方法是OOP方法,这是最容易理解的。