Skip to content
Snippets Groups Projects
Commit b6edd0c0 authored by Steven Murray's avatar Steven Murray
Browse files

Added inheritance between ZmqSocket , ZmqSocketST and ZmqSocketMT

In a previous commit I removed the inheritance relationship between
ZmqSocket and ZmqSocketMT.  I used templated functions in order to
be able to handle instances of ZmqSocket and ZmqSocketMT with thei
same code.  I now believe that decision was wrong in the long run.
Future code maintainers will not know that a ZmqSocketMT object is
a type of ZmqSocket.  Eclipse and doxygen are very good at
providing class hierarchies.  One should benefit from this when one
can as it is a form of free documentation.

My previous commit not only removed inheritance, it also allowed
the multi-threaded version of ZMQSocket to contain the single
threaded version as opposed to inherit from it.  Using composition
over inheritance prevented future mistakes where somebody adds a
new thread-unsafe method to the super class and forgets or doesn’t
know that they should implement a thread-safe overriding version in
the sub-class.  This commit preserves composition over inheritance.

There are now three “ZmqSocket” classes: ZmqSocket, ZmqSocketST and
ZmqSocketMT.  ZmqSocket itself is now abstract and simply defines
the methods such a socket should implement.  ZmqSocketST is ai
concrete class for single-threaded use (hence ST) and
ZmqSocketMT is for multithreaded use (hence MT).

ZmqSocketST inherits from ZmqSocket and  ZmqSocketMT also inherits
from ZmqSocket.  ZmqSocketMT does not inherit from ZmqSocketST.
ZmqSocketMT contains an instance of ZmqSocketST therefore preserving
the composition over inheritance solution of the previous commit.
parent a8531be0
Branches
Tags
No related merge requests found
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment