Object Oriented Concepts





OOPS Concepts in Dot Net





Abstract: It is like a parent, which contains all common patterns. It allows inheritance but cannot be instantiated at runtime. For example, say there is a fruit class (with common features), you can inherit many classes from this like banana, apple with some additional information specific to the fruit class.

Encapsulation: Here objects can hide its internal data from direct access by external objects. It can be done by using 'private' or 'protected' keywords while declaration instead of public.

Delegates: It is like a function pointer in object oriented. It invokes a function by reference to that function.

Binding: It is a process of linking a call to the method at runtime. Useful when polymorphism is used. Say you have two methods sum (num1, num2) and sum (num1, num2, num3). When a function call is made, it should be linked to the right function. (Here depending on parameter number)

Inheritance: It is the ability of a class to derive properties and methods from another existing class. For example say there is a class shape, you can derive another class called circle from shape, now you can add new methods and properties to class circle. The class circle now has its own properties and methods in addition to that of class shape.

Polymorphism: It is the property to exhibit different behaviors when used with different objects. Example, you can have same function name for more than 1 function but with different number of parameters or parameter types.




area(int, int)
area(float, float)
area(int, int, int)





Inheritance



In the real world there are many objects that can be specialized. In OOP, a parent class can inherit its behavior and state to children classes. This concept was developed to manage generalization and specialization in OOP and is represented by a is-a relationship.



The following OO terms are commonly used names given to parent and child classes in OOP:





  • Superclass: Parent class.


  • Subclass: Child class.


  • Base class: Parent class.


  • Derived class: Child class


The most common real world sample to explain inheritance is the geometric shapes object model. Squares, circles, triangles, rectangles, pentagons, hexagons, and octagons are geometric shapes. The following figure shows a sample set of geometric figures:





Figure 1. Geometric shapes.



The concept of generalization in OOP means that an object encapsulates common state an behavior for a category of objects. The general object in this sample is the geometric shape. Most geometric shapes have area, perimeter, and color. The concept of specialization in OOP means that an object can inherit the common state and behavior of a generic object; however, each object needs to define its own special and particular state an behavior. In Figure 1, each shape has its own color. Each shape has also particular formulas to calculate its area and perimeter.



Inheritance makes code elegant and less repetitive. If we know that all shapes have color, should we program a color attribute for each shape? The answer is no! Would it be a better idea to create a shape class that has a color attribute and to make all the specialized shapes to inherit the color attribute? The answer is yes!



An object model for this sample could have a shape parent class and a derived class for each specific shape. The following UML class diagram shows the set of classes needed to model the geometric shapes sample. Observe the field, properties, and methods for each class:




Figure 2. The Shape class is the parent class. Square, Rectangle, and Circle are derived classes that inherit from Shape. The triangle-connector in the diagram represents an is-a relationship.

The .NET framework has many base classes. Everything is derived from System.Object. You can create almost anything you imagine using the built-in functionality provided in the .NET Framework Class Library.

To create a derived class in C#, the class declaration should be done as:

class child: parent

To create a derived class in VB.NET, the class declaration should be done as:

Class child
Inherits
parent
End Class

Multiple inheritance

Multiple inheritance is the possibility that a child class can have multiple parents. Human beings have always two parents, so a child will have characteristics from both parents.

In OOP, multiple inheritance might become difficult to handle because it allows ambiguity for the compiler. There are programming languages such as C++ that allow multiple inheritance; however, other programming languages such as Java and the .NET Framework languages do not allow multiple inheritance. Multiple inheritance can be emulated in .NET using Multiple Interface Inheritance, which I will explain in Part 3 of this series.

Sealed class

A sealed class is a class that does not allow inheritance. Some object model designs need to allow the creation of new instances but not inheritance, if this is the case, the class should be declared as sealed.

To create a sealed class in C#, the class declaration should be done as:

sealed class Shape

To create a sealed class in VB.NET, the class declaration should be done as:

NonInheritable Class Shape

Abstraction

Abstraction is "the process of identifying common patterns that have systematic variations; an abstraction represents the common pattern and provides a means for specifying which variation to use" (Richard Gabriel).

An abstract class is a parent class that allows inheritance but can never be instantiated. Abstract classes contain one or more abstract methods that do not have implementation. Abstract classes allow specialization of inherited classes.

Figure 2 shows a Shape class, which is an abstract class. In the real world, you never calculate the area or perimeter of a generic shape, you must know what kind of geometric shape you have because each shape (eg. square, circle, rectangle, etc.) has its own area and perimeter formulas. The parent class shape forces all derived classes to define the behavior for CalculateArea() and CalculatePerimeter(). Another great example is a bank account. People own savings accounts, checking accounts, credit accounts, investment accounts, but not generic bank accounts. In this case, a bank account can be an abstract class and all the other specialized bank accounts inherit from bank account.

To create an abstract class in C#, the class declaration should be done as:

abstract class Shape

To create an abstract class in VB.NET, the class declaration should be done as:

MustInherit Class Shape

To following code shows a sample implementation of an abstract class:

/// C#
using
System;
namespace
DotNetTreats.OOSE.OOPSamples
{
public abstract class
Shape
{
private float
_area;
private
System.Drawing.Color _color;
private float
_perimeter;
public float
Area
{
get
{
return
_area;
}
set
{
_area = value
;
}
}
public
System.Drawing.Color Color
{
get
{
return
_color;
}
set
{
_color = value
;
}
}
public float
Perimeter
{
get
{
return
_perimeter;
}
set
{
_perimeter = value
;
}
}
public abstract void
CalculateArea();
public abstract void
CalculatePerimeter();
}
}

Listing 1. The Shape abstract class in C#.

Polymorphism

Polymorphism allows objects to be represented in multiple forms. Even though classes are derived or inherited from the same parent class, each derived class will have its own behavior. Polymorphism is a concept linked to inheritance and assures that derived classes have the same functions even though each derived class performs different operations.

Figure 2 shows a Rectangle, a Circle, and Square. All of them are shapes and as shapes their area and perimeter can be calculated; however, each shape calculates its area in a specialized way. Declaring a member as abstract allows polymorphism. The Shape class defines the CalculateArea() and CalculatePerimeter() methods as abstract, this allows each derived class to override the implementation of the parent's methods.

To following sample code shows an implementation of a derived class (rectangle). The specific CalculateArea() and CalculatePerimeter() methods for the rectangle class illustrate polymorphism:

/// C#
using
System;
namespace
DotNetTreats.OOSE.OOPSamples
{
class
Rectangle : Shape
{
private float
_height;
private float
_width;
public rectangle(float height, float
width)
{
_height = height;
_width = width;
}
public float
Height
{
get
{
return
_height;
}
set
{
_height = value
;
}
}
public float
Width
{
get
{
return
_width;
}
set
{
_width = value
;
}
}
public override void
CalculateArea()
{
this
.Area = _height * _width;
}
public override void
CalculatePerimeter()
{
this
.Perimeter = (_height * 2) + (_width * 2);
}
}
}

Listing 2. Polymorphism represented in the Rectangle's methods.

Virtual keyword

The virtual keyword allows polymorphism too. A virtual property or method has an implementation in the base class, and can be overriden in the derived classes.

To create a virtual member in C#, use the virtual keyword:

public virtual void Draw()

To create a virtual member in VB.NET, use the Overridable keyword:

Public Overridable Function Draw()

Override keyword

Overriding is the action of modifying or replacing the implementation of the parent class with a new one. Parent classes with virtual or abstract members allow derived classes to override them.

To override a member in C#, use the override keyword:

public override void CalculateArea()

To override a member in VB.NET, use the Overrides keyword:

Public Overrides Function CalculateArea()

No comments: