CodeGym /جاوا بلاگ /Random-UR /جاوا ڈویلپر کی پوزیشن کے لیے نوکری کے انٹرویو سے سوالات ا...
John Squirrels
سطح
San Francisco

جاوا ڈویلپر کی پوزیشن کے لیے نوکری کے انٹرویو سے سوالات اور جوابات تلاش کرنا۔ حصہ 2

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

11. آبجیکٹ کلاس کے تمام طریقوں کو نام دیں۔

آبجیکٹ کلاس کے 11 طریقے ہیں:
  1. کلاس<?> getClass() - موجودہ آبجیکٹ کی کلاس حاصل کریں۔

  2. int hashCode() - موجودہ آبجیکٹ کا ہیش کوڈ حاصل کریں۔

  3. boolean equals(Object obj) — موجودہ آبجیکٹ کا کسی اور شے سے موازنہ کریں۔

  4. آبجیکٹ کلون () — موجودہ آبجیکٹ کی ایک کاپی بنائیں اور واپس کریں۔

  5. String toString() - آبجیکٹ کی سٹرنگ کی نمائندگی حاصل کریں۔

  6. void notify() — اس آبجیکٹ کے مانیٹر پر انتظار کرنے والے ایک تھریڈ کو جگائیں (تھریڈ کا انتخاب بے ترتیب ہے)؛

  7. void notifyAll() — اس آبجیکٹ کے مانیٹر پر منتظر تمام دھاگوں کو اٹھائیں۔

  8. void wait() — موجودہ دھاگے کو موجودہ مانیٹر پر انتظار کریں (موجودہ تھریڈ کو منجمد کریں) جب تک کہ کوئی اطلاع یا مطلع تمام کال تھریڈ کو بیدار نہ کر دے (صرف مطابقت پذیر بلاک میں کام کرتا ہے)؛

  9. باطل انتظار (طویل وقت ختم) — موجودہ دھاگے کو موجودہ مانیٹر پر انتظار کریں (موجودہ مطابقت پذیر بلاک پر)، لیکن انتظار کی حالت سے باہر نکلنے کے لیے ایک ٹائم آؤٹ کے ساتھ (یا دوبارہ، جب تک کہ کوئی اطلاع یا مطلع تمام کال تھریڈ کو بیدار نہ کر دے)؛

  10. باطل انتظار (طویل وقت ختم، int nanos) - یہ طریقہ پچھلے طریقہ کی طرح ہے، لیکن زیادہ درست ٹائم آؤٹ کے ساتھ؛

  11. void finalize() — کوڑا اٹھانے والے کے ذریعہ آبجیکٹ کو ہٹانے سے پہلے اس طریقہ کو (آخر میں) کہا جاتا ہے۔ اس کا استعمال حاصل شدہ وسائل کو صاف کرنے کے لیے کیا جاتا ہے۔

hashCode , equals , clone , toString کو استعمال کرنے اور طریقوں کو درست طریقے سے حتمی شکل دینے کے لیے ، ان کو موجودہ ٹاسک کی تفصیلات کے مطابق اوور رائیڈ کیا جانا چاہیے۔

12. وسائل کے ساتھ کام کرتے وقت وسائل کے ساتھ کوشش کرنے اور آخر میں کوشش کرنے کے درمیان کیا فرق ہے؟

عام طور پر، try-catch-finally استعمال کرتے وقت ، حتمی بلاک وسائل کو بند کرنے کے لیے استعمال کیا جاتا ہے۔ جاوا 7 نئے وسائل کے ساتھ کوشش کرنے کا بیان متعارف کرایا ہے۔ وسائل کو آزاد کرنے کے لیے آخر میں کوشش کرنے کے مترادف ہے، لیکن زیادہ کمپیکٹ اور پڑھنے کے قابل۔ آئیے یاد کرتے ہیں کہ ٹرائی کیچ آخر میں کیسا لگتا ہے:
String text = "some text......";
BufferedWriter bufferedWriter = null;
try {
   bufferedWriter = new BufferedWriter(new FileWriter("someFileName"));
   bufferedWriter.write(text);
} catch (IOException e) {
   e.printStackTrace();
} finally {
   try {
       bufferedWriter.close();
   } catch (IOException e) {
       e.printStackTrace();
   }
}
اب آئیے اس کوڈ کو دوبارہ لکھتے ہیں، لیکن وسائل کے ساتھ کوشش کریں :
String text = "some text......";
try(BufferedWriter bufferedWriter =new BufferedWriter(new FileWriter("someFileName"))) {
   bufferedWriter.write(text);
} catch (IOException e) {
   e.printStackTrace();
}
اب یہ کسی حد تک آسان ہے، کیا آپ نہیں سوچتے؟ آسان کوڈ کے علاوہ، نوٹ کرنے کے لیے کچھ اور نکات ہیں:
  1. وسائل کے ساتھ کوشش کرنے میں ، قوسین میں بیان کردہ وسائل (وسائل جو بند ہو جائیں گے) کو لازمی طور پر AutoCloseable انٹرفیس اور اس کے واحد close() طریقہ کو لاگو کرنا چاہیے۔

    کلوز میتھڈ کو ایک مضمر آخر میں بلاک میں عمل میں لایا جاتا ہے ، بصورت دیگر، پروگرام یہ کیسے سمجھے گا کہ وسائل کو کیسے بند کیا جائے؟

    لیکن آپ شاذ و نادر ہی وسائل کے اپنے نفاذ اور ان کے اختتامی طریقہ کو لکھیں گے۔

  2. بلاکس کو اس ترتیب میں انجام دیا جاتا ہے:

    1. کوشش بلاک .
    2. مضمر آخر میں بلاک.
    3. کیچ بلاک، جو مستثنیات کو پکڑتا ہے جو پچھلے مراحل میں پائے جاتے ہیں ۔
    4. واضح آخر میں بلاک.

    ایک اصول کے طور پر، فہرست میں نیچے ڈالی گئی مستثنیات اوپر ڈالے جانے والوں کو روکتی ہیں۔

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

13. بٹ وائز آپریشنز کیا ہیں؟

بٹ وائز آپریشنز بٹس کی ترتیب پر ہونے والے آپریشن ہیں۔ ان میں منطقی آپریشنز اور بٹ وائز شفٹ شامل ہیں۔ منطقی آپریٹرز:
  • bitwise AND — بٹ ویلیوز کا موازنہ کرتا ہے۔ 0 (غلط) پر سیٹ کوئی بھی بٹ نتیجہ میں متعلقہ بٹ کو 0 پر سیٹ کرتا ہے۔ یعنی، اگر ایک بٹ دونوں موازنہ شدہ قدروں میں 1 (سچ) ہے، تو نتیجہ میں آنے والا بٹ بھی 1 ہوگا۔

    AND یا & کے بطور بیان کیا گیا

    مثال: 10111101 اور 01100111 = 00100101

  • bitwise OR — یہ آپریشن پچھلے کے برعکس ہے۔ 1 پر سیٹ کوئی بھی بٹ نتیجہ میں متعلقہ بٹ کو 1 پر سیٹ کرتا ہے۔

    بطور OR یا |

    مثال: 10100101 | 01100011 = 11100111

  • bitwise NOT - یہ آپریٹر ایک واحد قدر پر لاگو ہوتا ہے۔ یہ بٹس کو پلٹتا ہے (الٹا)۔ یعنی جو بٹس 1 تھے وہ 0 بن جاتے ہیں۔ اور جو 0 تھے وہ 1 بن جاتے ہیں۔

    NOT یا ~ کے طور پر بیان کیا گیا ہے۔

    مثال: ~10100101 = 01011010

  • bitwise exclusive OR — بٹ ویلیوز کا موازنہ کرتا ہے۔ اگر دونوں بٹس 1 ہیں، تو نتیجے میں آنے والا بٹ 0 ہے۔ اگر دونوں بٹس 0 ہیں، تو نتیجے میں آنے والا بٹ 0 ہے۔ دوسرے لفظوں میں، نتیجے میں آنے والا بٹ 1 ہونے کے لیے، صرف ایک بٹ کا 1 ہونا ضروری ہے، اور دوسرا بٹ 0 ہونا چاہیے۔

    XOR یا ^ کے طور پر بیان کیا گیا ہے۔

    مثال: 10100101 ^ 01100011 = 11000110

بٹ وائز شفٹز ( >> اور << ) آپرینڈ کے بٹس کو مخصوص سمت میں، جگہوں کی مخصوص تعداد کے حساب سے شفٹ کرتے ہیں۔ خالی جگہیں صفر سے بھری ہوئی ہیں۔ مثال کے طور پر:
  1. 01100011 >> 4 = 00000110
  2. 01100011 << 3 = 00011000
مستثنیٰ تب ہے جب آپ منفی نمبر کو دائیں طرف شفٹ کرتے ہیں۔ جیسا کہ آپ کو یاد ہوگا، دستخط شدہ نمبر کا پہلا بٹ نشانی کی نشاندہی کرتا ہے۔ اگر یہ بٹ 1 ہے، تو نمبر منفی ہے۔ اگر آپ منفی نمبر کو شفٹ کرتے ہیں تو خالی جگہیں صفر سے نہیں بھری جاتی ہیں، بلکہ ان سے بھری جاتی ہیں، کیونکہ سائن بٹ کو محفوظ رکھنا ضروری ہے۔ مثال کے طور پر: 10100010 >> 2 = 11101000 اس نے کہا، جاوا میں ایک اضافی غیر دستخط شدہ رائٹ شفٹ آپریٹر (>>>) ہے۔ یہ آپریٹر >> سے مشابہ ہے، لیکن جب شفٹ کیا جاتا ہے، خالی جگہیں 0 سے بھر جاتی ہیں، قطع نظر اس سے کہ آپرینڈ منفی نمبر ہے یا مثبت نمبر۔ مثال کے طور پر: 10100010 >>> 2 = 00101000 بٹ وائز آپریشنز کے بارے میں یہاں مزید پڑھیں ۔ آپ جاوا میں بٹ وائز شفٹ کی مثال کے طور پر HashMaps میں hash()جاوا ڈویلپر کی پوزیشن کے لیے نوکری کے انٹرویو سے سوالات اور جوابات تلاش کرنا۔  حصہ 2 - 2 طریقہ لے سکتے ہیں ۔ یہ طریقہ کلید کے خصوصی اندرونی ہیش کوڈ کا تعین کرنے کے لیے استعمال کیا جاتا ہے: یہ طریقہ آپ کو تصادم کی تعداد کو کم کرنے کے لیے، HashMap میں ڈیٹا کو یکساں طور پر تقسیم کرنے دیتا ہے۔ جاوا ڈویلپر کی پوزیشن کے لیے نوکری کے انٹرویو سے سوالات اور جوابات تلاش کرنا۔  حصہ 2 - 3

14. جاوا میں کون سے معیاری غیر تبدیل شدہ اشیاء ہیں؟

اگر کوئی چیز اپنی اصل اقدار کو تبدیل نہیں ہونے دیتی ہے تو وہ ناقابل تغیر ہے ۔ اس میں ایسے طریقے ہوسکتے ہیں جو ایک ہی قسم کی نئی اشیاء کو مختلف قدروں کے ساتھ واپس کرتے ہیں۔ کچھ معیاری ناقابل تغیر اشیاء میں شامل ہیں:
  • بلاشبہ، جاوا کی سب سے مشہور ناقابل تغیر قسم String ہے۔
  • ریپر کلاسز کی مثالیں جو معیاری اقسام کو لپیٹتی ہیں: بولین، کریکٹر، بائٹ، شارٹ، انٹیجر، لانگ، ڈبل، فلوٹ؛
  • BigInteger اور BigDecimal آبجیکٹ، جو عام طور پر خاص طور پر BIG نمبروں کے لیے استعمال ہوتے ہیں۔
  • StackTraceElement اشیاء جو اسٹیک ٹریس بناتے ہیں (مثال کے طور پر، کسی استثناء کا اسٹیک ٹریس)؛
  • فائل کلاس کا ایک آبجیکٹ - یہ فائلوں میں ترمیم کرسکتا ہے، لیکن ایک ہی وقت میں آبجیکٹ خود میں کوئی تبدیلی نہیں رکھتا ہے۔
  • UUIDs، جو اکثر عناصر کی منفرد شناخت کے لیے استعمال ہوتے ہیں۔
  • java.time پیکیج میں کلاسز کی تمام اشیاء؛
  • مقامی اشیاء، جو جغرافیائی، سیاسی، یا ثقافتی خطے کی شناخت کے لیے استعمال ہوتی ہیں۔

15. عام اشیاء کے مقابلے میں ناقابل تغیر آبجیکٹ کے کیا فوائد ہیں؟

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

  2. ناقابل تغیر اشیاء نقشے میں چابیاں کی طرح اچھی ہیں۔ اگر آپ ایک تبدیل شدہ آبجیکٹ کو HashMap کلید کے طور پر استعمال کرتے ہیں اور پھر آبجیکٹ کی حالت بدل جاتی ہے، تو ڈیٹا کا ڈھانچہ الجھن میں پڑ سکتا ہے: آبجیکٹ اب بھی موجود رہے گا، لیکن اگر آپ containsKey() استعمال کرتے ہیں تو شاید آپ کو یہ نہ ملے۔

  3. ناقابل تغیر اشیاء ناقابل تغیر (مسلسل) ڈیٹا کو ذخیرہ کرنے کے لیے بہترین ہیں جنہیں پروگرام کے چلنے کے دوران کبھی تبدیل نہیں کیا جانا چاہیے۔

  4. ایک اور فائدہ ناکامی جوہری ہے۔ اگر کوئی ناقابل تغیر شے مستثنیٰ ہے تو اسے ناپسندیدہ (ٹوٹی ہوئی) حالت میں نہیں چھوڑا جائے گا۔

  5. ان کلاسوں کی جانچ کرنا آسان ہے۔

  6. آپ کو کسی اضافی میکانزم کی ضرورت نہیں ہے جیسے کاپی کنسٹرکٹر یا آبجیکٹ کلوننگ کا نفاذ۔

OOP کے بارے میں سوالات

16. عمومی طور پر اور طریقہ کار کے پروگرامنگ کے مقابلے میں OOP کے کیا فوائد ہیں؟

ٹھیک ہے، OOP کے فوائد:
  1. پیچیدہ ایپلی کیشنز کو طریقہ کار پروگرامنگ کے مقابلے میں OOP کا استعمال کرتے ہوئے لکھنا آسان ہے کیونکہ ہر چیز کو چھوٹے ماڈیولز میں تقسیم کیا جاتا ہے — وہ اشیاء جو ایک دوسرے کے ساتھ تعامل کرتے ہیں — اور اس کے نتیجے میں، پروگرامنگ اشیاء کے درمیان تعلقات تک کم ہو جاتی ہے۔

  2. OOP کے ساتھ لکھی گئی ایپلیکیشنز میں ترمیم کرنا بہت آسان ہے (جب ڈیزائن کے اصولوں کا صحیح طور پر مشاہدہ کیا جاتا ہے)۔

  3. چونکہ ڈیٹا اور ڈیٹا آپریشنز دونوں ایک ہی ہستی کی تشکیل کرتے ہیں، اس لیے ان کو پوری ایپلی کیشن پر نہیں لگایا جاتا (جو کہ اکثر طریقہ کار پروگرامنگ میں ہوتا ہے)۔

  4. انکیپسولیشن کا اصول صارف کے انتہائی اہم ڈیٹا کی حفاظت کرتا ہے۔

  5. ایک ہی کوڈ کو مختلف ڈیٹا کے ساتھ دوبارہ استعمال کیا جا سکتا ہے کیونکہ کلاسز آپ کو بہت سی اشیاء بنانے دیتی ہیں، ہر ایک کی اپنی اقدار کے ساتھ۔

  6. وراثت اور پولیمورفزم بھی آپ کو موجودہ کوڈ کو دوبارہ استعمال کرنے اور توسیع دینے دیتا ہے (اسی طرح کی فعالیت کو نقل کرنے کے بجائے)۔

  7. کسی درخواست کو بڑھانا طریقہ کار کے مقابلے میں آسان ہے۔

  8. OOP نقطہ نظر عمل درآمد کی تفصیلات کو ختم کرنا ممکن بناتا ہے۔

17. ہمیں بتائیں کہ OOP کے کیا نقصانات ہیں۔

بدقسمتی سے، وہ بھی موجود ہیں:
  1. OOP کو بہت سارے نظریاتی علم کی ضرورت ہوتی ہے جس میں مہارت حاصل کرنا ضروری ہے اس سے پہلے کہ آپ کچھ بھی لکھ سکیں۔

  2. OOP خیالات کو سمجھنا اور عملی طور پر لاگو کرنا اتنا آسان نہیں ہے (آپ کو دل سے تھوڑا فلسفی بننے کی ضرورت ہے)۔

  3. نظام کی بڑھتی ہوئی پیچیدگی کی وجہ سے OOP پروگرام کی کارکردگی کو قدرے کم کرتا ہے۔

  4. OOP اپروچ کے لیے زیادہ میموری کی ضرورت ہوتی ہے کیونکہ ہر چیز کلاسز، انٹرفیس، طریقوں پر مشتمل ہوتی ہے، جو عام متغیرات سے کہیں زیادہ میموری لیتے ہیں۔

  5. ابتدائی تجزیہ کے لیے درکار وقت ایک طریقہ کار سے زیادہ ہے۔

18. جامد پولیمورفزم بمقابلہ متحرک پولیمورفزم کیا ہے؟

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

19. OOP میں تجرید کے اصول کی تعریف فراہم کریں۔

OOP میں، تجرید کسی چیز کی معنی خیز خصوصیات کے سیٹ کو الگ کرنے کا ایک طریقہ ہے، جبکہ معمولی تفصیلات کو چھوڑ کر۔ یعنی، OOP اپروچ کے ساتھ کسی پروگرام کو ڈیزائن کرتے وقت، آپ ان کے نفاذ کی تفصیلات میں جانے کے بغیر، عام ماڈلز پر توجہ مرکوز کرتے ہیں۔ جاوا میں، تجرید کو انٹرفیس کے ذریعے محسوس کیا جاتا ہے ۔ مثال کے طور پر، آپ کے پاس کار ہے اور وہ ایک انٹرفیس ہوگا۔ اور اس کے ساتھ مختلف تعاملات — مثال کے طور پر، انجن کو شروع کرنا، گیئرز کو شفٹ کرنا — وہ فنکشنز ہیں، جنہیں ہم نفاذ کی تفصیلات میں کھوج لگائے بغیر استعمال کرتے ہیں۔ درحقیقت، جب آپ گاڑی چلا رہے ہوتے ہیں، تو آپ یہ نہیں سوچتے کہ گیئر باکس اپنے مقصد کو کیسے پورا کرتا ہے، یا کلید انجن کو کیسے شروع کرتی ہے، یا اسٹیئرنگ وہیل کس طرح پہیوں کو گھماتا ہے۔ اور اگر آپ کچھ فعالیت (مثال کے طور پر، انجن) کے نفاذ کو تبدیل کرتے ہیں، تو ہو سکتا ہے آپ کو اس پر توجہ بھی نہ ہو۔ اس سے آپ کو کوئی فرق نہیں پڑتا ہے: آپ عمل درآمد کی تفصیلات پر غور نہیں کرتے ہیں۔ آپ کے لیے اہم یہ ہے کہ عمل کیا جاتا ہے۔ جوہر میں، یہ عمل درآمد کی تفصیلات کو ختم کرتا ہے۔ اس مقام پر، ہم آج رک جائیں گے: جاری رکھنے کے لیے!
مزید پڑھ:
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION