它看起来是如此基础,以至于我可能会错过一些东西,但目前当我寻找数据的正确表示时,它比其他任何东西都更幸运。
我正在开发扑克应用程序。例如。我想代表一些东西,例如一张牌、一个对手或对手可能持有的起手牌(由两张牌组成)。
现在有些数据可能更琐碎,例如一张牌可能会变成一个以西装和等级作为实例变量的类。对手也可能被建模为一个类。对于起手牌来说,这变得更加困难。我应该将其建模为一个自己的类,其中包含两张牌作为实例变量,还是它将成为对手类内部的一个数组,其中包含两张牌?
什么时候我将某些东西建模为一个类,什么时候将其建模为另一个类中的实例变量?什么时候使用集合或数组而不是类?它们可以保存多个数据,比如类,对吗?
是否有正确或错误的做法,或者一些最佳实践?不知何故,我对程序建模的大量可能性感到迷失。
谢谢大家 -科比
最佳答案
您正在寻找 Java 组合。
组合是在类中实现has-a关系的设计技术。我们可以使用java继承或对象组合来实现代码重用。
Java组合是通过使用引用其他对象的实例变量来实现的。例如,一个人有一个工作。
您可以找到一个组合示例 here
就您而言,Hand
有Card
。因此,您应该在 Hand
类中为 Card
创建实例变量。例如:
class Card{
//....
}
class Hand{
private Card card1, card2;
//....
}
Java 是一种面向对象编程(OOP)语言。它是一种基于“对象”概念的编程范例,“对象”是包含字段形式数据的数据结构,通常称为属性;和代码,以过程的形式,通常称为方法。
因此您可以使用类来表示现实世界中的任何事物。 Card
、Hand
、Player
、Game
都可以表示为类。类基本上是对象的蓝图。它包含有关如何创建该对象的信息。
现在的问题是为什么应该使用 Hand 类而不是数组? 这就是原因。让我们举一个 OOP 的例子。
class Hand{
//.....
}
class Player{
Hand h;
}
这里玩家
的属性是什么? 玩家
有一个手
。这就是 Player
和 Hand
类之间的关系。这在现实世界中也很有意义。
现在让我们举一个数组示例。
class Player{
int[] s;//s stands for suit
int[] r;//r stands for rank
}
如果我没有添加这些注释,您很可能想知道 s
、r
是什么。这是因为它们没有意义,因为它们是 int 的。 Player
在现实世界中没有int
,因此它没有任何意义。
编译器不会提示,无论我们使用什么方法它都会编译代码。但第一种方法是 OOP 方法,它是最容易理解的。
关于java - Java 中数据的表示/建模(类与实例变量),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32637894/