If you are going to utilize the Object Oriented paradigm for implementing your system, you ought to do yourself a favor and learn the Eiffel programming language. Why?
Take all of the things that are not included in your statically-typed OO language of choice because they are “too hard to understand”, and visit them in Eiffel. Not only does it have all of those features, but it makes them easy both to understand and utilize.
Read about type conversion, for example. What a wonderful language feature. You can even use tuples!
You will be left scratching your head, wondering why no one else has features like this (among many others).
Eiffel is really a gem of a language!