首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内部表示的数组与私有类: Java伦理

内部表示的数组与私有类: Java伦理
EN

Stack Overflow用户
提问于 2011-01-31 05:46:34
回答 6查看 354关注 0票数 1

我最近有一个家庭作业的问题,我们应该在棋盘上工作,并在棋盘上放置一些皇后。

这个问题在难度上是微不足道的,但我想问的是:

我是不是应该只做一个二维布尔型数组,并将每个包含皇后的位置都改为1,还是应该创建一个私有类来表示一个以x和y坐标作为实例变量的皇后呢?

这可能看起来不是很重要或紧迫,但我使用的是Java,它似乎触及了OO编程概念的核心。如果我们从来不使用Java的模块化功能,那么为什么还要使用Java呢?我们也可以用C或Python写同样的东西。

你认为总体上哪一个更合适?如果您能将您的答案限制在有理由的答案上,而不是观点或个人偏好,我将不胜感激。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-01-31 05:54:16

我是不是应该只做一个二维布尔数组,并将每个包含皇后的位置都改为1,或者我应该创建一个私有类来表示一个以x和y坐标作为实例变量的皇后?

对于这些问题,没有一个通用的答案。任何一种方法都可以适用于特定的情况,解决特定的问题。

如果我们从来没有使用过

的模块化功能,那么为什么还要使用Java语言呢?我们也可以用C或Python写同样的东西。

Java是一种面向对象语言的事实并不意味着我们必须为我们需要表示的每一块数据定义和使用类和对象。

如果我没理解错的话,你问的是关于实现的细节。面向对象编程关注的不是具体的实现细节,而是将这些实现细节封装在一个合适的接口后面,该接口很好地代表了一些重要的领域概念。因此,类的客户端不需要知道也不需要考虑它的实现细节,只需要知道由接口表示的更高级别的抽象。

票数 5
EN

Stack Overflow用户

发布于 2011-01-31 06:02:06

我是不是应该只做一个二维布尔数组,并将每个包含皇后的位置都改为1,或者我应该创建一个私有类来表示一个以x和y坐标作为实例变量的皇后?

这取决于您的需求。例如,如果你需要遍历棋盘并检查每个方块,以确定是否存在皇后,我会选择第一种方法,但如果你只有两个或三个皇后,并根据它们的相互配置做出决定,将坐标存储为一个类的字段,对我来说,这将是一个更好的主意。

这可能看起来不是很重要,也不是很紧迫,但我使用的是Java,它似乎切中了OO编程概念的核心。如果我们从来不使用Java的模块化功能,那么为什么还要使用Java呢?我们也可以用C或Python写同样的东西。

拥有使用OOP的能力并不意味着它总是最好的解决方案,有时创建一个单独的类而不是使用原始类型只会使事情变得复杂,并使您的代码更难支持。

票数 2
EN

Stack Overflow用户

发布于 2011-01-31 06:03:39

在这种情况下,拥有一个由Queens (单独的类,但不包含x,y坐标)或booleans (表示是否存在queen)组成的2D数组应该是正确的选择。理由如下:

  • 皇后区本身并没有这样的职位。您应该独立于对象(POJO)的使用位置来设计对象(POJO),并且只包含与它们本身相关的属性作为类成员。
  • 定位数据与皇后无关,应该与它们分开。简而言之,照顾自己的位置不是女王的工作,而是外部各方(玩家、程序等)的工作。这就是所谓的responsibilities.
  • Most算法的分离,你想使用它会更难实现,并且在逻辑上很难阅读和遵循。板的简单迭代将变得不可能(或者至少是无用的)。

您必须清楚地定义系统中每个对象的角色,以便能够以一种既可扩展又易于使用的方式设计它。不清楚每个对象到底要做什么可能会导致在这个过程中的某个地方做出错误的决定,这本身就会导致更多的错误决定来处理它,直到它变得如此庞大,以至于你会决定重新开始:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4845736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档