JavaRush /جاوا بلاگ /Random-UR /جاوا میں انکیپسولیشن کے اصول

جاوا میں انکیپسولیشن کے اصول

گروپ میں شائع ہوا۔
ہیلو! آج کا لیکچر encapsulation کے لیے وقف ہو گا اور ہم اسے فوراً مثالوں سے شروع کریں گے :) آپ کے سامنے ایک مانوس سوڈا مشین ہے۔ میرا آپ سے ایک سوال ہے: یہ کیسے کام کرتا ہے؟ تفصیل سے جواب دینے کی کوشش کریں: شیشہ کہاں سے آتا ہے، اندر کا درجہ حرارت کیسے برقرار رہتا ہے، برف کہاں جمع ہوتی ہے، مشین کیسے سمجھتی ہے کہ کون سا شربت ڈالنا ہے، وغیرہ۔ غالباً، آپ کے پاس ان سوالات کے جوابات نہیں ہیں۔ ٹھیک ہے، شاید ہر کوئی ایسی مشینیں استعمال نہیں کرتا؛ وہ آج کل اتنی مقبول نہیں ہیں۔ آئیے ایک اور مثال دینے کی کوشش کرتے ہیں۔ کوئی ایسی چیز جسے آپ جانتے ہیں کہ آپ روزانہ کئی بار استعمال کرتے ہیں۔ اوہ، میرے پاس ایک خیال ہے! انکیپسولیشن کے اصول - 2 ہمیں بتائیں کہ گوگل سرچ انجن کیسے کام کرتا ہے ۔ یہ آپ کے درج کردہ الفاظ کی بنیاد پر معلومات کو کس طرح تلاش کرتا ہے؟ یہ نتائج سب سے اوپر کیوں ہیں اور دوسرے نہیں؟ اگرچہ آپ ہر روز گوگل استعمال کرتے ہیں، شاید آپ کو یہ معلوم نہیں ہوگا۔ لیکن یہ اہم نہیں ہے۔ سب کے بعد، آپ کو یہ جاننے کی ضرورت نہیں ہے. آپ یہ سوچے بغیر سرچ انجن میں سوالات درج کر سکتے ہیں کہ یہ بالکل کیسے کام کرتا ہے۔ آپ وینڈنگ مشین سے سوڈا خرید سکتے ہیں یہ جانے بغیر کہ یہ کیسے کام کرتا ہے۔ آپ اندرونی دہن کے انجن کے کام میں دلچسپی کے بغیر، اور طبیعیات کو بالکل جانے بغیر، یہاں تک کہ اسکول کی سطح پر بھی گاڑی چلا سکتے ہیں۔ یہ سب آبجیکٹ اورینٹڈ پروگرامنگ کے ایک بنیادی اصول کی بدولت ممکن ہوا ہے - encapsulation ۔ اس موضوع پر مختلف مضامین پڑھتے ہوئے، آپ کو شاید یہ حقیقت معلوم ہوئی کہ پروگرامنگ میں دو عام تصورات ہیں - encapsulation اور hiding ۔ اور لفظ "انکیپسولیشن" سے مصنفین کا مطلب ایک چیز یا دوسری چیز ہے (جیسا کہ یہ ہوتا ہے)۔ ہم دونوں شرائط کو توڑ دیں گے تاکہ آپ کو پوری طرح سمجھ آجائے۔ پروگرامنگ میں لفظ " انکیپسولیشن " کا اصل معنی ایک پیکج ("کیپسول") میں ڈیٹا اور اس ڈیٹا کے ساتھ کام کرنے کے طریقوں کا مجموعہ ہے۔ جاوا میں، کلاس ایک کیپسول پیکیج کے طور پر کام کرتی ہے ۔ ایک کلاس میں ڈیٹا (کلاس فیلڈز) اور اس ڈیٹا کے ساتھ کام کرنے کے طریقے دونوں ہوتے ہیں۔ Encapsulation کے اصول - 3 یہ آپ کو واضح لگتا ہے، لیکن دوسرے پروگرامنگ تصورات میں سب کچھ مختلف طریقے سے کام کرتا ہے۔ مثال کے طور پر، فنکشنل پروگرامنگ میں، ڈیٹا کو سختی سے اس پر ہونے والے آپریشنز سے الگ کیا جاتا ہے۔ OOP (آبجیکٹ پر مبنی پروگرامنگ) میں، پروگرام کیپسول کلاسز پر مشتمل ہوتے ہیں، جو اس کے ساتھ کام کرنے کے لیے ڈیٹا اور فنکشنز دونوں ہوتے ہیں۔ اب چھپنے کی بات کرتے ہیں ۔ یہ کیسے ہے کہ ہم ہر طرح کے پیچیدہ میکانزم کو یہ سمجھے بغیر استعمال کرتے ہیں کہ وہ کیسے کام کرتے ہیں اور ان کا کام کس پر مبنی ہے؟ یہ آسان ہے: ان کے تخلیق کاروں نے ایک سادہ اور صارف دوست انٹرفیس فراہم کیا ہے۔. سوڈا مشین پر، انٹرفیس پینل پر بٹن ہوتا ہے۔ ایک بٹن دبانے سے، آپ شیشے کا حجم منتخب کرتے ہیں۔ دوسرے کو دبانے سے، آپ شربت کا انتخاب کرتے ہیں۔ تیسرا برف شامل کرنے کا ذمہ دار ہے۔ اور آپ کو بس اتنا ہی کرنا ہے۔ اس سے کوئی فرق نہیں پڑتا کہ مشین کو اندر سے کس طرح ڈیزائن کیا گیا ہے۔ اہم بات یہ ہے کہ اسے اس طرح سے ڈیزائن کیا گیا ہے کہ سوڈا حاصل کرنے کے لیے صارف کو تین بٹن دبانے ہوں گے ۔ کار کے ساتھ بھی ایسا ہی ہے۔ اس سے کوئی فرق نہیں پڑتا کہ اس کے اندر کیا ہو رہا ہے۔ اہم بات یہ ہے کہ جب آپ دائیں پیڈل کو دباتے ہیں تو گاڑی آگے بڑھ جاتی ہے اور جب آپ بائیں پیڈل کو دباتے ہیں تو یہ سست ہوجاتی ہے ۔ یہ بالکل چھپانے کا جوہر ہے۔ پروگرام کے تمام "اندر" صارف سے پوشیدہ ہیں۔ اس کے لیے یہ معلومات ضرورت سے زیادہ اور غیر ضروری ہے۔ صارف کو حتمی نتیجہ کی ضرورت ہے، اندرونی عمل کی نہیں۔ آئیے ایک مثال کے طور پر کلاس کو دیکھتے ہیں Auto:
public class Auto {

   public void gas() {

       /*some complicated things are happening inside the car
       as a result of which it goes forward*/
   }

   public void brake() {

       /*some complicated things are happening inside the car
       as a result of which it slows down*/
   }

   public static void main(String[] args) {

       Auto auto = new Auto();

       // How everything looks to the user

       //pressed one pedal - went
       auto.gas();

       //pressed another pedal - braked
       auto.brake();
   }
}
جاوا پروگرام میں نفاذ کو چھپانے سے ایسا لگتا ہے۔ سب کچھ حقیقی زندگی کی طرح ہے: صارف کو ایک انٹرفیس (طریقے) فراہم کیا جاتا ہے۔ اگر اسے ایک کارروائی کرنے کے لیے پروگرام میں کار کی ضرورت ہے، تو اسے صرف مطلوبہ طریقہ کو کال کرنے کی ضرورت ہے۔ اور جو کچھ ان طریقوں کے اندر ہوتا ہے وہ غیر ضروری معلومات ہے، اہم بات یہ ہے کہ سب کچھ جیسا کہ ہونا چاہیے کام کرتا ہے۔ یہاں ہم نے نفاذ کو چھپانے کے بارے میں بات کی ۔ اس کے علاوہ جاوا میں ڈیٹا چھپانے کی سہولت بھی ہے ۔ ہم نے اس کے بارے میں گیٹرز اور سیٹٹرز کے بارے میں لیکچر میں لکھا تھا ، لیکن آپ کو یاد دلانے سے کوئی تکلیف نہیں ہوگی۔ مثال کے طور پر، ہمارے پاس ایک کلاس ہے Cat:
public class Cat {

   public String name;
   public int age;
   public int weight;

   public Cat(String name, int age, int weight) {
       this.name = name;
       this.age = age;
       this.weight = weight;
   }

   public Cat() {
   }

   public void sayMeow() {
       System.out.println("Meow!");
   }


}
شاید آپ کو پچھلے لیکچر سے یاد ہو کہ اس کلاس کا مسئلہ کیا ہے؟ اگر نہیں تو یاد رکھیں۔ مسئلہ یہ ہے کہ اس کا ڈیٹا (فیلڈز) سب کے لیے کھلا ہے، اور دوسرا پروگرامر پروگرام میں 0 کے وزن اور -1000 سال کی عمر کے ساتھ ایک بے نام بلی آسانی سے بنا سکتا ہے۔
public static void main(String[] args) {

   Cat cat = new Cat();
   cat.name = "";
   cat.age = -1000;
   cat.weight = 0;

}
ایسی صورت حال میں، آپ قریب سے نگرانی کر سکتے ہیں کہ آیا آپ کا کوئی ساتھی غلط حالت کے ساتھ اشیاء بنا رہا ہے، لیکن اس طرح کی "غلط اشیاء" بنانے کے امکان کو خارج کر دینا زیادہ بہتر ہوگا۔ Encapsulation کے اصول - 4 وہ ڈیٹا چھپانے میں ہماری مدد کرتے ہیں:
  1. ترمیم کرنے والوں تک رسائی ( نجی ، محفوظ ، پیکیج ڈیفالٹ
  2. حاصل کرنے والے اور سیٹ کرنے والے۔
وہاں ہم، مثال کے طور پر، چیک کر سکتے ہیں کہ آیا کوئی بلی کو اس کی عمر کے طور پر منفی نمبر تفویض کرنے کی کوشش کر رہا ہے۔ جیسا کہ ہم نے پہلے کہا، encapsulation پر مختلف مضامین کے مصنفین کا مطلب ہے یا تو encapsulation (ڈیٹا اور طریقوں کو یکجا کرنا)، یا چھپانا، یا دونوں۔ جاوا میں دونوں میکانزم ہیں (ضروری نہیں کہ دوسری OOP زبانوں میں ایسا ہو)، اس لیے بعد کا آپشن سب سے درست ہے۔ encapsulation کا استعمال ہمیں کئی اہم فوائد دیتا ہے:
  1. آبجیکٹ کی صحیح حالت کی نگرانی۔ اوپر اس کی مثالیں موجود تھیں: سیٹٹر اور پرائیویٹ موڈیفائر کی بدولت، ہم نے اپنے پروگرام کو بلیوں سے وزن 0 سے محفوظ کیا۔

  2. انٹرفیس کی وجہ سے صارف دوستی ہم صارف کی رسائی کے لیے صرف "باہر" طریقے چھوڑتے ہیں۔ نتیجہ حاصل کرنے کے لیے اسے صرف ان کو فون کرنے کی ضرورت ہے، اور اسے ان کے کام کی تفصیلات کو جاننے کی ضرورت نہیں ہے۔

  3. کوڈ میں تبدیلیاں صارفین کو متاثر نہیں کرتی ہیں۔ ہم طریقوں کے اندر تمام تبدیلیاں کرتے ہیں۔ اس سے صارف پر کوئی اثر نہیں پڑے گا: اس نے کار کی گیس کے لیے auto.gas() لکھا، تو وہ اسے لکھے گا۔ اور حقیقت یہ ہے کہ ہم نے گیس () طریقہ کار کے عمل میں کچھ تبدیل کیا ہے اس کے لئے پوشیدہ رہے گا: وہ، پہلے کی طرح، صرف مطلوبہ نتیجہ حاصل کرے گا.
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION