gpt4 book ai didi

面向对象的Java : how to create objects properly

转载 作者:搜寻专家 更新时间:2023-10-31 19:34:32 24 4
gpt4 key购买 nike

我正在使用 OOP 创建一个简单的保龄球游戏,我想为每个碗创建一个类,一个由两个碗组成的 Frame 类,一个由十个帧组成的 Game 类。

目前我有这样的东西

碗.java

public class Bowl {

int bowlScore = 0;

public Bowl(int pinsKnocked){
bowlScore = pinsKnocked;
}
}

框架.java

public class Frame{

int firstScore;
int secondScore;
public Bowl firstBowl;
public Bowl secondBowl;

public Frame (){
firstBowl = new Bowl(0);
secondBowl = new Bowl(0);
}

public Frame (int firstScore, int secondScore){
firstBowl = new Bowl(firstScore);
secondBowl = new Bowl(secondScore);
}

游戏.java

public class Game {

int totalScore;
public Frame firstFrame;
public Frame secondFrame;
...
public Frame tenthFrame;

public Game(){
firstFrame = new Frame();
}

public Game(Frame f){
firstFrame = f;
}

这是使用 OOP 功能的正确方法吗?我该如何改进?

最佳答案

设计保龄球游戏没有 100% 正确的方法;有许多可行的解决方案,但更多的是行不通的。

您需要的是一个能够很好地实现您和您的目标的解决方案。

如果你想显示一个分数,那么我建议你从一个getScore()方法开始。如果您想显示获胜者,请从 displayWinners() 方法开始。

最终你会发现这些方法自然而然地绑定(bind)到各种名词上。例如,您可能开始时将 getScore() 附加到 Game 对象,但随后意识到这不自然地意味着您的游戏只能有一个分数。如果发生这种情况,您可以将 getScore() 移动到 Player 对象,并让游戏维持一个或多个玩家。

如果您正在使用自然属于其他地方的方法,您的代码中有许多提示可以指导您。最明显的暗示是一个方法似乎对另一个对象的数据特别感兴趣,甚至对它自己的数据也很感兴趣。在上面的示例中,游戏对象中的 getScore() 对 Player 的帧、球等过度感兴趣。

要获得如何安全地将代码从一个地方移动到另一个地方的技能和方向,我建议阅读 Martin Fowler 的重构书。

An excellent example, using exactly your problem is demonstrated here .

祝你好运,一段时间后,你将能够由于获得的技能而跳过此过程的某些部分;但是,在第一次学习时,最好不要跳过这些探索性步骤(从头开始)。

附言。请记住,您的代码只能确定执行您测试它要做的事情,如果您不熟悉测试驱动开发,研究一下它可能是个好主意(提示,这是一个巨大的轻描淡写)。

关于面向对象的Java : how to create objects properly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10785552/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com