My Web Sites

Recent site activity

SDLC‎ > ‎Architecture‎ > ‎

OO Design

This page contains basic principles of Object-Oriented design.

Basic Characteristics / Pillars

There are three pillars of object-oriented programming. These are
  • Encapsulation: a language mechanism that allows bundling related data with the operations, and restricting access to some object's components.
  • Inheritance: a way to reuse code from another, inherited, object.
  • Polymorphism: ability to create a variable, a function, or an object that has more than one form.
    • In OO, Wikipedia page, (link)
    • In C#, Guide (link)
    • In C++ (link)

Object-Oriented Design Principles

Related topics include Design Patterns and Coding Standards.

One of the main OO principles is high cohesion and low coupling.

General OO design principles:
  • Single Responsibility Principle (SRP): A class should have only one reason to change.
Dependency Management, using the following Object-Oriented design principles:
  • The Open Closed Principle (OCP): A module should be open for extension but closed for modification.
  • The Liskov Substitution Principle (LSP): Subclasses should be substitutable for their base classes.
  • The Dependency Inversion Principle (DIP): Depend upon Abstractions. Do not depend upon concretions.
  • The Interface Segregation Principle (ISP): Many client specific interfaces are better than one general purpose interface.
Principles of Package Architecture, with Package Cohesion Principles
  • The Release Reuse Equivalency Principle: The granule of reuse is the granule of release.
  • The Common Closure Principle: Classes that change together, belong together.
  • The Common Reuse Principle: Classes that aren't reused together should not be grouped together.
The Package Coupling Principles
  • The Acyclic Dependencies Principle: The dependencies between packages must not form cycles.
  • The Stable Dependencies Principle: Depend in the direction of stability.
  • The Stable Abstractions Principle: Stable packages should be abstract packages.

References

  • Robert C. Martin, www.objectmentor.com, Design Principles and Design Patterns text (link). Copy attached to this page.
  • Robert C. Martin, Clean Code: A Handbook of Agile Software Craftsmanship
  • Robert C. Martin, Agile Principles, Patterns, and Practices in C#

Links

  • Refactoring, site, by Martin Fowler (link)
Č
Ċ
ď
Alen Šiljak,
Dec 2, 2010 7:30 PM