似乎非常重要,我可能会错过一些东西,但是当我寻找正确的数据表示时,它现在比其他任何东西都更幸运。
我正在开发一个扑克应用程序。例如。我想代表对手可以持有的牌,对手或起手牌(由两张牌组成)等一些东西。
现在一些数据可能更简单,例如一张牌可能会变成一个有西装的级别,并且等级为实例变量。对手也可能被建模为一个类。对于起手牌来说,它变得更加困难。我应该将它建模为一个自己的类,它包含两个卡作为实例变量,还是会成为对手类中的一个数组,它拥有两张卡?
我什么时候将某些东西建模为一个类,什么时候作为另一个类中的实例变量?我何时使用集合或数组,而不是类?那些可以容纳多个数据,比如类,对吗?
是对还是错,或是一些最佳做法?我在某种程度上感到失去了对程序建模的大量可能性。
谢谢大家 -cobby
答案 0 :(得分:1)
您正在寻找Java Compositions。
组合是在类中实现 has-a 关系的设计技巧。我们可以使用java继承或对象组合来代码重用。
通过使用引用其他对象的实例变量来实现Java组合。例如,人有作业。
您可以找到合成here
的示例在您的情况下,Hand
有Card
个。因此,您应该在Card
类中为Hand
创建实例变量。例如:
class Card{
//....
}
class Hand{
private Card card1, card2;
//....
}
Java是一种面向对象编程(OOP)语言。它是一种基于“对象”概念的编程范例,“对象”是包含数据的数据结构,以字段的形式,通常称为属性;代码,以程序的形式,通常称为方法。
因此,您可以使用类来表示现实世界中的任何内容。 Card
,Hand
,Player
,Game
都可以表示为类。类基本上是对象的蓝图。它包含有关如何创建该对象的信息。
所以现在问题是为什么你应该使用Hand类而不是数组? 这就是原因。让我们举个OOP例子。
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
在现实世界中没有int
,所以它没有任何意义。
编译器不会抱怨,无论我们使用什么方法,它都会编译代码。但第一种方法是OOP方法,这是最容易理解的。