java类只是为了语义
我正在构建一个应用程序,允许您将样式应用于正则表达式及其捕获组。我有一个名为RegexGroup
的类,它包含RegexGroup
和Regex
的列表
为了利用这些类,我将制作一个gui前端,我从制作一个可序列化的项目类开始,但我意识到Project
类与RegexGroup
类完全相同。仅仅因为它们将在不同的上下文中使用,创建一个与另一个完全相同的Project
类是好的还是坏的做法?或者我应该坚持使用RegexGroup
类吗?
先谢谢你,呃
注意:我想不出标题,如果“语义”一词的用法不正确,请纠正我
注:我目前在java中编写这个,但是这是不是在C++中恰当地使用^ {CD8>}?p>编辑:这些类实际上是完全相同的。它们的实现和接口完全相同,没有任何区别
# 1 楼答案
任何有助于代码可读性的东西都应该有帮助(如果它不损害其他重要特性,比如性能)。因此,创建另一个类(或者,出于这个原因,对存在的类进行别名)是可以的
我想在Java中,您可以从RegexGroup中对项目进行子类化,然后将项目主体留空
是的,在C++中,你可以使用Type。或者您不能:实现取决于您是否希望在尝试将RegexGroup传递给expexts项目的函数时获得编译器错误
# 2 楼答案
如果类在不同的上下文中使用,我肯定会创建一个单独的类。特别是,我将避免通过继承(实现继承)重复使用,因为以下场景:
如果最后一行对您的应用程序没有意义,那么它违反了Liskov Substitution Principle,应该避免继承
根据我的理解,在我看来,自然结构是:“每个项目都有一个根正则表达式组”。如果这是正确的,那么您的项目可能具有以下外观:
这需要一些额外的代码来转发调用,但可能最自然地对应用程序结构进行建模
# 3 楼答案
如果项目实际上是RegexGroup。然后你就可以从中得到
这很有道理,如果你说某件事是另一件事,那么这就是你从中得到的
当然,在这个过程中,您可能会发现一些细微的差异,您可以向单独的类添加内容,甚至为这两个类创建一个基类
是的,在C++中,您可以使用^ {CD1>}来声明另一个别名到同一类型。
# 4 楼答案
如果我正确地理解了这个问题,我认为如果您对RegexGroup进行子类化,为同一个类赋予另一个名称(如果这对您有效的话),那将是非常好的。在类定义中,可以看到它是RegexGroup的一个子类,因此这不是信息隐藏。如果你迟早会意识到有一点不同,你甚至可以把它添加到子类中