Monday, May 21, 2012

Basic Concepts of OOPs in .Net

Introduction

.NET is fully object oriented platform that allow languages to take full advantage of these OO features. The features include:

Namespace
Classes
Abstract
Encapsulation
Overloading
New.
Overriding
Interfaces
Polymorphism

Let’s take a quick look at what each of this term means.

Namespace

Even though namespace is not really an OOPs feature, .NET use it extensively. Namespace is nothing but a logical container for various classes. Under given namespace class names must be unique. Namespace server two purposes – they provide logical organization of classes and they also avoid ambiguity.

Classes

Class is nothing but a template or blue-print for an entity. For example you may have a class that represents real life entity – Employee. The class will provide properties (Name, Age…) as well as actions (CalculateSalary, GoOnLeave…) of the entity.

Objects

Instances of classes are called as objects. For example there might be three instances of the Employee class mentioned above. They might represent individual employees – John, Bob and Tom.

Encapsulation

Each object typically deals with some kind of data or the other. Not all the data needs to be exposed to external systems. This can be controlled via data encapsulation.

Overloading

Overloading refers to the methods or functions having same name but varying parameters. The parameters should vary with respect to data types and order.
If no modifier is specified, the method is given private access.

Inheritance

Inheritance refers to extending functionality of existing class. Inheritance is useful when developing "object models" for your system. .NET supports only single inheritance.

Overriding

Overriding refers to the methods in the child class having the same signature (name as well as parameters) as of the parent class methods.

Interfaces

Interfaces are nothing but models of class properties and methods without any implementation. The class implements the interface. Once a class implements any interface it must implement all the properties and methods (although the implementation can be empty or null implementation).

Polymorphism

Polymorphism refers to the ability of the system to call correct implementation of methods with the same name. For example, Clerk as well as Manager class might have a method called CalculateSalary(). However, at runtime depending on whether the underlying object is of type Clerk or Manager correct version of the method is called.

Creating namespaces

Namespaces are created using keyword – Namespace (namespace in C#). Following example shows how to declare a namespace.

[VB.NET]
Namespace MyNamespace
End Namespace

[C#]
namespace MyNamespace
{
}

Note that one assembly can have one or more namespaces. Also, one namespace can span across multiple assemblies. You can create nested namespaces as follows:

[VB.NET]
Namespace MyNamespace
     Namespace MuSubNamespace
     …
     End Namespace
End Namespace

[C#]
     namespace MyNamespace
     {
         namespace MySubNamespace
         {
          …
         }
     } 

If you are using VS.NET then the project name acts as the default namespace name.

Creating classes

Creating classes is similar to creating namespaces.

[VB.NET]
    Public Class Class1
    …
    End Class

[C#]
    public class Class1
    {
      …
    }

Generally classes will be part of some of the namespace.

Creating Properties

Properties encapsulate data members of your class. Properties can be read-write, read only or write only. Here is how you create read-write properties:

[VB.NET]
      Public Class Employee

           private strName As String

           Public Property Name As String
           Get
               return strName;
           End Get

           Set(value As String)
              strName=value;
           End Set
           End Property
     End Class

[C#]
      public class Class1
      {
         public string Name
         {
           string strName;
           get
           {
               return strName;
           }
           set
           {
               strName=value;
           }
         }
     }

Here,

VB.NET uses Property keyword to declare properties. C# does not have this keyword
Property definition consists of two parts Get and Set. The get part returns the property value and set par sets some private variable.
The value in Set routine is received via implicit variable called value in C#. VB.NET allows you to change this.

Creating methods

Methods represent actions performed by the object. In VB.NET functions and sub routines are collectively called as methods. In C# everything is function.

[VB.NET]
      Public Sub CalculateSalary()
      …
      End Sub

[C#]
      public void CalculateSalary()
      {
        …
      }

Method overloading

Method overloading refers to methods with same name but different types or order of parameters. Following example make it clear:

[VB.NET]
      Public Sub CalculateSalary()
         …
      End Sub

      Public Sub CalculateSalary(month as Integer)
      …
      End Sub

[C#]
      public void CalculateSalary()
      {
       …
      }

      public void CalculateSalary(int month)
      {
      …
      }

In VB.NET you can also use optional parameters to achieve similar functionality. However, it is recommended to use overloading instead to make your code consistent across languages.

Inheritance

Inheritance is the ability to extend existing class further. Unlike languages like C++ that allow multiple inheritance .NET allows only single inheritance. This means that at a time you can inherit from a single class.

[VB.NET]
       Public Class Manager
           Inherits Employee
           …
       End Class

[C#]
       public class Manager : Employee
       {
         …
       }

In the above example, we create a class called Manager that inherits from Employee class. As you can guess Manager is specific implementation of generic Employee class. VB.NET uses Inherits keyword to indicate the parent class where as C# uses : operator to indicate that.

Method Overriding

In order to override method in child class they need to be marked as Overridable (VB.NET) or virtual (C#) in the parent class.

[VB.NET]
      Public Overridable Function CalculateSalary() As Integer
         …
      End Function

[C#]
      public virtual int CalculateSalary()
      {
       …
      }

Then in the child class you can create a method with the same signature and specify that it overrides the base class method.

[VB.NET]
      Public Overrides Function CalculateSalary() As Integer
        …
      End Function

[C#]
      public override int CalculateSalary()
      {
          …
      }

Note that if you do not provide the Overrides (VB.NET) or override (C#) keywords in the child class the compiler issues a warning that you are hiding a base class member. In this case you can either put the above keywords or use Shadows (VB.NET) or new (C#) keywords. Using these keywords ,however, will hide the base class members.

Creating Interfaces

Just like classes are templates for real life entities, interfaces can be thought of as templates for classes. They bring uniformity in your object model.

[VB.NET]
      Public Interface IEmployee
         Property EmployeeID() As Integer
         Property Name() As String
         Property Age() As Integer
         Function CalculateSalary() As Integer
      End Interface

[C#]
      public interface  IEmployee
      {
        int EmployeeID
      {
       get;
      }

          string Name
          {
             get;
             set;
          }

          int Age
          {
             get;
             set;
          }

          int CalculateSalary();
          }

As you can see VB.NET uses Interface keyword to define an interface. Similarly, C# uses interface keyword. Note, how they contain only property and method signatures and no code at all.

Implementing Interfaces

The main difference between inheritance based programming and interfaces based programming is that – interfaces just specify signatures of properties and methods for a class. Your class "implements" the interface by providing implementation for various properties and methods. Unlike inheritance there is no "code" inherited from interfaces. Your class can implement one or more interfaces.

[VB.NET]
        Public Class Manager
             Implements IEmployee
             …
             Public Function CalculateSalary() As Integer Implements IEmployee.CalculateSalary

             …
             End Function
End Class

[C#]
      public class Manager : IEmployee
      {
         …
         public int CalculateSalary()
         {
            …
         }

     }

Above example shows how VB.NET uses Implements keyword to implement an interface. Note how VB.NET also requires the use of Implements keyword for each property and method. You must have guessed from this that in VB.NET you can give different name to the implemented member than the interface. This feature is not available in C#. C# do not have a special keyword and uses the same : operator to implement the interface.

Polymorphism

Consider following lines of code:

[VB.NET]
        Dim emp As Employee
        emp = New Clerk()
        Console.WriteLine ("Clerk Salary :{0}", emp.CalculateSalary())
       
        emp = New Manager()
        Console.WriteLine ("Manager Salary :{0}", emp.CalculateSalary())
       

[C#]
       Employee emp;
       emp=new Clerk();
       Console.WriteLine ("Clerk Salary :{0}",emp.CalculateSalary());

       emp=new Manager();
       Console.WriteLine ("Manager Salary :{0}",emp.CalculateSalary());


Here, we have declared a variable of type Employee. A variable of parent class type can point to instance of any of its children. First, we point it to an instance of Clerk class. Then we point it to an instance of Manager class. Even though the variable is of type Employee, depending on which child type it is pointing to it calls the correct implementation of CalculateSalary() method. The underlying system does this via inheritance polymorphism. Similar thing can also be achieved in interface polymorphism.

[VB.NET]
        Dim emp As IEmployee
        emp = New Clerk()
        Console.WriteLine ("Clerk Salary :{0}", emp.CalculateSalary())

        emp = New Manager()
        Console.WriteLine ("Manager Salary :{0}", emp.CalculateSalary())


[C#]
      IEmployee emp;
      emp=new Clerk();
      Console.WriteLine ("Clerk Salary :{0}",emp.CalculateSalary());

      emp=new Manager();
      Console.WriteLine ("Manager Salary :{0}",emp.CalculateSalary());
  

0 comments:

Popular Posts

Recent Posts

Unordered List

Text Widget

Blog Archive