Alternatives to OOP in D
Paul Backus
snarwin at gmail.com
Wed Nov 5 00:58:34 UTC 2025
On Monday, 1 September 2025 at 13:58:23 UTC, Brother Bill wrote:
> I have heard that there are better or at least alternative ways
> to have encapsulation, polymorphism and inheritance outside of
> OOP.
>
> With OOP in D, we have full support for Single Inheritance,
> including for Design by Contract (excluding 'old'). D also
> supports multiple Interfaces.
D supports several different kinds of polymorphism, which vary
based on (a) whether dispatch occurs at compile-time or runtime,
and (b) whether the set of implementations is closed or open.
- **Function overloading** enable compile-time dispatch with a
closed set of implementations.
- **Templates** enable compile-time dispatch with an open set of
implementations.
- **Sum types** enable runtime dispatch with a closed set of
implementations.
- **Classes** enable runtime dispatch with an open set of
implementations.
Generally speaking, when choosing which type of polymorphism to
use, I try to follow the [rule of least power][1]. Since
compile-time dispatch is less powerful than runtime dispatch, and
a closed set of implementations is less powerful than an open
set, that means preferring function overloads when possible, then
templates or sum types, and finally classes when neither of the
other options will suffice.
[1]: https://en.wikipedia.org/wiki/Rule_of_least_power
More information about the Digitalmars-d-learn
mailing list