| > Most people who cargo-cult "OO is bad" don't get this [that OO programs are meta programs that build the system]. Alas, many people who advocate OO don't get this either, and in particular they don't see this as a problem to be solved. Having to do things indirectly is not a good state of affairs. See "goto statement considered harmful". [1] It is similar to the way we had to work with text editors made for printing terminals: "...requires a mental skill like that of blindfold chess; the user must keep a mental image of the text he is editing, which he cannot easily see, and calculate how each of his editing command `moves' changes it." [2] > OOD/OOP has been a great success that has led to the explosion of software that we take for granted today. Yes, people forget that the problems we are now having are the ones that are due to OO success. > At language source level (eg. DSL) or binary component level (needs runtime support a la COM) Language level. At the systems level we know how to build these types of system (COM, Smalltalk, Objective-C, Unix pipes and filter, REST, notification systems, ...), what we lack is the ability to express them in the program text: https://objective.st/ [1] https://homepages.cwi.nl/~storm/teaching/reader/Dijkstra68.p... [2] https://www.gnu.org/software/emacs/emacs-paper.html |
One key point to note here is that "Indirection" is often the mechanism used to design and express an "Abstraction". Given that Abstraction is the key to taming complexity and building large Systems they often go together i.e. Indirection becomes a key element in the design of Abstractions. It is only the non-designer of the Abstraction/Indirection who finds it hard to understand the System in the absence of Documentation/Communication.