我的作业中有一个问题是要求系统的UML设计
我的任务要求我允许程序员使用这个系统但不修改其组件(涉及的类),并列出我用于此的相关关键字。
如何设置类以满足此要求?
答案 0 :(得分:2)
Java中的概念性答案是对要防止在子类中重写的那些元素(类或类中的方法)使用 final 关键字
但那是在“非正式”层面。你的课程(最后)分发;因此你失去了所有权。如果有人想要,他可以获取您的源代码,删除 final 关键字并重新编译。甚至,当您只分发编译的类文件时,可以对它们进行反编译,删除 final 并重新编译。
但对于完成作业的学生来说,最终是要走的路。当然,最大的缺点是:最终类会给模拟框架带来麻烦,因此这使得单元测试更加棘手。因此,您需要确保拥有良好的接口,人们可以根据需要自行实施;并且只使你的“impl”课程成为最终的。
答案 1 :(得分:0)
在一天结束时,绝对没有办法阻止人们修改源代码(至少从Java开始)。在UML中也没有一种方法可以对其进行建模。 (如果这真的是作业的要求,我对他们驾驶的东西感到有些困惑;你是否有可能误读作业?)
某些版本控制系统可能允许您限制谁可以编辑某些文件,但我从未尝试过这样做,因此我无法告诉您更多信息。)
你可以肯定做的另一件事是在文件控制中监视文件以密切关注谁在修改它 - 请参阅this question以获取如何在TFS中执行此操作的示例。如果您使用的是Java,我认为您使用的不是TFS,但是也应该有相同的功能。在我以前的一家公司,我们使用它来确保子组件架构师了解他们“拥有”的代码的任何更改 - 理论上,人们应该让子组件架构师代码审查影响其子组件的所有更改,但有时人们忘记了,所以这有助于我们执行这条规则。您可能想要做类似的事情(有一条规则,您必须编写代码审查您“拥有”代码的所有更改。)
即使你可以绝对阻止其他人修改你的类,我也不推荐它,因为在整个产品生命周期中永远不需要修改类的几率实际上相对较低
正如其他答案/评论中所指出的,您可以使用final
框架来获得最接近Java的框架,这将阻止该类进一步被子类化。
做其中任何一个。
简短的回答:你不能从代码中做到这一点,你可能不想这样做。