Common Features of Excellent Software: low coupling and High Cohesion
Polymorphism: static polymorphism (function polymorphism, function overload), dynamic polymorphism (virtual function)
Basic object-oriented principles
Principle of opening/closing: a module should be open to expansion and should be closed for modification.
Principle of full replacement: The derived class should be able to completely replace the base class.
Dependency inversion principle: dependent on abstraction, not on concrete.
Non-circular dependency principle: there cannot be circular dependency between packages.
Only implement what you really need and do not implement what you think you need.
Do not repeat yourself: Any code appears only once.
Simplify the design.
Write code for humans, rather than for machines.
Object-Oriented development process:
Object-Oriented Analysis: Demand-Analysis Model
Architecture Analysis
Object-Oriented Design
Encoding
Test
Differences between frameworks and Class Libraries
Software life cycle model: waterfall model, iterative model (RUP, XP)
The most important object-oriented design principles and design concepts hidden behind the design model:
The most fundamental intention of the design pattern is to adapt to the demand changes. (I am talking about: there is no need to change, and the design model seems to have no value)
Programming for interfaces, rather than implementing programming.
Aggregation is preferred, rather than inheritance.