CodeGym /جاوا بلاگ /Random-UR /جاوا خلاصہ طریقہ اور کلاسز
John Squirrels
سطح
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
نوٹ کریں کہ کلاس چوکور کو پیرنٹ کلاس Shape سے Shape(String name) کنسٹرکٹر کو انسٹینٹیٹ کرنے کی ضرورت نہیں ہے ۔ اس کی وجہ یہ ہے کہ یہ کوئی خلاصہ طریقہ نہیں ہے۔ تاہم، اگر آپ نے کسی کلاس میں صرف ایک علاقہ یا دائرہ لاگو کیا ہے، تو نئی کلاس کو خلاصہ ہونا پڑے گا کیونکہ اس میں دونوں شامل نہیں ہیں۔ آپ انٹرفیس میں تجریدی طریقے بھی استعمال کر سکتے ہیں۔

انٹرفیس کے ساتھ خلاصہ جاوا کے طریقے

آئیے جلدی سے جائزہ لیں کہ انٹرفیس کیا ہے اور یہ تجریدی کلاس سے کیسے مختلف ہے۔ انٹرفیس میں، انٹرفیس میں اعلان کردہ کوئی بھی متغیر عوامی، جامد اور حتمی ہوتے ہیں۔ دوسری طرف خلاصہ کلاسوں میں صرف غیر حتمی متغیرات ہوتے ہیں۔ انٹرفیس میں ہر چیز بطور ڈیفالٹ عوامی ہوتی ہے۔ ایک تجریدی کلاس پرائیویٹ، محفوظ، پبلک وغیرہ ہو سکتی ہے۔ آخر میں، کلاس انٹرفیس کو نہیں بڑھاتی، اسے لاگو کرتی ہے۔ JDK 8 سے پہلے، ایک انٹرفیس میں تجریدی طریقوں کے علاوہ کچھ نہیں ہوسکتا تھا۔ اب، ایک انٹرفیس میں پہلے سے طے شدہ اور جامد طریقے ہوسکتے ہیں۔ اس کی وجہ سے، بہترین طریقہ کار تجریدی طریقوں کو قابل توسیع ٹیمپلیٹس کے طور پر استعمال کرنے سے دور ہو گئے ہیں اور انٹرفیس پر توجہ مرکوز کر کے ان پر عمل درآمد کر رہے ہیں۔ تو اگر آپ Shape کو بطور انٹرفیس بنائیں اور پھر اسے Quadrilateral کے طور پر نافذ کریں ، تو یہ کیسا نظر آئے گا؟ سب سے پہلے، آپ کو Shape(String name) کنسٹرکٹر کو ختم کرنا ہوگا ۔ یہ صرف دو تجریدی طریقوں کے ساتھ اس طرح نظر آئے گا:
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