More on this book
Community
Kindle Notes & Highlights
Read between
December 11, 2017 - April 30, 2019
And so it is with software design. The low-level details and the high-level structure are all part of the same whole. They form a continuous fabric that defines the shape of the system. You can’t have one without the other; indeed, no clear dividing line separates them. There is simply a continuum of decisions from the highest to the lowest levels.
The goal of software architecture is to minimize the human resources required to build and maintain the required system.
The measure of design quality is simply the measure of the effort required to meet the needs of the customer. If that effort is low, and stays low throughout the lifetime of the system, the design is good. If that effort grows with each new release, the design is bad. It’s as simple as that.
Every software system provides two different values to the stakeholders: behavior and structure. Software developers are responsible for ensuring that both those values remain high.
Notice how well those three align with the three big concerns of architecture: function, separation of components, and data management.
This, however, was a hack necessitated by the technical need for the compiler to see those variables in the header file.
We can award no point to OO for encapsulation, and perhaps a half-point for inheritance. So far, that’s not such a great score.
The bottom line is that polymorphism is an application of pointers to functions. Programmers have been using pointers to functions to achieve polymorphic behavior since Von Neumann architectures were first implemented in the late 1940s. In other words, OO has provided nothing new.