 اسلام علیکم آج ہمارا لیکچہ number 26 ہے CS201 Introduction to Programming Course کا آج سے ہم اپنی ایکسائٹنگ جرنی کا فارمالی آغاز کرتے ہیں اور وہ جرنی ہے Into Classes and Objects Which is the object-oriented part of C++ لیکن جیسے میں پیچھلے لیکچہ میں ذکر کیا تھا ہم فارمالی object-oriented programming نہیں کریں گے اس course کے اندر ہم صرف Classes and Objects کیا مطلب مینپلیٹ کرنا وہ سیکھیں گے اور دیکھیں گے یہ چیزیں ہوتی کیا ہے آئیے پہلے ہم class کی definition کے ساتھ شروع کرتے ہیں ایک لحاظ سے آپ class already دیکھ چکے ہیں کچھ lectures پہلے ہم نے بات کی تھی Structure کی Struct Keyword کی اور اس کے اندر ہم نے کیا کیا تھا کہ یہ کچھ data variables لیکے ان کو group کر کے ان کو ایک نام دے دیا تھا class جو ہے وہ structure کا very close relationship ہے between structure and class بیسیکلی class کرتی کیا ہے کہ کچھ data structure لیکے یعنی 1 2 3 4 variables pointers arrays ان کو لیکے اس کے ساتھ کچھ functions کو include کر لیتی ہے اور وہ functions جو ہیں یہ ان ہی variables کو normally manipulate کرنے کے لیے لکھے جاتے ہیں so a class includes both data members as well as functions to manipulate that data اور ان functions کو بھی ہم member functions کہتے ہیں یا ان کو normal یا modern terminology کے اندر ان کو methods بھی کہا جاتا ہے so a class has data which is the variables and it has functions to manipulate that data اب class چیز کیا ہے simply put a class is like a user defined data type آپ in a way language کو expand کر رہے ہیں ہم کہہ رہے ہیں کہ جی ایک نئی data type ہم نے introduce کر دی جس کے ذریعے سے ہم نئے variables create کر سکتے ہیں these variables ہم نے تو کہا ہے جی class کے اندر وہ 3 4 5 کسم کے variables already موجود ہیں so ہم جب class کے variables create کرتے ہیں تو ان کے لیے ہم special name استعمال کرتے ہیں which is objects so the instances of a class are called objects i.e. class is now a data type like int double float اسی طرح ایک data type بن گئی جب ہم int کے ساتھ i کرتے تھے so i was an instance of the data type called integer جب class کے ساتھ ہم کوئی بھی variable name دیں گے so that will become an instance of the class اور اس instance کو ہم object کہتے ہیں so let's take a look now at the structure of a class لکھا کیسے جاتا ہے class کا structure it is very similar to the struct keyword ہم keyword استعمال کرتے ہیں class اور پھر class کا name لکھتے ہیں اس کے بعد braces کے اندر class کی definition آتی ہے اب definition کے اوپر کافی ساری چیزیں ہیں جو کہ ہم نے غور کرنی ہیں اور وہی آج کے lecture کا معزو ہے basically ہم ایک کوئی typical class لے لیں گے اور پھر اس کو کہ کیا کیا چیزیں ہم نے اس کے اندر کیا پہلے تھوڑی سی پھر philosophy کی بات ہوتی چلے کہ جی class ہم لا کیوں رہے ہیں کس واستے انٹردیوز کر رہے ہیں ایک تو میں نے آپ کو idea دے دیا کہ ایک دیتا کو ہم نے کسی طریق سے group کیا ہے ایک کتھا اور پھر اس کو manipulate کریں گے تو ایک کتھا manipulate ہوگا وہ دیتا دوسرہ جیسے structure کے ساتھ بھی ہم نے کیا تھا کہ جیسے structure کے individual elements کو تو ہم access کر لیتے تھے ہم نے اگر structure کو لکھ دیا date structure اس کے اندر 3 elements دے دیے int day int month or int year اور پھر ہم نے ایک variable which is now we are calling it an object of that structure create کیا let's call it my date تو ہم نے اگر اس کے month کو استمال کرنا ہے تو ہم لکتے تھے my date dot month so dot operator استمال کرتے تھے and this is the standard notation اور پھر اس کو equal to one کر دیں یا اس کو کسی computation میں استمال کر لیں اسی طرح ہم لکتے تھے my date dot day یا my date dot year so we use the dot operator preceded by the name of the object and followed by the name of the variable which was the data member of the structure class میں بھی بالکل اسی طریقے سے ہم braces کے اندر جب اس کے data members define کرتے ہیں تو they are normally ordinary data types in float double chart whatever اور بھی چیزیں ہو سکتی ہیں وہ آگے چلے دیکھیں گے لیکن جب ان کو استمال کرنا ہے تو object کا نام آئے گا which is the instance of the class یہ خیال رکھے class کا نام نہیں آئے گا یا اس class کا ہم نے ایک variable کیا جس کو ہم object کہ رہے ہیں so let's start with this example کہ ہم نے ایک class لکنی ہم وہ بھی date class ہے so date class انٹ ہوگا for month اور انٹ ہوگا for year استمال کرتے وقت اور class کا نام ہم نے دیدیا date جب ہم نے اس کا ایک object کریٹ کیا تو object کو اپنا نام دیا تو ہم نے لکھا اپنے main program کے اندر date my date اب اگر اس سے میں اس کا day month here استمال کرنا چاہتا ہوں تو وہی struct والا dot operator چلے گا I will say my date.day my date.month my date.year اور اس کو اپنے استمال کرو یا otherwise now what is the difference the difference is the visibility of the data members what do we mean by visibility دیکھیں جو سب سے بڑا مسئلہ آتے ہمیں اور وہ بار بار occasionally اس کا ذکر ہوتا رہا ہے وہ ہے side effects کا side effect کا ایک اگزامپل لیکے اس کو clear کر لیا جائیں suppose ہم نے an't declare کیا ہوئے آئی کے نام سے we're going to conventional structured programming آئی کو ہم استمال کرتے آئے ایک جگہ پہ ہم نے کہا کہ جناب آئی میں آج کا tax rate store کر دو suppose ہم payroll calculation کر رہے ہیں اور tax rate ہے 5% تو ہم نے I equal to 5 کر دیا اب program چلتا گیا ایک سفہ ختم ہوا دوسرے جگہ بے نیچے جاکے ہم نے کوئی loop چلانی تھی loop نے ہم نے لکھ دیا for I equal to something اور loop سے نکلائے پھر program چلتا رہا اور 4th 5th سفے پہ جاکے ہم نے کہا جناب tax deducted is equal to tax rate multiplied by salary اور یہ بھول گئے کہ ہم نے tax rate تو آئی میں رکھا تھا تو ہم نے I لکھ کے اس کے ساتھ computation کر دی جو چیز بھولے کہ درمیان میں آئی تو ہم نے loop کیلئے استمال کر لیا تھا اب what happened was the original value of I was lost loop کے ساتھ اس loop کو اگر لیے لیں for I equal to 0 I less than 100 تو جب loop exit کرے گی I کی value 100 ہوگی اور یہاں پے جاکے ہم نے کئی سفوں بعد جاکے tax calculate کیا تو 100 سے multiply کر دیا bad side effect now اس کو obviously باقی سارے ہم جو structure programming کے rules ان کو apply کر کے اس problem سے ہم نجات تو حاصل کر سکتے ہیں کہ جی I کیوں رکھا اس کا تو نام tax rate ہونا چاہیے تھا انٹ ہے اور وہ visible ہے آپ کے program کے اندر تو کوئی بھی اور حصہ program code کا اس کی value بدل سکتا ہے اس کو ہاتھ لگا سکتا ہے the data is open to every part of the program جہاں پے وہ data نظر آتا ہے which is a big problem modern programming کے اندر ہم چاہتے ہیں کہ کسی طرح data encapsulate ہو جائے hide ہو جائے چھپ جائے ہم ہاتھ نہ لگا سکیں ہاں data کو استعمال ضرور کر سکیں اب بھئی ہاتھ لگانا اور استعمال کرنا how do they differ well دو تین چیزیں ہیں اس کو اگر کوئی real world کا آپ ایک سامپل لینے کی کوشش کریں تو دیکھیں میں گھڑی پیر نہیں ہوئی ہے اب گھڑی کا time adjust ہونے والا ہے how do I adjust the time now if I lived in the stone ages and there were watches in the stone ages میں شیشہ توڑ کے ہاتھ سے time adjust کر دیتا دوسر طریقہ انہوں نے اس کے ساتھ ایک بٹن بھی دیا ہوا ہے کہ جی بٹن استعمال کریں اور اس کو گھمائیں گے تو سویاں خود ہی حل جائیں گی this is the example which I'm trying to highlight کہ ایک کسم کی encapsulation ہوئی ہے سویاں نظر تو آتی ہیں میں ان کو ہاتھ نہیں لگا سکتا ہاتھ لگانے کے لیے ایک خاص دروازہ انہوں نے چھوڑا ہوا ہے جب بھی ہم کلاس کی بات کریں گے ہمیں اس کو سویاں نظر دیتا ہے کہ جی دیتا ہے کبھی کسی خود ہی ہوتا ہے ہمیں کسی سرکٹر میں نہیں پتا کہ اس کے اندر کتنی گراریہیں لگی ہوئے ہیں کتنی سپرنگ ہیں کبھی بیٹری ہے آج کل کی گھڑیوں کے اندر whatever انسائیٹ کا مجھے کچھ پتا نہیں ہے ہمیں جانتے ہیں کہ اس گھڑی کا جو انٹرنل سٹرکٹر ہے وہ کهی نا کهی دفائن ہوئا ہے میں اس کو دیکھ نہیں سکتا میں اس کو ہاتھ نہیں لگا سکتا لیکن میں اس کا انٹر فیس دیکھ سکتا یہ نہیں سویاں مجھے نظر آتی ہیں جسے میں ٹائم پڑھ لیتا ہوں لیکن میں ان کو ہاتھ نہیں لگا سکتا اگر میں نے ٹائم اجاست کرنا ہے تو میر پاس ایک خاص میکنیزم ہے جسے میں ٹائم اجاست کروں گا سو ایسا نائس سپریشن اف انپلیمنٹیشن کس طرح سے یہ کام کیا گیا ہے وہ چھپایا ہوا ہے کس طرح کرنا ہے انٹر فیس وہ جو چیز مجھے نظر آتی ہے کلاسز علاوہس to do that how do they do this let's take a look at the inside of the کلاس آج کے لیے ہم نے کلاس چوز کیا ہے ڈیٹ کی جس کا پہلے میں نے ذکر کیا کیا اس کے اندر جو میں نے ڈیٹہ دیفائن کیا ہے انٹ ڈی ڈمنٹھ انٹ ڈیر میں اس کے objects کو لیکgood کیا میں day کی value سیٹ کر سکتا ہوں month کی value سیٹ کر سکتا ہوں a year کی value سیٹ کر سکتا ہوں the answer is I cannot do something like my date.month equals 11 why not آپ try کر کے دیکھیں چار لائنو کی کلاس لکھیں اور نیچے جاکے اس کو استعمال کرنے کی کوشش کریں Declare کریں myDate اور کہیں myDate.month equal to 10 کمپائلر ہی نہیں آگے گے کیا گا گا کہ جی myDate.month یہ month کیا چیز ہے month اس کو نظر نہیں آتا کیوں نہیں نظر آتا She who is what private وہ کلاس کے اندر کا حصہ ہے وہ بہر کے استعمال کے لیے نہیں ہے لیکن جب اسٹمال کرنے جائیں تو وہ کہتا ہے کہ یہ دیتا تو اویلبل نہیں ہے یہ تو اندر گہی پڑھا ہوئے یہ خیال رکھئے کہ دیفالٹ ویزیبلیٹی of all ڈیٹا and functions inside a class is hidden its private so میں private کا ذکر کر رہا ہوں obviously private is a key word also private کا opposite کیا ہوگا دوسی سائد کیا ہوگی ہم اس کو ہاتھ لگانا چاہتے ہیں ہم اس کو manipulate کرنا چاہتے ہیں اس کے لیے key word ہے public so class کی definition کے اندر اگر آپ کچھ نہیں لکھتے اور دیتا ڈیفائن کرنا چورو کر دیتے ہیں یا functions ڈیفائن کرنا چورو کر دیتے ہیں تو وہ by default private ہوں گے لیکن as good programming practice آپ کو چاہیے کہ جی private لکھیں you write private اور آگے colon لکھتے ہیں اس کے بعد جتنی لائنے آئیں گے جس میں ہم ڈیٹا اور functions بھی ڈیفائن کرتے ہیں وہ تمام کی visibility private ہوگی میں تھوڑا سا آگے جا کے آپ کو بتا ہوں گا what does it mean لیکن وہ private ہی visibility چلتی جائے گی جب تک آپ independently ایک اور لائن پہ نہیں لکھتے public اور پھر آگے colon دو نکتے وہ لگا دیتے ہیں تو public key word کے بعد جو چیزیں لکھیں گے وہ کلاس کے بہر سے نظر آسکتی ہیں so how do we separate this دیکھیں اب ہماری جو کلاس ہے ڈیٹ اس میں میں نے جو ڈیٹا ممبرز رکھے ہیں month day year ان کو تو ہم ڈیفائن کریں گے as private وہ سمجھ لیں اس کے گھڑی کے اندر والی گراریاں ہیں ان کو ہم ہاتھ نہیں لگانا چاہتے ہم time پرنا ضرور چاہیں گے ہم time set بھی کرنا چاہیں گے in this case ڈیٹ جو ہے اس کو set کرنا چاہیں گے اور ڈیٹ کی value پرنا بھی چاہیں گے کیونکہ وہ بہر سے ہو رہا ہوگا کام اس واستے ڈیٹ پڑنے یا set کرنے کا طریقہ جو ہے وہ کلاس کے public والے حصے کے اندر ہمیں ڈیفائن کرنا چاہیے normally جو نورم ہے ڈیٹا جو ہے اس کو private رکھا جاتا ہے کیونکہ اگر ڈیٹا کو public کر دیا تو پھر we are back to an ordinary structure we are back to an ordinary variable program کا کوئی بھی حصہ اس ڈیٹا کو manipulate کر سکتا ہے on the other hand اس ڈیٹا کو manipulate کرنے کے لیے جو functions ہم لکھیں گے جن کو اب ہم نئی object terminology میں methods کہہ رہے ہیں وہ methods جو ہم وہ public keyword کے بعد لکھتے ہیں یہ methods کلاس کے بہر سے بھی call ہو سکتے ہیں انہیں main program میں سے call ہو سکتے ہیں یہ member functions ہیں کلاس کے ان کو ہم methods کہتے ہیں اور فرق یہ ہے as opposed to ordinary functions کیونکہ یہ member functions ہیں یہ member functions کلاس کے private ڈیٹا کو دیکھ بھی سکتے ہیں اور اس کو manipulate بھی کر سکتے ہیں now let's revisit this topic a little bit more what I said was that since I've made the day, month and year private inside this class نیچے میں program کے اندر ایک variable یا object ڈیکلیر کرتا ہوں کہتا ہوں my date dot month equal to 10 is illegal کیونکہ month is now private inside the class program level پہ my date کا month جو ہے حصہ وہ نظر نہیں آتا اس کو you have to understand this concept the way I like to think of it is کہ کلاس جو ہے نا it's a black box ایک کالا دبہ ہے بند ہے اس کے اندر بڑی ساری چیزیں پڑی ہوئی ہیں میں اندر ہاتھ کیسے لگاوں اس کے لیے دبہ کے اندر ایک کھڑکی کاٹی ہوئی ہے میں نے جو چیز مجھے کھڑکی سے نظر آتی ہے وہ چیز ہے جو کہ بہر سے میرا program ڈیکسس کر سکتا ہے جو چیز کھڑکی سے نظر نہیں آتی وہ میرا program بہر سے استعمال نہیں کر سکتا اس سٹرکچر کے اندر میں نے day month year کو private بنا دیا وہ کالے دبہ کے اندر کسی خانے میں پڑے میں کھڑکی سے مجھے نظر نہیں آتے اب میں ان کو سٹ کرنا چاہتا ہوں سٹ کرنے کے لیے میں ایک member function یا method ڈیفائن کرتا ہوں کلاس کے اندر جو کہ public section میں ڈیفائن کیا جاتا ہے کیونکہ وہ public section میں ہے تو سمجھلیں وہ اس کھڑکی سے مجھے نظر آتا ہے کیونکہ وہ member function ہے لہذا اس member function کو member data جو private تھا وہ اس function کو نظر آتا ہے now it's a two step process مجھے public functions آتے ہیں لیکن کیونکہ وہ functions member functions ہیں ان کو پیچھے والا دبہ کے اندر جو data تھا وہ بھی نظر آتا ہے اس کے فائدِ نقصان جو ہے وہ اب دسکس کریں گے پہلی چیز کہ جی میں نے month کی value سٹ کرنی ہے تو اس کے لیے میں ایک function لکھوں گا اب میں بہر سے my date.month equal to 10 نہیں لکھ سکتا میں ایک function لکھوں گا something called set month جو کہ کھڑکی میں سے مجھے نظر آتا ہے یعنی کلاس کے public section کے اندر میں نے ڈفائن کیا ہوا ہے اب میں کہوں گا my date.set month function call اور پھر parentheses کے اندر میں 10 لکھ دوں گا اب یہ function call ہوگا function کو month والا private data variable جو تھا وہ نظر آئے گا وہ اس کی value 10 کر دے گا اور واپس آجائے گا میرا کام ہو گیا same thing applies اگر میں کہتا ہوں کہ my date کی value print کرو تو I say my date.print جہاں پہ print میں نے ہی ایک function لکھا ہے اور وہ public interface کے اندر دالا ہوا ہے اور وہ print جو ہے اس کو پیچھے جو hidden data تھا private variables تھے وہ اس کو نظر آتے ہیں تو print اس کو neatly format کر کے date print کر دیتا ہے اس کو اگر compare and contrast کیا جائے structure کے ساتھ تو you realize کہ structure کے سارے data members جو تھے وہ by default public تھے public تھے تو کیا وہ ہمیں نظر تو آجاتے تھے لیکن نقصان یہ تھا ہم ان کو set بھی کر سکتے تھے جہاں مرزی سے دل کرے کوئی نقصان ہے اس چیز کا think about date پہلے مجھے بتائیں دے کی valid values کیا ہوسکتی ہیں دیکھیں it depends on the month but ایک سے چھوٹی تو date نہیں ہو سکتی اور اسی طرح کسی بھی مہینے میں بتیس دن تو ہے نہیں اس کی minimum value بھی ہے maximum value بھی ہے اسی طرح month کو لے لیں کہ جی month جہاں وہ january یا month one سے کم نہیں ہو سکتا اور december یعنی month 12 سے زیادہ نہیں ہو سکتا year year flexible ہے ہم year zero کی بھی بات کر سکتے ہم minus one کی بھی بات کر سکتے year 2000 کی بھی بات کر سکتے year 2005 کی بھی بات کر سکتے so وہاں پہ ہمارے پاس flexibility ہے لیکن day اور month میں flexibility نہیں ہے اگر یہ ہم نے date یہ structure ڈیفائن کیا ہوتا تو program میں اگر میں کہیں پہ جاکے لکتا mydate.month equals 13 تو program کو تو کچھ پتا نہیں ہے اس نے month کی value مریلی 13 بنا دینی تھی اور date invalid ہو جاتی اب یہ مسئلہ آرہ ہے کہ جی میں ایک program لکھ رہا ہوں اس میں میں ایک structure ڈیفائن کیا اگر میں چاہتا ہوں کہ نہ صرف میرا program اس کو استعمال کریں لیکن میں شہد آپ کو بھی دے دوں کہ میں ایک بڑا خوبصورت structure لکھا ہے اب اپنے program میں بھی استعمال کریں جب آپ استعمال کرنے جائیں گے تو you could make a possibly invalid use or you could put invalid values into the data members because they were publicly accessible اسی طریقے سے آپ کو یہ بھی نظر آئے گا structure کی اندر کیا کیا کچھ رکھا ہوا ہے اس کو manipulate کیس طرح کیا جا رہا ہے ہر چیز نظر آتی ہے it's as if کہ اسی گھڑی کا case جو تھا وہ ایک transparent شیشے کا بنا ہوتا میں اس کو دیکھتا تو ہر چیز نظر آ جاتی not fun ہم چاہی رہے ہیں کہ جو چیز ہم دکھانا چاہیں وہ نظر آئے جو چیز ہم چھپانا چاہیں وہ چھپ جائے private and public that is what we use in classes public becomes the interface of the class جو چیز ہم دکھانا چاہتے ہیں جس کے through class کو manipulate کیا جاتا ہے private becomes the inside of the class the data members سمجھلی the implementation implementation ہم ہر گز نہیں دکھانا چاہتے میں کیوں آپ کو بتا ہوں کہ میں کتنے گندھے program لکھتا ہوں program کام کرتا ہے آپ کو اسے گھرز ہونی چاہی ہے کہ جی میں نے تو date set کرنی تھی date set ہو گئی date print کرنی تھی date print ہو گئی آپ کو کیوں پتا چلے کہ جی میں نے variable کا نام day month year نہیں رکھا ہوا میں نے ij کیے رکھا ہوا ہے which is bad programming practice in other words I don't want to show you my implementation دوسرا ایک اور subtle چیز اس کو ہم بیسیکلی جو concept میں ابھی دسکس کر رہا ہے اس کو کہتے ہیں separation of interface from the implementation it is a crucially important concept in modern programming when we separate the interface from the implementation as long as the interface remains the same implementation کو میں کل بدل سکتا ہوں now how do we think about it in the real world ایک اگزامپل لیتے ہیں دیکھیں گاڑیاں جو ہے motor cars وہ late 1800's میں early 1900's میں آئیں model t Ford کا ایک model تھا بڑا مشہور ہوا وہاں سے چلتے چلتے آج کل کی گاڑیاں آگیں اب ان دونوں کو کمپیر کریں تو technology and manufacturing techniques and materials زمین آسمان کا فرق آ چکا ہے کیا چیز کومن رہی ہے ان گاڑیوں میں اور آج تک کی گاڑیوں میں steering ہے اس وقت بھی ہوتا تھا clutch ہے break ہے accelerator ہے اس وقت بھی ہوتا تھا gear lever ہے اس وقت بھی ہوتا تھا the interface is the same speedometer لگا بہاں speed دکھا تھا ہے اس وقت بھی ہوتا تھا کم از کم آگیا تھا very early on جن چیزوں سے ہمیں غرز ہے کہ میں gear لگانا چاہتا ہوں تو مجھے پورانی گاڑی میں بھی gear lever ملے گا نئی گاڑی میں بھی ملے گا میں اس کو right مورنا چاہتا ہوں میں steering کو یوں گھماوں گا پورانی گاڑیوں میں بھی یوں گھماتا تھا آج کل بھی یوں گھماتا ہوں جس چیز کا مجھے نہیں پتا نہیں علم اور نہ ہی مجھے اس سے کوئی غرز ہے وہ یہ ہے کہ جی پورانی گاڑی کے اندر وہ steering کے ساتھ آگے دو موٹی موٹی گیریں لگی ہوتی تھی وہ گیروں کے ساتھ rod لگے بھی تھے وہ جناب پئیوں کو right or left گھماتے تھے آج کل کی گاڑیوں میں شہد steering پورا کپورا electronic ہو میں جب steering گھماتا ہوں physically وہ ہی action لیتا ہوں کوئی rod نہیں ہے کوئی gears نہیں ہے ایک چھوٹے سے micro switches لگے ہوئے وہ microprocessor کو control دیتے ہیں microprocessor آگے سے کہتا ہے کہ جی motor چلے اور پئیے گھوم جائیں مجھے اس سے کیا غرز مجھے تو effect کے ساتھ ہے میرا interface وہی رہا steering اور effect وہی رہا کہ پئیے موٹ گئے implementations ساری ساری تبدیل ہو گئی پورانہ internal combustion engine جو تھا وہ آج کل کے internal combustion engine کے ساتھ تو compare ہی نہیں ہوتا valves بدل گئے ہیں variable valve timing آگئی ہے carburetor کی جگہ پے fuel injection آگیا ہے لیکن ہمیں تو dashboard کے اوپر چابی ملتی ہے چابی گھوماتیں engine start ہو جاتا ہے interface وہی رہا ہے this concept of separation of implementation and the interface comes through into our programming آج میں نے کسی کام کے لیے program لکھا میں نے کہا کہ جی چلیں calculate کرتے ہیں کہ جی earth کے گیدنہ moon جو ہے اس کی orbit جو ہے وہ کیا ہوگی کیا نا کتنی دیر میں let's say کہ جی moon چکر لگاتے میرے پاس آج کی physics کے نالج کے مطابق کچھ formulas ہیں تو میں نے اس کو interface define کیا calculate orbital time ایک function ہے اور اس کو میں نے شاید parameters دوں شاید نہ دوں in this case تو میں نہیں دوں گا کہ میں نے کہا جی میں تو moon اور earth کی بات کر رہا ہوں چلتے چلتے پتا چلا کہ جی physics کی ساری theory بدل گئی ہے پتا چلا کہ جی وہ تو کچھ اور ہی calculation کرنی پڑتی orbital time determine کرنے کے لیے جو جانے سن میں کرتے تھے وہ ساری غلط ہے اب میں کیا کرو I don't change the interface I go and change the implementation اس کی جو calculation تھی وہ ساری میں بدل دیتا ہوں لیکن function کا نام وہی رہنے دیتا ہوں اور اس کی visibility اسی طرح public چھوڑ دیتا ہوں اب اگر کوئی program استعمال کرتا ہے اور کہتا ہے calculate orbital time calculation پھر بھی ہو جائے گی result بھی میں نے maintain کیا جس طرح پہلے آتا اسی طرح آئے سٹیریں گھمائے پائے گھم گئے the result should be the same format remains the same that is the public interface implementation ساری بدل گئے it's a very neat concept and that is what we use when we work with objects and classes چھلے آئے اپنی date class کو زرا ساری detail میں دیکھتے ہیں ہم نے لکھا class keyword ہے پھر date یہ اس class کا نام ہوگا this is our new name for the user defined data type that we are creating so class پھر date آگیا اس کے بعد braces کھولے اس کے بعد آپ دیکھیں کہ ہم نے درکلی لکھتی ہے public colon public اس باستے لکھا ہے جیسے میں نے mention کریا تھا پہلے کہ default private ہے جو چیز میں دکھانا چاہتا ہوں اس سے پہلے مجھے public کا keyword لکھنا لازمی ہے public کے بعد میں نے کہا display so display is a function that I will use to display the value of the date which is stored inside an object of this class لمباسہ sentence ہے لیکن quite simple جو بھی میں نے date کی value display کرنی ہوگی تو اس function کو میں call کروں گا لہذا یہ function public section کے اندر ہونا چاہیے اس کے علاوہ ایک اور بھی function یہاں پہلے لکھا ہے public section کے اندر اس کا نام بزاتے خود date ہے اور date کے ساتھ میں نے کچھ parameters بھی دے دیے ہیں int day comma int month comma int year اس function کے اوپر آگے چلے ہم کافی بات کریں گے اس کو constructor کہتے ہیں لیکن کیا ہوتا ہے we will talk about it later اس کے بعد میں نے keyword لکھا ہے private اور private کے آگے colon ڈال کے اب میں نے اس کا data structure جو تھا actual data جو ہے وہ لکھ دیا اور وہاں پے میں نے وہاں int day month year 3 private data members ہیں اس کلاس کے پھر میں نے braces جو ہے وہاں بند کیے اس کے بعد ایک semi colon لگا دیا اس کو نام بھولیے گا semi colon کے بغیر class کی definition complete نہیں ہوتی اب دیکھیں ایک تو public private کا اب تک idea ہو گیا کہ public چیزیں بہار سے نظر آئیں گی لیکن وہ display function جو ہے اس کی definition کا میں صرف لکھ دیا display اور display کو بیشا کا return type کو دیے دیں ہم کہتے ہیں کہ یہ تو just display کرے گا so it returns nothing اس کی implementation ہم class سے بہر define کر لیں گے لیکن اس کو بھی ایک خاص طریقے سے because it is part of the class it's a member function it happens to be in the public section it could have been in the private section we'll talk about that یہ ایک class کا structure بنالیا جو میں نے شروع میں بات کی this is the definition of a user defined data type جب آپ class کوئی لکھتے ہیں اس طریقے سے آپ نے program کے اندر تو اس وقت اگر program کو compile کریں گے تو اس class نے کوئی memory میں جگے نہیں لینی ہاں اس کے functions وگیرا ضرور compile ہوں گے وہ تو جگے ہوگی لیکن data کوئی نہیں ہے data نے ابھی memory میں کوئی جگے نہیں لی because اسی طریقے سے جیسے ہم int لکھتے تھے تو int بزات ہے خود لکنے سے memory میں کوئی جگے reserve نہیں ہوتی تھی جب ہم int i کہتے تھے تو i کے لیے جگے reserve ہوتی تھی class ہماری تو program کے اندر جب میں کہوں گا date my date اس وقت an instance of the class will be created that is what we call an object اور object you have وہ memory میں جگے لیتا ہے object کیا ہوگا اب object کے اندر یہ data members آئیں گے in this case day month here آپ پوچھیں گے functions آئیں گے for the moment میں کہتا ہوں functions بھی آئیں گے کیونکہ وہ کہی نہ کہی تو موجود ہیں لیکن بعد میں جاکے میں expand کروں گا اور آپ کو بتاؤیں گے یہ functions جاتے کہاں ہیں so we have written a class date اس کے اندر میں ایک خاص function بھی لکھا ہے اس کا اپنا نام date ہے اور اس کی return type میں نے کچھ نہیں دکھائی اس کو میں نے کہا تھا کہ اس کو constructor کہتے ہیں we will discuss that in a moment for the moment میں کہتا ہوں کہ جی اس date کو ہم استعمال کرنا چاہتے ہیں program کے اندر تو display function مجھے date print کر دے اب display function کی definition کہا ہے prototype تو ہم نے class کے اندر دکھا دی definition کیلئے ایک خاص طریقہ ہمیں استعمال کرنا پڑتا ہے وہ ہے پہلے ہم class کا نام دیتے ہیں دیکھیں ابھی object کی بات نہیں ہو رہی ابھی class کی بات ہو رہی ہے user defined data type کی بات ہو رہی ہے so ہم لکھتے ہیں date وہ ہماری class کا نام تھا date لکھے ہم دو colons لکھتے ہیں colon colon اس کے بعد لکھتے ہیں display display کیا چیز ہے function کا نام ہے اور پھر آگے اس کے پر انثرسیز آجا جاتے ہیں ہم نے کہا اس کو کوئی argument نہیں جائے گا braces کھولتے ہیں display function کی پوری definition وہ لکھتے ہیں in this case میں اسے see out کے ساتھ day month here دکھا دیں گے اور پھر braces بند کر دیتے ہیں جس چیز پہ اس وقت گہور کرنے والا ہے وہ یہ ہے کہ function کا ہم نے definition کی پہلی line کیسے لکھی function کی پہلی line جب ہم لکھتے ہیں date اور پھر colon colon so colon colon جو ہے double colon اس کو ہم کہتے ہیں scope resolution operator یہ scope resolve کرتا ہے یہ بتاتا ہے یہ function جو ہے کس کو belong کرتا ہے so in this case display belongs to the class called date so scope resolution is required in a way یہ سمجھنے کہ function class کے اندر ہی declare ہو رہا ہے اگر آپ کے پاس کوئی private function بھی ہوتا اس کلاس کے اندر اس کی definition یہی ہونی تھی کلاس کے بہر آپ اس کی پوری definition لکھتے تھے لیکن program میں پھر بھی وہ function نظرنا آتا کیونکہ وہ private تھا اس کس کے اندر display is in the public interface of the class so it will be visible but nonetheless for the moment we are talking about the scope resolution operator which is class name double colon function name and then the body of the function this is how we define member functions لازمی بات ہے آپ پوچھ رہے ہوں گے کہ ہم نے بہر نکل کے کلاس سے کیوں لکھا کلاس کے اندر ہی کیوں نہیں a function define کر دیا can we do that the answer is yes you can there is no problem with defining the function inside the class itself the idea or rather the difference is جب آپ function کو class کے اندر define کرتے ہیں تو compiler کوشش کرتا ہے کہ اس کو inline treat کرے اور اس کی اپنی implications ہیں inline functions کے بارے میں ہم نے بات کی تھی پشلے لیکچر میں so you know کہ وہاں پہ وہ expansion والا concept آنی کی کوشش کرتا ہے it does lead to more efficiency the class works faster but by and large these functions are non-trivial یہ کوئی سپیسفک کام کر رہے ہوتے تو ایک programming practice ہے کہ ان کی definition ہم class سے بہر کرتے ہیں اور بہر کرنے کے لیے to make sure that they belong to the class we use the scope resolution operator and the name of the class ابھی تک ہماری جو class ہے date والی وہ بڑی elementary stage پہ پہنچی ہے elementary stage یہ ہے کہ جی ہم اس class سے objects create کر سکتے ہیں اور اس کا یہ function جو ہے call کر کے اس کی value display کر سکتے ہیں is that enough certainly it's not enough because بالکل اسی طریقے سے جب میں program میں لکتا ہوں int i اور پھر میں آپ کو کہتا ہوں اس کی value کیا ہے تو by and large your answer would be کہ ابھی تو ہم نے اس کو assign کچھ نہیں کیا مجھے گیا پتا کہ memory میں اس location پہ کیا پڑا ہوئے same way if I just declare an object of this class and the syntax is simple I say date my date semi colon تو object تو بن گیا لیکن اس کی day month year اس کی values کیا ہیں اس کا ہمیں ابھی کچھ نہیں پتا اب میں کہتا ہوں date dot display اور یہ وہ dot operator کے ساتھ میں نے اس کا ایک public حصے والا member function call کر لیا اس نے اس کی جو بھی value ہوگی وہ پرنٹ کر دینی ہے I need more member functions I need functions جسے ساتھ میں date کو set بھی کر سکوں تیکنے maybe I want to set the day separately I want to set the month separately I want to set the year separately if I were to do that I would use three different functions I would have a function called set day taking an integer argument I would have another function called set month again with an integer argument and a third function called set year with an integer argument اور پھر program کی اندر سے میں کہوں گا my date dot set day 10 وہ day کی value اندر جاکے 10 کر دے گا کیسے کرے گا let's write that function and see how it works پہلی چیز یہ member function ہے لہا جا اس کی definition جو ہے اس کے اندر ہم لکھیں گے date class کا نام colon colon scope resolution operator set day function کا نام parenthecies کے اندر اس کی argument list in this case in this case int day یا کوئی بھی I کرنے آپ اس کو for the moment let's use I body کی اندر کیا ہوگا braces شروع کیے آگے جاکے میں لکھتا ہوں day is equal to I اور braces بند کر دیے function کمپلیٹ ہو گیا I hope you're already asking the question by کون سے والے object کا day اس کی value I ہو گئی the answer is کہ جی ابھی تو سے function ڈیفائن ہوئے یہ call نہیں ہوا call کون کرے گا call اس کو object کرتا ہے اس کو class call نہیں کرتی جب میں نے اپنے program میں لکھا date my date تو my date is an object of type date نیچے جاکے میں کہتا ہوں my date.set day 10 what that does is جو my date کا data structure ہے اس کے اندر جو day کی value تھی اس کے اندر value 10 لکھ دی جاتی ہے you should think in terms of when we create an object تو object1 یہاں پہ بنا گیا memory میں object2 یہاں پہ بنا گیا object3 یہاں پہ بنا گیا مختلف جگوں میں memory میں وہ objects create ہوتے جا رہے ہیں جب ہم اس object کے نام کے ساتھ کوئی member function call کرتے ہیں تو وہ call جو ہے اس object کے data کو manipulate کرتی ہے to make it absolutely clear suppose ہم نے اس اپنے program کے اندر 3 objects of type date declare کیے ہم نے کہاں date date1 ڈیٹ2 ڈیٹ3 now we have 3 objects جب وہ declare ہو گئے ہیں تو memory میں انہوں نے اپنی اپنی جگہ سمحلی ہے ہر ایک کے پاس اس کا day month year day month year day month year والے data variables موجود ہیں program میں چلکے میں کہتا ہوں date1.set month 10 کیا ہوتا ہے function call ہوتا ہے جو کہ class کے اندر دیفائن کیا ہوا تھا ڈیٹا کونسا manipulate ہوتا ہے جو date1 کے اندر month تھا وہ manipulate ہو گا اسی طریقے سےگر میں کہتا ہوں date2.display تو display کا function تو میں ایک class level پہ دیفائن کیا تھا function وہ چلے گا لیکن وہ display کونسا ڈیٹا کرے گا جو date2 ڈیٹ2 ڈیٹ کے اندر ڈیٹا پڑا ہوا ہے so you have to realize کہ we always call these member functions by referring to a specific object we say date1.something or date2.something or date3.something we never call these functions by referring to the class ہم کبھی بھی نہیں وہ arm programming کے اندر ہم نے کبھی نہیں کہا تھا square int انٹ تو data type ہے square آپ کس کو کرنا چاہتے ہیں آپ کہتے تھے square i اسی طریقے سے یہاں پہ ہم کبھی نہیں کہتے date.display ڈیٹ تو class ہے date.display is invalid date1.display اگر کہیں گے so that is a specific object of type date اور اس کی value جو ہے وہ display ہوگی یہ جو طریقہ ہے of using member functions for displaying the values of a class or setting the values of data members of a class یہ کافی standard ہے so we do have these set functions and we have the get functions نام بھی اس طرح سے ہم نے لکھے ہوئے کہ جی data کو گا set کرنا ہے تو ہم normally set something function کا نام لکھتے ہیں again it's a matter of style you can call it whatever you want but it would be a bad idea to have a function جس کا نام ہے print اور کر کیا رہا ہے وہ month کی value set کر رہا ہے کام تو کرے گا but it would be utterly confusing when you actually use it in your program so we normally say set something اب month کو set کرنا ہے a logical choice for the function name would be set month day کو set کرنا ہے a logical choice for the function name would be set day and set year and so on میں ان کو پڑھ کے ان کی value پرنٹ کرنا چاہتا ہوں اگر میں علیہ دہ علیہ دہ کرنا چاہتا ہوں a good choice would be get day get month get year اور مجھے explain کرنے کی ضرورتنی ہے نام خودی self-explanatory ہے آپ کو پتا ہے یہ وہ value پکڑ کے لکھا دے گا I'll repeat again these functions are defined as member functions of the class they are put in the public section of a class so they constitute the public interface of the class یعنی وہ جو کھڑکی میں سے جو چیزیں نظر آتی ہیں یہ وہ والے functions ہیں they are public manipulate یہ کس کو کرتے ہیں normally normally they manipulate the data inside the class which is kept hidden that is in the private section of the class functions بزاتے خود کیسے کام کر رہے ہیں وہ بھی ایک private cheese ہے اس کی بھی implementation دکھانے کی ضرورت نہیں ہے صرف function کا نام اس کی return type اس کے argument یہ بتانے کی ضرورت ہے user کو and the user of the class is our program so going on with this date example let's see what else we have written there ایک بڑا interesting بیچ میں function دکھا ہوا ہے ہے وہ public section کے اندر وہ function ہے date یہ نہیں اس کا نام function کا وہی نام ہے جو کہ class کا نام تھا میں نے اس کو ایک special نام دیا تھا اس کس ان کے functions کو constructors کہا جاتا ہے going back کہ نام I think constructors ہے آپ کو کچھ تو idea ہو گیا ہوگا کہ جب ہم ایک object کو create کرتے ہیں by writing something like date my date تو ایک invisibly constructor call ہو جاتا ہے ایک function call ہو جاتا ہے جو اس ویریبرل کو create کر کے کچھ اس کے ساتھ کر کے ہمیں دے دیتا ہے اگر ہم constructor نہ لکھیں تو کیا ہوگا کچھ نہیں ہوگا C++ ایک default constructor اپنی طرف سے سپلائے کر دیتی ہے object will still be created but by and large what we want is کہ the object should be created in a certain state جب ہمارا date object create ہو تو اس کی day month here کی کوئی خاص value ہو اب ایک طریقہ یہ ہے ہم کہیں کہ جی 0000 کے ساتھ انشلائز کر دینا یا کوئی خاص date کے ساتھ انشلائز کر دینا وہ تو ہم اس کا کرے کا طریقہ کیا ہوگا remember جب ہم کہتے تھے int i تو میں نے کہا جی اس وقت you cannot predict کے i کی value کیا ہے تو ہم اس کو کرتے تھے int i equal to 0 یا کہتے تھے int i اور نیچے جاکے i equal to 0 کو assignment statement کے ساتھ اس کو initialize کر لیتے تھے constructor کا by and large کام یہ ہوتا ہے کہ جو object create ہو رہا ہے اس کو initialize کر دیا جائے into a state which is recognizable and which is acceptable یعنی ایک valid state میں لے آیا جائے یہاں پہ جو ہم نے constructor آپ کو دکھایا ہوگا ہے یہ جو ہے یہ کہہ رہا ہے کہ جس کو 3 integer arguments جائیں day month اور year کی لئے تین integers pass ہوگے constructor کیوں کہ function ہے تو اس کو لکھنے کا طریقہ بالکل وہی ہے جو کہ پہلے ہم نے member functions لکھنے کا طریقہ دکھایا تھا آپ کو یہ نہیں ہم پہلے کلاس کا نام لکھتے ہیں date پھر double colon لکھتے ہیں scope resolution operator پھر function کا نام لکھتے ہیں which in the case of the constructor is date اور پھر اس کے بعد اس کی argument list آتی ہے پھر braces کا پیر آتا ہے اور braces کے پیر کے اندر body of the function آتی ہے now we can do many things what we can do is when we create an object of this class we can straight away say date my date اور پر انتصیز کے اندر میں لکھتا ہوں 1,1,2000 what happens is when the object is created and this happens at run time یہ compile time کی بات نہیں ہو رہی یہ run time پہ ہو رہا ہے جب یہ object create ہوگا تو create ہونے کے بعد اور آپ کو control program میں control واپس آنے سے پہلے یہ function جو ہے وہ call ہو جائے گا یہ function ہم نے کس طرح سے لکھا ہے کہ جو values ہم نے اس کو pass کی in this case 1,1,2000 اس نے day میں value 1 ڈال دی month میں value 1 ڈال دی and year میں value 2,000 ڈال دی اور پھر یہ object create کر کے myDate کا object ہمارے program کو return کر دیا تو what it has done it has created and initialized the object good way of doing things اب میں اگر کہوں myDate.display تو کوئی proper date نظر بھی آئے گی کوئی values نظر بھی آئے گی so a constructor is being used to initialize the data inside an object and put it into a consistent or a valid state what about default arguments ہم نے پسلی دفعہ default arguments introduce کیے تھے can we use them with a constructor answer is absolutely yes interestingly enough اس example کیلئے کافی pertinent ہے کہ جی اس دفعہ کا جو بھی سال چل رہا ہے by and large آج ہم program استعمال کریں گے تو بار بار سال کی value وہی جاری ہوگی date بھی بدلے گی month بھی بدلے گا لیکن سال تو شہد سال کے بعد جاکے بدل رہا ہو so you could put a default value in there you could say in the constructor you could say int day int month int year equal to 2002 or 2005 or whatever year the default value آپکہ چاہیے اب وہ default value والے سارے rules لگنے لگ پڑتے ہیں you can now declare an object of this class in many different ways you could declare it by saying date my date or آگے پرانثیسیز میں 1,1,2000 my date object is created day is initialized to 1 month is initialized to 1 year is initialized to 2000 دوسا طریقہ میں کہتا ہوں date my date 1,1 دو arguments دیے 3 نہیں دیے یہاں پے default value کام آجائے گی day will be initialized to 1 month will be initialized to 1 and year will be initialized to the default value that was given in the constructor so a nice way of using it but there are some complications as always there are complications complication جی ہے کہ constructor بزاتے خود چونکہ 1C++ کا function ہے تو وہ overload بھی کیا جا سکتا ہے تو کوئی ضروری نہیں ہے کہ 1 class کا ایک ہی constructor ہو اس کے کئی constructor ہو سکتے ہیں اس class کیلئے let me give you some examples دیکھیں اگر میں آپ کو کہوں کہ یہ اپنی اپنی copy کے اوپرنا date لکھنے آج کی تو کیا ہوگا کیا آپ سب ایک طریقے سے date لکھیں گے my guess is no کوئی لکھیں گا today's date is 1-1-2000 آپ میں سے کوئی لکھیں گا 1-1-2000 کوئی اور student لکھیں گا january 1-2000 کوئی اور لکھیں گا 0-1-jan-2000 یہ ساب جو ہیں یہ دیتہ بیس کی expert ہیں کیونکہ دیتہ بیسی استعمال کر رہے ہوتے in other words what I am trying to say is you have many formats for the date now if you have many formats for the date wouldn't it be nice that I could initialize an object of this class using any of these formats ابھی تک تو ہم صرف ایک استعمال کر رہے تھے 1-1-2000 but how about if I were to give it a character string saying 0-1-jan 3 character میں منت کا نام dash-2000 اور وہ constructor جو ہے اس character string کو لیکے اندر چلا جائے اس کو پارس کرے کہہ جی کہ پہلے ہائفن تک دیکھو کیا نمبر آئیں ان نمبر کو convert کرکے into a numeric value ڈے کو ایسائن کر دو ہائفن کو پھیک دو next 3 character کو اٹھاو اور اس سے identify کرو کہ جی month number کیا ہے یعنی اگر mar لکھا ہوئے تو that will be the third month march اور وہ numeric value میں calculate کر کے آپ اس کو month کو ایسائن کر دیں اور پھر ایک ہائفن آئے گا اس کو پھیک دو پھر جو نمبر لکھا ہوئے اس کو وہی a to i function بھی استعمال کر رہے ہیں a to i سے وہ string 2000 جو لکھی ہوئی تھی اس کو as a number بناکے year کو ایسائن کر دو اب دیکھیں what we are doing is a lot of horizontal integration horizontal integration اس طرح سے ہو رہی ہے کہ اب میں آپ کو ایک پشلے لیکچر میں بات کیا کہ جی function overloading ایک چیز ہوتی ہے اور آج کلاس میں داخل ہوتے ہی میں نے بتا دیا کہ جی constructor بھی overload ہو سکتے ہیں اچھی بات یہ ہے کہ exactly جو rules اپلائے کرتے تھے ordinary function overloading کو وہی constructor overloading کو اپلائے کرتے ہیں ہم نے default arguments کی بات کی تھی وہ بھی یہاں پہ استعمال ہو سکتے ہیں وہی rules اپلائے کرتے ہیں کہ جی default arguments right پہ لکھنے ہیں left پہ نہیں لکھنے ہیں and so on idea is try to make the class as friendly as possible for users of the class جب میں نے کہا کہ جی ہم نے دو constructors دے دیے دیے ہیں ایک میں ہم 1,1,2000 لیتے ہیں دوس میں character string لے لیتے ہیں مبھی تیسرہ آجائے one slash one slash two thousand as a character string وہ بھی pass ہو جائے وہ بھی pass ہو جانا چاہیے properly and so on now obviously there is a limit to things you don't want to go overboard or class لکھنے لگیں تو constructors ہی constructors define کرتے جائیں کہ جی شاید ہم object کو اس طریقے سے create کرنا چاہیں شاید ہم اس کو اس طرح سے create کرنا چاہیں within limit within reason پر ایک دو تین alternative دے دینا اچھا ہوتا ہے کہ جو class کا user ہے میبھی اس کے سنٹیکس کے اندر کہ وہ months کو ہمیشہ number کے طور پر treat نہیں کر رہا وہ character strings لے رہا ہے jan, feb, mar, april and so on so it would be nice if we were to provide a constructor that could handle character strings in this format so within reason provide one or two different constructors constructors کے بارے میں چلتے میں کچھ باتیں کرتا چلوں دو یہ topic لمبہ ہے اور ہم ابھی اس کو کافی expand کریں گے constructor ایک special کسم کا function ہے جس کا name وہی name ہوتا ہے جو کہ class کا name ہوتا ہے constructor کوئی return type نہیں رکھتا void بھی نہیں ہوتا یعنی اس کو simple اس کا name وہ return type کے بغیر اس کو declare کیا جاتا ہے constructor جو ہے وہ arguments لے سکتا ہے without arguments بھی ہو سکتا ہے اور اسے Already ایک user defined data تاپ ہے اس کے اندر data members بھی ہوتے ہیں اور member functions بھی ہوتے ہیں ہم میمبر فنکشنز کو میثرڈ کہتے ہیں جو ڈیٹا میمبرز ہیں عام طور پہ ان کو ہم private رکھتے ہیں using the private ڈیوڈ اور جو اس میمبر ڈیٹا کو منیپلیٹ کرنے کے لیے فنکشنز ہوتے ہیں ان کو ہم public ڈیٹا کے اندر رکھتے ہیں جو چیز کلاس کے public ڈیٹا میں ہوتی ہے وہ کلاس کا انٹفیس گنا جاتا ہے اور اس کو ہم بہر سے استعمال کر سکتے ہیں وہ ڈیٹا ہو یا فنکشنزوں but normally وہ صرف فنکشنز ہوتے ہیں جو ڈیٹا جو میمبر فنکشنز ہیں ان کو کلاس کے تمام ڈیٹا تک access ڈیٹا ہے private ڈیٹا ہو public ڈیٹا کوئی فرط نہیں پڑتا میمبر فنکشنز can manipulate the ڈیٹا non-member functions which means anything outside the class itself ہمارا program for example وہ private ڈیٹا ہیسے کو ہاتھ نہیں لگا سکتا نہ ہی اس کو دیکھ سکتا ہے نہ ہی اس کو پتا ہے کہ اس کا structure کیا ہے لہذا we try to separate the implementation of the کلاس from its interface and we will be concentrating a lot on the interface issues اب اگلی the فاکلیے جازت دیجے خدا حافظ