它似乎是如此基本,以至于我可能会错过一些东西,但目前当我寻找数据的正确表示时,它比其他任何东西都更幸运。
我正在开发一个扑克应用程序。例:我想表示一些东西,比如一张牌,一个对手,或者一个对手可以持有的起始手牌(由两张牌组成)。
现在一些数据可能更琐碎,例如,一张牌可能成为一个类,花色和排名作为实例变量。对手也可能被建模为一个类。对于初学者来说,这变得更加困难。我应该将其建模为包含两张牌作为实例变量的自己的类,还是将其变成包含两张牌的对手类中的数组?
我什么时候建模作为一个类,什么时候作为另一个类中的实例变量?什么时候使用集合或数组,而不是类?它们可以保存多个数据,就像类一样?
是否有正确或错误,或一些最佳实践?我不知何故感到迷失在为程序建模的大量可能性中。
谢谢大家如小马的
您正在寻找Java composition .
组合是实现类中has-a关系的设计技术。我们可以使用java继承或对象组合来实现代码重用。
Java组合是通过使用引用其他对象的实例变量来实现的。例如, 有一个工作。你可以在这里找到一个合成的例子
在你的例子中,Hand
有Card
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
是什么。这是因为它们没有意义,因为它们是int
。Player
s在现实世界中没有int
s,所以这没有任何意义。
编译器不会报错,无论我们使用什么方法,它都会编译代码。但是第一种方法是面向对象的方法,它是最容易理解的。