CodeGym /جاوا بلاگ /Random-SD /OOP جا اصول
John Squirrels
سطح
San Francisco

OOP جا اصول

گروپ ۾ شايع ٿيل
جاوا هڪ اعتراض تي مبني ٻولي آهي. ان جو مطلب اهو آهي ته توهان کي جاوا پروگرام لکڻ جي ضرورت آهي هڪ اعتراض تي مبني پيراڊم استعمال ڪندي. ۽ هي نمونو توهان جي پروگرامن ۾ شيون ۽ ڪلاس استعمال ڪندي داخل ٿئي ٿو. اچو ته مثال استعمال ڪرڻ جي ڪوشش ڪريون ته سمجھڻ لاءِ ته ڪھڙا طبقا ۽ شيون آھن، ۽ ڪيئن لاڳو ڪجي بنيادي OOP اصولن (Abstraction، inheritance، polymorphism ۽ encapsulation) کي عملي طور تي.

هڪ اعتراض ڇا آهي؟

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

خلاصو

اچو ته هاڻي ان ڳالهه تي غور ڪريون ته ڪيئن اسان حقيقي دنيا ۾ ڪنهن شئي کان ڪنهن پروگرام ۾ ڪنهن شئي ڏانهن منتقل ڪري سگهون ٿا. اسان مثال طور فون استعمال ڪنداسين. رابطي جي هن وسيلا جي هڪ تاريخ آهي جيڪا 100 سالن کان وڌيڪ آهي. جديد ٽيليفون 19 صدي عيسويء جي اڳڪٿي کان وڌيڪ پيچيده ڊوائيس آهي. فون استعمال ڪرڻ وقت، اسان ان جي تنظيم ۽ ان جي اندر ٿيندڙ عملن جي باري ۾ نه سوچيو. اسان صرف فون جي ڊولپرز پاران مهيا ڪيل فنڪشن استعمال ڪندا آهيون: فون نمبر داخل ڪرڻ ۽ ڪال ڪرڻ لاءِ بٽڻ يا ٽچ اسڪرين. پهرين فون انٽرفيس مان هڪ هڪ ڪرينڪ هو جنهن کي ڪال ڪرڻ لاءِ گھمڻ جي ضرورت هئي. يقينا، اهو تمام آسان نه هو. پر اهو پنهنجي ڪم کي مڪمل طور تي پورو ڪيو. جيڪڏهن توهان سڀ کان جديد ۽ بلڪل پهرين فونن جو مقابلو ڪريو ٿا، توهان فوري طور تي 19 صدي جي آخر واري ڊوائيس ۽ جديد اسمارٽ فون لاءِ سڀ کان اهم ڪمن جي سڃاڻپ ڪري سگهو ٿا. اهي ڪال ڪرڻ جي صلاحيت ۽ ڪال وصول ڪرڻ جي صلاحيت آهن. حقيقت ۾، اهو آهي جيڪو فون کي فون ڪري ٿو، ۽ ٻيو ڪجهه نه. ھاڻي صرف OOP جو ھڪڙو اصول لاڳو ڪيو: ھڪڙي شئي جي سڀ کان اھم خصوصيتن ۽ ڄاڻ جي سڃاڻپ ڪريو. هن اصول کي خلاصو سڏيو ويندو آهي. او او پي ۾، تجريد پڻ هڪ طريقي جي طور تي بيان ڪري سگهجي ٿو حقيقي دنيا جي ڪم جي عناصر کي نمائندگي ڪرڻ جي هڪ طريقي جي طور تي هڪ پروگرام ۾ شيون. خلاصو هميشه ڪنهن شئي جي ڪجهه خاصيتن جي عام ڪرڻ سان لاڳاپيل هوندو آهي، تنهنڪري بنيادي شيء اهو آهي ته هٿ ۾ ڪم جي حوالي سان غير معمولي معلومات کي الڳ ڪرڻ لاء. اضافي طور تي، تجريد جا ڪيترائي سطح ٿي سگهن ٿا. اچو ته اسان جي فون تي تجريد جي اصول کي لاڳو ڪرڻ جي ڪوشش ڪريو. شروع ڪرڻ لاءِ، اسين سڀ کان عام قسم جي فونن جي سڃاڻپ ڪنداسين - بلڪل پھرين فونن کان وٺي اڄ جي دور تائين. مثال طور، اسان انهن کي شڪل 1 ۾ ڊاگرام جي صورت ۾ پيش ڪري سگهون ٿا. OOP جا اصول - 2خلاصو استعمال ڪندي، اسان هاڻي هن اعتراض جي درجي ۾ عام معلومات کي سڃاڻي سگهون ٿا: عام خلاصو اعتراض (ٽيليفون)، ٽيليفون جون عام خاصيتون (مثال طور ان جو سال. تخليق)، ۽ عام انٽرفيس (سڀ ٽيليفون وصول ڪري سگھن ٿا ۽ ڪال ڪري سگھن ٿا). هتي جاوا ۾ اهو ڪيئن ڏسڻ ۾ اچي ٿو:
public abstract class AbstractPhone {
    private int year;

    public AbstractPhone(int year) {
        this.year = year;
    }
    public abstract void call(int outgoingNumber);
    public abstract void ring(int incomingNumber);
}
هڪ پروگرام ۾، اسان هن تجريدي طبقي کي استعمال ڪندي ۽ او او پي جي ٻين بنيادي اصولن کي لاڳو ڪندي فونن جا نوان قسم ٺاهي سگهون ٿا، جن کي اسين هيٺ ڳولينداسين.

انڪپسوليشن

تجريدي سان، اسان سڃاڻون ٿا ته سڀني شين لاءِ عام ڇا آهي. پر هر قسم جو فون منفرد آهي، ڪنهن نه ڪنهن طرح ٻين کان مختلف آهي. هڪ پروگرام ۾، اسان ڪئين حدون ٺاهي سگهون ٿا ۽ هن انفراديت کي سڃاڻي سگهون ٿا؟ اسان ان کي ڪيئن ٺاهي سگهون ٿا ته ڪو به غلط طور تي يا عمدي طور تي اسان جي فون کي ٽوڙي يا هڪ ماڊل کي ٻئي ۾ تبديل ڪرڻ جي ڪوشش ڪري سگهي ٿو؟ حقيقي دنيا ۾، جواب واضح آهي: توهان سڀني حصن کي فون جي صورت ۾ رکڻ جي ضرورت آهي. آخرڪار، جيڪڏهن توهان نٿا ڪريو - ان جي بدران سڀني فون جي اندروني حصن کي ڇڏڻ ۽ تارن کي ٻاهران ڳنڍڻ - ڪجهه تجسس ڪندڙ تجربو ڪندڙ ضرور اسان جي فون کي "بهتر" ڪرڻ چاهيندا. اهڙي ٽينڪرنگ کي روڪڻ لاء، encapsulation جو اصول هڪ اعتراض جي ڊيزائن ۽ آپريشن ۾ استعمال ڪيو ويندو آهي. اهو اصول ٻڌائي ٿو ته ڪنهن شئي جون خاصيتون ۽ رويي هڪ واحد طبقي ۾ گڏ ٿيل آهن، اعتراض جي اندروني عمل کي استعمال ڪندڙ کان لڪيل آهي، ۽ اعتراض سان ڪم ڪرڻ لاء هڪ عوامي انٽرنيٽ مهيا ڪئي وئي آهي. پروگرامر جو ڪم اهو آهي ته اهو طئي ڪري ته ڪنهن شئي جون ڪهڙيون خاصيتون ۽ طريقا عوام جي پهچ لاءِ دستياب هجن، ۽ ڪهڙا آهن اندروني عملدرآمد جا تفصيل جيڪي ناقابل رسائي هجڻ گهرجن.

Encapsulation ۽ رسائي ڪنٽرول

فرض ڪريو ته فون بابت معلومات (ان جي پيداوار جو سال يا ٺاهيندڙ جو لوگو) ان جي پٺيءَ تي اُڪريل هوندو آهي جڏهن اهو ٺاهيو ويندو آهي. معلومات (ان جي رياست) هن خاص نموني لاء مخصوص آهي. اسان اهو چئي سگهون ٿا ته ڪاريگر پڪ ڪئي ته اها معلومات ناقابل تبديلي هئي - اهو ممڪن ناهي ته ڪو به نقاشي کي هٽائڻ لاءِ سوچيندو. جاوا دنيا ۾، هڪ طبقو مستقبل جي شين جي حالت بيان ڪري ٿو فيلڊ استعمال ڪندي، ۽ انهن جي رويي کي طريقن سان بيان ڪيو ويو آهي. ڪنهن شئي جي حالت ۽ رويي تائين رسائي فيلڊ ۽ طريقن تي لاڳو ڪيل ترميمن کي استعمال ڪندي ڪنٽرول ڪيو ويندو آهي: نجي، محفوظ، عوامي، ۽ ڊفالٽ. مثال طور، اسان فيصلو ڪيو ته پيداوار جو سال، ٺاهيندڙ جو نالو، ۽ طريقن مان هڪ ڪلاس جي اندروني عمل درآمد جي تفصيل آهي ۽ پروگرام ۾ ٻين شين جي ذريعي تبديل نه ٿي ڪري سگھجي. ڪوڊ ۾، ڪلاس کي هن ريت بيان ڪري سگهجي ٿو:
public class SomePhone {

    private int year;
    private String company;
    public SomePhone(int year, String company) {
        this.year = year;
        this.company = company;
    }
private void openConnection(){
    // findSwitch
    // openNewConnection...
}
public void call() {
    openConnection();
    System.out.println("Calling");
}

public void ring() {
    System.out.println("Ring-ring");
}

 }
پرائيويٽ موڊيفائر کي اجازت ڏئي ٿو ڪلاس جي فيلڊز ۽ طريقن کي صرف هن ڪلاس جي اندر تائين رسائي. ان جو مطلب اهو آهي ته ٻاهران نجي شعبن تائين پهچڻ ناممڪن آهي، ڇاڪاڻ ته نجي طريقن کي سڏي نٿو سگهجي. اوپن ڪنيڪشن جي طريقي تائين رسائي کي محدود ڪرڻ پڻ اسان کي آزاديء سان طريقي جي اندروني عمل کي تبديل ڪرڻ جي صلاحيت سان ڇڏي ٿو، ڇاڪاڻ ته طريقو ٻين شين جي ڪم کي استعمال ڪرڻ يا مداخلت نه ڪرڻ جي ضمانت ڏني وئي آهي. اسان جي اعتراض سان ڪم ڪرڻ لاء، اسان عوامي موڊيفائر استعمال ڪندي ڪال ۽ انگوزي طريقن کي دستياب ڪري ڇڏيندا آهيون. شين سان ڪم ڪرڻ لاءِ عوامي طريقا مهيا ڪرڻ پڻ encapsulation جو حصو آهي، ڇاڪاڻ ته جيڪڏهن رسائي مڪمل طور تي رد ڪئي وئي هئي، اهو بيڪار ٿي ويندو.

وراثت

اچو ته فون جي ڊراگرام تي هڪ ٻيو نظر وٺو. توھان ڏسي سگھو ٿا ته اھو ھڪڙو درجو آھي جنھن ۾ ھڪڙي ماڊل ۾ ماڊل جون سڀئي خاصيتون آھن جيڪي پنھنجي شاخ سان مٿاھين واقع آھن، ۽ پنھنجي ڪجھھ کي شامل ڪري ٿو. مثال طور، هڪ اسمارٽ فون ڪميونيڪيشن لاءِ سيلولر نيٽ ورڪ استعمال ڪندو آهي (سيلولر فون جي ملڪيت آهي)، وائرليس ۽ پورٽيبل آهي (جنهن ۾ ڪوارڊ لیس فون جا خاصيتون آهن)، ۽ ڪال وصول ڪري سگهي ٿو ۽ ڪري سگهي ٿو (فون جي ملڪيت آهي). جيڪو اسان وٽ آهي اهو آهي وراثت جي ملڪيت جي ملڪيت. پروگرامنگ ۾، وراثت جو مطلب آهي موجوده طبقن کي استعمال ڪرڻ لاء نوان بيان ڪرڻ لاء. اچو ته هڪ اسمارٽ فون ڪلاس ٺاهڻ لاء وراثت استعمال ڪرڻ جو هڪ مثال سمجهيو. سڀ بي تار فون ريچارجبل بيٽرين سان هلائي رهيا آهن، جن جي بيٽري جي هڪ خاص زندگي آهي. ان جي مطابق، اسان هن ملڪيت کي بي تار فون ڪلاس ۾ شامل ڪيو:
public abstract class CordlessPhone extends AbstractPhone {

    private int hour;

    public CordlessPhone (int year, int hour) {
        super(year);
        this.hour = hour;
    }
    }
سيل فون هڪ بي تار فون جي ملڪيتن کي ورثي ۾ ملن ٿا، ۽ اسان هن طبقي ۾ ڪال ۽ رِنگ جا طريقا لاڳو ڪريون ٿا:
public class CellPhone extends CordlessPhone {
    public CellPhone(int year, int hour) {
        super(year, hour);
    }

    @Override
    public void call(int outgoingNumber) {
        System.out.println("Calling " + outgoingNumber);
    }

    @Override
    public void ring(int incomingNumber) {
        System.out.println("Incoming call from " + incomingNumber);
    }
}
۽ آخرڪار، اسان وٽ اسمارٽ فون ڪلاس آهي، جيڪو، کلاسک سيل فونن جي برعڪس، هڪ مڪمل آپريٽنگ سسٽم آهي. توهان پنهنجي اسمارٽ فون جي ڪارڪردگي کي وڌائي سگهو ٿا نوان پروگرام شامل ڪندي جيڪي ان جي آپريٽنگ سسٽم تي هلائي سگهن ٿيون. ڪوڊ ۾، ڪلاس کي هن ريت بيان ڪري سگهجي ٿو:
public class Smartphone extends CellPhone {

    private String operationSystem;

    public Smartphone(int year, int hour, String operationSystem) {
        super(year, hour);
        this.operationSystem = operationSystem;
    }
public void install(String program) {
    System.out.println("Installing " + program + " for " + operationSystem);
}

}
جئين توهان ڏسي سگهو ٿا، اسان سمارٽ فون ڪلاس کي بيان ڪرڻ لاء ڪافي نئون ڪوڊ ٺاهيو ، پر اسان کي نئين ڪارڪردگي سان نئين ڪلاس ملي. او او پي جو هي اصول اهو ممڪن بڻائي ٿو ته جاوا ڪوڊ جي گهربل مقدار کي گھٽائڻ، اهڙيء طرح پروگرامر لاء زندگي آسان بڻائي ٿي.

پوليمورفيزم

مختلف قسمن جي فونن جي ظاهر ۽ ڊزائن ۾ اختلافن جي باوجود، اسان ڪجهه عام رويي جي نشاندهي ڪري سگهون ٿا: اهي سڀئي وصول ڪري سگهن ٿا ۽ ڪال ڪري سگهن ٿا ۽ سڀني کي بلڪل صاف ۽ سادي ڪنٽرول آهي. پروگرامنگ جي لحاظ کان، تجريد جو اصول (جنهن سان اسان اڳ ۾ ئي واقف آهيون) اسان کي اهو چوڻ جي اجازت ڏئي ٿو ته فون شيون هڪ عام انٽرفيس آهي. ان ڪري ماڻهو آساني سان فونن جا مختلف ماڊل استعمال ڪري سگهن ٿا جن ۾ هڪجهڙا ڪنٽرول (مڪينيڪل بٽڻ يا ٽچ اسڪرين) آهن، بغير ڪنهن ڊوائيس جي ٽيڪنيڪل تفصيلن تي ڌيان ڏيڻ جي. ان ڪري، توهان مسلسل سيل فون استعمال ڪندا آهيو ۽ توهان آساني سان پنهنجي دوست جي لينڊ لائن تان ڪال ڪري سگهو ٿا. OOP جو اصول جنهن ۾ چيو ويو آهي ته هڪ پروگرام ڪنهن به شئي جي اندروني ڍانچي بابت ڄاڻ کان سواءِ هڪ عام انٽرفيس سان شيون استعمال ڪري سگهي ٿو ان کي پوليمورفيزم چئبو آهي. اچو ته تصور ڪريو ته اسان کي اسان جي پروگرام جي ضرورت آهي هڪ صارف کي بيان ڪرڻ لاء جيڪو ڪنهن ٻئي صارف کي ڪال ڪرڻ لاء ڪنهن به فون استعمال ڪري سگهي ٿو. هتي اسان اهو ڪيئن ڪري سگهون ٿا:
public class User {
    private String name;

    public User(String name) {
        this.name = name;
            }

    public void callAnotherUser(int number, AbstractPhone phone){
// And here's polymorphism: using the AbstractPhone type in the code!
        phone.call(number);
    }
}
 }
هاڻي اسان ڪيترن ئي قسمن جا فون بيان ڪنداسين. پهرين فونن مان هڪ:
public class ThomasEdisonPhone extends AbstractPhone {

public ThomasEdisonPhone(int year) {
    super(year);
}
    @Override
    public void call(int outgoingNumber) {
        System.out.println("Crank the handle");
        System.out.println("What number would you like to connect to?");
    }

    @Override
    public void ring(int incomingNumber) {
        System.out.println("The phone is ringing");
    }
}
هڪ عام لينڊ لائن فون:
public class Phone extends AbstractPhone {

    public Phone(int year) {
        super(year);
    }

    @Override
    public void call(int outgoingNumber) {
        System.out.println("Calling " + outgoingNumber);
    }

    @Override
    public void ring(int incomingNumber) {
        System.out.println("The phone is ringing");
    }
}
۽ آخرڪار، هڪ بهترين وڊيو فون:
public class VideoPhone extends AbstractPhone {

    public VideoPhone(int year) {
        super(year);
    }
    @Override
    public void call(int outgoingNumber) {
        System.out.println("Connecting video call to " + outgoingNumber);
    }
    @Override
    public void ring(int incomingNumber) {
        System.out.println("Incoming video call from " + incomingNumber);
    }
  }
اسان شيون ٺاهينداسين main() طريقي ۾ ۽ جانچ ڪنداسين callAnotherUser() طريقو:
AbstractPhone firstPhone = new ThomasEdisonPhone(1879);
AbstractPhone phone = new Phone(1984);
AbstractPhone videoPhone=new VideoPhone(2018);
User user = new User("Jason");
user.callAnotherUser(224466, firstPhone);
// Crank the handle
// What number would you like to connect to?
user.callAnotherUser(224466, phone);
// Calling 224466
user.callAnotherUser(224466, videoPhone);
// Connecting video call to 224466
استعمال ڪندڙ اعتراض تي ساڳيو طريقو سڏڻ مختلف نتيجا پيدا ڪري ٿو. ڪال جي طريقي جي هڪ مخصوص عمل کي متحرڪ طور تي چونڊيو ويو آهي callAnotherUser() طريقي جي اندر مخصوص قسم جي اعتراض جي بنياد تي جڏهن پروگرام هلي رهيو آهي. هي پوليمورفيزم جو بنيادي فائدو آهي - رن ٽائم تي عمل درآمد چونڊڻ جي صلاحيت. مٿي ڏنل فون ڪلاس جي مثالن ۾، اسان استعمال ڪيو طريقو اوور رائيڊنگ - هڪ چال جتي اسان طريقي جي دستخط کي تبديل ڪرڻ کان سواءِ بنيادي ڪلاس ۾ بيان ڪيل طريقي جي نفاذ کي تبديل ڪندا آهيون. اهو لازمي طور تي طريقي سان تبديل ڪري ٿو: نئين طريقي سان بيان ڪيل ذيلي ڪلاس ۾ سڏيو ويندو آهي جڏهن پروگرام تي عمل ڪيو ويندو آهي. عام طور تي، جڏهن اسان هڪ طريقي کي اوور رائيڊ ڪندا آهيون، @Override تشريح استعمال ڪئي ويندي آهي. اهو مرتب ڪندڙ کي ٻڌائي ٿو ته اوور رائڊ ٿيل ۽ اوور رائڊنگ طريقن جي نشانين کي چيڪ ڪريو. آخرڪار، پڪ ڪرڻ لاءِ ته توهان جا جاوا پروگرام OOP جي اصولن سان مطابقت رکن ٿا، انهن تجويزن تي عمل ڪريو:
  • هڪ اعتراض جي مکيه خاصيتن جي سڃاڻپ؛
  • عام ملڪيت ۽ رويي جي سڃاڻپ ڪريو ۽ ورثي کي استعمال ڪريو جڏهن ڪلاس ٺاهڻ؛
  • شيون بيان ڪرڻ لاءِ تجريدي قسم استعمال ڪريو؛
  • ڪلاس جي اندروني عمل سان لاڳاپيل طريقن ۽ شعبن کي هميشه لڪائڻ جي ڪوشش ڪريو.
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION