अ‍ॅबस्ट्रॅक्ट पद्धती हे जावाचे एक शक्तिशाली साधन आहे आणि पॉलीमॉर्फिझमच्या बाबतीत या ऑब्जेक्ट-ओरिएंटेड भाषेला आणखी क्षमता देतात. संपूर्ण प्रोग्रामसाठी मूलभूत फ्रेमवर्क तयार करण्यासाठी आणि आवश्यकतेनुसार समायोजित करण्यास सक्षम करण्यासाठी Java अमूर्त पद्धत वापरली जाऊ शकते.जावा अ‍ॅबस्ट्रॅक्ट मेथड आणि तुम्ही - १

अमूर्त पद्धत म्हणजे काय?

अमूर्त पद्धत ही अशी पद्धत आहे ज्याची अंमलबजावणी नाही. म्हणजेच, त्यात फक्त एक घोषणा आहे, त्यामुळे तुम्हाला नाव, रिटर्न प्रकार आणि ते स्वीकारले जाणारे व्हेरिएबल्स माहित आहेत. येथे मूलभूत अमूर्त पद्धतीचे उदाहरण आहे:

public abstract int example(int a1, int a2);
जेव्हा तुम्ही ही पद्धत पाहता तेव्हा तुम्ही सांगू शकता की ती पूर्णांक मिळवते आणि ती दोन पूर्णांकांचा युक्तिवाद म्हणून स्वीकारते. ही पद्धत कशी अंमलात आणली जाते हे आपण सांगू शकत नाही. कारण ते अंमलात आणण्यासाठी, तुम्हाला ते ओव्हरराइड करावे लागेल. जावामध्ये अमूर्त पद्धत तयार करताना, तुम्हाला काही मार्गदर्शक तत्त्वांचे पालन करावे लागेल अन्यथा तुमचा प्रोग्राम योग्यरित्या संकलित होणार नाही. लक्षात ठेवा:
  • Java abstract पद्धतींची अंमलबजावणी नाही. म्हणजेच, त्यांच्यामागे कधीही कुरळे कंस आणि पद्धत कशी वापरायची हे सांगणारे शरीर असू नये. हे फक्त अर्धविरामाने संपले आहे.

  • तुम्ही अमूर्त पद्धत तयार केल्यास, ती केवळ अमूर्त वर्गात ठेवली जाऊ शकते. म्हणजेच, तुमच्याकडे असा ठोस वर्ग असू शकत नाही ज्यामध्ये अमूर्त पद्धत असेल.
    i साइड टीप म्हणून, जर तुमच्याकडे अमूर्त वर्ग असेल, तर त्यात कन्स्ट्रक्टर असू शकतात. तथापि, त्यात अमूर्त पद्धत असणे आवश्यक नाही.

  • जेव्हा ठोस वर्ग अमूर्त वर्गाचा विस्तार करतो, तेव्हा त्याला मूळ वर्गाच्या सर्व अमूर्त पद्धती लागू करणे आवश्यक आहे किंवा ते ठोस असू शकत नाही आणि ते अमूर्त घोषित केले जाणे आवश्यक आहे.

ते शेवटचे दोन थोडे गोंधळात टाकणारे असू शकतात, म्हणून ते लगेच स्पष्ट करूया.

अॅब्स्ट्रॅक्ट जावा क्लासेसचा विस्तार करणे

चला असे म्हणूया की आम्हाला मूलभूत आकारांबद्दल एक प्रोग्राम लिहायचा आहे जो परिमिती आणि क्षेत्रफळ देईल. म्हणून आम्ही पालक अमूर्त वर्ग तयार करतो. परंतु प्रत्येक आकाराचे स्वतःचे नियम असल्यामुळे, प्रत्येकाची गणना वेगळ्या पद्धतीने केली पाहिजे, म्हणून आम्ही अमूर्त आकार वर्ग याप्रमाणे लिहू:

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

abstract double area();
  		abstract double perimeter();
}
आता, जर आपल्याला या अमूर्त पद्धती वापरायच्या असतील, तर आपल्याला अमूर्त Java पालक वर्ग आकार वाढवावा लागेल आणि नंतर पद्धती इन्स्टंट कराव्या लागतील. म्हणून प्रत्येक कंक्रीट वर्गाने क्षेत्रफळ आणि परिमिती अमूर्त पद्धती लागू करणे आवश्यक आहे.

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
लक्षात घ्या की वर्ग चतुर्भुज ला आकार (स्ट्रिंग नाव) कंस्ट्रक्टर हे पॅरेंट क्लास शेप वरून इन्स्टंट करावयाचे नाही . कारण ती अमूर्त पद्धत नाही. तथापि, जर तुम्ही वर्गामध्ये फक्त क्षेत्र किंवा परिमिती लागू केली असेल, तर नवीन वर्ग अमूर्त असावा कारण त्यात दोन्ही समाविष्ट नाहीत. तुम्ही इंटरफेसमध्ये अमूर्त पद्धती देखील वापरू शकता.

इंटरफेससह अमूर्त Java पद्धती

इंटरफेस म्हणजे काय आणि ते अमूर्त वर्गापेक्षा कसे वेगळे आहे याचे त्वरीत पुनरावलोकन करूया. इंटरफेसमध्ये, इंटरफेसमध्ये घोषित केलेले कोणतेही चल सार्वजनिक, स्थिर आणि अंतिम असतात. दुसरीकडे अ‍ॅबस्ट्रॅक्ट क्लासेसमध्ये फक्त नॉन-फायनल व्हेरिएबल्स असतात. इंटरफेसमधील प्रत्येक गोष्ट डीफॉल्टनुसार सार्वजनिक असते. अमूर्त वर्गात खाजगी, संरक्षित, सार्वजनिक इत्यादी असू शकतात. शेवटी, वर्ग इंटरफेस वाढवत नाही, तो त्याची अंमलबजावणी करतो. 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
तुम्हाला इंटरफेस आणि अमूर्त वर्गांमधील फरकांबद्दल अधिक जाणून घ्यायचे असल्यास, तुम्ही येथे अधिक माहिती मिळवू शकता.

पण अ‍ॅबस्ट्रॅक्ट जावा पद्धती का वापरायच्या?

Java मध्ये अ‍ॅबस्ट्रॅक्ट पद्धती का वापरल्या जातात आणि त्या वापरण्यात तुम्हाला आराम का मिळावा याची अनेक कारणे आहेत. जेव्हा ते योग्य असेल तेव्हा तुम्ही ते का वापरावेत याची तीन द्रुत कारणे येथे आहेत.
  1. प्रयत्नांचे डुप्लिकेशन टाळा - आमच्या उदाहरण कोडिंगकडे परत पहा; कल्पना करा की तुम्हाला आणि तुमच्या टीमला आयताशिवाय इतर आकारांसाठी वर्ग तयार करण्याची आवश्यकता आहे. त्या वर्गाची रचना करण्यासाठी तुम्ही किती वेगवेगळे मार्ग शोधू शकता? दहा? पंधरा? आणि ही एक साधी समस्या आहे. अधिक जटिल काहीतरी कल्पना करा. तुम्ही आणि तुमची टीम शंभर मार्ग शोधू शकता. मग त्यांना एका सुसंगत कार्यक्रमात विणण्याचे कठीण काम तुम्हाला सामोरे जावे लागेल. हे आम्हाला आमच्या पुढील मुद्द्यावर आणते: अंमलबजावणीची व्याख्या.

  2. Java मधील अ‍ॅबस्ट्रॅक्ट मेथड्स वापरण्याची आणि अंमलबजावणीची व्याख्या करण्यास अनुमती देतात - जेव्हा तुम्ही अ‍ॅबस्ट्रॅक्ट क्लास किंवा इंटरफेस वापरता आणि डिझाईनद्वारे, अ‍ॅबस्ट्रॅक्ट पद्धती वापरता तेव्हा तुम्ही इतर लोक तुमच्या इंटरफेसशी कसा संवाद साधतील हे परिभाषित करता. हे त्यांना कळू देते की त्यांनी कोणते व्हेरिएबल्स वापरावे आणि ते कोणत्या प्रकारचे रिटर्न मिळू शकतात.
    ते त्यांना ओव्हरराइड करू शकतात आणि तुमचा इंटरफेस अनन्य पद्धतीने अंमलात आणणारे ठोस वर्ग तयार करू शकतात, तरीही तुम्ही तुमच्या कोडचा मूळ वापर सेट करता. जर एखाद्याला आकार लागू करायचा असेल तर त्याला परिमिती आणि क्षेत्रफळ दोन्ही ओव्हरराइड किंवा अंमलात आणावे लागतील.

  3. वाचनीयता आणि डीबगिंग - अमूर्त पद्धती असणे आपल्या कोडची वाचनीयता वाढवेल. जेव्हा तुम्ही इंटरफेस लागू करणारा वर्ग लिहिता, तेव्हा काय शोधायचे हे तुम्हाला माहीत असते. तुम्हाला माहिती आहे की इंटरफेसमधील प्रत्येक अमूर्त पद्धत अंमलबजावणीमध्ये असेल आणि त्यामुळे कोणत्याही बग्सचा मागोवा घेणे आणि वाचणे सोपे होते. जावा आणि इतर ऑब्जेक्ट-ओरिएंटेड भाषांमध्ये पॉलिमॉर्फिझमचा योग्य प्रकारे वापर कसा करायचा हे शिकण्याची अमूर्त पद्धती ही फक्त सुरुवात आहे. जेव्हा तुम्ही ते समजून घेण्यास आणि वापरण्यास सुरुवात करता, तेव्हा तुमच्या कोडिंग प्रवासाचा एक नवीन अध्याय सुरू होईल.