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

标签 java class modeling instance-variables

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

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

现在有些数据可能更琐碎,例如一张牌可能会变成一个以西装和等级作为实例变量的类。对手也可能被建模为一个类。对于起手牌来说,这变得更加困难。我应该将其建模为一个自己的类,其中包含两张牌作为实例变量,还是它将成为对手类内部的一个数组,其中包含两张牌?

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

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

谢谢大家 -科比

最佳答案

您正在寻找 Java 组合。

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

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

您可以找到一个组合示例 here

就您而言,HandCard。因此,您应该在 Hand 类中为 Card 创建实例变量。例如:

class Card{
    //....
}

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

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

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

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

class Hand{
    //.....
}

class Player{
    Hand h;
}

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

现在让我们举一个数组示例。

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

如果我没有添加这些注释,您很可能想知道 sr 是什么。这是因为它们没有意义,因为它们是 int 的。 Player在现实世界中没有int,因此它没有任何意义。

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

关于java - Java 中数据的表示/建模(类与实例变量),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32637894/

相关文章:

haskell - 对酿造操作序列进行建模

r - 我应该如何在 R 中调用 model.frame?

java - 如何根据单独类的进度更新 JavaFX 进度指示器?

java - 如何获取鼠标指针相对于框架的位置

javascript - 直接在ReactJS中的类定义上设置字段

父类不能在静态上下文中使用 PHP const/static 变量

java - 如何调试返回带有值但没有内容的字符串的 Java 字符串拆分?

java - 在Spring CachingConnectionFactory中设置connectionTimeouts和socketTimeouts

php - 在类中加载 config.php

GPU FLOPS 和 FPS