1 The tendency of Object-Oriented Programming towards increased system complexity (Struggling with code)
In this chapter, we explore the tendency of Object-Oriented Programming (OOP) systems to be complex.
This complexity is not related to the syntax or the semantics of a specific OOP language. It is something that is inherent to OOP fundamental insight that programs should be composed from objects that consist of some state together with methods for accessing and manipulating that state.
In this chapter, we illustrate how some fundamental aspects of OOP tend to increase the complexity of a system.
Over the years, OOP ecosystems have alleviated this complexity increase by adding new features to the language (e.g. anonymous classes and anonymous functions) and by developing frameworks that hide part of this complexity by providing a simpler interface to the developers (e.g. Spring and Jackson in Java). Internally, they rely on advanced features of the language (like reflection and custom annotations).
This chapter is not meant to be read as a critics of OOP programming. Its purpose is to raise awareness of the tendency towards increased complexity of OOP as a programming paradigm and to motivate you to discover a different programming paradigm where the system complexity tends to be reduced present, namely Data Oriented programming.