John R. Garman, Deputy Chief of Spacecraft Software Division, NASA, in 1981, pleaded for the software community to find ways to reliably modify software with minimum impact on time and cost. His plea was concerned with the software failure that delayed the launching of the first space shuttle mission.
Interfaces and Abstract Classes Using C# is one endeavor to answer his call for help.
Have you ever pondered how you began to program—how you began to write code? Did you start your career the way most of us did by reading a programming book and doing what the author said to do—entrusting the programmers before us knew what they were doing?
Programming, even at the beginning stages, is a complex task. A programmer must learn a multitude of interrelated concepts—variables, for loops, if-then constructs, files, tasks, etc.—just to write a hello-world program; meanwhile, we, as real-world programmers, do not get paid for hello-world level programs. The programs we write using object-oriented languages such as C# (c sharp), C++, or Java are vastly more complex: more complex in the problem domain, more complex in program structure, more complex in project maintenance. Complexity is the overarching principle (root cause) of project failure.
How to minimize a program’s complexity and thus increase the chance of project success has been a subject of discourse since programming started. C, C++, Java, C# (c sharp) — each programming language is an attempt to reduce program complexity; each programming language has disadvantages and advantages. An advantage of C#, developed by Microsoft, is an innate use of object-oriented programming paradigms: encapsulation, polymorphism, inheritance, and abstraction.
Interfaces and abstract classes are concrete examples of the founding object-oriented paradigms. Read this book and learn how interfaces and abstract classes can help you take your programming skill set from the novice level to the expert level.