Classes that satisfy certain conditions are allowed, but not required, to
end with an
Interface
suffix.
link
Definition:
A class is a pure interface if it meets the following requirements:
- It has only public pure virtual ("
= 0
") methods
and static methods (but see below for destructor).
- It may not have non-static data members.
- It need not have any constructors defined. If a constructor is
provided, it must take no arguments and it must be protected.
- If it is a subclass, it may only be derived from classes
that satisfy these conditions and are tagged with the
Interface
suffix.
An interface class can never be directly instantiated
because of the pure virtual method(s) it declares. To make
sure all implementations of the interface can be destroyed
correctly, they must also declare a virtual destructor (in
an exception to the first rule, this should not be pure). See
Stroustrup, The C++ Programming Language, 3rd
edition, section 12.4 for details.
Pros:
Tagging a class with the Interface
suffix lets
others know that they must not add implemented methods or non
static data members. This is particularly important in the case of
multiple inheritance.
Additionally, the interface concept is already well-understood by
Java programmers.
Cons:
The Interface
suffix lengthens the class name, which
can make it harder to read and understand. Also, the interface
property may be considered an implementation detail that shouldn't
be exposed to clients.
Decision:
A class may end with Interface
only if it meets the
above requirements. We do not require the converse, however:
classes that meet the above requirements are not required to end
with Interface
.