Abstract Class in C#: कई बार ऐसी स्थितियां होती हैं जब हम जो Base Class बनाते हैं, वह केवल एक General Class के रूप में ही Use हो सकती है। ऐसी Class के Direct Object Create नहीं किए जा सकते हैं। ऐसी Class एक तरह से अधूरी Class होती है, जिसमें Declare किए गए सभी Methods को केवल Declare ही किया गया होता है Implement नहीं।
एक ऐसी General Class जिसके सभी Features को उसकी सभी Sub-Classes Share करें, लेकिन स्वयं उस General Class का Object ना Create किया जा सके, इस प्रकार की Class को Abstract Class कहते हैं।
एक Abstract Class को हमें हमेंशा Inherit करना ही होता है, क्योंकि इस प्रकार की Class में विभिन्न प्रकार के Methods को Declare तो किया जाता है, लेकिन उन्हें Implement या Define नहीं किया जाता है। बल्कि इन्हें उन Derived Classes में Implement करने के लिए छोड दिया जाता है, जिन्हें इस प्रकार की Abstract Classes से Inherit किया जाता है।
Abstract Class एक ऐसी Class होती है जो उसकी सभी Derived Classes की Common Characteristics व Operations यानी Common Fields व Methods को Describe करती है।
चूंकि Abstract Class हमेंशा सभी Derived Classes की Common Things को Describe करती है, इसलिए इसके स्वतं= Objects Create नहीं किए जा सकते हैं। क्योंकि Objects हमेंशा Special Classes के Create होते हैं और सभी Derived Classes के Common Members को Represent करने वाली Class, एक Common या General Class होती है।
उदाहरण के लिए Shape एक General Class है और Real World में किसी Shape के Direct Object Create नहीं किए जा सकते हैं, बल्कि यदि हमें Shape Object Create करना हो, तो हम Rectangle, Triangle, Circle आदि प्रकार के Shape Objects Create कर सकते हैं, जो कि Special Types के Shapes हैं, जबकि Shape स्वं; अपने स्तर पर कुछ भी नहीं होता है।
यानी कोई Person, Doctor हो सकता है, Engineer हो सकता है, Scientist हो सकता है, लेकिन Real World में Person स्वयं अपने आप में कुछ नहीं हो सकता। इसी तरह से कोई Shape, Triangle हो सकता है, Rectangle हो सकता है, Circle हो सकता है, लेकिन Real World में केवल Shape जैसा कोई Object नहीं होता।
लेकिन C# में यदि हम Shape नाम Class Define करते हैं, तो हम Shape Type का Direct Object Create कर सकते हैं, क्योंकि C# Compiler के लिए Shape उसी तरह से एक User Defined Type है, जिस तरह Watch, Time या Employee एक प्रकार का User Defined Type है और जब Watch, Time या Employee Type का Object Create हो सकता है, तो C# Compiler बिना किसी परेशानी के Shape Type का Object भी Create करेगा, जबकि Real Life में Employee, Shape या Person Type का Direct Object Create किया जाना सम्भव ही नहीं है।
इसलिए कई बार हमें हमारे Computer Program को भी इस बात का Instruction देना जरूरी होता है कि हम जो Base Class Create कर रहे हैं, उस Base Class का Direct Object Create नहीं किया जाना चाहिए और ये Instruction देने के हम हमारी Class के साथ abstract Modifier का प्रयोग करते हैं।
यानी जब हम किसी Class के साथ abstract Keyword को Use करते हैं, तो बनने वाली Class एक प्रकार से Abstract Class बन जाती है। जबकि सामान्यतया Abstract Classes तब बनाया जाता हैं, जब कोई Base Class स्वयं किसी Meaningful Object को Represent नहीं करताए बल्कि किसी Group Of Objects के Common Features को Represent करता है।
चूंकि हम जानते हैं कि Real World में किसी Abstract Class का Object Create करने का कोई मतलब नहीं होता है, फिर भी एक Class User किसी Abstract Class के Object Create कर सकता है।
इसलिए जब हम C# Compiler को इस बात का Instruction देना चाहते हैं कि हम जो Class Create कर रहे हैं, वह एक Abstract Class है और यदि User इस Class के Direct Object Create करने की कोशिश करे] तो C# Compiler उसे ऐसा करने से रोके, तो ये Instruction देने के लिए हमें बनाई जाने वाली Class के साथ abstract Keyword को Specify करते हुए उसे Abstract बनाना होता है
हालांकि C# Compiler जब किसी Class के नाम के साथ abstract Keyword देखता है, तो किसी भी User को उस Class का Direct Object Create नहीं करने देता। लेकिन जब हम किसी Class को Abstract बनाते हैं, तब हमें उस Class में कम से कम एक Method को भी abstract Keyword के साथ Declare करना जरूरी होता है, जो C# Compiler को इस बात का भी Instruction देता है कि इस Abstract Class को Derive करते समय उस Abstract Method को override Keyword के साथ Implement करना भी जरूरी है।
abstract ReturnType MethodName(ParameterList);
जैसाकि इस Syntax में हम देख सकते हैं कि इस Method की कोई Body नहीं है, बल्कि Parenthesis के बाद Semicolon का प्रयोग करके Method को Terminate किया गया है।
जिस किसी Class में एक या अधिक Abstract Methods होते हैं, उस Class को भी हमें Abstract Declare करना जरूरी हो जाता है। Class को Abstract करने के लिए हमें Class को निम्नानुसार Define करना होता है:
abstract class shape { abstract void area(); }
इस प्रकार से जब हम किसी Class को Abstract कर देते हैं, तब new Operator का प्रयोग करके उस Class के Objects को Directly Create नहीं किया जा सकता।
Abstract Classes व Methods By Default Public होते हैं, इसलिए इनके साथ किसी Access Specifiers की जरूरत नहीं होती है। साथ ही किसी सामान्य Method की तरह ही हम Abstract Constructor व Abstract Static Method Create नहीं कर सकते हैं।
कोई भी Class जो कि किसी Abstract Class को Derive करता है, उसमें इन Abstract Methods को Implement करना भी जरूरी होता है। यदि हम उस Derived Class में सभी Methods Implement ना करें, तो वह Derived Class भी तब तक Abstract Class बनी रहती है, जब तक कि हम उसकी Abstract Base Class के सभी Methods को Implement नहीं कर देते।
Abstract Class को हमेंशा केवल एक ऐसी Base Class की तरह ही Use किया जा सकता है, जिसे Compulsory रूप से Derive करना हो। किसी Abstract Class में Abstract Method के अलावा अन्य Normal Members भी हो सकते हैं, जबकि हम किसी एक Abstract Class से किसी दूसरी Abstract Class को भी Derive कर सकते हैं। यानी Derive होने वाली एक नई Class को भी Abstract बना सकते हैं।
Abstract Member एक ऐसा Method होता है, जिसे Override करने के लिए ही Specify किया जाता है। एक Abstract Method की निम्न Characteristics होती हैं:
- Abstract Member हमेंशा एक Method होता है। यानी हम कभी भी किसी Field या , Constant को Abstract Member की तरह Define नहीं कर सकते।
- Abstract Member को हमेंशा abstract Keyword के साथ Specify किया जाना जरूरी होता है।
- Abstract Class में Abstract Method का केवल Prototype या Declaration ही Specify किया जाता है, Implementation नहीं।
किसी Class के जिन Members को Method की तरह Define किया जाता है, यानी Class के जो Members Internally Method होते हैं, उन सभी को Abstract Keyword के साथ Specify करते हुए Abstract बनाया जा सकता है।
सामान्यत: हम किसी Class में मूल रूप से Methods, Properties, Events व Indexers को Abstract Define कर सकते हैं, क्योंकि ये सभी Internally Method की तरह ही Define व Execute होते हैं।
Abstract Members को हमेंशा किसी Abstract Class में ही Define किया जाता है और जिस Class में हम Abstract Method को Define करते हैं, सामान्यत: वह Class एक प्रकार की Base Class बन जाती है, जिसे Use करने से पहले उसे Derive करना जरूरी होता है।
यानी जिस Class को हमें Base Class की तरह Define करना होता है, उसे हम Abstract Class की तरह Define करते हैं, साथ ही जब हम किसी Class को Abstract Class की तरह Define करते हैं, तो उस Class में कम से कम एक Abstract Method जरूर होता है और जिस Class में एक भी Abstract Method होता है, उस Class को Derive करना जरूरी होता है तथा Derived Class में उस Abstract Method को Implement करना भी जरूरी होता है अन्यथा Derive होने वाली नई Class भी एक प्रकार की Abstract Class बन जाती है।
हालांकि Abstract Method को Derived Class में Implement करना जरूरी होता है और Derived Class में Abstract Method को override Keyword के साथ Implement करना होता है, लेकिन फिर भी Base Class में abstract Keyword के साथ Declared Method के साथ virtual Keyword का प्रयोग नहीं किया जाता।
Abstract Class व Abstract Method के Concept को ठीक तरह से समझने के लिए हम निम्नानुसार Example Program Create कर सकते हैं:
// File Name: VirtualAndOverrideMethods.cs using System; namespace CSharpInterface { abstract class Shape { public double dim1, dim2; public Shape(double dimension1, double dimension2) { dim1 = dimension1; dim2 = dimension2; } abstract public double area(); } class Rectangle : Shape { public Rectangle(double dimension1, double dimension2) : base(dimension1, dimension2) { } override public double area() { Console.WriteLine("\nInside Area for Rectangle : "); return dim1 * dim2; } } class Triangle : Shape { public Triangle(double dimension1, double dimension2) : base(dimension1, dimension2) { } override public double area() { Console.WriteLine("\nInside Area for Triangle : "); return dim1 * dim2 / 2; } } class AbstractClass { public static void Main(string[] args) { Rectangle newRectangle = new Rectangle(6, 7); Triangle newTriangle = new Triangle(12, 23); Shape referenceShape; referenceShape = newRectangle; Console.WriteLine("Area is " + referenceShape.area()); referenceShape = newTriangle; Console.WriteLine("Area is " + referenceShape.area()); } } } // Output: Inside Area for Rectangle : Area is 42 Inside Area for Triangle : Area is 138
इस Program में हमने Shape नाम की एक Abstract Class Create की है, जो कि अपनी Triangle व Rectangle नाम की Derived Classes के लिए Basic Features Provide कर रहा है। इस Program में Shape Class को Abstract Class बनाने के लिए हमने Class का Declaration निम्नानुसार किया है:
abstract class Shape
साथ ही Class को Abstract बनाने के लिए इसी Class में निम्नानुसार area() नाम का एक Abstract Method भी Declare किया है, ताकि हर Derive होने वाली Class में उस Class की जरूरत के अनुसार Area Calculate करने के लिए area() नाम के Abstract Method को Implement किया जा सके%
abstract public double area();
फिर हमने Rectangle व Triangle नाम की दो Classes को Shape Class से Derive किया है और दोनों ही Classes में area() नाम के Abstract Method को override Method का प्रयोग करके Implement किया है, ताकि दोनों ही Classes में Defined area() नाम का Method अपनी Class के अनुसार उपयुक्त Area Calculate कर सकें।
चूंकि हमारी Shape नाम की Class एक Abstract Class है, इसलिए हम इस Class के Direct Object तो Create नहीं कर सकते, क्योंकि C# Compiler Abstract Class के Direct Object Create नहीं करने देताए लेकिन हम इसकी किसी भी ऐसी Derived Class के Object Create कर सकते हैं, जिसमें इस Abstract Class के सभी Abstract Methods को Implement किया गया हो।
इसीलिए हमारे इस Program में हमने निम्नानुसार Statements द्वारा Rectangle व Triangle Class के दो Objects Create किए हैं:
Rectangle newRectangle = new Rectangle(6, 7);
Triangle newTriangle = new Triangle(12, 23);
क्योंकि हमने Shape Class को Rectangle व Triangle नाम की Class के रूप में Derive किया है।
हालांकि C# Compiler हमें किसी Abstract Class का new Operator का प्रयोग करते हुए Direct Object Create करने की Permission नहीं देताए लेकिन हम किसी भी Abstract Base Class का Reference Create कर सकते हैं और इस Base Class के Reference की एक मुख्य विशेषता ये होती है कि हम Base Class के Reference में उसकी किसी भी Derived Class के Object का Pointer Store कर सकते हैं।
इस विशेषता का फायदा ये होता है कि हमें Object Oriented Programming System के Polymorphism Concept को Implement करने की सुविधा प्राप्त हो जाती है। जिसके अन्तर्गत एक ही Statement अलग-अलग Object के लिए अलग-अलग तरह के Operations Perform करता है।
यानी हमने हमारे Program में हमने निम्नानुसार Statement द्वारा Shape Class का एक Reference Create किया है:
Shape referenceShape;
अब जब हम इस Base Class Reference Variable में निम्नानुसार Rectangle Class के Object का Pointer Store करते हैं:
referenceShape = newRectangle;
तो निम्न Statement Execute होने पर%
Console.WriteLine(“Area is ” + referenceShape.area());
C# Compiler Rectangle Class के area() Method को Call करता है और Rectangle का Area Calculate करके Display करता है, क्योंकि Base Class के Reference में Currently Rectangle Class के Object का Pointer Stored होता है।
जबकि निम्नानुसार अगले Statement द्वारा जब Base Class के Reference Variable में Triangle Class के Object का Pointer Store कर दिया जाता है:
referenceShape = newTriangle;
और अब जब निम्नानुसार अगला Statement Execute होता है:
Console.WriteLine(“Area is ” + referenceShape.area());
तो इस बार यही Statement एक Triangle Class के area() Method को Call करता है, क्योंकि इस बार Base Class के Reference Variable में Triangle Class के Object का Pointer Stored होता है।
यानी Base Class के Reference Variable में जिस Derived Class के Object का Reference Stored होता है, C# Compiler उसी Class के Methods को Call करता है। जिसकी वजह से हम समान Base Class Reference Variable में अलग-अलग Derived Class के Object का Reference Store करके समान Statement द्वारा अलग-अलग Method को Call करवा सकते हैं। इसी प्रक्रिया को Object Oriented Programming System में Polymorphism यानी “Single Statement Multiple Form” के नाम से जाना जाता है।
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook C#.NET in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
C#.NET in Hindi | Page:908 | Format: PDF