Skip to main content

OOPs beyond the Four Pillars - SOLID and GRASP

As we know Object oriented programming is a type of programming paradigm based around programming classes and instances of classes called objects. These can be objects that appear on the screen (e.g., pictures, textboxes, etc.) or are part of the programming (e.g. actors, connections, particles, etc as mentioned in my post http://www.developerscloud.org/2013/02/what-is-oop-basic-concepts.html written ages ago.

Here we are going to extend the oops beyond its four pillars i.e.


  1. Abstraction
  2. Encapsulation
  3. Polymorphism and
  4. Interfaces i.e. Inheritance


So first we will go through SOLID and then GRASP



SOLID Principles are principles of class design.

SRP: Single Responsibility Principle
An object should have only a single responsibility & all the responsibility should be entirely encapsulated by the class.
There should never be more than one reason for a class to change
OCP: Open/Closed Principle
Software entities should be open for extension, but closed for modification
LSP: Liskov Substituion Principle
Objects in a program should be replaceable with instances of their subtypes without altering the correctness of that program
ISP: Interface Segregation Principle
many client specific interfaces are better than one general purpose interface
once an interface has gotten too 'fat' split it into smaller and more specific interfaces so that any clients of the interface will only know about the methods that pertain to them. No client should be forced to depend on methods it does not use
DIP: Dependency Inversion Principle
Depend upon Abstractions. Do not depend upon concretions.

Dependency Injection (DI) is one method of following this principle.

GRASP


Acronym for General Responsibility Assignment Software Patterns.
Assigning responsibilities to classes is a critical aspect of object-oriented design.
Appropriate assignment of responsibilities to classes is the key to successful design.
There are fundamental principles in assigning responsibilities that experienced designers apply.
These principles are summarized in the GRASP patterns.
Has nine core principles that object-oriented designers apply when assigning responsibilities to classes and designing message interactions.


Nine Principles:
Expert.
Creator.
Controller.
Low Coupling.
High Cohesion.
Polymorphism.
Pure Fabrication.
Indirection.
Don’t Talk to Strangers.

I think this article is not so great in terms of visualizations but indeed if you read it, it will help you to brush up your concepts and increase your productivity as well...


In Continuation Next Post: http://www.developerscloud.org/2014/09/extending-object-oriented-programming.html

Comments

Popular posts from this blog

Send a Fax in windows using faxcomexlib and TAPI in VB code .Net

An application that provides sending fax from faxmodem, connected to the computer, will be explained in the following post.  We can use Telephony Application Programming Interface (TAPI) and the Fax Service Extended Component Object Model (COM) API to send fax. The fax service is a Telephony Application Programming Interface (TAPI)-compliant system service that allows users on a network to send and receive faxes from their desktop applications. The service is available on computers that are running Windows 2000 and later. The fax service provides the following features: Transmitting faxes Receiving faxes Flexible routing of inbound faxes Outbound routing Outgoing fax priorities Archiving sent and received faxes Server and device configuration management Client use of server devices for sending and receiving faxes Event logging Activity logging Delivery receipts Security permissions The following Microsoft Visual Basic code example sends a fax. Note that...

Convert your datatable into generic poco object in c# using linq, ado and reflections.

Follow @harshit_parshii The most common problem that we face these days is to create a common class and method that can be used across all the projects and codes. So today I will be sharing my code where you can see how to make and create a generic function without using entity framework for ado. net. The scenario is like you have an old software that uses stored procedure to return set of entities as a data-table, you do not want to re-write the back-end code as you are creating a web API in c# which needs to be delivered asap. You need to map these data tables to models as you might be using MV* pattern. So here we will be doing one to one mapping of model to data- table, and in similar fashion insert or update can also be done. So basically we are converting a data-table to list of strongly typed object model to do CRUD operations. So we have following things before hand. A helper class is referenced as the database(dbFactory) which executes ado. ne...

Decoding underscore js SortBy - Sorting in javascript

Sorting can be the developers worst nightmare especially if it is done in more then one field. So what can help, recently doing research on it I came across underscore js sortBy (underscorejs.org/#sortBy) function which will help you to sort the array very effectively. So I was going through the documentation and found it very useful, but there are one drawback of it. Will let you know that: How to order in Ascending Order _.sortBy([6, 2, 4, 5, 3, 1], function(num){ return num }); [ 1 , 2 , 3 , 4 , 5 , 6 ] How to order in Descending Order _.sortBy([6, 2, 4, 5, 3, 1], function(num){ return -num }); [ 6 , 5 , 4 , 3 , 2 , 1 ] The underscore sort by will also work with string literals Ascending _.sortBy(['6','2', '4', '5', '3', '1'], function(num){ return num }); [ " 1 " , " 2 " , " 3 " , " 4 " , " 5 " , " 6 " ] Descending _.sortBy(['6','2'...