This lecture will try to give answer what “great software” means and how we can achieve that goal with following some practices and principles.
There are three main steps on that road – Understanding customer requirements; Applying basic OO principles and flexibility; and Maintainable, reusable design.
Furthermore, it will be discussed how requirements change in time, and how we can deal with those changes. Those changes can be made either by customer either by our misunderstanding of requirements. It is better to be ready for those changes, instead of waiting unprepared for them. By making loosely coupled applications we make solution more flexible, and easy to change. Since each object is pretty independent of the other objects, it can be made a change to one object’s behavior without having to change all the rest of objects. Therefore, adding new features or functionality becomes a lot easier.
It will be demonstrated through clear and simple examples how interfaces, encapsulation, OO principles (The Open-Closed Principle, The Don’t Repeat Yourself Principle, The Single Responsibility Principle, The Liskov Substitution Principle (LSP)) and delegation, can be useful in achieving this.