Wednesday, January 19, 2011

How to use namespaces in C++ applications?

Typically you want to follow these good practice guidelines when developing a software application:

  • no more than 10-20 classes per package
  • no more than 1000 to 2000 lines of code per class
  • don't assign more than one responsibility to each class
If you go over one of these numbers then consider refactoring your application by creating a new package or a new class.

Note: The namespace in C++ is used as the package is used in java.

Monday, January 17, 2011

When to use an interface to a class?

An article at code project discusses when to use an Abstract Class vs an Interface.

Of what caught my attention was the following table giving a lo-down on the features inherent of an interface and of an abstract class.

Feature

Interface

Abstract class

Multiple inheritance

A class may inherit severalinterfaces.

A class may inherit only one abstract class.

Default implementation

An interface cannot provide any code, just the signature.

An abstract class can provide complete, default code and/or just the details that have to be overridden.

Access ModfiersAn interface cannot have access modifiers for the subs, functions, properties etc everything is assumed as publicAn abstract class can contain access modifiers for the subs, functions, properties

Core VS Peripheral

Interfaces are used to define the peripheral abilities of a class. In other words both Human and Vehicle can inherit from a IMovableinterface.

An abstract class defines the core identity of a class and there it is used for objects of the same type.

Homogeneity

If various implementations only share method signatures then it is better to use Interfaces.

If various implementations are of the same kind and use common behaviour or status then abstract class is better to use.

Speed

Requires more time to find the actual method in the corresponding classes.

Fast

Adding functionality (Versioning)

If we add a new method to an Interface then we have to track down all the implementations of theinterface and define implementation for the new method.

If we add a new method to an abstract class then we have the option of providing default implementation and therefore all the existing code might work properly.

Fields and ConstantsNo fields can be defined ininterfacesAn abstract class can have fields and constrants defined