You might have heard the term "code smell" - this code doesn't smell, it stinks. It stinks of many things, chiefly convoluted OO design with about thirteen too many layers of abstraction, and hideous brittleness, and dog poo.
I don't know how programmers can merrily write this stuff and not noticed the stench. Imagine a furniture designer building a chair. The chair has big spikes coming out of the seat. If you sit on it from the right side, it is very uncomfortable. If you sit on it from the left, not only do you get spiked, but the whole chair collapses under you, and a flag comes out of the chair on a spring. The message on the flag says "that was your fault, try again."
The designer would probably notice that there was something wrong with the chair well before any actual users got to try it out, but for some reason (actually I have a pretty good idea of what the reasons are but don't stop me, I'm being rhetorical) programmers will happily release code that is the exact equivalent of the unspeakable chair.