John Squirrels
سطح
San Francisco

OOP اصول

گروپ ۾ شايع ٿيل
سلام اڄ جي سبق ۾، اسان اعتراض تي مبني پروگرامنگ جي اصولن بابت ڳالهائينداسين. ڇا توهان ڪڏهن حيران ڪيو آهي ته ڇو جاوا بلڪل اهڙي طرح ٺهيل آهي جيئن اهو آهي؟ منهنجو مطلب آهي ته، توهان طبقن جو اعلان ڪيو ۽ ڪلاسن جي بنياد تي شيون ٺاهيون، طبقن جا طريقا آهن، وغيره. پر ڇو ٻولي اهڙي ترتيب ڏني وئي آهي ته پروگرام طبقن ۽ شين تي مشتمل هجن، ۽ ٻيو ڪجهه نه؟ ڇو هڪ "آبجیکٹ" جو تصور ايجاد ڪيو ويو ۽ سڀ کان اڳ ۾ رکيو ويو؟ ڇا سڀ ٻوليون اهڙي طرح ٺهيل آهن؟ جيڪڏهن نه، اهو جاوا کي ڪهڙو فائدو ڏئي ٿو؟ جئين توهان ڏسي سگهو ٿا، اتي ڪيترائي سوال آهن :) اچو ته انهن مان هر هڪ کي اڄ جي سبق ۾ جواب ڏيڻ جي ڪوشش ڪريو.

اعتراض تي مبني پروگرامنگ (OOP) ڇا آهي؟

يقينا، جاوا شيون ۽ طبقن مان ٺهيل نه آهي صرف تفريح لاء. اهي جاوا جي تخليق ڪندڙن جو ڪو به ڌيان نه آهن، ۽ نه ئي انهن جي ايجاد. شين تي ٻڌل ٻيون به ڪيتريون ئي ٻوليون آهن. پهرين اهڙي ٻولي ”سمولا“ سڏبي هئي. اهو ناروي ۾ 1960s ۾ واپس ايجاد ڪيو ويو. وڌيڪ ڇا آهي، سمولا ۾ "طبقو" ۽ "طريقو" جا تصور ظاهر ٿيا. سافٽ ويئر ڊولپمينٽ جي معيار موجب، "سمولا" هڪ قديم ٻولي وانگر لڳي ٿو، پر هرڪو ڏسي سگهي ٿو ان جي "خانداني مشابهت" جاوا سان. اعتراض تي مبني پروگرامنگ جا اصول - 1توھان شايد ھن ٻوليءَ ۾ لکيل ڪوڊ کي آساني سان پڙھي سگھوٿا ۽ وضاحت ڪري سگھوٿا ته اھو ڇا ٿو ڪري :)
Begin
	Class Rectangle (Width, Height); Real Width, Height;

	 Begin
	    Real Area, Perimeter;

	    Procedure Update;
	    Begin
	      Area := Width * Height;
              OutText("Rectangle is updating, Area = "); OutFix(Area,2,8); OutImage;
	      Perimeter := 2*(Width + Height);
              OutText("Rectangle is updating, Perimeter = "); OutFix(Perimeter,2,8); OutImage;
	    End of Update;

	    Update;
	    OutText("Rectangle created: "); OutFix(Width,2,6);
	    OutFix(Height,2,6); OutImage;
	 End of Rectangle;

       Rectangle Class ColouredRectangle (Color); Text Color;

	Begin
	    OutText("ColouredRectangle created, color = "); OutText(Color);
	    OutImage;
        End of ColouredRectangle;


      	 Ref(Rectangle) Cr;
	 Cr :- New ColouredRectangle(10, 20, "Green");
End;
هي ڪوڊ نموني ڪوڊ "Simula - OOP جو 50 سال" Weekly-geekly پاران ورتو ويو. جئين توهان ڏسي سگهو ٿا، جاوا پنهنجي ڏاڏي کان بلڪل مختلف ناهي :) اهو حقيقت جي ڪري آهي ته سمولا جي ظاهري هڪ نئين تصور جي پيدائش کي نشان لڳايو: اعتراض تي مبني پروگرامنگ. وڪيپيڊيا OOP جي وضاحت هن طرح ڪري ٿو: "Object-Oriented Programming (OOP) هڪ پروگرامنگ جو نمونو آهي، جيڪو "آبجڪٽ" جي تصور تي مبني آهي، جنهن ۾ ڊيٽا شامل ٿي سگهي ٿي، فيلڊ جي صورت ۾ (اڪثر طور تي منسوب طور سڃاتو وڃي ٿو) ۽ ڪوڊ، فارم ۾ طريقيڪار جو (اڪثر طريقن جي طور تي سڃاتو وڃي ٿو). منهنجي خيال ۾، هي هڪ واقعي سٺي تعريف آهي. اهو گهڻو اڳ نه هو ته توهان جاوا سکڻ شروع ڪيو، پر هن تعريف ۾ شايد اهڙا لفظ شامل نه آهن جيڪي توهان نٿا ڄاڻو :) اڄ OOP سڀ کان وڌيڪ عام پروگرامنگ طريقو آهي. جاوا کان علاوه، OOP اصول ڪيترن ئي مشهور ٻولين ۾ استعمال ڪيا ويا آهن جن بابت توهان ٻڌو هوندو. مثال طور، C++ (فعال طور تي گيم ڊولپمينٽ ۾ استعمال ٿيل)، Objective-C ۽ Swift (ايپل ڊوائيسز لاءِ پروگرام لکڻ لاءِ استعمال ڪيو ويندو آهي)، پٿون (مشين لرننگ ۾ تمام گهڻو مشهور)، پي ايڇ پي (هڪ مشهور ويب ڊولپمينٽ ٻولين مان)، جاوا اسڪرپٽ ( اهو چوڻ آسان آهي ته اهو ڇا لاءِ استعمال نه ڪيو ويو آهي) ۽ ٻيا ڪيترائي. تنهن ڪري، OOP جا اصول ڇا آهن؟ اسان توهان کي تفصيل سان ٻڌايو.

OOP اصول

اهي ئي بنيادن جو بنياد آهن. 4 مکيه خاصيتون جيڪي گڏجي ٺاهيندا آهن اعتراض تي مبني پروگرامنگ پيراڊم. انھن کي سمجھڻ ضروري آھي ھڪ ڪامياب پروگرامر ٿيڻ لاءِ.

اصول 1. وراثت

سٺي خبر: توهان اڳ ۾ ئي OOP جا ڪجهه اصول ڄاڻو ٿا! :) اسان اڳ ۾ ئي ورثي کي سبق ۾ ٻه ڀيرا محسوس ڪيو آهي، ۽ اسان ان کي استعمال ڪرڻ ۾ منظم ڪيو. وراثت هڪ ميکانيزم آهي جيڪا توهان کي موجوده (والدين) طبقي جي بنياد تي هڪ نئين طبقي کي بيان ڪرڻ جي اجازت ڏئي ٿي. ائين ڪرڻ ۾، نئون طبقو والدين طبقي جي ملڪيت ۽ ڪارڪردگي کي قرض ڏئي ٿو. وراثت ڇا آهي ۽ ان جا ڪهڙا فائدا آهن؟ سڀ کان وڌيڪ، ڪوڊ ٻيهر استعمال ڪريو. والدين طبقن ۾ بيان ڪيل شعبن ۽ طريقن کي نسلي طبقن ۾ استعمال ڪري سگھجي ٿو. جيڪڏهن ڪارن جي سڀني قسمن ۾ 10 عام فيلڊ ۽ 5 هڪجهڙا طريقا آهن، توهان کي صرف انهن کي خودڪار والدين طبقي ۾ منتقل ڪرڻ جي ضرورت آهي . توھان انھن کي استعمال ڪري سگھوٿا نسلي طبقن ۾ بغير ڪنھن پريشاني جي. مضبوط فائدا: ٻئي مقداري (گهٽ ڪوڊ) ۽، نتيجي طور، معيار (طبقات تمام آسان ٿي ويندا آهن). ان کان علاوه، وراثت تمام لچڪدار آھي - توھان شامل ڪري سگھوٿا لکڻ جي الڳ ڪارڪردگي جيڪا اولاد غائب آھن (ڪجھ فيلڊ يا رويي جيڪي مخصوص طبقي لاءِ مخصوص آھن). عام طور تي، جيئن حقيقي زندگي ۾، اسان سڀ ڪجهه ڪجهه پنهنجي والدين سان ملندڙ جلندڙ آهيون، پر انهن کان ڪجهه به مختلف آهن :)

اصول 2. خلاصو

هي هڪ تمام سادو اصول آهي. تجريد جو مطلب آهي ڪنهن به شيءِ جي مکيه، اهم خصوصيتن کي سڃاڻڻ، جڏهن ته هڪ ئي وقت ڪنهن به شيءِ کي غير معمولي ۽ غير معمولي رد ڪرڻ. ڦيٿي کي ٻيهر ٺاهڻ جي ضرورت ناهي. اچو ته ڪلاس بابت هڪ پراڻي سبق مان هڪ مثال ياد ڪريون. فرض ڪريو اسان ڪمپني جي ملازمن لاءِ فائلنگ سسٽم ٺاهي رهيا آهيون. ”ملازم“ شيون ٺاهڻ لاءِ، اسان لکيو آهي ملازم طبقو. ڪمپني فائلنگ سسٽم ۾ انهن کي بيان ڪرڻ لاءِ ڪهڙيون خاصيتون اهم آهن؟ نالو، ڄمڻ جي تاريخ، SSN، ۽ ملازم جي سڃاڻپ. پر اهو ممڪن ناهي ته هن قسم جي رڪارڊ لاءِ اسان کي ملازم جي قد، اکين جو رنگ، يا وار رنگ جي ضرورت پوندي. ڪمپني کي ملازم جي باري ۾ اهڙي معلومات جي ڪا ضرورت ناهي. تنهن ڪري، ملازم طبقي ۾ ، اسان هيٺ ڏنل متغيرن جو اعلان ڪريون ٿا: اسٽرنگ جو نالو ، int عمر ، int socialSecurityNumber ، ۽ int employeeId . ۽ اسان غير ضروري معلومات کي ختم ڪري ڇڏيندا آهيون جهڙوڪ اکين جو رنگ. بهرحال، جيڪڏهن اسان ماڊلنگ ايجنسي لاءِ فائلنگ سسٽم ٺاهي رهيا آهيون، صورتحال ڊرامي طور تبديل ٿي ويندي آهي. ماڊل جي قد، اکين جو رنگ، ۽ وارن جو رنگ اهم خاصيتون آهن، پر هن جو SSN اسان لاءِ بلڪل غير لاڳاپيل آهي. تنهن ڪري، ماڊل ڪلاس ۾ ، اسان هيٺيان متغير ٺاهيندا آهيون: اسٽرنگ اونچائي ، اسٽرنگ وار ، اسٽرنگ اکيون .

اصول 3. Encapsulation

اسان اڳ ۾ ئي هن ۾ هليا ويا آهيون. جاوا ۾، encapsulation جو مطلب آهي ڊيٽا پڙهڻ ۽ تبديل ڪرڻ جي صلاحيت کي محدود ڪرڻ. جئين توهان ڏسي سگهو ٿا، اصطلاح لفظ "ڪيپسول" تي ٻڌل آهي. اسان ڪجھ اھم ڊيٽا کي لڪائڻ لاءِ ”ڪيپسول“ استعمال ڪنداسين جيڪي اسان نٿا چاھيون ته ٻيا تبديل ڪن. هتي حقيقي زندگي مان هڪ سادي مثال آهي. توھان وٽ ھڪڙو نالو ۽ آخري نالو آھي. توهان جا سڀئي دوست انهن کي ڄاڻن ٿا. پر اهي توهان جي پهرين يا آخري نالو کي تبديل ڪرڻ جي صلاحيت نٿا رکن. اسان اهو چئي سگهون ٿا ته اهو ڪرڻ جو عمل عدالتي نظام طرفان "انڪپسولڊ" آهي: توهان پنهنجو آخري نالو صرف ڪورٽ ڪلرڪ ذريعي تبديل ڪري سگهو ٿا، ۽ صرف توهان اهو ڪري سگهو ٿا. ٻين "صارفين" کي توهان جي پهرين ۽ آخري نالي تائين "صرف پڙهڻ لاءِ" رسائي آهي :) هڪ ٻيو مثالي مثال گهر ۾ رکيل نقد آهي. ان کي پنهنجي ڪمري جي وچ ۾ صاف نظر ۾ ڇڏڻ سٺو خيال نه آهي. ڪو به ”استعمال ڪندڙ“ (ماڻهو جيڪو توهان جي گهر اچي) توهان جي رقم جي رقم تبديل ڪرڻ جي قابل هوندو، يعني اهي توهان جا پئسا وٺي سگهن ٿا. اهو بهتر آهي ته ان کي هڪ محفوظ ۾ encapsulate ڪرڻ. ان کان پوء رسائي صرف توهان لاء دستياب ٿي ويندي ۽ صرف هڪ خاص ڪوڊ استعمال ڪندي. encapsulation جا واضح مثال جيڪي توهان اڳ ۾ ئي ڪم ڪري چڪا آهن رسائي موڊيفائرز (نجي، عوامي، وغيره)، انهي سان گڏ سيٽرز ۽ حاصل ڪندڙ. جيڪڏهن توهان ٻلي طبقي جي عمر جي فيلڊ کي شامل نه ڪيو ، پوء هرڪو لکي سگهي ٿو:
Cat.age = -1000;
encapsulation ميڪانيزم اسان کي عمر جي فيلڊ کي سيٽر جي طريقي سان بچائڻ جي اجازت ڏئي ٿي، جتي اسان پڪ ڪري سگهون ٿا ته عمر کي منفي نمبر تي مقرر نه ٿو ڪري سگهجي.

اصول 4. پوليمورفيزم

پوليمورفيزم ڪيترن ئي قسمن سان ڪم ڪرڻ جي صلاحيت آهي ڄڻ ته اهي ساڳيا قسم آهن. ان کان علاوه، شين جو رويو مختلف هوندو انهن جي قسم جي لحاظ کان. ڇا اهو آواز پيچيده آهي؟ اچو ته ان کي صحيح سمجهون. سادو مثال وٺو: جانور. هڪ واحد اسپيڪ() طريقي سان جانورن جو ڪلاس ٺاهيو ، ۽ ٻه ذيلي ڪلاس - Cat ۽ Dog .
public class Animal {

   public void speak() {

       System.out.println("Hello!");
   }
}

public class Dog extends Animal {

   @Override
   public void speak() {
       System.out.println ("Woof-woof!");
   }
}

public class Cat extends Animal {

   @Override
   public void speak() {
       System.out.println("Meow!");
   }
}
ھاڻي اسان ڪوشش ڪنداسين ته Animal Reference variable جو اعلان ڪريون ۽ ان لاءِ Dog Object تفويض ڪريون.
public class Main {

   public static void main(String[] args) {

       Animal dog = new Dog();
       dog.speak();
   }
}
توهان سوچيو ته ڪهڙو طريقو سڏيو ويندو؟ Animal.speak() يا Dog.speak() ؟ ڪتي جي ڪلاس ۾ طريقي کي سڏيو ويندو: woof-woof! اسان هڪ جانورن جو حوالو ٺاهيو، پر اعتراض هڪ ڪتو وانگر آهي . جيڪڏهن ضروري هجي ته، اهو هڪ ٻلي، گهوڙي، يا ڪنهن ٻئي جانور وانگر عمل ڪري سگهي ٿو. اھم شيء آھي ھڪڙي مخصوص ذيلي ڪلاس کي عام جانورن جي حوالي سان متغير کي تفويض ڪرڻ. اھو سمجھ ۾ اچي ٿو، ڇاڪاڻ⁠تہ سڀ ڪتا جانور آھن. اھو اھو آھي جيڪو اسان جي ذهن ۾ ھو جڏھن اسان چيو ته "شيون جو رويو انھن جي قسم جي لحاظ کان مختلف ھوندو." جيڪڏهن اسان هڪ ٻلي اعتراض ٺاهيو ...
public static void main(String[] args) {

   Animal cat = new Cat();
   cat.speak();
}
ڳالهائڻ () طريقو ڏيکاريندو "ميو!" پر اسان جو مطلب ڇا آهي 'ڪيترن ئي قسمن سان ڪم ڪرڻ جي صلاحيت ڄڻ ته اهي ساڳيا قسم'؟ اهو پڻ ڪافي سڌو آهي. اچو ته تصور ڪريون ته اسان جانورن لاءِ حجام جي دڪان ٺاهي رهيا آهيون. اسان جي حجام جي دڪان کي ڪنهن به جانور کي ٽرم ڏيڻ جي قابل هجڻ گهرجي، تنهنڪري اسان هڪ ٽرم () طريقو ٺاهيو جانورن جي پيٽرولر سان (جانور کي وار ڪٽڻ).
public class AnimalBarbershop {

   public void trim(Animal animal) {

       System.out.println("The haircut is done!");
   }
}
۽ ھاڻي اسان ٻلي ۽ ڪتي جي شين کي ٽرم () طريقي سان منتقل ڪري سگھون ٿا!
public static void main(String[] args) {

   Cat cat = new Cat();
   Dog dog = new Dog();

   AnimalBarbershop barbershop = new AnimalBarbershop();

   barbershop.trim(cat);
   barbershop.trim(dog);
}
۽ هتي واضح مثال آهي: AnimalBarbershop ڪلاس ٻلي ۽ ڪتن جي قسمن سان ڪم ڪري ٿو ڄڻ ته اهي ساڳيا قسم آهن. ساڳي ئي وقت، ٻلي ۽ ڪتا مختلف طريقا آهن: اهي هر هڪ الڳ الڳ ڳالهائيندا آهن.

اسان کي OOP جي ضرورت ڇو آهي؟

او او پي ڪڏهن به هڪ نئين پروگرامنگ تصور جي طور تي ڇو پيدا ٿيو؟ پروگرامرز وٽ ڪم ڪرڻ وارا اوزار هئا، جهڙوڪ طريقيڪار ٻوليون. ڇا انهن کي بنيادي طور تي نئين شيء ايجاد ڪرڻ جي هدايت ڪئي؟ سڀ کان وڌيڪ، انهن ڪمن جي پيچيدگي جنهن کي منهن ڏيڻو پيو. جيڪڏهن 60 سال اڳ پروگرامر جو ڪم ڪجهه اهڙو هوندو هو جيئن ”ڪجهه رياضياتي اظهار جو جائزو وٺو“، هاڻي اهو ٿي سگهي ٿو ”راندين اسٽالڪر لاءِ 7 مختلف پڇاڙيون لاڳو ڪرڻ، ان جي بنياد تي پليئر جي فيصلن جي مجموعن تي ٻڌل آهي A, B, C, DE. ، ۽ F راند ۾." جئين توهان ڏسي سگهو ٿا، ڪم واضح طور تي گذريل ڏهاڪن کان وڌيڪ پيچيده ٿي چڪا آهن. ۽ نتيجي طور، ڊيٽا جا قسم وڌيڪ پيچيده ٿي ويا آهن. اهو هڪ ٻيو سبب آهي ڇو ته OOP ظاهر ٿيو. هڪ رياضياتي اظهار جو اندازو لڳائي سگهجي ٿو آساني سان عام پريميٽوز استعمال ڪندي. هتي ڪنهن به شيء جي ضرورت ناهي. پر راند جي پڇاڙيءَ سان ڪم به مشڪل هوندو ته بيان ڪرڻ کان سواءِ ڪسٽم ڪلاس استعمال ڪرڻ کان سواءِ. اهو چيو ته، طبقن ۽ شيون استعمال ڪندي ان کي بيان ڪرڻ بلڪل آسان آهي. ظاهر آهي، اسان کي ڪيترن ئي طبقن جي ضرورت پوندي: راند، اسٽالڪر، ختم ٿيڻ، پليئر فيصلو، GameEvent، وغيره. ٻين لفظن ۾، مسئلو حل ڪرڻ شروع ڪرڻ کان سواء، اسان آساني سان اسان جي سر ۾ هڪ حل "خاڪا ڪڍي" ڪري سگهون ٿا. ڪمن جي وڌندڙ پيچيدگي پروگرامرز کي مجبور ڪيو ته انهن کي حصن ۾ ورهايو وڃي. پر اهو عمل ڪرڻ واري پروگرامنگ ۾ ايترو آسان نه هو. ۽ گهڻو ڪري هڪ پروگرام هڪ وڻ وانگر هوندو هو جنهن ۾ تمام گهڻيون شاخون هونديون هيون جن تي عمل ڪرڻ جا سڀ ممڪن رستا هوندا. ڪجهه شرطن تي مدار رکندي، پروگرام جي هڪ شاخ يا ٻيو عمل ڪيو ويو. ننڍن پروگرامن لاء، اهو آسان هو، پر وڏي مسئلي کي حصن ۾ ورهائڻ ڏاڍو ڏکيو هو. اهو اڃا تائين OOP جي اڀار جو هڪ ٻيو سبب هو. هن تمثيل پروگرامرز کي هڪ پروگرام کي "ماڊيول" (ڪلاس) جي گروپ ۾ ورهائڻ جي صلاحيت ڏني، جن مان هر هڪ ڪم جو پنهنجو حصو ڪري ٿو. هڪ ٻئي سان رابطي سان، سڀئي شيون اسان جي پروگرام جي ڪم کي پورو ڪن ٿيون. ان کان علاوه، اسان پروگرام ۾ اسان جي ڪوڊ کي ٻي جاء تي استعمال ڪري سگهون ٿا، جيڪو پڻ گهڻو وقت بچائيندو آهي.
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION