OOP اصول

گروپ ۾ شايع ٿيل
سلام! ڇا توهان ڪڏهن حيران ڪيو آهي ته جاوا اهڙي طرح ٺهيل ڇو آهي؟ ان معنى ۾ ته توھان ڪلاس ٺاھيو، انھن جي بنياد تي - شيون، ڪلاس جا طريقا آھن، وغيره. پر ٻوليءَ جي ڍانچي اهڙي ڇو آهي، جو پروگرام طبقن ۽ شين تي مشتمل هجن، نه ڪي ٻي شيءِ؟ ”آبجیکٹ“ جو تصور ڇو ايجاد ڪيو ويو ۽ سڀ کان اڳ ۾ رکيو ويو؟ ڇا سڀ ٻوليون هن طريقي سان ڪم ڪن ٿيون ۽ جيڪڏهن نه، ته جاوا کي ڪهڙو فائدو ڏئي ٿو؟ جئين توهان ڏسي سگهو ٿا، اتي ڪيترائي سوال آهن :) اچو ته انهن مان هر هڪ کي اڄ جي ليڪچر ۾ جواب ڏيڻ جي ڪوشش ڪريو.

OOP اصول:

  1. وراثت
  2. خلاصو
  3. انڪپسوليشن
  4. پوليمورفيزم

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

يقينا، جاوا هڪ سبب لاء شيون ۽ طبقن مان ٺهيل آهي. اهو ان جي تخليق ڪندڙن جو ڪو به ڌيان نه آهي، يا انهن جي ايجاد پڻ. ٻيون به ڪيتريون ئي ٻوليون آهن جن جو بنياد شين تي آهي. پهرين اهڙي ٻولي Simula سڏيو ويندو هو، ۽ اهو ناروي ۾ 1960s ۾ واپس ايجاد ڪيو ويو. ٻين شين جي وچ ۾، سمولا " ڪلاس " ۽ " طريقو " جا تصور متعارف ڪرايا . اعتراض تي مبني پروگرامنگ جا اصول - 2
Kristen Nygaard ۽ Ole Johan Dahl - سمولا جا خالق
اهو لڳي ٿو ته سمولا پروگرامنگ معيار جي لحاظ کان هڪ قديم ٻولي آهي، پر جاوا سان انهن جو "خانداني" تعلق ننگي اک ڏانهن نظر اچي ٿو. گهڻو ڪري، توهان آساني سان ان تي لکيل ڪوڊ پڙهي سگهو ٿا ۽ عام اصطلاحن ۾ وضاحت ڪري سگهو ٿا ته اهو ڇا ڪري ٿو :)
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 - 50 سال OOP مان ورتو ويو آهي . جئين توهان ڏسي سگهو ٿا، جاوا ۽ ان جا ابا ڏاڏا هڪ ٻئي کان بلڪل مختلف نه آهن :) اهو ئي سبب آهي ته سمولا جي ظاهري هڪ نئين تصور جي پيدائش جي نشاندهي ڪئي آهي - اعتراض تي مبني پروگرامنگ. وڪيپيڊيا OOP جي هيٺين وصف ڏئي ٿو: Object-oriented programming (OOP) ھڪ پروگرامنگ طريقو آھي جنھن جي بنياد تي ھڪڙي پروگرام کي شين جي مجموعن جي طور تي پيش ڪيو وڃي ٿو، جن مان ھر ھڪ مخصوص طبقي جو مثال آھي، ۽ طبقن جو ھڪ وراثت وارو درجو ٺھي ٿو. اهو آهي، منهنجي خيال ۾، تمام ڪامياب. توھان تازو ئي جاوا سکڻ شروع ڪيو آھي، پر ان ۾ شايد ئي ڪي لفظ آھن جيڪي توھان لاءِ ناواقف ھجن :) اڄڪلھ، OOP سڀ کان عام پروگرامنگ طريقو آھي. جاوا کان علاوه، OOP اصول ڪيترن ئي مشهور ٻولين ۾ استعمال ڪيا ويا آهن جن بابت توهان ٻڌو هوندو. اهي آهن C++ (اهو فعال طور تي ڪمپيوٽر گيم ڊولپرز پاران استعمال ڪيو ويندو آهي)، Objective-C ۽ Swift (اهي ايپل ڊوائيسز لاءِ پروگرام لکندا آهن)، پٿون (مشين لرننگ ۾ تمام گهڻي طلب)، پي ايڇ پي (هڪ مشهور ويب ڊولپمينٽ ٻولين مان)، JavaScript (سادو چون ٿا ته اهي ان تي ڇا نٿا ڪن) ۽ ٻيا ڪيترائي. دراصل، OOP جا اهي ”اصول“ ڇا آهن؟ اچو ته توهان کي وڌيڪ تفصيل سان ٻڌايو.

OOP اصول

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

اصول 1. وراثت

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

اصول 2. خلاصو

هي هڪ تمام سادو اصول آهي. تجريد جو مطلب آهي هڪ اعتراض جي مکيه، سڀ کان اهم خصوصيتن کي اجاگر ڪرڻ ۽ ان جي برعڪس - ثانوي، غير معمولي شين کي رد ڪرڻ. اچو ته سائيڪل کي ٻيهر نه بڻايون ۽ ڪلاس بابت هڪ پراڻي ليڪچر مان هڪ مثال ياد رکون. اچو ته چوندا آهيون ته اسان ڪمپني جي ملازمن جي فائيل ڪابينا ٺاهي رهيا آهيون. ملازم شيون ٺاهڻ لاء، اسان هڪ ڪلاس لکيو Employee. ڪمپني فائل ۾ انهن جي وضاحت لاءِ ڪهڙيون خاصيتون اهم آهن؟ پورو نالو، ڄمڻ جي تاريخ، سماجي سيڪيورٽي نمبر، ٽيڪس سڃاڻپ نمبر. پر اهو ممڪن ناهي ته اسان کي هن قسم جي ڪارڊ ۾ سندس قد، اک ۽ وار رنگ جي ضرورت آهي. ڪمپني کي ملازم بابت هن معلومات جي ضرورت ناهي. تنهن ڪري، ڪلاس لاءِ Employeeاسان متغير مقرر ڪنداسين String name, int age, int socialInsuranceNumberand int taxNumber, ۽ اسان ان معلومات کي ڇڏي ڏينداسين جيڪا اسان لاءِ غير ضروري آهي، جهڙوڪ اکين جو رنگ، ۽ ان کي خلاصو. پر جيڪڏهن اسان هڪ ايجنسي لاء فوٽو ماڊل جي فهرست ٺاهي، صورتحال ڊرامي طور تي تبديل ٿي. فيشن جي ماڊل کي بيان ڪرڻ لاء، قد، اکين جو رنگ ۽ وارن جو رنگ اسان لاء تمام ضروري آهي، پر TIN نمبر جي ضرورت ناهي. تنهن ڪري، ڪلاس ۾ Modelاسين متغير ٺاهيندا آهيون String height، String hair.String eyes

اصول 3: Encapsulation

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

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

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

   public void voice() {

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

public class Dog extends Animal {


   @Override
   public void voice() {
       System.out.println("Bow-wow!");
   }
}

public class Cat extends Animal {

   @Override
   public void voice() {
       System.out.println("Meow!");
   }
}
ھاڻي ھاڻي ڪوشش ڪريون ھڪ لنڪ ٺاھيو Animal۽ ان کي ھڪ اعتراض ڏيو Dog.
public class Main {

   public static void main(String[] args) {

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

   Animal cat = new Cat();
   cat.voice();
}
طريقو voice()ٻاھر نڪرندو "ميو!" ”ڪيترن قسمن سان ڪم ڪرڻ جي صلاحيت ڄڻ ته اهي ساڳيا قسم آهن“ جو مطلب ڇا آهي؟ اهو پڻ ڪافي آسان آهي. اچو ته تصور ڪريو ته اسان جانورن لاء هڪ hairdressing سيلون ٺاهي رهيا آهيون. اسان جي وار سيلون سڀني جانورن کي ڪٽڻ جي قابل هوندو، تنهنڪري اسان هڪ طريقو ٺاهينداسين shear()("ڪٽ") هڪ پيٽرولر سان Animal- اهو جانور جيڪو اسين ڪٽينداسين.
public class AnimalBarbershop {

   public void shear(Animal animal) {

       System.out.println("The haircut is ready!");
   }
}
۽ ھاڻي اسان shearٻئي شيون Cat۽ شيون پاس ڪري سگھون ٿا طريقي سان Dog!
public static void main(String[] args) {

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

   AnimalBarbershop barbershop = new AnimalBarbershop();

   barbershop.shear(cat);
   barbershop.shear(dog);
}
ھتي ھڪڙو واضح مثال آھي: ڪلاس AnimalBarbershopڪم ڪري ٿو قسمن سان Catڄڻ Dogته اھي ساڳيا قسم آھن. ساڳئي وقت، انهن وٽ Catمختلف Dogرويي آهي: اهي پنهنجو آواز مختلف طريقي سان استعمال ڪن ٿا.

OOP جي ظاهر ٿيڻ جا سبب

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