Object Oriented Programming (OOP) is a methodology for modelling and designing software systems which encompasses the basic concepts of encapsulation, abstraction, inheritance and polymorphism. This methodology is guided by a set of principles, called the Design Principles. These principles show the right direction of designing and helps in avoiding costly mistakes at the designing stage. This project is an effort to document the design principles, their derivatives, associations, examples or even specializations for certain programming languages.
The design principles are not important only from a software design point of view, but also from a business because design principles enable flexible designs, which can evolve with the business requirements with minimum effort, time and cost.
Following are the design principles that have been covered:
Class Design
- Open-Closed Principle (OCP)
- The Law Of Demeter And Object Oriented Programming (LOD)
- Dependency Inversion Principle And Interface (DIP)
- Liskov Substitution Principle (LSP)
- Interface Segregation Principle (ISP)
Package Design
- Reuse/Release Equivalency Principle (REP)
- Common Reuse Principle (CRP)
- Common Closure Principle (CCP)
- Acyclic Dependencies Principle (ADP)
- Stable Dependencies Principle (SDP)
- Stable Abstractions Principle (SAP)
This list will be continuously updated to reflect the design principles covered.
Technorati tags: design principle, object oriented, oop
Copyright Abhijit Nadgouda.


April 29th, 2006 at 4:11 pm
[...] OO Design Principles [...]
June 3rd, 2006 at 9:09 am
[...] However, for this to happen, the journalist has to take explicit action to make sure that the information about external or internal references is provided in the article. In addition to linking to external articles, the journalist can build a thread or series of articles on a subject and provide all the links in a single place, which cannot be done on paper, for example OO Design Principles. [...]
July 7th, 2006 at 8:03 am
Sir ,
I’ve a question , I think you can help me . In his book, Martin discusses the Design principles SRP, OCP, LSP, DIP, and ISP. Can you please explain how any three of these apply specifically to **agile** methods more than to **non-agile** methods.
Or all of these apply just as much to non-agile approaches only.
July 7th, 2006 at 8:15 am
Hi Radhika & Bhushan,
First of all, don’t address me as sir, call me Abhijit.
The design principles are the basics of Object Oriented design to make it more reusable and flexible. In fact a lot of best practices and design patterns are based on them. So, they are not agile development specific.
However, they fit right in the agile methodologies which demand dynamic response to the business changes.
November 13th, 2006 at 6:32 pm
[...] Search « Easy Or Cheap Blog Traffic? | OO Design Principles » March 23rd, 2006 [...]
December 2nd, 2006 at 12:39 pm
[...] All the Object Oriented Design Principles hover around the use of abstraction in software design for reusability and flexibility. However, the underlying implicit advantage of abstraction is simplification. Reusability and flexibility are not possible only unless the issue at hand can be understood and simplified, and abstraction is the way to do it. [...]
January 11th, 2007 at 5:39 pm
[...] Bill Higgins brings up the tension between transparency and abstraction. Abstraction has been beneficial for software development, in fact it is at the heart of the design principles. [...]
March 1st, 2007 at 9:02 am
[...] as C++, Java, Ruby, PHP or any OOP language programmers. Only 1 in 20 candidates knew about the Design Principles, and only 2-3 had heard about them with their own misconceptions about it. This is not only about [...]
March 5th, 2007 at 5:19 pm
[...] less is more paradigm. The other problem, as I had mentioned earlier, is lack of knowledge of the design principles. Reading thoughts of experienced programmer can also help a lot, especially if they are some of the [...]
June 2nd, 2007 at 2:43 pm
[...] to convey the semantics or to indicate if the design is appropriate, e.g., whether it follows the design principles. This is a limitation of being a language. The semantics are not part of it, only the grammar is. [...]
July 2nd, 2007 at 12:08 am
days out…
cool great work , keep it up…
August 15th, 2007 at 2:58 pm
[...] why they can be used effectively to know before time if the design has holes. Of course we have the design principles to guide us, but I believe this new perspective can come in much earlier, even before software [...]