سلام! ڇا توهان ڪڏهن حيران ڪيو آهي ته جاوا اهڙي طرح ٺهيل ڇو آهي؟ ان معنى ۾ ته توھان ڪلاس ٺاھيو، انھن جي بنياد تي - شيون، ڪلاس جا طريقا آھن، وغيره. پر ٻوليءَ جي ڍانچي اهڙي ڇو آهي، جو پروگرام طبقن ۽ شين تي مشتمل هجن، نه ڪي ٻي شيءِ؟ ”آبجیکٹ“ جو تصور ڇو ايجاد ڪيو ويو ۽ سڀ کان اڳ ۾ رکيو ويو؟ ڇا سڀ ٻوليون هن طريقي سان ڪم ڪن ٿيون ۽ جيڪڏهن نه، ته جاوا کي ڪهڙو فائدو ڏئي ٿو؟ جئين توهان ڏسي سگهو ٿا، اتي ڪيترائي سوال آهن :) اچو ته انهن مان هر هڪ کي اڄ جي ليڪچر ۾ جواب ڏيڻ جي ڪوشش ڪريو.
Kristen Nygaard ۽ Ole Johan Dahl - سمولا جا خالق
اهو لڳي ٿو ته سمولا پروگرامنگ معيار جي لحاظ کان هڪ قديم ٻولي آهي، پر جاوا سان انهن جو "خانداني" تعلق ننگي اک ڏانهن نظر اچي ٿو. گهڻو ڪري، توهان آساني سان ان تي لکيل ڪوڊ پڙهي سگهو ٿا ۽ عام اصطلاحن ۾ وضاحت ڪري سگهو ٿا ته اهو ڇا ڪري ٿو :)
OOP اصول:
اعتراض تي مبني پروگرامنگ ڇا آهي (OOP)
يقينا، جاوا هڪ سبب لاء شيون ۽ طبقن مان ٺهيل آهي. اهو ان جي تخليق ڪندڙن جو ڪو به ڌيان نه آهي، يا انهن جي ايجاد پڻ. ٻيون به ڪيتريون ئي ٻوليون آهن جن جو بنياد شين تي آهي. پهرين اهڙي ٻولي Simula سڏيو ويندو هو، ۽ اهو ناروي ۾ 1960s ۾ واپس ايجاد ڪيو ويو. ٻين شين جي وچ ۾، سمولا " ڪلاس " ۽ " طريقو " جا تصور متعارف ڪرايا .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 مکيه خاصيتون جيڪي گڏ ڪن ٿيون اعتراض تي مبني پروگرامنگ پيراڊم. انهن کي سمجهڻ هڪ ڪامياب پروگرامر ٿيڻ جي ڪنجي آهي.اصول 1. وراثت
سٺي خبر اها آهي ته توهان اڳ ۾ ئي OOP جي ڪجهه اصولن کان واقف آهيو! :) اسان اڳ ۾ ئي وراثت کي ليڪچرن ۾ ٻه ڀيرا منهن ڪيو آهي، ۽ اسان ان سان گڏ ڪم ڪرڻ جو وقت ڪيو آهي. وراثت هڪ ميڪانيزم آهي جيڪا توهان کي موجوده (والدين) جي بنياد تي هڪ نئين طبقي کي بيان ڪرڻ جي اجازت ڏئي ٿي. انهي صورت ۾، والدين طبقي جي ملڪيت ۽ ڪارڪردگي نئين طبقي طرفان قرضدار آهن. وراثت ڇو ضروري آهي ۽ اهو ڪهڙو فائدو ڏئي ٿو؟ سڀ کان پهريان، ڪوڊ ٻيهر استعمال ڪريو. والدين طبقن ۾ بيان ڪيل فيلڊ ۽ طريقا نسلي طبقن ۾ استعمال ڪري سگھجن ٿا. جيڪڏهن ڪارن جي سڀني قسمن ۾ 10 عام شعبا ۽ 5 هڪجهڙا طريقا آهن، توهان کي صرف انهن کي والدين طبقي ۾ رکڻو پوندوAuto
. توھان انھن کي استعمال ڪري سگھوٿا نسلي طبقن ۾ بغير ڪنھن پريشاني جي. مضبوط فائدا: ٻئي مقدار جي لحاظ کان (گهٽ ڪوڊ) ۽ نتيجي طور، معيار جي لحاظ کان (طبقات تمام آسان ٿي ويندا آهن). ساڳئي وقت، وراثت واري ميڪانيزم تمام لچڪدار آهي، ۽ توهان اولاد ۾ غائب ڪارڪردگي کي الڳ الڳ شامل ڪري سگهو ٿا (ڪجهه شعبن يا رويي جي مخصوص طبقي لاء مخصوص). عام طور تي، جيئن عام زندگي ۾: اسان سڀ ڪجهه طريقن سان اسان جي والدين سان ملندڙ جلندڙ آهيون، پر انهن کان مختلف طريقن سان :)
اصول 2. خلاصو
هي هڪ تمام سادو اصول آهي. تجريد جو مطلب آهي هڪ اعتراض جي مکيه، سڀ کان اهم خصوصيتن کي اجاگر ڪرڻ ۽ ان جي برعڪس - ثانوي، غير معمولي شين کي رد ڪرڻ. اچو ته سائيڪل کي ٻيهر نه بڻايون ۽ ڪلاس بابت هڪ پراڻي ليڪچر مان هڪ مثال ياد رکون. اچو ته چوندا آهيون ته اسان ڪمپني جي ملازمن جي فائيل ڪابينا ٺاهي رهيا آهيون. ملازم شيون ٺاهڻ لاء، اسان هڪ ڪلاس لکيوEmployee
. ڪمپني فائل ۾ انهن جي وضاحت لاءِ ڪهڙيون خاصيتون اهم آهن؟ پورو نالو، ڄمڻ جي تاريخ، سماجي سيڪيورٽي نمبر، ٽيڪس سڃاڻپ نمبر. پر اهو ممڪن ناهي ته اسان کي هن قسم جي ڪارڊ ۾ سندس قد، اک ۽ وار رنگ جي ضرورت آهي. ڪمپني کي ملازم بابت هن معلومات جي ضرورت ناهي. تنهن ڪري، ڪلاس لاءِ Employee
اسان متغير مقرر ڪنداسين String name
, int age
, int socialInsuranceNumber
and 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
رويي آهي: اهي پنهنجو آواز مختلف طريقي سان استعمال ڪن ٿا.
GO TO FULL VERSION