CodeGym /Java Blog /अनियमित /जावा सार विधि और कक्षाएं
John Squirrels
स्तर 41
San Francisco

जावा सार विधि और कक्षाएं

अनियमित ग्रुप में प्रकाशित
अमूर्त विधियाँ जावा का एक शक्तिशाली उपकरण हैं और बहुरूपता की बात आने पर इस वस्तु-उन्मुख भाषा को और भी अधिक क्षमताएँ प्रदान करती हैं। एक जावा सार पद्धति का उपयोग पूरे कार्यक्रम के लिए एक बुनियादी रूपरेखा बनाने के लिए किया जा सकता है और आपको आवश्यकतानुसार समायोजित करने में सक्षम बनाता है।जावा एब्स्ट्रैक्ट मेथड और आप - 1

एक सार विधि क्या है?

एक अमूर्त विधि एक ऐसी विधि है जिसका कोई कार्यान्वयन नहीं है। यही है, इसमें केवल एक घोषणा है, इसलिए आप नाम, रिटर्न प्रकार और वेरिएबल्स को स्वीकार करेंगे। यहाँ एक बुनियादी सार पद्धति का एक उदाहरण दिया गया है:

public abstract int example(int a1, int a2);
जब आप इस पद्धति को देखते हैं, तो आप बता सकते हैं कि यह एक पूर्णांक देता है और दो पूर्णांकों को इसके तर्क के रूप में स्वीकार करता है। आप जो नहीं बता सकते हैं वह यह है कि यह विधि कैसे कार्यान्वित की जाती है। ऐसा इसलिए है क्योंकि इसे लागू करने के लिए आपको इसे ओवरराइड करना होगा। जावा में एक सार पद्धति बनाते समय, आपको कुछ दिशानिर्देशों का पालन करना होगा या आपका प्रोग्राम सही ढंग से संकलित नहीं होगा। याद करना:
  • जावा सार विधियों का कोई कार्यान्वयन नहीं है। यही है, उन्हें घुंघराले ब्रेसिज़ और एक शरीर द्वारा पालन नहीं किया जाना चाहिए जो बताता है कि विधि का उपयोग कैसे किया जाना है। यह सिर्फ एक अर्धविराम के साथ समाप्त हो गया है।

  • यदि आप एक सार पद्धति बनाते हैं, तो उसे केवल एक सार वर्ग में रखा जा सकता है। यही है, आपके पास एक ठोस वर्ग नहीं हो सकता है जिसमें इसके अंदर एक अमूर्त विधि हो।
    मैं। एक साइड नोट के रूप में, यदि आपके पास एक अमूर्त वर्ग है, तो इसमें कंस्ट्रक्टर हो सकते हैं। हालाँकि, इसके लिए कोई अमूर्त विधि नहीं है।

  • जब एक ठोस वर्ग एक अमूर्त वर्ग का विस्तार करता है, तो उसे मूल वर्ग के सभी अमूर्त तरीकों को भी लागू करना चाहिए या यह ठोस नहीं हो सकता है और इसे सार घोषित किया जाना चाहिए।

वे अंतिम दो थोड़े भ्रमित करने वाले हो सकते हैं, तो चलिए इसे अभी स्पष्ट कर देते हैं।

सार जावा कक्षाओं का विस्तार

मान लीजिए कि हम मूल आकार के बारे में एक प्रोग्राम लिखना चाहते हैं जो परिधि और क्षेत्र लौटाएगा। तो हम एक अभिभावक सार वर्ग बनाते हैं। लेकिन क्योंकि प्रत्येक आकृति के अपने नियम होते हैं, प्रत्येक की अलग-अलग गणना की जानी चाहिए, इसलिए हम सार आकार वर्ग को इस तरह लिखते हैं:

abstract class Shape {
  		String shapeName = " ";
  		Shape(String name) { 
    			this.shapeName = name; 
  		} 

abstract double area();
  		abstract double perimeter();
}
अब, यदि हम वास्तव में इन अमूर्त विधियों का उपयोग करना चाहते हैं, तो हमें अमूर्त जावा पैरेंट क्लास शेप का विस्तार करना होगा और फिर विधियों को त्वरित करना होगा। इसलिए प्रत्येक ठोस वर्ग को क्षेत्र और परिधि सार विधियों को लागू करना चाहिए।

class Quadrilateral extends Shape  
{ 
    double length, width; 
      
    Quadrilateral(double l, double w, String name) 
    { 
        super(name); 
        this.length = l; 
        this.width = w; 
    } 
      
    @Override
    public double perimeter()  
    { 
        return ((2*length)+(2*width));
    } 
      
    @Override
    public double area()  
    { 
        return (length*width); 
    } 
}

Implementing the Quadrilateral class would then look like this
class Main
{ 
    public static void main (String[] args)  
    { 
      
        // creating a Quadrilateral object using Shape as reference 
        Shape rectangle = new Quadrilateral(3,4, "Rectangle"); 
        System.out.println("Area of rectangle is " + rectangle.area()); 
        System.out.println("Perimeter of rectangle is " + rectangle.perimeter());
  
    } 
} 
कंसोल से आउटपुट तब ऐसा दिखता है:

Area of rectangle is 12.0
Perimeter of rectangle is 14.0
ध्यान दें कि वर्ग चतुर्भुज को मूल वर्ग आकार से आकार (स्ट्रिंग नाम) कन्स्ट्रक्टर को तुरंत चालू करने की आवश्यकता नहीं है । ऐसा इसलिए है क्योंकि यह एक अमूर्त विधि नहीं है। हालाँकि, यदि आपने किसी वर्ग में केवल एक क्षेत्र या परिमाप लागू किया है, तो नए वर्ग को अमूर्त होना होगा क्योंकि इसमें दोनों शामिल नहीं थे। आप इंटरफेस में सार विधियों का भी उपयोग कर सकते हैं।

इंटरफेस के साथ सार जावा तरीके

आइए जल्दी से समीक्षा करें कि इंटरफ़ेस क्या है और यह अमूर्त वर्ग से कैसे भिन्न है। एक इंटरफ़ेस में, इंटरफ़ेस में घोषित कोई भी चर सार्वजनिक, स्थिर और अंतिम होता है। दूसरी ओर सार वर्ग, केवल गैर-अंतिम चर होते हैं। एक इंटरफ़ेस में सब कुछ डिफ़ॉल्ट रूप से सार्वजनिक होता है। एक सार वर्ग में निजी, संरक्षित, सार्वजनिक आदि हो सकते हैं। अंत में, एक वर्ग एक इंटरफ़ेस का विस्तार नहीं करता है, यह इसे लागू करता है। JDK 8 से पहले, एक इंटरफ़ेस में सार विधियों के अलावा कुछ भी नहीं हो सकता था। अब, एक इंटरफ़ेस में डिफ़ॉल्ट और स्थिर विधियाँ हो सकती हैं। इस वजह से, सर्वोत्तम प्रथाओं को विस्तार योग्य टेम्पलेट्स के रूप में सार विधियों का उपयोग करने से दूर कर दिया गया है और इंटरफेस पर ध्यान केंद्रित किया गया है और उन्हें लागू किया गया है। इसलिए यदि आप आकार को एक इंटरफ़ेस के रूप में बनाते हैं और फिर इसे चतुर्भुज के रूप में लागू करते हैं, यह कैसा दिखेगा? सबसे पहले, आपको आकार (स्ट्रिंग नाम) कन्स्ट्रक्टर से दूर करना होगा । यह केवल दो सार विधियों के साथ ऐसा दिखेगा:

interface Shape {

  abstract double area();
  abstract double perimeter();
}


So the Quadrilateral class would then look like this:
class Quadrilateral implements Shape {  

  double length, width; 
      
    	  Quadrilateral(double l, double w) {
    
    	    this.length = l; 
    	    this.width = w; 
    	  } 
      
    	  @Override
    	  public double perimeter() {
     
    	    return ((2*length)+(2*width));
    	  } 
      
    	  @Override
    	  public double area() {
    
   	    return (length*width); 
    	  } 
}
अंत में, नए चतुर्भुज का उपयोग करना क्योंकि यह आकार इंटरफ़ेस को लागू करता है वही होगा:

class Main
{ 
    public static void main (String[] args)  
    { 
      
        // creating a Quadrilateral object using Shape as reference 
        Shape rectangle = new Quadrilateral(3,4); 
        System.out.println("Area of rectangle is " + rectangle.area()); 
        System.out.println("Perimeter of rectangle is " + rectangle.perimeter());
  
    } 
}
और कंसोल प्रिंट आउट इस तरह दिखेगा:

Area of rectangle is 12.0
Perimeter of rectangle is 14.0
यदि आप इंटरफेस और सार वर्गों के बीच अंतर के बारे में अधिक जानना चाहते हैं, तो आप यहां अधिक जानकारी प्राप्त कर सकते हैं।

लेकिन सार जावा विधियों का उपयोग क्यों करें?

जावा में अमूर्त तरीकों का उपयोग करने के कई कारण हैं और आपको उनका उपयोग करने में सहज क्यों होना चाहिए। यहां तीन त्वरित कारण दिए गए हैं कि उचित होने पर आपको उनका उपयोग क्यों करना चाहिए।
  1. प्रयासों के दोहराव से बचें - हमारे उदाहरण कोडिंग को देखें; कल्पना करें कि आपको और आपकी टीम को आयत के अलावा अन्य आकृतियों के लिए कक्षाएं बनाने की आवश्यकता है। उस वर्ग को डिजाइन करने के लिए आप कितने अलग-अलग तरीके अपना सकते हैं? दस? पंद्रह? और यह एक साधारण समस्या है। कुछ और अधिक जटिल कल्पना कीजिए। आप और आपकी टीम सौ तरीकों के साथ आ सकते हैं। तब आपको एक सुसंगत कार्यक्रम में उन्हें एक साथ बुनने के चुनौतीपूर्ण कार्य का सामना करना पड़ेगा। यह हमें हमारे अगले बिंदु पर लाता है: कार्यान्वयन को परिभाषित करना।

  2. जावा में अमूर्त विधियाँ उपयोग और कार्यान्वयन की परिभाषा की अनुमति देती हैं - जब आप एक अमूर्त वर्ग या इंटरफ़ेस का उपयोग करते हैं, और डिज़ाइन, सार विधियों द्वारा, आप यह परिभाषित कर रहे हैं कि अन्य लोग आपके इंटरफ़ेस के साथ कैसे सहभागिता करेंगे। इससे उन्हें पता चलता है कि उन्हें कौन से वेरिएबल्स का उपयोग करना चाहिए और वे किस तरह के रिटर्न की उम्मीद कर सकते हैं।
    जबकि वे उन्हें ओवरराइड कर सकते हैं और ठोस कक्षाएं बना सकते हैं जो आपके इंटरफ़ेस को अनूठे तरीकों से लागू करते हैं, फिर भी आप अपने कोड के लिए मुख्य उपयोग को पत्थर में सेट करते हैं। यदि कोई शेप इम्प्लीमेंट करना चाहता है, तो उसे पेरीमीटर और एरिया दोनों को ओवरराइड या इम्प्लीमेंट करना होगा।

  3. पठनीयता और डिबगिंग - अमूर्त तरीके होने से आपके कोड की पठनीयता बढ़ेगी। जब आप एक इंटरफ़ेस लागू करने वाली कक्षा लिखते हैं, तो आप जानते हैं कि क्या देखना है। आप जानते हैं कि इंटरफ़ेस में प्रत्येक अमूर्त विधि कार्यान्वयन में होगी, और इससे किसी भी बग को पढ़ना और ट्रैक करना आसान हो जाता है। अमूर्त विधियाँ जावा और अन्य वस्तु-उन्मुख भाषाओं में बहुरूपता का ठीक से उपयोग करने का तरीका सीखने की शुरुआत हैं। जब आप उन्हें समझना और उनका उपयोग करना शुरू करते हैं, तो आपकी कोडिंग यात्रा का एक बिल्कुल नया अध्याय शुरू हो जाएगा।

टिप्पणियां
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION