Honestly this reeks of Hungarian Notation. Or to be more correct about it badly applied Hungarian Notation.
Hungarian Notation was meant to express type information that the programming language could not. For example in Assembly it is helpful to know if you are dealing with a pointer to a string, or an int. The language isn't going to track this for you so a local naming standard encoding the type information is particularly helpful.
However this falls flat on its face in languages which have expressive type systems that can encode this information outside of the name. This could by by designating the type as abstract
for example or only providing protected
constructors only available to deriving types.
A good example of poorly applied Hungarian Notation is the I
in a C# interface name like IComparable
. Comparable
is a sufficiently good name, and the fact that its an interface is surfaced easily enough by looking at its definition, or through an ide.
So i'd ask. Does this language allow me to express in the type system that this class is available for derivation? If so then drop the Base
and just call it Car
. It easy enough to identify that Model-Y
derives from Car
.
If the language does not support this ability, then I'd consult in order: You organisational naming conventions, the platform/language naming standards/conventions, the strict need to express this information at all in the name.
Base
anything is more an indication of a bad name than anything else. You do not need "base" or "abstract" in the name to have an abstraction. You just need an idea brought to fruition with code that sits behind a name that explains the abstraction and why you would use it without seeing the code that sits behind the name.BaseStar
,BaseBuilder
,Base
,BaseBall
. In their own contexts are valid objects.