OOP اصول

گروپ میں شائع ہوا۔
جاوا ایک آبجیکٹ پر مبنی زبان ہے۔ اس کا مطلب یہ ہے کہ آپ کو آبجیکٹ پر مبنی انداز کا استعمال کرتے ہوئے جاوا پروگرام لکھنے کی ضرورت ہے۔ اور یہ انداز پروگرام میں اشیاء اور کلاسوں کے استعمال پر مبنی ہے۔

OOP کے بنیادی اصول:

OOP کے اصول - 1آئیے مثالوں کی مدد سے یہ سمجھنے کی کوشش کرتے ہیں کہ کلاسز اور اشیاء کیا ہیں، نیز OOP کے بنیادی اصولوں کو عملی طور پر کیسے لاگو کیا جائے: تجرید، وراثت، پولیمورفزم اور انکیپسولیشن۔

ایک اعتراض کیا ہے؟

ہم جس دنیا میں رہتے ہیں وہ اشیاء پر مشتمل ہے۔ اگر ہم اپنے اردگرد نظر دوڑائیں تو دیکھیں گے کہ ہم گھروں، درختوں، کاروں، فرنیچر، برتنوں، کمپیوٹروں سے گھرے ہوئے ہیں۔ یہ تمام اشیاء اشیاء ہیں، اور ان میں سے ہر ایک مخصوص خصوصیات، طرز عمل اور مقصد کا ایک مجموعہ ہے۔ ہم اشیاء کے عادی ہیں، اور ہم انہیں ہمیشہ خاص مقاصد کے لیے استعمال کرتے ہیں۔ مثال کے طور پر، اگر ہمیں کام پر جانے کی ضرورت ہے، ہم کار استعمال کرتے ہیں، اگر ہم کھانا چاہتے ہیں، ہم برتن استعمال کرتے ہیں، اور اگر ہمیں آرام کرنے کی ضرورت ہے، تو ہمیں آرام دہ صوفے کی ضرورت ہے۔ انسان روزمرہ کی زندگی میں مسائل کو حل کرنے کے لیے معروضی طور پر سوچنے کا عادی ہوتا ہے۔ یہ پروگرامنگ میں آبجیکٹ کے استعمال کی ایک وجہ تھی اور پروگرام بنانے کے اس انداز کو آبجیکٹ اورینٹڈ کہا جاتا تھا۔ آئیے ایک مثال دیتے ہیں۔ تصور کریں کہ آپ نے ایک نیا فون ماڈل تیار کیا ہے اور اس کی بڑے پیمانے پر پیداوار شروع کرنا چاہتے ہیں۔ فون ڈیزائنر کے طور پر، آپ جانتے ہیں کہ یہ کس چیز کے لیے ہے، یہ کیسے کام کرے گا، اور اس میں کن حصوں پر مشتمل ہوگا (کیس، مائیکروفون، اسپیکر، تاریں، بٹن وغیرہ)۔ تاہم، صرف آپ جانتے ہیں کہ ان حصوں کو کیسے جوڑنا ہے۔ تاہم، آپ ذاتی طور پر فون بنانے کا ارادہ نہیں رکھتے؛ اس کے لیے آپ کے پاس ملازمین کا پورا عملہ ہے۔ تاکہ آپ کو ہر بار یہ بتانے کی ضرورت نہ پڑے کہ فون کے پرزہ جات کو کیسے جوڑنا ہے، اور تاکہ پروڈکشن میں موجود تمام فونز ایک جیسے نکلیں، اس سے پہلے کہ آپ ان کی تیاری شروع کریں، آپ کو اس کی شکل میں ایک ڈرائنگ بنانے کی ضرورت ہوگی۔ فون کی ساخت کی تفصیل۔ OOP میں اس طرح کی تفصیل، ڈرائنگ، خاکہ یا ٹیمپلیٹ کو کلاس کہا جاتا ہے، جس سے پروگرام کے عمل میں آنے پر ایک آبجیکٹ بنتا ہے۔ کلاس ایک ایسی شے کی تفصیل ہے جو ابھی تک نہیں بنائی گئی ہے، جیسے فیلڈز، طریقوں اور کنسٹرکٹر پر مشتمل ایک عام ٹیمپلیٹ، اور ایک آبجیکٹ اس وضاحت کی بنیاد پر تخلیق کردہ کلاس کی ایک مثال ہے۔

OOP خلاصہ

آئیے اب اس بارے میں سوچتے ہیں کہ فون کو بطور مثال استعمال کرتے ہوئے ہم حقیقی دنیا میں کسی شے سے کسی پروگرام میں کسی شے کی طرف کیسے جا سکتے ہیں۔ مواصلات کے اس ذرائع کی تاریخ 100 سال سے زیادہ ہے اور جدید ٹیلی فون، 19ویں صدی کے اپنے پیشرو کے برعکس، ایک بہت زیادہ پیچیدہ آلہ ہے۔ جب ہم فون استعمال کرتے ہیں تو ہم اس کی ساخت اور اس کے اندر ہونے والے عمل کے بارے میں نہیں سوچتے۔ نمبر منتخب کرنے اور کال کرنے کے لیے ہم فون کے ڈویلپرز کے فراہم کردہ فنکشنز - بٹن یا ٹچ اسکرین کا استعمال کرتے ہیں۔ پہلے ٹیلی فون انٹرفیس میں سے ایک ایک نوب تھا جسے آپ نے کال کرنے کے لیے موڑ دیا۔ یقینا، یہ بہت آسان نہیں تھا. اس کے باوجود، ہینڈل نے اپنا کام ٹھیک طریقے سے انجام دیا۔ اگر آپ جدید ترین اور سب سے پہلے ٹیلی فون پر نظر ڈالیں تو آپ فوری طور پر ان اہم ترین تفصیلات کی نشاندہی کر سکتے ہیں جو 19ویں صدی کے اواخر اور ایک انتہائی جدید سمارٹ فون دونوں کے لیے اہم ہیں۔ یہ کال کر رہا ہے (ایک نمبر ڈائل کر رہا ہے) اور کال وصول کر رہا ہے۔ بنیادی طور پر، یہی وہ چیز ہے جو فون کو فون بناتی ہے نہ کہ کچھ اور۔ اب ہم نے OOP میں اصول کو لاگو کیا ہے - کسی چیز کے بارے میں سب سے اہم خصوصیات اور معلومات کو اجاگر کرنا۔ OOP کے اس اصول کو تجرید کہتے ہیں۔ OOP میں تجرید کو ایک پروگرام میں اشیاء کے طور پر حقیقی دنیا کے مسئلے کے عناصر کی نمائندگی کرنے کے طریقے کے طور پر بھی بیان کیا جا سکتا ہے۔ تجرید ہمیشہ اشیاء یا اشیاء کی خصوصیات کے بارے میں کچھ معلومات کو عام کرنے کے ساتھ منسلک ہوتا ہے، لہذا اہم بات یہ ہے کہ مسئلہ حل ہونے کے تناظر میں اہم معلومات کو غیر اہم معلومات سے الگ کیا جائے۔ اس صورت میں تجرید کی کئی سطحیں ہوسکتی ہیں۔ آئیے اپنے فون پر تجرید کے اصول کو لاگو کرنے کی کوشش کریں۔ سب سے پہلے، آئیے پہلے سے لے کر آج تک کے فونز کی سب سے عام اقسام کو اجاگر کرتے ہیں۔ مثال کے طور پر، انہیں شکل 1 میں دکھایا گیا خاکہ کی شکل میں پیش کیا جا سکتا ہے۔ OOP کے اصول - 2اب، تجرید کی مدد سے، ہم اشیاء کے اس درجہ بندی میں عمومی معلومات کو نمایاں کر سکتے ہیں: اشیاء کی ایک عام تجریدی قسم - ٹیلی فون، ایک عمومی خصوصیت فون - اس کی تخلیق کا سال، اور ایک مشترکہ انٹرفیس - تمام فون کالز وصول کرنے اور بھیجنے کے قابل ہیں۔ یہ جاوا میں ایسا لگتا ہے:
public abstract class AbstractPhone {
    private int year;

    public AbstractPhone(int year) {
        this.year = year;
    }
    public abstract void call(int outputNumber);
    public abstract void ring (int inputNumber);
}
اس خلاصہ کلاس کی بنیاد پر، ہم دیگر بنیادی Java OOP اصولوں کو استعمال کرتے ہوئے پروگرام میں فون کی نئی قسمیں بنانے کے قابل ہو جائیں گے، جن پر ہم ذیل میں غور کریں گے۔

انکیپسولیشن

تجرید کی مدد سے، ہم اس بات کو نمایاں کرتے ہیں جو تمام اشیاء میں مشترک ہے۔ تاہم، ہر فون ماڈل انفرادی ہے اور دوسروں سے کچھ مختلف ہے۔ ہم پروگرام میں حدود کو کیسے کھینچ سکتے ہیں اور اس انفرادیت کو کیسے نامزد کر سکتے ہیں؟ ہم یہ کیسے یقینی بنا سکتے ہیں کہ صارفین میں سے کوئی بھی غلطی سے یا جان بوجھ کر ہمارے فون کو توڑ نہیں سکتا، یا ایک ماڈل کو دوسرے میں تبدیل کرنے کی کوشش نہیں کر سکتا؟ حقیقی اشیاء کی دنیا کے لیے، جواب واضح ہے: آپ کو فون کے تمام حصوں کو باڈی میں ڈالنے کی ضرورت ہے۔ بہر حال، اگر ہم ایسا نہیں کرتے ہیں اور فون کے تمام اندرونی حصوں اور ان کو جوڑنے والی تاروں کو باہر چھوڑ دیتے ہیں، تو یقینی طور پر کوئی متجسس تجربہ کار ہوگا جو ہمارے فون کے آپریشن کو "بہتر" کرنا چاہے گا۔ کسی چیز کے ڈیزائن اور آپریشن میں اس طرح کی مداخلت سے بچنے کے لیے، OOP encapsulation کے اصول کا استعمال کرتا ہے - OOP کا ایک اور بنیادی اصول، جس میں کسی شے کی صفات اور رویے کو ایک کلاس میں ملایا جاتا ہے، اس چیز کا اندرونی نفاذ پوشیدہ ہوتا ہے۔ صارف، اور آبجیکٹ کے ساتھ کام کرنے کے لیے ایک کھلا انٹرفیس فراہم کیا جاتا ہے۔ پروگرامر کا کام اس بات کا تعین کرنا ہے کہ کون سے صفات اور طریقے عوامی طور پر قابل رسائی ہوں گے اور کون سے اعتراض کے اندرونی نفاذ ہیں اور ان میں ترمیم نہیں کی جانی چاہیے۔

انکیپسولیشن اور ایکسیس کنٹرول

یوں کہتے ہیں کہ پروڈکشن کے دوران فون کی پشت پر اس کے بارے میں معلومات کندہ ہوتی ہیں: اس کی تیاری کا سال یا مینوفیکچرر کمپنی کا لوگو۔ یہ معلومات خاص طور پر اس ماڈل کی خصوصیت رکھتی ہے - اس کی حالت۔ ہم کہہ سکتے ہیں کہ فون کے ڈویلپر نے اس معلومات کی تبدیلی کا خیال رکھا - اس بات کا امکان نہیں ہے کہ کوئی بھی کندہ کاری کو ہٹانے کے بارے میں سوچے گا۔ جاوا کی دنیا میں، مستقبل کی اشیاء کی حالت کو فیلڈز کا استعمال کرتے ہوئے کلاس میں بیان کیا جاتا ہے، اور طریقوں کا استعمال کرتے ہوئے ان کے رویے کو بیان کیا جاتا ہے۔ حالت اور رویے کو تبدیل کرنے کی صلاحیت فیلڈز اور طریقوں تک رسائی میں ترمیم کرنے والوں کا استعمال کرتے ہوئے انجام دی جاتی ہے - private, protected, publicاور default(پہلے سے طے شدہ رسائی)۔ مثال کے طور پر، ہم نے فیصلہ کیا ہے کہ تخلیق کا سال، فون بنانے والے کا نام، اور طریقوں میں سے ایک کا تعلق کلاس کے اندرونی نفاذ سے ہے اور پروگرام میں موجود دیگر اشیاء کے ذریعے اسے تبدیل نہیں کیا جا سکتا۔ کوڈ کا استعمال کرتے ہوئے، کلاس کو اس طرح بیان کیا جا سکتا ہے:
public class SomePhone {

    private int year;
    private String company;
    public SomePhone(int year, String company) {
        this.year = year;
        this.company = company;
    }
private void openConnection(){
    //findComutator
    //openNewConnection...
}
public void call() {
    openConnection();
    System.out.println("I'm calling a number");
}

public void ring() {
    System.out.println("Дзынь-дзынь");
}

 }
ایک ترمیم کنندہ privateکسی کلاس کے فیلڈز اور طریقوں کو صرف اسی کلاس میں دستیاب کرتا ہے۔ اس کا مطلب ہے کہ privateباہر سے فیلڈز تک رسائی حاصل نہیں کی جا سکتی اور نہ ہی privateطریقوں کو بلایا جا سکتا ہے۔ کسی طریقہ تک رسائی کو چھپانے سے openConnectionہمیں اس طریقہ کار کے اندرونی نفاذ کو آزادانہ طور پر تبدیل کرنے کا موقع بھی مل جاتا ہے، کیونکہ یہ طریقہ اس بات کی ضمانت ہے کہ دیگر اشیاء کے استعمال نہیں کیے جائیں گے اور ان کے کام میں خلل نہیں پڑے گا۔ اپنے اعتراض کے ساتھ کام کرنے کے لیے، ہم موڈیفائر callکا استعمال کرتے ہوئے طریقوں کو کھلا چھوڑ دیتے ہیں ۔ کسی شے کے ساتھ کام کرنے کے لیے عوامی طریقے فراہم کرنا بھی encapsulation کے طریقہ کار کا حصہ ہے، کیونکہ اگر کسی چیز تک رسائی مکمل طور پر انکار کر دی جائے تو وہ بیکار ہو جائے گی۔ringpublic

وراثت

آئیے فون چارٹ کو دوبارہ دیکھتے ہیں۔ آپ دیکھ سکتے ہیں کہ یہ ایک درجہ بندی کی نمائندگی کرتا ہے جس میں نیچے واقع ماڈل میں برانچ پر اونچی جگہ پر واقع ماڈلز کی تمام خصوصیات ہیں، نیز اس کی اپنی۔ مثال کے طور پر، ایک سمارٹ فون مواصلت کے لیے سیلولر نیٹ ورک کا استعمال کرتا ہے (جس میں سیل فون کی خصوصیات ہیں)، وائرلیس اور پورٹیبل ہے (اس میں کورڈ لیس فون کی خصوصیات ہیں)، اور کال وصول اور کر سکتے ہیں (ٹیلی فون کی خصوصیات ہیں)۔ اس صورت میں، ہم آبجیکٹ کی خصوصیات کی وراثت کے بارے میں بات کر سکتے ہیں۔ پروگرامنگ میں، وراثت نئی کلاسوں کی وضاحت کے لیے موجودہ کلاسوں کا استعمال ہے۔ آئیے وراثت کا استعمال کرتے ہوئے اسمارٹ فون کلاس بنانے کی ایک مثال دیکھیں۔ تمام کورڈ لیس فونز ریچارج ایبل بیٹریوں سے چلتے ہیں، جو گھنٹوں میں ایک مخصوص آپریٹنگ لائف رکھتے ہیں۔ تو آئیے اس پراپرٹی کو وائرلیس فونز کی کلاس میں شامل کریں:
public abstract class WirelessPhone extends AbstractPhone {

    private int hour;

    public WirelessPhone(int year, int hour) {
        super(year);
        this.hour = hour;
    }
    }
سیل فونز وائرلیس فون کی خصوصیات کو وراثت میں حاصل کرتے ہیں، ہم نے اس کلاس میں عمل درآمد callاور طریقوں کو بھی شامل کیا ring:
public class CellPhone extends WirelessPhone {
    public CellPhone(int year, int hour) {
        super(year, hour);
    }

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

    @Override
    public void ring(int inputNumber) {
        System.out.println("A subscriber is calling you" + inputNumber);
    }
}
اور آخر میں، اسمارٹ فون کلاس، جو کلاسک سیل فونز کے برعکس، ایک مکمل آپریٹنگ سسٹم رکھتا ہے۔ آپ اپنے سمارٹ فون میں اس آپریٹنگ سسٹم کے تعاون سے نئے پروگرامز شامل کر سکتے ہیں، اس طرح اس کی فعالیت کو بڑھایا جا سکتا ہے۔ کوڈ کا استعمال کرتے ہوئے، کلاس کو اس طرح بیان کیا جا سکتا ہے:
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);
}

}
جیسا کہ آپ دیکھ سکتے ہیں، Smartphoneہم نے کلاس کو بیان کرنے کے لیے بہت کم نیا کوڈ بنایا، لیکن ہمیں نئی ​​فعالیت کے ساتھ ایک نئی کلاس ملی۔ OOP وراثت کے اصول کا استعمال کوڈ کی مقدار کو نمایاں طور پر کم کر سکتا ہے، اور اس وجہ سے پروگرامر کے کام کو آسان بنا سکتا ہے۔

پولیمورفزم

اگر ہم فون کے تمام ماڈلز پر نظر ڈالیں، تو ماڈلز کی ظاہری شکل اور ڈیزائن میں فرق کے باوجود، ہم ان میں کچھ عام رویے کی نشاندہی کر سکتے ہیں - وہ سبھی وصول کر سکتے ہیں اور کال کر سکتے ہیں اور کنٹرول بٹن کا کافی واضح اور سادہ سیٹ رکھتے ہیں۔ OOP کے بنیادی اصولوں میں سے ایک کو لاگو کرتے ہوئے، جو ہمیں پہلے سے معلوم ہے، پروگرامنگ کی اصطلاحات میں خلاصہ، ہم کہہ سکتے ہیں کہ فون آبجیکٹ کا ایک مشترکہ انٹرفیس ہے۔ لہذا، فون استعمال کرنے والے آلہ کی تکنیکی تفصیلات میں جانے کے بغیر، ایک ہی کنٹرول بٹن (مکینیکل یا ٹچ) کا استعمال کرتے ہوئے مختلف ماڈلز کو کافی آرام سے استعمال کر سکتے ہیں۔ لہذا، آپ مسلسل سیل فون استعمال کرتے ہیں، اور آپ اس کے لینڈ لائن ہم منصب سے آسانی سے کال کر سکتے ہیں۔ OOP میں اصول جب کوئی پروگرام ایک ہی انٹرفیس کے ساتھ آبجیکٹ کی اندرونی ساخت کے بارے میں معلومات کے بغیر استعمال کر سکتا ہے اسے پولیمورفزم کہا جاتا ہے ۔ آئیے تصور کریں کہ ہمارے پروگرام میں ہمیں ایک ایسے صارف کی وضاحت کرنے کی ضرورت ہے جو کسی دوسرے صارف کو کال کرنے کے لیے کسی بھی فون ماڈل کا استعمال کر سکتا ہے۔ اسے کرنے کا طریقہ یہاں ہے:
public class User {
    private String name;

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

    public void callAnotherUser(int number, AbstractPhone phone){
// here it is polymorphism - using the abstract type AbstractPhone phone in the code!
        phone.call(number);
    }
}
 }
اب آئیے فون کے مختلف ماڈلز کی وضاحت کرتے ہیں۔ فون کے پہلے ماڈلز میں سے ایک:
public class ThomasEdisonPhone extends AbstractPhone {

public ThomasEdisonPhone(int year) {
    super(year);
}
    @Override
    public void call(int outputNumber) {
        System.out.println("Turn the Handle");
        System.out.println("Give me the phone number, sir");
    }

    @Override
    public void ring(int inputNumber) {
        System.out.println("Phone calls");
    }
}
باقاعدہ لینڈ لائن فون:
public class Phone extends AbstractPhone {

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

    @Override
    public void call(int outputNumber) {
        System.out.println("I'm calling a number" + outputNumber);
    }

    @Override
    public void ring(int inputNumber) {
        System.out.println("Phone calls");
    }
}
اور آخر میں، ایک ٹھنڈا ویڈیو فون:
public class VideoPhone extends AbstractPhone {

    public VideoPhone(int year) {
        super(year);
    }
    @Override
    public void call(int outputNumber) {
        System.out.println("I connect a video channel for the subscriber" + outputNumber );
    }
    @Override
    public void ring(int inputNumber) {
        System.out.println("You have an incoming video call..." + inputNumber);
    }
  }
آئیے طریقہ میں اشیاء بنائیں main()اور طریقہ کی جانچ کریں callAnotherUser:
AbstractPhone firstPhone = new ThomasEdisonPhone(1879);
AbstractPhone phone = new Phone(1984);
AbstractPhone videoPhone=new VideoPhone(2018);
User user = new User("Andrey");
user.callAnotherUser(224466,firstPhone);
// Rotate the knob
// Tell me the number of the subscriber, sir
user.callAnotherUser(224466,phone);
//Call number 224466
user.callAnotherUser(224466,videoPhone);
//I connect the video channel for subscriber 224466
آبجیکٹ پر ایک ہی طریقہ کو کال کرنے سے user، ہمیں مختلف نتائج ملے۔ callایک طریقہ کے اندر ایک مخصوص طریقہ کے نفاذ کا انتخاب callAnotherUserپروگرام کے عمل کے دوران کالنگ آبجیکٹ کی مخصوص قسم کی بنیاد پر متحرک طور پر کیا گیا تھا۔ یہ پولیمورفزم کا بنیادی فائدہ ہے - پروگرام پر عمل درآمد کے دوران عمل درآمد کا انتخاب۔ مندرجہ بالا فون کلاس کی مثالوں میں، ہم نے میتھڈ اوور رائیڈنگ کا استعمال کیا، ایک ایسی تکنیک جو طریقہ کار کے دستخط کو تبدیل کیے بغیر بیس کلاس میں بیان کردہ طریقہ کار کو تبدیل کرتی ہے۔ یہ بنیادی طور پر ایک طریقہ کا متبادل ہے، اور یہ سب کلاس میں بیان کردہ نیا طریقہ ہے جسے پروگرام کے چلنے پر کہا جاتا ہے۔ عام طور پر، کسی طریقہ کو اوور رائیڈ کرتے وقت، تشریح استعمال کی جاتی ہے @Override، جو مرتب کرنے والے کو بتاتی ہے کہ اوور رائیڈ اور اوور رائیڈنگ طریقوں کے دستخط چیک کرے۔ نتیجے کے طور پر ، اس بات کو یقینی بنانے کے لیے کہ آپ کے پروگرام کا انداز OOP کے تصور اور OOP java کے اصولوں کے مطابق ہے، ان تجاویز پر عمل کریں:
  • آبجیکٹ کی اہم خصوصیات کو نمایاں کریں؛
  • عام خصوصیات اور رویے کو نمایاں کریں اور اشیاء بناتے وقت وراثت کا استعمال کریں؛
  • اشیاء کو بیان کرنے کے لیے تجریدی اقسام کا استعمال کریں؛
  • کلاس کے اندرونی نفاذ سے متعلق طریقوں اور فیلڈز کو ہمیشہ چھپانے کی کوشش کریں۔
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION