随着我开始越来越多地编写代码,例如在C++中,我也倾向于更多地了解关于代码的公认标准。
我现在正试图编写一个国际象棋引擎,但我不知道如何处理程序的每个“模块”(该模块被分成不同的文件)。
例如,为bitboard.h和bitboard.cpp这样的位板创建一个类是有意义的,因为以后可能需要这样做。但是,为移动生成器设置一个类是没有意义的,因为我不会需要一个以上的移动生成器。
但我仍然希望遵守最少特权的原则,而不是让用户访问超出需要的功能。但是,我不确定你能不能不上课?我看过namespace,但我不确定它在这种情况下如何适用。
专业程序员是如何处理这类事情的?我看过河豚开源象棋引擎的源代码,它有头文件和cpp文件,但是头文件似乎有很多变量。
发布于 2015-07-12 20:28:56
最小特权原则是关于安全性的,而不是软件工程,不应该与封装封装混淆。它们是两种截然不同的东西。
最小权限原则的要点是为用户(或应用程序)提供它所需的最小权限。因此,用户A可能获得与用户B不同的权限集。这是为了使潜在的恶意用户很难获得对潜在危险功能的访问,因为它们需要有明确的权限。
封装就是要明确说明类的哪些部分是为外部用户准备的,哪些部分应该被调用方忽略。这里的目的不是恶意用户,而是确保用户不会意外地编写依赖于将来可能发生变化的代码。它还推动类作者创建清晰的接口。
最小权限原则的内在特点是不同的用户拥有不同的权限。在面向对象的软件中,完全没有这种概念。您类的所有用户都有相同的访问权限。最小特权原则中也隐含着强制用户进入受限子集的情况。相反,在许多面向对象的语言中,封装很容易被打破。(在有些情况下,如Python,封装完全由编码标准处理。)
如果您试图设计类,目的是将用户限制在最低限度(如最小特权原则),那么您可能最终会得到限制和难以使用的类。相反,您应该从“用户希望使用这个类做什么”的角度来看待它。公共界面是用户想要做的一切。那就把其他事情都保密。那是封装。
本质上,在设计类时,您希望在操作时给予用户您可以安全地给予他们的最大特权。
https://softwareengineering.stackexchange.com/questions/289506
复制相似问题