CodeGym /جاوا بلاگ /Random-UR /پرانا درجہ 02
John Squirrels
سطح
San Francisco

پرانا درجہ 02

گروپ میں شائع ہوا۔

کوڈ جیم - جاوا میں پروگرامنگ سیکھنا

اولڈ لیول 02 - 1پروگرامنگ کا مطالعہ کرنے اور تعلیم حاصل کرنے کے بالکل نئے طریقے کے بارے میں کیا خیال ہے؟ ایسا نہیں لگتا جو آپ نے پہلے دیکھا ہو۔ سیکھنے کے بارے میں کیا خیال ہے، جہاں آپ کا ایک مقصد، مطلب اور نتیجہ ہے؟ مجھے جاوا سیکھنے کے لیے آپ کو نئے آن لائن پروگرامنگ کورسز پیش کرتے ہوئے خوشی ہو رہی ہے۔

1 ٹریننگ ایک آن لائن گیم ہے۔

آپ ایک کام لیں، اس پر عمل کریں اور انعام حاصل کریں۔ میرے خیال میں یہ آپ کے لیے واضح اور عام ہے۔ کام سب سے مختلف ہیں: کوڈ پڑھنا، کاموں کو حل کرنا، ویڈیو اسباق، کوڈ میں غلطیوں کی اصلاح، نئی خصوصیات شامل کرنا، بڑے کام، گیمز لکھنا اور بہت کچھ۔

2 صرف ننگی ضروری چیزیں

کورس کے 5 سال تک نہ چلنے کے لیے، میں نے تمام مفید چیزیں پھینک دیں اور اس میں سے صرف انتہائی ضروری چیزیں چھوڑ دیں۔ میں نے لیبر مارکیٹ میں دسیوں خالی آسامیوں کا تجزیہ کیا۔ جاوا جونیئر ڈیولپر کی نوکری حاصل کرنے کے لیے نئے بچے کو جاننے کی ضرورت کے تمام موضوعات کورس میں شامل ہیں۔

3 میں نے آپ کی تربیت کو اچھی طرح سے دیکھا ہے۔

ایک مکمل کورس میں 500 منی لیکچرز اور 1200 (!) عملی کام ہوتے ہیں ۔ کام چھوٹے ہیں، لیکن وہ بے شمار ہیں۔ ان میں ایک بہت بڑا سودا ہے۔ بس اتنا ہی کم از کم، جو کرنے سے، آپ کو اتنا قیمتی تجربہ ملے گا۔ جوڑوں، مختلف کھیلوں، بڑے کاموں، حقیقی منصوبوں اور مشق کی دیگر اقسام میں بھی کام ہوتا ہے۔

4 آپ گیم ختم نہیں کر سکتے اور ڈویلپر نہیں بن سکتے

کورس 40 سطحوں پر مشتمل ہے۔ آپ اگلے درجے پر جا سکتے ہیں، صرف اس صورت میں جب آپ نے موجودہ سطح پر کاموں کا بڑا حصہ حل کر لیا ہو۔ چھوٹے اور آسان کے ساتھ شروع، بڑے اور بہت مفید کے ساتھ ختم. ہر شخص جو اختتام تک پہنچے گا اسے 300-500 گھنٹے کا عملی تجربہ ملے گا۔ اور یہ جیتنے کا بہترین موقع فراہم کرتا ہے۔ اور نوکری حاصل کرنے کے لیے۔

5 مقصد پر مبنی ملازمت کے انٹرویو کی تیاری

آخری 10 سطحیں ریزیومے لکھنے، انٹرویو کی تیاری اور ٹیم ورک کی مہارت حاصل کرنے کے لیے وقف ہیں۔ ملازمت کے انٹرویوز اور ان کے تجزیہ کی ویڈیوز شامل کی جائیں گی۔ ٹھیک ہے اور، یقینی طور پر، جوابات کے ساتھ انٹرویو پر عام سوالات۔ اولڈ لیول 02 - 2

6 آپ کاموں کو براہ راست سائٹ پر حل کر سکتے ہیں۔

یہ بہت کارآمد اور کارآمد ہے۔ ابھی لیکچر میں ایک نئے کام کا تجزیہ کرنے کے بعد، آپ کو سائٹ پر عین مطابق تشبیہ سے اپنا کام بنانا ہوگا۔ جو لوگ IDE میں ٹاسک کرنا چاہتے ہیں ان کے لیے ایک پلگ ان ہے جو آپ کو دو کلکس میں ایک ٹاسک وصول کرنے اور اسے ایک میں چیک کرنے کے لیے حوالے کرنے کے قابل بناتا ہے ۔ لیکچرز، مثالوں کا تجزیہ، ویب سائٹ پر براہ راست کاموں کو حل کرنا، IDE میں کاموں کو حل کرنا - تھیوری اور پریکٹس کے درمیان فرق اتنا کم ہے جتنا پہلے کبھی نہیں تھا۔

7 فوری ٹاسک چیک (سیکنڈ سے بھی کم وقت میں)

کیا آپ اس صورت حال سے واقف ہیں، جب آپ نے چیکنگ کے لیے کوئی کام/کام سونپا تھا، اور ایک ہفتے تک نتائج کا انتظار کرنا پڑا، کیونکہ اسے چیک کرنے والا مصروف ہے؟ زیادہ تر آف لائن کورسز کا یہی معاملہ ہے۔ CodeGym میں آپ کو ایک سیکنڈ سے بھی کم وقت میں اپنے ٹاسک سلوشن کو مرتب کرنے اور چیک کرنے کے نتائج مل جائیں گے، ایک «Execute/Check» بٹن دبانے کے بعد۔

8 CodeGym اسے پسند کرتا ہے، جب آپ مطالعہ کے دوران فیس بک پر وقت گزارتے ہیں۔

فیس بک پر اس منصوبے کے لیے ایک صفحہ مختص ہے۔ اس میں آپ کو دلچسپ تکنیکی مضامین، تحریکی کہانیاں، CodeGym کی خبریں اور بہت سی دوسری مفید معلومات مل سکتی ہیں۔

9 کوریج

لیکچرز میں مختلف ویب سائیٹس کے بہت سے حوالے ہوتے ہیں، جہاں آپ دوسرے لیکچررز کی وضاحتیں پڑھ سکتے ہیں۔ میرا مقصد یہ ہے کہ آپ مواد کو سمجھیں، صرف میری بات نہ سنیں۔

10 ڈویلپر بننے کے لیے آپ کو صرف اپنے دماغ اور کمپیوٹر کی ضرورت ہوگی۔

اس میں آپ کو 3 سے 6 مہینے لگیں گے، اس پر منحصر ہے کہ آپ کتنا وقت مشق کرتے ہیں۔

11 سپورٹ

اولڈ لیول 02 - 3بلا شبہ سوالات اٹھیں گے جب آپ کو ہزاروں کاموں کا سامنا کرنا پڑے گا۔ ہم نے ایک خصوصی سروس قائم کی ہے، جہاں آپ کاموں کے بارے میں سوالات پوچھ سکیں گے۔ کوڈ جیم کے دیگر طلباء، ماڈریٹرز، رضاکار اور سروس کے بانی ممبران آپ کو جواب دیں گے۔

12 کمیونٹی

ہمارا یقین ہے کہ طاقت اتحاد میں ہے۔ اس لیے ہم نے کمیونٹی بنائی، جہاں آپ سوالات پوچھ سکتے ہیں۔ مختلف موضوعات پر گفتگو کریں، مضامین اور بلاگ کا اشتراک کریں۔ اس کے علاوہ، ایک کمیونٹی واقفیت پر نوکری حاصل کرنے کے لیے ایک مثالی جگہ ہے۔ لہذا بلا جھجھک ہوشیار سوالات پوچھیں اور ہوشیار جوابات دیں۔ آپ جتنا زیادہ فعال برتاؤ کریں گے اور دوسروں کی مدد کریں گے، اتنے ہی زیادہ امکانات ہوں گے کہ ایسوسی ایشن کے دوسرے ممبر آپ کو ان کے پروجیکٹ میں شامل ہونے کا مشورہ دیں گے۔

آپ ایک نئی سطح پر پہنچ گئے ہیں۔

لیول 2

اولڈ لیول 02 - 4

1 ایلی، سب کی بنیاد

- ارے، امیگو. آج میں آپ کو بتانا چاہتا ہوں کہ جاوا کا ایک عام پروگرام کیسے بنایا جاتا ہے۔ بات یہ ہے کہ ہر جاوا پروگرام کلاسز اور اشیاء پر مشتمل ہوتا ہے ۔ - میں پہلے ہی جانتا ہوں کہ کلاسز کیا ہیں۔ اور اشیاء کیا ہیں؟ - ایک چھوٹے جہاز کی تعمیر سے مشابہت کے ساتھ، پہلے آپ کو ایک ڈرائنگ بنانے کی ضرورت ہے، اور پھر اسے شپ یارڈ کو دینا ہوگا۔ اس ڈرائنگ کی بنیاد پر ایک جہاز کو اسمبل کیا جائے گا۔ یا پانچ جہاز۔ درحقیقت، جتنے آپ چاہیں۔ ایک ہی ڈرائنگ کی بنیاد پر درجنوں ایک جیسے جہاز بنائے گئے ہیں، بس یہی بات ہے! - جاوا پروگرامنگ میں تمام چیزیں بالکل ایک جیسی ہیں۔ - پروگرامر ایک ڈیزائن انجینئر کی طرح ہے۔ اور اگر ڈیزائن انجینئر کو ڈرائنگ بنانا ہے تو جاوا پروگرامر کو کلاسیں لکھنی پڑتی ہیں۔ پھر، حصے ڈرائنگ کی بنیاد پر بنائے جاتے ہیں، اور اشیاء کو کلاسوں کی بنیاد پر بنایا جاتا ہے۔ - سب سے پہلے، ہم کلاسز لکھتے ہیں (ڈرائنگ کرتے ہیں)، اور بعد میں پروگرام کے رن ٹائم پر، جاوا ورچوئل مشین ان کلاسوں کا استعمال کرتے ہوئے اشیاء بناتی ہے۔ بالکل اسی طرح بحری جہاز بنتے ہیں۔ ایک ڈرائنگ اور بہت سارے جہاز ہیں۔ مختلف جہاز ہیں جن کے مختلف نام ہیں اور مختلف سامان لے جاتے ہیں۔ تاہم، وہ بہت زیادہ یکساں ہیں: ان سب کی ساخت ایک جیسی ہے اور وہ ایک جیسے کام انجام دے سکتے ہیں۔ - جہازوں کے معاملے میں، سب کچھ واضح ہے۔ مجھے یہ سمجھنے کے لیے کچھ اور موازنہ دیں کہ یہ سب کیا ہے؟ - ضرور. مثال کے طور پر، شہد کی مکھیاں … اولڈ لیول 02 - 5- اوہ نہیں، ایک لمحہ انتظار کرو، شہد کی مکھیاں مجھے کچھ برا یاد دلاتی ہیں۔ اینتھل کے بارے میں بہتر سوچیں۔ - ایک اینتھل آبجیکٹ کے تعامل کی ایک اچھی مثال ہے۔ سب سے آسان اینتھل میں، چیونٹیوں کی تین قسمیں ہیں: ایک ملکہ، سپاہی اور مزدور چیونٹی۔ ہر طبقے کے لیے چیونٹیوں کی تعداد میں فرق ہے۔ رانی گھونسلے میں اکیلی ہے۔ سینکڑوں سپاہی اور سینکڑوں کام کرنے والی چیونٹیاں ہیں۔ لہذا، ہم کہہ سکتے ہیں، تین کلاسز اور سینکڑوں اشیاء ہیں۔ چیونٹیاں ایک دوسرے سے بات چیت کرتی ہیں، ایک ہی چیونٹی اور دوسرے طبقے کی چیونٹیوں کے ساتھ سخت قوانین کے مطابق۔ - یہ ایک بہترین مثال ہے۔ ایک عام پروگرام کے لیے، یہ سب ایک جیسا ہے۔ ایک اہم چیز باقی تمام کلاسوں کی اشیاء بناتی ہے۔ اشیاء ایک دوسرے اور پروگرام کی "بیرونی دنیا" کے ساتھ تعامل شروع کرتی ہیں۔ آبجیکٹ کا برتاؤ ان کے اندر ہارڈ کوڈ ہے۔ - میں بالکل نہیں سمجھتا ہوں۔ بلکہ بالکل نہیں سمجھتے۔ - یہ دونوں وضاحتیں ایک ہی سکے کے مختلف رخ ہیں۔ حقیقت کہیں درمیان میں ہے۔ پہلی مثال (ڈرائنگ اور بحری جہاز کے ساتھ) کلاس اور اس کلاس کی اشیاء کے درمیان تعلق کو ظاہر کرتی ہے۔ مشابہت بہت قریب ہے۔ دوسری مثال (اینتھیل والی) تحریری کلاسوں اور رن ٹائم پر موجود اشیاء کے درمیان تعلق کو ظاہر کرتی ہے۔ - کیا آپ کا مطلب یہ ہے کہ پہلے ہمیں پروگرام میں موجود تمام اشیاء کے لیے کلاسز لکھنے کی ضرورت ہے اور اس سے بڑھ کر ان کے تعامل کو بیان کریں؟ - ہاں، لیکن یہ اس سے کہیں زیادہ آسان ہے۔ جاوا میں، پروگرام کے رن ٹائم میں تمام چیزیں آبجیکٹ ہوتی ہیں، اور جب آپ پروگرام لکھتے ہیں، تو آپ کو آبجیکٹ کے تعامل کے مختلف طریقوں کو بیان کرنا چاہیے۔ آبجیکٹ صرف ایک دوسرے کے طریقوں کو کال کرتے ہیں اور ضروری ڈیٹا ان تک پہنچاتے ہیں۔ - یہ واضح نہیں ہے، لیکن تقریبا واضح ہے. - لیکن آپ کو کیسے پتہ چلے گا کہ کن طریقوں کو کال کرنا ہے اور آپ کو کون سے ڈیٹا کو طریقوں کو منتقل کرنے کی ضرورت ہے؟ - ہر کلاس کی اس کی وضاحت ہوتی ہے کہ یہ بتانے کے لیے کہ کلاس کس لیے بنائی گئی تھی۔ ہر طریقہ میں اسی طرح اس کی وضاحت ہوتی ہے کہ وہ کیا کرتا ہے اور اسے کون سا ڈیٹا بھیجا جانا چاہیے۔ کلاس کو استعمال کرنے کے لیے، آپ کو عام طور پر یہ جاننا ہوگا کہ یہ کیا کرتا ہے۔ اس کے علاوہ، آپ کو یہ جاننے کی ضرورت ہے کہ اس کلاس کا ہر طریقہ کیا کرتا ہے۔ لیکن آپ کو یہ جاننے کی ضرورت نہیں ہے کہ یہ کیسے ہوتا ہے ۔ یہ ایک طرح کا جادو ہے. - ہمف. ایسا لگتا ہے۔   - یہاں، ایک کلاس کوڈ پر ایک نظر ڈالیں جو فائل کو کاپی کرتا ہے: اولڈ لیول 02 - 6- یہ اتنا آسان نہیں ہے، لیکن مجھے پہلے ہی تصویر مل گئی ہے۔ - ٹھیک. بعد میں ملتے ہیں، مگرمچھ!

2 ریشہ، متغیرات اور قدیم اقسام

- ارے آپ، مفت مزدوری. - میرا مطلب ہے، "ہیلو، امیگو"۔ میں آپ کو متغیرات کی اندرونی ساخت سے واقف کرانا چاہتا ہوں۔ آپ پہلے ہی جانتے ہیں کہ ہر متغیر کے ساتھ میموری کا ایک ٹکڑا منسلک ہوتا ہے، جہاں متغیر اپنی قدر کو محفوظ کرتا ہے۔ - ہاں. آپ نے پچھلی بار بتایا تھا۔ - ٹھیک. یہ اچھی بات ہے کہ آپ اسے یاد کرتے ہیں۔ پھر میں جاری رکھوں گا۔ - کلاسز _ جب ہم کسی پروگرام میں ایک نئی کلاس کی وضاحت کرتے ہیں، تو اس کا مطلب ہے کہ ہم ایک نئی پیچیدہ کمپاؤنڈ قسم کا اعلان کرتے ہیں ، جو ڈیٹا یا تو دوسری پیچیدہ اقسام یا قدیم اقسام کا ہوگا۔ اولڈ لیول 02 - 7- یہ اب بھی ایک حیرت کے لئے واضح ہے. - چونکہ بڑی (پیچیدہ) اقسام بہت سے چھوٹے (آدمی) پر مشتمل ہوتی ہیں، اس لیے ان کی اشیاء بہت زیادہ میموری استعمال کرتی ہیں۔ معمول کے قدیم قسم کے متغیرات سے زیادہ کرتے ہیں۔ کبھی کبھی بہت زیادہ۔ پیچیدہ قسم کے متغیرات کی تفویض میں زیادہ وقت لگتا ہے اور بڑی مقدار میں میموری کو کاپی کرنے کی ضرورت ہوتی ہے۔ یہی وجہ ہے کہ پیچیدہ قسم کے متغیرات خود آبجیکٹ کو نہیں بلکہ محض ایک آبجیکٹ حوالہ (جو کہ چار بائٹ ایڈریس ہے) کو اسٹور کرتے ہیں۔ یہ آبجیکٹ ڈیٹا تک رسائی کے لیے کافی ہے۔ JVM اس سے متعلق تمام مشکلات کا مقابلہ کرتا ہے۔ - مجھے سمجھ نہیں آتی۔ - ہم پہلے ہی بحث کر چکے ہیں کہ متغیر ایک باکس کی طرح ہے۔ اس میں 13 کو ذخیرہ کرنے کے لیے، آپ کاغذ کی شیٹ پر نمبر لکھ کر ایک باکس میں رکھ سکتے ہیں۔ - اب تصور کریں کہ آپ کو ایک باکس (متغیر) میں کچھ تھوڑا بڑا ذخیرہ کرنا ہے۔ مثال کے طور پر، ایک کتا، ایک کار، یا آپ کا پڑوسی جو۔ اس طرح آسان بنانے کے لیے آپ ایک آسان کام کر سکتے ہیں: کتے کے بجائے کتے کی تصویر، کار کی جگہ کار کی نمبر پلیٹ، اور جو کا فون نمبر کاغذ کی شیٹ پر جو کی بجائے خود لکھیں۔ - اب ہم کاغذ کا ایک ٹکڑا لیتے ہیں اور اس پر جو کا فون نمبر لکھتے ہیں۔ یہ ایک آبجیکٹ کے حوالے کی طرح ہے۔ اگر ہم باکس سے ایک شیٹ نکالیں جس پر جو کا نمبر لکھا ہوا ہو، کاپیاں بنائیں اور ایک دو خانوں میں ڈال دیں، جو کے حوالے بڑھ جائیں گے، لیکن صرف ایک جو ہو سکتا ہے۔ - اس طرح کے ڈیٹا اسٹوریج کا فائدہ یہ ہے کہ بہت سے حوالہ جات اور صرف ایک چیز ہوسکتی ہے ۔ - یہ دلچسپ ہے. ویسے میں تقریباً سمجھ گیا تھا۔ صرف ایک اور سوال کا جواب دیں: اگر میں ایک پیچیدہ قسم کے متغیر کو دوسرے پیچیدہ قسم کے متغیر کو تفویض کرتا ہوں تو کیا ہوگا؟ - پھر یہ دونوں متغیرات ایک ہی ایڈریس پر مشتمل ہوں گے۔ اور، اس لیے، اگر آپ ایک پیچیدہ قسم کے متغیر میں ذخیرہ شدہ ڈیٹا کو تبدیل کرتے ہیں، تو دوسرے کا ڈیٹا بھی تبدیل ہو جائے گا ۔ کیونکہ آپ جانتے ہیں ، واقعی میں صرف ایک چیز ہے جس کا متغیر ذخیرہ حوالہ دیتا ہے۔ اس کے باوجود، بہت سارے متغیرات ہوسکتے ہیں جو آبجیکٹ کے حوالہ جات کو محفوظ کرتے ہیں۔ - اور پیچیدہ قسم کے متغیرات (حوالہ/کلاس قسم) میں کیا ذخیرہ کیا جاتا ہے جب کہ کوئی آبجیکٹ حوالہ نہیں ہے؟ کیا واقعی ایسی کوئی چیز ہو سکتی ہے؟ - جی ہاں، امیگو. تم نے میرے منہ سے الفاظ نکال لیے ہیں۔ ایسا ہو سکتا ہے۔ اگر حوالہ (پیچیدہ) قسم کے متغیر میں کوئی آبجیکٹ حوالہ نہیں ہے، تو یہ null کو محفوظ کرتا ہے ، ایک خاص «null reference»۔ درحقیقت، یہ صرف 0 کے برابر کسی آبجیکٹ کا ایڈریس اسٹور کرتا ہے۔ لیکن جاوا ورچوئل مشین کبھی بھی صفر ایڈریس کے ساتھ آبجیکٹ نہیں بناتی، اس لیے یہ ہمیشہ جانتا ہے کہ اگر حوالہ متغیر 0 ہے، تو وہاں کوئی آبجیکٹ نہیں ہے۔ اولڈ لیول 02 - 8کیا میں اسے ٹھیک سمجھتا ہوں؟ متغیرات کو دو اقسام میں تقسیم کیا گیا ہے - قدیم اور حوالہ۔ ایک قدیم قسم کا متغیر ایک قدر کو ذخیرہ کرتا ہے جبکہ ایک حوالہ قسم کا متغیر کسی آبجیکٹ کا حوالہ محفوظ کرتا ہے۔ قدیم قسمیں int، char، boolean، اور کچھ اور ہیں۔ باقی حوالہ متغیر ہیں، وہ کلاسز کا استعمال کرتے ہوئے بنائے گئے ہیں۔ - یہ ٹھیک ہے، لڑکے.

3 ایلی، کیا چیزیں ہیں؟

اولڈ لیول 02 - 9- یہاں آپ کا پسندیدہ استاد دوبارہ ہے۔ چونکہ ہم تیزی سے آگے بڑھتے ہیں، میں آپ کو بتاؤں گا کہ اشیاء کیا ہیں اور ان سے کیسے نمٹا جاتا ہے۔ - کسی بھی چیز کو بنانے کے لیے، آپ کو اس سے پہلے آبجیکٹ کی قسم کا نام (کلاس) اور کلیدی لفظ نیا لکھنا ہوگا۔ کہتے ہیں کہ ہمارے پاس ایک کلاس کیٹ ہے، پھر: اولڈ لیول 02 - 10- کیا ہوتا ہے اگر آپ صرف ایک آبجیکٹ بناتے ہیں اور اسے [اس کا حوالہ] کسی متغیر کو تفویض نہیں کرتے ہیں؟ - اگر آپ ایسا کرتے ہیں، تو جاوا ورچوئل مشین اس چیز کو بنائے گی اور اسے فوراً ردی کی ٹوکری (غیر استعمال شدہ چیز) قرار دے گی۔ تھوڑی دیر کے بعد، یہ کوڑا اٹھانے کے دوران اس چیز کو حذف کر دے گا۔ - اگر مجھے اس کی مزید ضرورت نہیں ہے تو میں اسے کیسے تباہ کرسکتا ہوں؟ - تم نہیں کر سکتے. جیسے ہی کسی آبجیکٹ کے حوالہ کو ذخیرہ کرنے کے لیے کوئی متغیر نہیں ہوگا، آبجیکٹ کو کوڑے کے طور پر جھنڈا لگایا جائے گا اور JVM اسے اگلی کچرا جمع کرنے کے دوران تباہ کر دے گا۔ جب تک کم از کم ایک آبجیکٹ کا حوالہ ہے، اسے لائیو سمجھا جائے گا اور اسے تباہ نہیں کیا جائے گا۔ جب آپ آبجیکٹ کو تیزی سے تباہ کرنا چاہتے ہیں تو اس کے تمام حوالوں کو null پر سیٹ کریں، یعنی ان تمام ویری ایبلز کو ایک null ویلیو تفویض کریں جو اس آبجیکٹ کا حوالہ دیتے ہیں۔ - یہ مل گیا. پچھلے لیکچرز کے بعد یہ بالکل مشکل نہیں لگتا۔ - ٹھیک ہے، پھر یہاں آپ کے لیے اپنی صلاحیتوں کو بہتر بنانے کے لیے چند کام ہیں۔ یہ System.out پر بھی ہیں۔ لیکن بعد میں مزید مشکل ہونے والی ہے۔ اور آپ ہمیں دکھا سکتے ہیں کہ آپ کس سٹیل سے بنے ہیں۔
کام
1 ایک پروگرام لکھیں جو دکھاتا ہے: "قدم بہ قدم اور کام ہو گیا"۔
2 ایک پروگرام لکھیں جو 7 بار دکھاتا ہے: "ناممکن کو کرنا ایک طرح کا مزہ ہے۔"
3 ایک پروگرام لکھیں جو دکھاتا ہے: "ہمیشہ کچھ مفید سیکھنے کی خواہش"۔

4 ریشہ، متغیرات کی مرئیت۔

- ہیلو، میرا پسندیدہ طالب علم. اب میں آپ کو متغیرات کی مرئیت کے بارے میں بتاؤں گا ۔ - کیوں، کیا پوشیدہ متغیرات بھی ہیں؟ - نہیں، متغیرات کوڈ کی جگہوں پر نظر آتے ہیں جہاں اس متغیر تک رسائی حاصل کی جا سکتی ہے۔ کچھ متغیر تک کسی پروگرام میں کہیں سے بھی رسائی حاصل کی جا سکتی ہے، دوسرے صرف ان کی کلاس میں، اور کچھ متغیرات تک صرف ایک طریقہ کے اندر رسائی حاصل کی جا سکتی ہے۔ - مثال کے طور پر، آپ متغیر کے اعلان سے پہلے اس کا حوالہ نہیں دے سکتے۔ - یہ بات واضح ہے. - یہاں کچھ مثالیں ہیں: اولڈ لیول 02 - 111 طریقہ میں اعلان کردہ ایک متغیر موجود ہے / اعلان کے آغاز سے طریقہ کے اختتام تک نظر آتا ہے۔ 2 ایک کوڈ بلاک میں اعلان کردہ ایک متغیر اس کوڈ بلاک کے آخر تک موجود ہے۔ 3 متغیرات - طریقہ کے دلائل - طریقہ کے دائرہ کار میں کہیں بھی موجود ہیں۔ 4 کلاس / آبجیکٹ متغیرات اپنے آبجیکٹ کی پوری زندگی کے دوران موجود رہتے ہیں۔ خصوصی رسائی میں ترمیم کرنے والے عوامی اور نجی اضافی طور پر اپنی مرئیت کو کنٹرول کرتے ہیں۔ 5 جامد کلاس متغیر پروگرام کے رن ٹائم پر موجود ہیں۔ رسائی میں ترمیم کرنے والے بھی ان کی مرئیت کا تعین کرتے ہیں۔ - مجھے تصاویر پسند ہیں، سب کچھ جگہ پر آتا ہے۔ - آپ کے لئے اچھا ہے، امیگو. ہمیشہ جانتا تھا کہ آپ ایک ہوشیار ساتھی ہیں۔ - میں آپ کو رسائی میں ترمیم کرنے والوں کے بارے میں بھی بتاؤں گا ۔ اتنا ڈرو مت، یہ راکٹ سائنس نہیں ہے۔ یہ پبلک اور پرائیویٹ الفاظ ہیں جو آپ دیکھتے ہیں۔ - میں خوفزدہ نہیں ہوں، یہاں بس سردی ہے۔ - ہاں یقینا. آپ اپنی کلاس میں طریقوں اور متغیرات کی رسائی (مرئیت) کو دوسری کلاسوں سے کنٹرول کر سکتے ہیں۔ ہر طریقہ یا متغیر کے لیے، آپ صرف ایک رسائی موڈیفائر کی وضاحت کر سکتے ہیں۔ 1 موڈیفائر پبلک ایک متغیر، طریقہ یا طبقے کو جس میں ترمیم کرنے والے عوام کے ساتھ پرچم لگایا گیا ہے پروگرام میں کہیں سے بھی رسائی حاصل کی جا سکتی ہے۔ یہ کھلے پن کی اعلیٰ ترین ڈگری ہے، بغیر کسی پابندی کے۔ 2 موڈیفائر پرائیویٹ ایک متغیر یا طریقہ جو ایک موڈیفائر پرائیویٹ کے ساتھ جھنڈا لگا ہوا ہے صرف اس کلاس سے رسائی حاصل کی جاسکتی ہے جہاں اس کا اعلان کیا گیا ہو۔ دیگر تمام کلاسوں کے لیے، ایک پرچم والا طریقہ یا متغیر پوشیدہ ہیں، گویا وہ موجود ہی نہیں ہیں۔ یہ بندش کی اعلیٰ ترین ڈگری ہے (صرف ایک ہی کلاس سے دکھائی دیتی ہے)۔ 3 موڈیفائر ڈیفالٹ اگر کوئی موڈیفائر کسی متغیر یا طریقہ کو فلیگ نہیں کرتا ہے، تو اسے موڈیفائر ڈیفالٹ سمجھا جاتا ہے۔ اس ترمیم کنندہ کے ساتھ متغیرات یا طریقے (یعنی کسی بھی طرح کے بغیر) پیکیج کی تمام کلاسوں کو نظر آتے ہیں جس میں ان کا اعلان کیا گیا ہے۔ صرف اسی پیکیج میں۔ اس موڈیفائر کو بعض اوقات پیکیج کہا جاتا ہے جس کا مطلب یہ ہے کہ متغیرات اور طریقوں تک رسائی پورے پیکج کے لیے ممکن ہے، جس کی کلاس وضاحتی ٹیب سے تعلق رکھتی ہے: اولڈ لیول 02 - 12

5 ڈیاگو، متغیرات کا ایک گروپ بنانے کے لیے کام

- ارے، دوست. اگر ضرورت ہو تو، میں آپ کے لیے معاہدے کی ایک کاپی رکھتا ہوں۔ وہ ڈرپوک سستے سکیٹ ریشا خوشی سے بے خبر ہے۔ آپ کو میرے معاہدے میں رقم کو دیکھنا چاہئے تھا۔ ہاہاہاہا - اچھا کیا، ڈیاگو. مجھے لگتا ہے کہ آپ مجھے حقیقی مفید چیزیں سکھاتے ہیں۔ - ضرور، امیگو۔ درد کے بغیر کوئی فائدہ نہیں۔ لیکن پھر بھی کوئی بغیر کسی فائدے کے درد سہتا ہے۔ - آئیے بہتر طور پر مطالعہ کی طرف ہاتھ پھیریں۔ اب میں آپ کو دکھاؤں گا کہ مختلف طریقوں سے متغیرات کا ایک گروپ کیسے بنایا جائے: اولڈ لیول 02 - 13- واہ، ڈیاگو! تم بہت ہوشیار ہو۔ - ہہ، ہہ! شکریہ، امیگو۔ - مجھے لگتا ہے کہ آپ نے پہلے ہی میرے کام چھوڑ دیے ہیں۔ تو ان میں سے کچھ یہ ہیں۔ وہ انسان، غیر ملکی ہماری روبو زندگی کے بارے میں کچھ نہیں جانتے۔ میرے سوا کون تمہیں یہ سکھائے گا؟
کام
1 ایک پروگرام لکھیں جو 3 بار دکھاتا ہے: "بہت سے لوگ صرف اس وجہ سے زندہ ہیں کہ انہیں گولی مارنا غیر قانونی ہے۔"
2 ایک پروگرام لکھیں جو دکھاتا ہے: "اگر میں آپ کی رائے چاہتا ہوں، میں آپ سے ضروری فارم پُر کرنے کو کہوں گا۔"
3 ایک پروگرام لکھیں جو 20 بار دکھاتا ہے: "میں نے جو کچھ کہا ہے اس میں سے زیادہ تر میں نے کبھی نہیں کہا۔"

6 ایلی، حوالہ سے گزرنا۔ حوالہ متغیرات

- ارے، امیگو، یہ میں دوبارہ ہوں، ایلی معذرت، میں ہمیشہ یہ کہتا ہوں، لیکن یہ 31 صدی میں زمین پر کام کرنے کا طریقہ ہے۔ میں آپ کو حوالہ متغیر کی خصوصیات اور فنکشنز (طریقوں) میں حوالہ جاتی دلائل کو منتقل کرنے کا طریقہ بتاؤں گا۔ - میں تیار ہوں. - ٹھیک ہے تو، حوالہ متغیر تمام اقسام کے متغیر ہیں سوائے قدیم کے۔ ان متغیرات میں صرف آبجیکٹ کا پتہ (آبجیکٹ ریفرنس) ہوتا ہے۔ - قدیم قسم کے متغیرات ایک قدر اور قسم کو ذخیرہ کرتے ہیں، اور کلاس متغیرات ایک ہی کلاس، اچھی یا کالعدم اشیاء کے حوالہ جات کو محفوظ کرتے ہیں۔ کیا میں ٹھیک ہوں؟ - بالکل۔ - تو، ایک حوالہ کیا ہے؟ - آبجیکٹ اور اس کا حوالہ جڑا ہوا ہے، ہم کہتے ہیں، جیسے آدمی اور اس کا فون نمبر۔ فون نمبر ایک آدمی نہیں ہے، لیکن اسے کسی آدمی سے کچھ مانگنے، رہنمائی کرنے یا حکم دینے کے لیے فون کرنے کے لیے استعمال کیا جا سکتا ہے۔ ایک حوالہ کسی چیز کے ساتھ تعامل کے لیے بھی استعمال ہوتا ہے۔ تمام اشیاء حوالہ جات کے ذریعے ایک دوسرے کے ساتھ تعامل کرتے ہیں۔ - یہ ایسے ہی ہے جیسے لوگ فون پر ایک دوسرے کے ساتھ بات چیت کرتے ہیں؟ - یہ ٹھیک ہے. جب آپ کسی قدیم چیز کو تفویض کرتے ہیں، تو اس کی قدر کاپی کی جاتی ہے (ڈپلیکیٹ)۔ جب آپ ایک حوالہ متغیر تفویض کرتے ہیں، تو صرف آبجیکٹ کا پتہ (فون نمبر) کاپی کیا جاتا ہے، نہ کہ خود آبجیکٹ۔ - ٹھیک ہے، میں سمجھ گیا. - ایک حوالہ ایک اور فائدہ پیش کرتا ہے: آپ کسی بھی طریقے سے آبجیکٹ کا حوالہ دے سکتے ہیں، اور یہ طریقہ اس کے طریقوں کو کال کرکے اور آبجیکٹ کے اندر موجود ڈیٹا تک رسائی حاصل کرکے اس کے حوالہ کا استعمال کرتے ہوئے ہمارے آبجیکٹ میں ترمیم (تبدیل) کرنے کے قابل ہوگا۔ - متغیرات a اور bاولڈ لیول 02 - 14 کی قدروں کو سویپ طریقہ کے اندر تبدیل کیا جاتا ہے ۔ جب آپ سویپ میتھڈ کو کال کرتے ہیں تو متغیرات a & b قدروں کی کاپیاں حاصل کرتے ہیں m & n ۔ لہذا، m & n متغیرات کی قدریں وہی رہتی ہیں جب آپ a & b کی قدروں کو تبدیل کرتے ہیں ۔ یہ دائیں کالم کے کوڈ میں واضح طور پر نظر آتا ہے۔ - سچ پوچھیں تو مجھے اس میں سے کچھ نہیں ملا۔ کیا میں کچھ اور مثالیں دے سکتا ہوں؟ - حوالہ کی قسم کے معاملے میں، آپ ایسا کر سکتے ہیں: - متغیرات a اور b کو بالترتیب ایما اور ایلس کے حوالے تفویض کیے گئے ہیں، a اور b کی قدریں ایما اور ایلس اشیاء میں تبدیل ہوتی ہیں۔ - تو دوسری کلاسوں میں بھی کلاسز کا اعلان کرنا ممکن ہے؟ زبردست! - باقی کے طور پر، یہ واضح نہیں ہے. - سب ایک ہی وقت میں نہیں۔ اولڈ لیول 02 - 15

7 ایلی، فنکشن کال، ریٹرن ویلیو

- ٹھیک ہے، پھر چلو گھومتے ہیں. ہم بات کریں گے کہ میتھڈ کال کیسے کام کرتی ہے، اور پھر آپ پچھلے لیکچر پر نظر ڈالنے کی دوبارہ کوشش کریں گے، ٹھیک ہے؟ - ڈیل! - ٹھیک ہے، پھر میں آپ کو فنکشن/میتھڈ کال اور واپس آنے والی اقدار کے بارے میں بتاؤں گا۔ - کمانڈز کو فنکشنز میں گروپ کیا جاتا ہے، لہذا آپ انہیں ایک ہی بلاک میں ایک پیچیدہ کمانڈ کے طور پر چلا سکتے ہیں۔ ایسا کرنے کے لیے، آپ کو فنکشن (طریقہ) کا نام لکھنا ہوگا اور پھر نام کے بعد قوسین میں اقدار اور پیرامیٹرز کی وضاحت کرنا ہوگی۔ اولڈ لیول 02 - 16- مندرجہ بالا مثال میں، ہم نے ایک فنکشن لکھا ہے جس میں 4 بار گزری ہوئی سٹرنگ کو دکھایا گیا ہے۔ پھر ہم نے لائن 6 میں فنکشن پرنٹ 4 کا نام دیا۔ - جب لائن 6 کے نفاذ کی بات آتی ہے، تو پروگرام لائن 9 پر جائے گا، اور s متغیر کو ایک قدر تفویض کی جائے گی "میں اسے منتقل کرنا چاہتا ہوں، اسے منتقل کریں۔" - پھر لائنیں 11-14 پر عمل کیا جائے گا، اور آخر میں، فنکشن مکمل ہو جائے گا اور پروگرام لائن 7 کے ساتھ جاری رہے گا۔ - Gotcha. - آپ فنکشن کو نہ صرف آرگیومینٹس (پیرامیٹر) پاس کر سکتے ہیں بلکہ فنکشن کے آپریشن کا نتیجہ (ویلیو) بھی واپس کر سکتے ہیں۔ یہ مطلوبہ الفاظ کی واپسی کا استعمال کرکے کیا جاتا ہے۔ یہ اس کی طرح لگتا ہے: اولڈ لیول 02 - 17- مجھے لگتا ہے کہ میں اسے پکڑ رہا ہوں۔ یہ بائیں اور دائیں طرف ایک ہی کوڈ ہے۔ بائیں طرف، یہ صرف ایک علیحدہ فنکشن کے طور پر پیش کیا گیا ہے۔ - فنکشن ایک قدر کا حساب لگاتا ہے اور اسے واپس کرنے والے کمانڈ کا استعمال کرتے ہوئے ان لوگوں تک پہنچاتا ہے۔ کم از کم مجھے ایسا لگتا ہے۔ - بنیادی طور پر، یہ سچ ہے. - اور باطل قسم کیا ہے؟ - کچھ فنکشنز صرف کچھ کرتے ہیں، لیکن کسی بھی قدر کا حساب نہیں لگاتے اور واپس نہیں کرتے، جیسا کہ ہمارا طریقہ مین ()۔ ان فنکشنز کے لیے یہ ایک خاص رزلٹ ٹائپ void (خالی قسم) بنایا گیا تھا۔ - اگر کوئی فنکشن کچھ واپس نہیں کرتا ہے تو ہم صرف کچھ بھی کیوں نہیں بتا سکتے؟ - ذرا سوچئے کہ ہر متغیر کا اعلان کیسے کیا جاتا ہے: قسم اور نام۔ ایک فنکشن کا اعلان قسم، نام اور قوسین کے ساتھ کیا جاتا ہے۔ قوسین کے بعد فنکشن کا نام ایک فنکشن کال ہے! - تو "خالی قسم" کے ساتھ آنا آسان تھا بجائے اس کے کہ فنکشنز کو دو قسموں میں تقسیم کریں جو قدر واپس کرتے ہیں اور قدر واپس نہیں کرتے؟ - بالکل! تم ایک تیز سوچنے والے ہو، میرے لڑکے۔ - اور میں خالی قسم کو کیسے واپس کر سکتا ہوں؟ - تم نہیں کر سکتے. یہاں یہ ہے کہ یہ کیسے کام کرتا ہے: جب JVM واپسی کی کمانڈ پر عمل کرتا ہے، تو یہ لفظ واپسی کے دائیں جانب اظہار کی قدر کا حساب لگاتا ہے، اس قدر کو ایک خاص میموری والے علاقے میں محفوظ کرتا ہے اور فوری طور پر فنکشن سے باہر نکل جاتا ہے ۔ یہ محفوظ شدہ قدر کو فنکشن کال کے نتیجے میں اس جگہ پر استعمال کرتا ہے جہاں فنکشن کو کال کیا گیا تھا۔ آپ اسے اوپر کی مثال میں دیکھ سکتے ہیں۔ - کیا آپ کا مطلب وہ جگہ ہے جہاں int m = min(a,b) m = m2 میں تبدیل ہوا ؟ - جی ہاں. فنکشن کال کے بعد ہر چیز کام کرتی رہتی ہے گویا فنکشن کے بجائے اس کا نتیجہ اسی جگہ لکھا جاتا ہے۔ اس جملے کو ایک بار پھر پڑھیں اور آخری مثال کے کوڈ کو دیکھیں۔ - یہ صرف آسان لگتا ہے، لیکن یہ حقیقت میں مشکل ہے. مجھے تھوڑا سا مل گیا ہے، بس۔ - کوئی بات نہیں. پہلی کوشش میں آپ صرف وہی سمجھ سکتے ہیں جو آپ پہلے سے جانتے ہیں۔ جتنا زیادہ آپ اپنے لیے ایک نئے علاقے میں داخل ہوں گے، اتنا ہی یہ غیر واضح ہے۔ اور نتیجہ اور بھی شاندار ہو گا۔ وقت گزرنے کے ساتھ ساتھ سب کچھ واضح ہو جاتا ہے۔ - ٹھیک ہے، اگر ایسا ہے، تو چلو جاری رکھیں.

8 ڈیاگو

- ارے، امیگو. یہاں آپ کے لیے کچھ کام ہیں۔ اب آپ System.out سے زیادہ کچھ کرنے کے قابل ہیں۔ اپنی طرف سے اچھا کرنا! مجھے آپ پر اعتبار ہے!
کام
1 کم از کم دو نمبر
ایک فنکشن لکھیں جو کم از کم دو نمبروں کی واپسی کرے۔
2 زیادہ سے زیادہ دو نمبر
ایک فنکشن لکھیں جو زیادہ سے زیادہ دو نمبروں کو لوٹاتا ہے۔
3 کم از کم تین نمبر
ایک فنکشن لکھیں جو کم از کم تین نمبروں کو لوٹائے۔
4 کم از کم چار نمبر
ایک فنکشن لکھیں جو کم از کم چار نمبروں کو لوٹائے۔
فنکشن min(a,b,c,d) کو فنکشن min(a,b) کا استعمال (کال) کرنا ہے
5 اسٹرنگ ڈپلیکیشن
ایک فنکشن لکھیں جو گزرے ہوئے اسٹرنگ سے تین گنا دکھائے۔ ہر سٹرنگ ایک نئی لائن پر ہونی چاہیے۔
6 ٹیکسٹ ڈسپلے
ایک فنکشن لکھیں جو پاس شدہ سٹرنگ (لفظ) کو ایک ہی لائن میں تین بار دکھاتا ہے۔
الفاظ کو ایک جگہ سے الگ کیا جانا چاہیے اور ایک میں ضم ہونے کی ضرورت نہیں ہے۔

9 ڈیاگو، مکمل کلاس کا نام

اولڈ لیول 02 - 18- ارے، امیگو، میں آپ کو مکمل کلاس کے ناموں کے بارے میں بتانا چاہتا ہوں۔ - آپ پہلے ہی جانتے ہیں کہ کلاسز پیکجز میں ہیں۔ لہذا، ایک مکمل کلاس کا نام ایک ایسا نام ہے جو پوائنٹس کے ذریعے الگ کیے گئے تمام پیکجوں کا احاطہ کرتا ہے، اور ایک کلاس کا نام۔ مثالیں: اولڈ لیول 02 - 19 - کلاس کو اپنے کوڈ میں استعمال کرنے کے لیے آپ کو اس کا پورا نام بتانا ہوگا۔ تاہم، آپ ایک مختصر نام استعمال کر سکتے ہیں - صرف کلاس کا نام۔ ایسا کرنے کے لیے آپ کو کلاس کا اعلان کرنے سے پہلے اس کلاس کا نام بتا کر امپورٹ کا لفظ شامل کرکے اس کلاس کو "درآمد" کرنا ہوگا۔ java.lang (String, Integer,...) پیکیج کی کلاسز بطور ڈیفالٹ درآمد کی جاتی ہیں۔ آپ کو ان کی وضاحت کرنے کی ضرورت نہیں ہے۔ مثال: اولڈ لیول 02 - 20- مختصر ناموں کے استعمال کی ایک مثال: اولڈ لیول 02 - 21- میں سمجھ گیا۔ - ٹھیک.

10 پروفیسر، کلاسز اور اشیاء کے بارے میں لیکچر

اولڈ لیول 02 - 22- ارے، امیگو. امید ہے آپ سب سمجھ گئے ہوں گے جو ایلی اور ریشا نے آپ کو آج بتایا ہے۔ محفوظ رہنے کے لیے، جیسا کہ میں نے وعدہ کیا تھا، یہاں مزید مواد کے لنکس ہیں: 1 میرے نوٹس 2 جاوا میں سوچنا۔ وہ شاندار کتاب جس کے بارے میں میں آپ کو پہلے ہی بتا چکا ہوں۔ اگر آپ اسے پڑھیں تو بہت اچھا ہوگا۔ - مجھے امید ہے کہ آپ اسے دیکھنے کے لیے وقت نکالیں گے۔ - آہم یقینا میں کروں گا!

11 جولیو

- ارے، امیگو! امید ہے کہ آپ کچھ مشکل اور تھکا دینے والے آرام کے لیے ہیں؟

تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION