 اسلام علیکم today is our last lecture for this course today we will try to wrap up the code for the matrix class and then if time permits we will do a brief recap I hope that you have done a lot of programming in this course because that was the essence or the subject that we were talking about not c and c++ but the fundamentals of writing good programs جہاں تک پریکٹس کا تعلق ہے you have to do a lot of practice it just goes without saying that you have to write programs and more programs and more programs so that you become fluent with that ایک میرے سے question پوچھا گیا تھا one of you asked me online کجی مجھے سنٹیکس یاد نہیں رہتا اس کا کیا کیا جائے my answer to that is syntax it's nice to know but it's not critical what is important to know is how to write programs سنٹیکس ہمیشہ آپ کو ریفرنس کتابوں میں بھی مل جائے گا most of these compilers have a good online help system so you can use that as well but if you write a lot of code بہت ساری چیزیں ہیں جو کہ روز مرا استمال میں آتے آتے وہ خود ہی آپ کو یاد آ جاتی ہیں یاد رہ جاتی ہیں so in other words you don't forget to put a semi colon at the end of a statement in c you remember کہ جی اف کے بعد پرینتسیز دالنے ہیں if you have a block of code then you have to put curly braces in it یہ چیزیں آپ کو second nature بن جاتی ہیں آپ کے لیے so the only answer to that is write a lot of code but don't think in terms of memorizing syntax languages will change they will evolve over a period of time and constantly you will be learning new languages so just practice and remember the basic concepts and fundamentals آج ہم اپنے دسکرشن کانتنیو کرتے ہیں matrix class کی اور اس میں جو میں نے بات کی تھی last lecture کی اندر کے assignment operator کے بارے میں بات کرتے ہیں this is a critical component over here why it is critical number one we do want to be able to write code like a equals b یہاں a اور b دونوں matrices ہیں لیکن critical اس پاستے ہے کہ ہماری class یہ dynamic memory allocation کرتی ہے a اور b کا کچھ پتہ نہیں ہے کہ جب ان کا size ایکی ہوگا یا different ہوگا and کیونکہ اگر different ہوگا تو ہمیں شاید memory reallocate کرنی پڑے so we have to put in some checks and balances پہلے تو اس کی ہماری جو prototype ہے یا declaration line ہے اس کے اوپر خور کرتے ہیں کہ جی وہ کس طرح سے لکھی ہوئی ہے جو ہماری declaration line ہے that says it must return a reference to a matrix we are writing a equals b why do we want to return a reference so that we can write something like a equals b equals c یہاں پہلے ہم کئی دفعہ دیسکس کر چکے ہیں کہ c یا c plus plus کندہ جو expressions ہیں پوری statement اس کی اپنی بھی کوئی value ہوتی ہے تو یہاں پہاں ہم کہہ رہے ہیں کہ جو assignment ہے when we write a equal to b then the whole action will also have a value that value itself will be a reference to a matrix on the other hand ہم نے اس کو const بھی کرا دیا ہے in other words the reference that is returned is a constant why have we done this یہ تھوڑا سہاں انٹریکٹ ماملہ ہے جب بھی آپ کسی چیز کا reference return کرتے ہیں remember that thing then can become the left hand side of an assignment statement which can lead to some very funny behavior in other words اگر آپ لکھ دیں parentheses کے اندر اور پھر equal to c what will happen is کہ a equals b جو ہے وہ as a statement execute ہوجی اس کی value جو return ہی ہے that's a reference to a matrix and then that reference will be assigned the value of c so strange things can happen we only want the parentheses on the right hand side of the assignment we don't want an assignment to be done to the reference that is being returned اس کو بچانے کے لیے ہم اس کو efficiency ہمیں مل گئی کہ جی reference واپس آ رہا ہے safety مل گئی کہ جی اس reference میں کوئی value اس کے بعد اسائن نہیں ہو سکتی اسی statement میں بعد میں آپ جو مرزی کرتے رہی لیکن reference واپس کرنے کی وجہ سے we can write straight line statements like a equals b equals c having said that let's go on and look at the next implication which is the size of the matrix whenever we have dynamic memory allocation we have to check in a class we have to check against self assignment and self assignment means statements like a equals a اب اگر آپ عدنری ویریبہ لیلے i integer تو i equals i کہنے سے کچھ نہیں ہوتا it's quite alright but when we write something like a equals a because of the fact that the object is doing some dynamic memory allocation it is quite possible in somebody else's code کہ جی وہ پہلے left hand side کی اور پھر نئی memory allocate کر کے اس کے اندر copy ڈالے تو اگر a equals a لکھا ہوا تو ایک ڈرکی situation آجاتی ہے کہ جی پہلے اس کو ڈلیٹ کر دیا اور اب copy کرنے لگے تو کس چیز کو copy کریں وہ right hand side بھی ڈلیٹ ہو چکی ہے so we must check against self assignment اس کا دیکھیں تو پہلہ test ہی یہ ہے کہ جی if m which is the matrix on the right hand side of the assignment operator is not equal to this so we have to do the self assignment check اور اگر وہ نہیں ہے پھر ہم کام شروع کرتے ہیں اب جب ہم self assignment check کر چکے تو پھر ہم نے دیکھنا ہے کہ جی دونوں matrices جو ہیں left and right hand side بالی ان کا size ایک جتنا ہے کہ نہیں اگر تو size ان کا ایک جیسا ہو تو پھر کام بڑا آسان ہے right hand side بالی matrix کا element by element copy کر دیں into the left hand side لیکن اگر size different ہے یا rows different ہیں یا columns different ہیں اس کا ہم نے check لگایا ہے اگر وہ different ہیں تو پھر ہمیں left hand side کے لیے ایک نئی matrix کرنی پڑتی ہے اس کوڈ کو اگر دیکھیں تو یہ بالکل ویسا ہی کوڈ ہے جو کہ ہم نے constructor کے اندر استمال کیا تھا کہ ہم پہلے elements کو delete کر دیتے ہیں so we free that memory having free that memory we reallocate new memory which is of the correct size اب correct size خیال رکھنا ہے کہ کنسا ہے right hand side والی matrix کا size ہوگا اس کے بعد ہم نے جب یہ کر لیا اپنی reallocate کر لی memory اس کے بعد we re-adjust the number of rows and columns of the left hand side object so we define it as num rows equals m.num rows یعنی right hand side والی matrix کی rows کی value کوپی کر دی right hand side والی matrix کی columns کا value وہ بھی int variable کے اندر کوپی کر دیا اس کے بعد ایک nested loop لگائی جس کے ساتھ ہم نے element by element کوپی کر دی کیا ہی اچھا ہوتا کہ یہاں پہاں بھی ہم کہہ سکتے جی a is equal to b اور کوپی ہو جاتا بہت وہی تو ہم define کرنے جا رہے ہیں we don't want a recursive definition of the assignment operator nonetheless اس کوٹ کو خاص طور پہاں آپ کو study کرنا چاہیے it is important اور اس کو ہم نے دوسرے functions کے اندر استعمال کیا ہے infactor خیال کریں تو پہلے ہم functions define کرتے رہے ہیں جہاں پہ بھی ہم نے لکھا star this equals temp we were actually using یہ والا assignment operator which did all of this for us دیکھیں زندگی کتی by defining one correct operator all of the other functions can now use this and it is very big it's a very big shorthand for us کہ دوسی جگہ پہ a is equal to b آپ لکھ سکتے ہیں the same thing actually applies to our main code when we come to a client function of the class کہ وہاں پہ بھی assignment operator لکھا جا سکتا ہے let's move on to some of the other ones which are actually very simple let's look at the addition operator جب ہم جاتے ہیں ہم کہتے ہیں جس کی ہم نے variety تو discuss کی تھی پہلی ہم variety لیتے ہیں کہ جی a plus b جہاں a اور b دونوں matrices ہیں جب بھی ہم دو matrices کو add کرنا چاہتے ہیں first we have to ensure that they are compatible i.e. they are conformable for addition that means کہ ان کے rows ایک جتنی ہونے چاہیں اور columns ایک جتنے ہونے چاہیں ابھی ہم نے جو code آپ کو ایک چیک کرتا ہے کہ جی اگر یہ conformable ہیں تو element to element addition ہم کر دیتے ہیں اگر conformable نہیں ہیں تو پہلی والی matrix ہی واپس ہو جاتی ہے یہاں پہ جو چیز خیال کرنے والی ہے وہ یہاں ہے کہ جی ہم return کیا چیز کر رہے ہیں addition operator یاد رہے جب بھی ہم a plus b لکھتے ہیں تو نہ a چینج ہوتی ہے نہ b matrix چینج ہوگی دونوں جمع کر کے ایک نئی matrix جو کہ واپس کرنی ہے دیتے ہیں کہ دون this code once we find out that they are conformable for addition we define a new matrix having defined the new matrix اس کے اندر اب ہم tricks بھی لگا سکتے ہیں ہم define کر سکتے ہیں the new matrix using the copy constructor تو ایک matrix تو پوری پوری اس کے اندر copy ہوگی so we can say something like matrix temp star this left-hand side والی matrix کی copy بنا دو copy بنا گئی تو اس کے اندر کو add کرنا ہے add کر دیا standard nested loop concept اور اس کے بعد آپ نے return temp کرنا ہے یہ جو ہے یہ temporary matrix جو اس operator function کے اندر create کی گئی تھی اس کو ہم return کر رہے ہیں اس کا reference return نہیں ہو سکتا otherwise you will have major problems therefore efficiency or inefficient it doesn't matter we have to return the matrix لہذا یہ پوری پوری matrix stack کے اوپر copy ہوگی یہ والی matrix destroy ہو جائے گی اور پھر وہ matrix جہاں پہ بھی آپ نے assign کرنی ہے آپ نے لکھا ہوا تھا c equals a plus b تو c کے اندر یہ assign ہو جائے گی یہ چیزیں جو ہے کہ جی کہاں پہ reference جا رہا ہے اور کہاں پہ actual matrix جا رہی ہے you actually have to sit down and give it some thought it is important for you to know کہ کہاں پہ کیا چیز return کی جاتی ہے اور پھر اس کا آگے usage کیا ہوتا ہے یا اس کا behavior کیا ہوگا when we come to the a plus equal to operator اس کے اندر ذراسہ کوئرک ہے whenever we write a plus equals b اب دیکھیں فرق یہ ہے کہ a بزاتے خود بھی change ہوگی پہلے when we wrote c equals a plus b تو a اور b change نہیں ہوتے تھے ان کو جمع کرتے ہم نے c میں assign کر دینا تھا but when we use the compound operator a plus equals b then a itself is going to change so if a is going to change پہلی چیز we can return no problem so this operator بھی آئے گا return start this بھی آئے گا دوسری چیز conformability check وہی رہتا ہے جو ordinary addition کی اندر تھا both matrices must have the same rows and columns وہ بھی ہم نے چیک کر لیا تیسری چیز کو a temporary matrix بنانے کی ضرورت نہیں ہے because now since you're doing a plus equals b what it means is elements of ij plus equals m dot elements of ij so you can use the same operator inside and return a reference to the left-hand side matrix return start this and we are done دیکھیں اب تھوڑا سا code reuse تھوڑی سی efficiency آنے لگ پڑی ہمارے code کی اندر اب ہم جاتے ہیں overloaded operator plus کی طرف very very simple اگر آپ نے ایک double variable کو add کرنا ہے matrix کی اندر تو کوئی problem ہی نہیں ہے number of rows columns کا کوئی conformability کا کچھ نہیں ہے all you need to do is to add a value to every element difference یاد رہے یہاں پہ a plus d کیا جا رہا ہے a change نہیں ہوگی ایک اندر دیکھیں کی value add کر کے ایک نئی matrix return ہوگی so it is not returning a reference it is returning a matrix if it's returning a matrix it must return a matrix that's created inside this function so we say matrix temp پھر ہم copy constructor استعمال کر سکتے ہیں اس والی matrix کی copy بنا دو بن گئی which is the left hand side matrix اس نئی matrix temp کے اندر ہم نے d کی value add کی through our usual nested loops and we return temp we have defined an addition of a matrix with a double variable next function is d plus a double variable plus a اب کیوںکہ left hand side کیوں پر double آگیا ہے matrix نہیں ہے it cannot be a member function so it's a friend function if it's a friend it's defined outside the matrix you will see the scope resolution operator which was matrix colon colon اب استعمال نہیں ہو رہا it is now an ordinary standalone function it still returns a matrix so it is matrix operator plus double d comma matrix m دو arguments دیے جا رہے ہیں left hand side والا variable and right hand side والا variable باکی code is simple enough it is almost identical to the a plus d والا code جتنا یہ plus کی discussion ہم نے کی ہے یہی چیز ساری minus کے اوپر اپلائے کر جاتی ہے بالکل identical ہے صرف چیز آپ نے خیال رکھنے end کے اوپر جاکے جہاں پے d plus a کرتے تھے تو اس کا result وہ ہونا چاہئے جو a plus d کا ہونا چاہئے minus کے case میں the results are obviously different if you do a minus d تو کوئی اور جواب آئے گا if you do d minus a تو جواب مختلف ہو گا تو اس کوڑ کے اندر اتنا سفرک ہے کہ جی اب d minus a کیا جا رہا ہے the more complicated function out of all of these arithmetic manipulators for matrices is the multiplication operator the star operator how do you multiply two matrices together I spent some time a couple of lectures ago جب ہم matrices کو define کر رہے تھے to tell you کہ جی resultant matrix کا size کیا ہوگا it will be the number of rows of the first matrix times the number of columns of the second matrix پھر بتایا تھا کہ جی resultant matrix کا ایک element کیسے calculate ہوتا ہے اس کی وہ mathematical formula آپ دیکھنے یہ sum over i g ہے which looks complicated بر اگر اگر اس کو کھول کے لکھیں گے it's quite simple ایک row کا ایک element اٹھایا اس کے corresponding column دوسی matrix میں سے element اٹھایا ان کو multiply کیا پھر row کا second element column کا next element سو آپ اس طرح سے چل رہیں ایک row process ہو رہی دوسی matrix کا a column process ہو رہا ہے اور ان کی conformability بھی چک کرنی ہے سو this code is nothing more than having checked the conformability you do a little running sum running sum means accumulate کر رہے ہیں جیسے sum equals sum plus a تو وہ دیکھ لیں آپ code کے اندر ہم نے جو نئی matrix بنائی ہے which is the resultant of the product اس کے اندر ہم نے کیا کیا ہے پہلے اس کے element کو کہ دیا zero اور پھر اس کے اندر plus equal to کرتے گے انر loop کے ساتھ اور انر loop کے جو اکیر میں index اس استعمال کیا گئے ہیں ان کو آپ غور سے دیکھ لیں you will notice that the sum is on elements of ik plus or multiplied by m.elements of kj left-hand side کے اوپر i اور j ہے that is the element index کسی والی position i-th row j-th column کیسے حاصل ہوتی ہے پہلی matrix کی i-th row اور دوسی matrix کا j-th column اور k جو ہے وہ آپس میں multiply کرا رہا ہے ان کو اس لین کو آپ اچھی طرح سمجھ لیں that is the matrix multiplication operator multiplying a matrix with a double is nothing more complicated than doing an addition of a matrix and a double so the code is very very similar the only thing that differs is جب ہم matrix کو ایک double سے divide کرنے جاتے ہیں اس کے اندر ہمیں پھر چیک کرنے کی ضرورت ہے کہ یہ divide by zero تو نہیں کر رہے تو having done that little check we then go ahead and divide that matrix ان جگوں پہ ہم نے کوئی زیادہ complication نہیں دا لی کہ in other words اگر d zero ہے تو پھر کیا کرو ہم کہتے ہیں original matrix return کر دو now mathematically that is not correct so you may want to actually throw an exception which says کہ جی program یہاں پھر رکھ جائے اگر such a case آئے but normally ہم نے کہا اس وقت ہم such a case won't do اگر وہ کوئی divide کرنے کی کوشیش نہ کرو so the program will never generate an error at least a run time error generate نہیں ہوگا logical error ہو سکتا ہے so you have to worry about it کہ اس کا استعمال کہاں پہ ہوگا اس کلاس کا the last set of functions that we have defined is the stream insertion and extraction operators آا دیکھیں یہاں پہ میں code reuse کا اگامپل دینے لگاو ہم نے already input or output functions this matrix کے لیے define کر دیے and output یہاں وہ یا سکرین پے یا فائل کے ساتھ handling کر لیتے ہیں matrix کی ہم کہتے ہیں کہ یہ مجھے آب ایک operator چاہیے تاکہ میں لکھ سکوں see in greater than greater than m where m is an object of type matrix how do I do that well that means کہ جی کی بور سے پرنا ہے اور matrix m کے اندر values کو store کرنا ہے but I've already written an input function so inside the code I can simply reuse that function and say m.input ختم that is the overloaded stream extraction operator صرف فرق کہ یہ return آپ نے reference to the stream کرنا ہے so it's a two-line function and it is a good example of code reuse جب ہم نے input function لکھ لیا ہے یہاں پے اس کو استمال کر لیا جائے same thing applies to the file سے اگر آپ نے input لینی ہے so a file سے اگر extract کر کے m کے اندر file والا overloaded function استمال کر لیں گے input والا and the same pair applies to the output functions کہ جب ہم نے stream میں insert کرنا ہے یعنی see out less than less than کچھ کرنا ہے so less than less than is nothing but the m.output operator جو function ہم نے define کیا ہوا ہے and same applies to the file output یہ سارہ code matrix class یہ آپ کے سامنے اسٹمال کریں اسٹمال is very very simple and straight forward write yourself a little function یہ اوپر code copy کر دیں نیچے main کے اندر آپ لکھنے matrix m3,3 semi colon ایک matrix create ہو جائے گی جب آپ چلایں گے اس کی values zero ہوں گی prove it to yourself you can say m.output screen کے اوپر properly formatted output matrix display ہو جائے گی اسی طریقے سے آپ اور matrices define کریں get کریں اپس میں ان کو multiply کریں you will notice ملتیپلکیشن will only work if they are conformable for multiplication addition will only work if they are conformable any rows and columns برابر ہیں یا ملتیپلکیشن کی case کے اندر جو میں نے بتایا تھا rows and columns وہ اپس میں اسٹمال اسٹمال پہلی matrix کی number of columns must be equal to the number of rows of the second matrix and so on you can write a little test program which will exercise this class اپنی لیے لکھیں اس کو exercise کریں understand how it works and then try to make additions to it try to extend the class اس کے اندر کوئی new functions کوئی new features ڈالیں a simple thing to do would be to change the whole class جیسے میں نے کہا تھا double سے int میں convert کر دیں a more complicated one would be to try and write a template for this class template class t آپ کو یاد ہوگا ہمارے لیکچا سے جہاں پہ دبل ہے وہاں پہ آپ t لکھیں گے capital within angle brackets وہ پر template class t ہو جائے گا باکی چیزیں almost identical رہیں گی ہاں جو friend functions وہاں پہ آپ کو وری کرنے کی ضرورت ہے ہم نے multiplication by a double کیا ہے d جہاں پہ لکھا ہوا ہے وہاں پہ آپ نے چینج کرنا ہے کہ نہیں کرنا I don't know you make that decision so there's a lot of stuff that you can do with this but again I would say please read this code try to understand how it works and look at the various implications جہاں پہ بھی ہم matrix کا reference return کر رہے تھے میں نے اس کو const کر دیا کہ وہ غلطی سے left-hand side کے اوپر استعمال نہ ہو سکے جہاں پہ بھی ایک function ایسا ہے جو کہ calling matrix کو چینج نہیں کرتا اس function کو ہم نے const کر دیا کیسے function کے prototype کے بعد const لکھے اب it's very safe when you actually try to write the function and you try to modify the matrix and the function is declared as not being able to modify with this const جو کمپائلر ہی اس کو trap کر لے گا so const is useful for us to make sure we stay within our boundaries and parameters the class has written does not do comprehensive error checking it does some very very rudimentary error checking so you might want to enhance the class by adding some more error checks or displaying appropriate error messages if rows and columns are not equal put out a message saying matrices are not this is code matrix class which I hope sums up quite a few of the things that we have covered in this course for the remaining half of this lecture what I would like to do is start from the beginning and touch on the various things that we have covered we started this course on that we started with some programming guidelines that how this programming goes the biggest process was that keep an eye on the detail don't forget it and then we went on and started developing a way of thinking this way of thinking is a logical analysis part some problem comes to us so how to solve it that thinking is not something that we are automatically born with it is a way of thinking that develops over a period of time and that a strong recommendation at this time please write a lot of code solve little trivial problems but become completely fluent in thinking of a problem and finding out how to do it loops and decisions are bread and butter for a programmer we said that a rule that someone researched and said that any world program problem to solve it you just need three constructs one is that things can be sequentially executed i.e. one statement after that second statement after that third statement next we need to have a decision decision meaning if any condition is true do this otherwise do some other work so a simple decision or if else decision after that third construct loop which is a repetition structure that isam کا کام بار بار different values کے ساتھ کر سکیں so if we have a sequences and if we have decisions and if we have loops we can essentially write any and all programs that come up جہاں تک پھر اس کے بعد ہم چلے اور variables کا concepts or pointers کا concepts کے اوپر آئے تو میں آپ کو بتایا تھا کہ this variable کو آپ سمجھ لیں it's a name for a value ایک دبھا ہے ہمارے پاس memory کا اس کے اوپر ہم نے کوئی label لگایا ہوئے ہم وہ صرف ویریبل کا نام استعمال کر کے سارا کام کر لیتے ہیں ویریبل کی different types تھیں اس لنگویج میں یعنی c++ میں کچھ types تھیں دوسی لنگویج میں ہو سکتا ہے types different ہو it doesn't matter the basic concept is there are variables and variables can be of different data types having gone on from variables we discuss the issue of pointers that is in fact much more specific to c and c++ that this is a memory address it's the address of a location in memory و پھر ان کی manipulation کے بارے میں ہم نے بات کی پھر arrays کی باتیں آئیں which is another type of data structure which is جہاں پے ہم ایک ہی کسم کی چیز اس کی multiple value store کرنا چاہیں تو ہم arrays استعمال کرتے ہیں یہاں پے بھی آپ کو یہ بتانا important رہے گا کہ جہاں پے c or c++ یا 4 trend یہ language is concerned جہاں پے ایرے ایک ہی کسم کی ہوتی ہے یعنی ایرے کا ہر علمنت کی نویت ایک ہوتی ہے it can be an array of integers it can be an array of characters it can be an array of doubles or whatever you cannot have mixed elements inside these arrays you can't have کہ جی پہلہ علمنت int ہے اور دوسرا علمنت 4 ہے اور تیسرہ double ہے and so and so forth but there are other languages جہاں پے آپ mixed mode آپ کئی آپ نے نام سنا ہوگا ایک ڈیٹا بیس بڑھا کومنلی استعمال کیا جاتا ہے ڈیٹا بیس language ہے وہ ہے FoxPro FoxPro کے اندر آپ ایک ہی ویڈیوبرک اندر جب جہیں جو مرزی چیز ڈور کر سکتے ہیں تو اگر آپ لکھیں a equal to 3 تو وہ ایک نمیریک ویڈیوبرک بن گیا اگر آپ لکھیں اس کے بعد لکھتے ہیں a equals within quotes this is a test تو وہ character string ویڈیوبرک ڈیٹا now آپ آجائیں visual basic کی طرف تو یہاں بھی ایک ڈیٹا تائپ ہے جس کو variant کیا جاتا ہے ڈیٹا تائپ وہ کیش بھی ڈور کر سکتی ہے it's a variant it's a variable ڈیٹا تائپ it can store an integer or a double or a 4 so remember this ڈیٹا تائپ whenever we talk arrays and variables different languages behave differently there are no hard and fast rules نویڈانی اپنے لنگویجے کے وقت ویٹا کر دیتے ہیں. اور یہ بار بار چیز بدلتی رہے گی۔ اگر جو مجھے کو اندیوانکے کی تصور کے لنگویجے کے لنگویجے کے وقت ہوتی ہے جو لکھنا تھا و لکھ دیاتا ہے ایک ہوتا ہے جو یہاں بہت نائی ہے۔ ہمیں بہت حافظہ ہوتی ہے کہ مجھے دیکھا ہے کہ یہ نویڈان کیا میں بہت حقیطہ کیا گئے۔ and fundamentals وہی ہیں جو ابھی میں نے بات کی تھی sequences decisions and repetition structures decisions کے اوپر جب ہم نے بات کی تو see or see plus plus میں نے بتایا آپ کو کہ ایک سمپل if ہے if condition statements پھر اس کے بعد if else آ جاتا ہے اور پھر if else if else if else کافی لمبچ اور آپ سٹرکٹر بنا سکتے ہیں اور اس کا ایک اور variant بھی تھا جو switch statement کے ساتھ تھا میں اپنی ایک اور variant میں چھولا ہوتاہی تو because these are language specific the thing to realize is almost any and all modern programming languages will give you a decision structure اوپر کیا ہے اس کا exact syntax کیا ہے وہ language reference یہ آپ حاصل کریں when we come to repetition structures we are talking loops loops بھی see or see plus plus میں ہم نے دیکھا کہ تین مختلف کسم کی ہو سکتی ہیں ایک while loop ہے وایلوپ ہے ایک دو وایلوپ ہے اور ایک فورلوپ ہے آپ نے دیکھا ہوگا ہماری کلاس میٹرکس میں ہم نے ساری فورلوپ سے استعمال کی ہے as an exercise you might want to replace the فورلوپs with a وایلوپ maybe it's an intelligent maybe it's not you see if that is possible but the idea again is that there are several alternatives possible جہاں پہ بات آتی ہے کہ جی مجھے اس کا سنٹیکس یاد رہے گا کہ نہیں you can always look it up more important is the fact کہ جی استعمال کونسی کرنی ہے جب ہم لوپس دیس کرس کر رہے تھے تو میں آپ کو یہ بھی بتایا تھا کہ ان کے اندر ایک سٹل difference ہے نویت میں فرق ہے فرق ہے کہ اگر وایلوپ استعمال کرتے ہیں تو اگر condition falls ہو جاتی ہے تو اس کی body جو ہے وہ ایک دفعہ بھی execute نہیں ہوگی in other words a وایلوپ execute zero or more times on the other hand if you write a loop which is do something while this condition is true then at least do کے بعد جو بلوٹ لکھا ہوا ہے وہ کم از کم ایک دفعہ ضرور execute ہوگا so a do while loop executes one or more times the for loop is more like the while loop it will execute zero or more times ہر لوپ کا ایک بیسک سٹرکٹر ہے جو again is independent of the language کہ جی کچھ initialization ہے کچھ اس کی condition ہے کہ کب تک اس لوپ نے چلنا ہے اور پھر کچھ اس کی body ہے کہ جی اس لوپ کے اندر ہم نے کیا کرنا ہے یہ تقریبا سب languages میں common ہے again the syntax is particular to the language loops and arrays سے نکل کے پوائنٹر سے نکل کے we did some rudimentary rudimentary formatting and then we started our discussion of classes and objects so basic programming construct سے اب ہمارے پاس آگئے ہم نے top down programming cover کر لی ہم نے کہا کہ جی functions بنانے چاہیں چھوٹے چھوٹے functions ہونے چاہیں تو again I'll refer you to today's lecture and the previous lecture آپ نوٹس کریں گے کہ پوری matrix class کے اندر میرے خیال میں کوئی بھی ایک operator یا function کا code ایسا نہیں ہے جو ایک پیج سے بڑا ہو ہا matrix class بزات ہے خود شاید ایک پیج سے بڑی ہو کیونکہ اس کے اندر ہم نے ساری declarations جو ہیں وہ ایک ایک لائن کر کے دالی ہوئی ہے اور آپ declarations ایاد کریں گے تو وہ لمبا ہو جائے گا لیکن that's not the function of the module that we talking about ہم نے گائیڈ لائن دی تھی it's not hard and fast but the idea is whenever you write a function whenever you write some code it should be short and concise self-contained and understandable comments جو ہیں وہ liberally place کیا جائیں لیکن comments should explain logic not the mechanics try not to do fancy programming اب یہ جو آپ نے matrix class کا code دیکھا ہے اس کے اندر میں نے بڑی explicit programming کی ہوئی ہے آپ دیکھیں گے تو کئی جگہ بھی آپ کو نظر آئے گا کہ میں نے for loop کے لیے braces ڈالے ہوئے جا for loop کے اندر صرف ایک statement ہے it's a matter of habit the braces are not necessary if the for loop کی body کی اندر صرف ایک statement ہو but if you write those braces cost very little two key strokes opening brace closing brace فائدہ اس کا یہ ہے کہ اگر کل کو آپ نے کہا کہ ہو اس for loop میں تو اور چیزیں بھی کرنے والی تھی تو آپ وہاں پہ سکتے ہیں and the logic remains intact یہ کرتکلی یاد رکھنے کی بات ہے جو ڈینٹیشن ہے جو left مادن سے ہم اندر کو کرکے لکھتے ہیں اس کا programیٹکلی کوئی مطلب نہیں it does not mean anything at all what means something is how you structure the code using braces and semicolons وہ ہے لنگوچ کا structure otherwise c or c plus پرس پرس یہ ہے یہ free format languages ہے آپ چاہیں تو پورا کوئی ایک لائن میں لکھتے ہیں bad idea پرنا مشکل ہوگا but لکھا جا سکتا ہے ہورانی لنگوچ جو تھی کو بول تھی for trend تھی ان کے earlier versions were very religious فلانے کولم میں سے آپ نے لکھنا شروع کرنا اس کولم سے آپ آگے نہیں جا سکتے ہیں and so on so forth now a days we have free format languages when we format our code we do it so that we can read it easily so indentation is for us not for the compiler not dictated by the language on the other hand if you put your code inside braces and blocks that is a logical syntax for loop کے دو برسیز کے درمیان جو کوئی ہے وہ for loop کی body کی اندر تصور کیا جائے گا وہ execute ہوگا if statement کے بعد اگر برسیز کے ساتھ اپنے کچھ لکھا ہے تو جتنی statements braces کے اندر ہیں وہ if statement سے affect ہوگی when we had got all these concepts cleared we moved on into this area of classes and objects when we started classes and objects میں نے آپ کو ایک چیز بھتا دی کہ یہ کوس تو ہے یہ object oriented programming کا کوس نہیں ہے یہاں پہ ہم classes and objects کے concepts آپ کو دینا چاہتے ہیں تا کہ آپ کو implementation اور interface کا فرق پتا چل سکے آپ کو پتا چل سکے کہ ہم encapsulate کیسے کرتے ہیں اور آج کل کے حوالے سے ایک بڑے important چیز کے جی code اور data جو ہے اس کو ایک کتھا کر کے ہم نے ایک object بنانی کی کوشش کی ہے and that means that a new type of variable a user defined data type comes into being which not only has its own data structure but it also has the code that manipulates that data structure فائدہ یہ ہے اس کا data hiding اور encapsulation کا کہ ہر چیز ایک دببے میں بند ہوکے debug ہوکے تیار ہوکے پڑی ہوتی ہے جب ہم main program لکھنے آتے ہیں جس نے in classes اور objects کو استعمال کرنا ہے وہاں پہ ہمارا code بہت ہی سمپل ہو جاتا ہے you can reuse this code again and again ایک class define کی جیسے آج ہم نے matrices کی بات کی ہے تو اس کو آپ ہر جگے پہ جہاں پہ بھی matrix استعمال کرنی ہوگی وہاں استعمال کر سکتے ہیں اور اس کے سارے functions آپ کو automatically مل جاتے ہیں you do not have to worry about کی جی matrix class کے اندر جو variables تھے ان کے کیا نام تھے اس کی نوپ میں کیا دلہ ہوا تھا they are hidden from you as the user of the class they are hidden and you can use those variable names in your own program and there is no conflict this was not the case when we were talking about the visibility of variables at file scope your functions scope when we put all of this together the concept of doing object-oriented programming becomes clearer but that is a whole separate course اس کے اندر آپ inheritance کی بھی بات کریں گے ایک کلاس سے دوسی کلاس کیسے بنائی جاتی ہے اس کے اندر آپ polymorphism کی بھی بات کریں گے چلتے چلتے program جب چل رہو not at compile time to determine کی جی کونسا والا function call کرنا ہے very very important and powerful methods and then the whole idea of thinking in objects وہ ہم نے اس میں اتنا زیادہ کبر نہیں کیا یہاں پہ ہم نے mechanics cover کی ہے یاد رکھے کہ جب ہم نے mechanics کی بات کر رہے تھے کہ جی ایک function member function کیسے implement کرنے ایک member operator کیسے implement کرنا ہے تو آپ نے یہ دیکھا ہوگا کہ جی سارہ جو ہمارا پہلے half of knowledge تھا وہ یہاں پہ استعمال ہو رہا تھا وہی sequences وہی decisions وہی repetition structures جو ہیں وہ ان سب member functions or friend functions وگرہ کے لیے استعمال ہو رہے تھے so we actually built on our previous knowledge and introduced two basic new concepts کیجی classes بھی ہوتی ہیں class جو ہے وہ user defined data type کو define کرتی ہے اور پھر اس data type کو لیکے ہم اس کے instances create کر سکتے ہیں which are called objects the whole concept of using objects and using their notation which is object dot member where the member could be a data type or could be a function that is what we have been exercising we also mentioned that you can have pointers to objects اور پھر اسی طریقے سے جیسے pointers to struct ہوتا ہے اسی طرح pointers to object کے اندر صرف notational کچھ difference آتا ہے کہ pointer کے ساتھ جب آپ member variable یا member data کو manipulate کر رہے ہوتے ہیں تو آپ arrow notation استعمال کرتے ہیں rather than the dot notation but the concept of pointers is very important but it is more limited to see and see plus plus اس چیز کا آپ کو خیال رکھنا ہے جو modern languages آئی ہیں وہ کہتے ہیں کہ جی pointers are dangerous now modern language سے میں مراد ہے جاوہ for example وہ کہتے ہیں کہ جی pointer کے ساتھ تو آپ memory میں کہیں پے بھی جاکے کوئی value بدل سکتے ہیں اس کے بعد pointer کے اندر یہ بھی مسئلہ ہے جو ہم بار بار اس کے بات کرتے ہیں کہ جیٹ کوٹ بھی pointing to nowhere ہم نے memory allocate کی تھی کسی اور طریقے سے deallocate کر دی دینگلن pointer رہ گیا یا memory allocate کی اس کا pointer حاصل کر لیا اور pointer destroy کر دیا memory allocated رہا گئی ان چیزوں کو адرس کرنے کے لیے جاوہ کے اندر pointers کی concept کی بجائے صرف references رہ گئے ہیں اور references کے ساتھ جو انہوں نے کیا ہے which is a very very major step وہ ہے کہ جی آپ کو ایک garbage collection کا concept دے دیا ہے garbage collection اب یہ دیکھیں جو memory ہم استعمال کرتے ہیں وہ تکڑوں تکڑوں تکڑوں میں ہوتی جاتی ہے ایک تکڑا یہاں سے حاصل کیا پھر یہاں سے کوئی اور چنک حاصل کیا اس کو فری کر دیا تو بگیننگ میں جو ہمارے پاس freestore تھا ایک solid area of memory جو فارق تھا اب اس کے تکڑے تکڑے ہو چکے اس کے بعد کہیں پہاں memory allocate کرتے ہیں کہیں پہاں اس کو فری کرتے ہیں delete operator کے تھوے and so on and so forth جاوہ میں ان سب ہیڈیک سے ہمیں نجات مل جاتی ہے what we can do is we can allocate memory as we want and use it and when we don't need it in other words when our program stops referencing that memory automatically پیچھے سے ایک جھاڑو پہر دیتے ہیں which is called garbage collection that's why the name is جھاڑو لیا اور garbage سارای کتھا کر لیے یہ اوٹمیٹکلی ہو جاتا ہے یہاں پے matrix class میں جب ہم بات کر رہے تھے تو میں نے بات کیا کہ جی کیونکہ یہ dynamic memory allocation کرتی ہے class اس واستے اس کے لئے destructor دینا لازمی ہے اور destructor جو وہ memory کو فری کرے گا جاوہ کے اندر جب جائیں گے تو constructor تو memory allocate کر سکتا ہے destructor کی ضرورت نہیں رہتی اس کام کے لئے because جب آپ object استعمال کرنا ختم کر دیتے ہیں تو پیچھے garbage collector automatically memory کو لے کے باپس free store میں دال دیتا ہے so languages keep evolving new concepts new constructs will keep happening but the foundation must be strong you have to know what is programming you have to know ایک problem کو لے کے اس کو توڑ کے اس کا essence کیسے نکالا جاتا ہے جو design recipe تھی اس کو repeat کرنا اگر آپ سو دفعہ بھی repeat کریں کم ہوگا you have to understand کہ جی problem کو توڑ کے پہاپس اس کے ساتھ examples لکھ دیا جائیں کچھ چیزیں ہاتھ سے work out کر لی جائیں working by hand is never wasteful it clears up the concepts کچھ ایریاں آتے ہیں جہاں پہ بہت complicated decision structure بات جاتے ہیں وہ بھی میں آپ کو ایک preview دیتا چاہے ہوں آندہ کا آپ کے لئے ایک complicated logical expression کو evaluate کرنا جو ہے وہ کئی دفعہ مشکل ہو جاتا ہے کہ آپ اس کا کوئی آسان طریقہ ہو سکتا ہے لکھنے کا when I say a complicated logical expression تو یہ problem دومین کے ساتھ obviously related ہے لیکن you can think in terms of کے جیگر بندے کی تنخہ اس سے زیادہ ہے اور اس کی عمر اس سے کم ہے اور اس کے چار بچے ہیں اور وہ گاڑی رکھتا ہے تو پھر اس کا tax اتنا دیدک کرنا ورنا یہ کرنا ورنا یہ sometimes the logic becomes extremely complicated even writing that as a simple syntax statement in any language writing if a is greater than b and c is not equal to d and e is less than x or something like that it becomes complicated when you try to figure out کسی چیز کس طرح سے evaluate ہوگی referring back to introduction to computing آپ کو truth tables کا concept دیا گیا تھا truth tables are very important they are still a tool available to you for analyzing logical expressions looking into the future آپ logic design پڑیں گے which is actually to do with chips and gates how we put these things together لیکن logic design کے اندر there are certain techniques called minimization techniques کجی ایک ایک اپنے سرکٹ بنانا ہے وہ کم سے کم چیپس کے ساتھ موست ایفیش انکلی کیسے بنائے جا سکتا ہے وہ جو minimization techniques ہیں سنس دیل بھی بولین ایل جبرہ which means logic and therefore it's logic design وہی تیکنیکس آپ کی پروگرمنگ کے اندر بھی استعمال ہوتی ہیں so I would strongly urge you کے آپ کا vision جو ہے نا اس میں آپ bread رکھیں do some horizontal integration ابھی میں آپ کو idea دیا کیسا کس نہیں تھا جو آپ نے پر لیا اور اس میں نمبر حاصل کر لیا اور وہ ختم ہو گیا no that is knowledge that you must carry over and when you writing programs for this course maybe there are some concept from that course that are required to do the analysis looking into the future when you've done your logical design and you've learned how to minimize circuits please realize کے جی وہ minimization techniques وہی ہیں جو logical analysis یہاں پہ پروگرمنگ کے اندر استعمال ہوتی ہیں in fact اگر دیکھا جائے تو how do we use new computers to design even newer and more powerful computers it's an example of horizontal integration always think outside the box always think in terms of گاڑی چل رہی ہے اس کے کیا پیرمیٹرز کالکلیٹ کیا جا سکتے ہیں اس کا design کیسے ہوگا there's a way of thinking for us programmers we always look at problems slice and dice them and come up with solutions کیجی اس کو اس سٹرکٹر کے ساتھ سول کیا جا سکتا ہے programming as a skill is in fact so important it is so important from a way we think from a logical analysis perspective کے کچھ لوگ academic دنیا کے اندر اس چیز پر بھی انسسٹ کرتے ہیں کہ جی programming جو ہے وہ ہر بچے کو سکھانی چاہیے regardless of کے بڑے ہو کہ اس نے پینٹر بننا ہے یا philosophy بننا ہے poet بننا ہے doctor بننا ہے programming اس کو آنی چاہیے کیونکہ ایک سوچنے کا طریقہ یہ دیویلپ کرتی ہے so ہمارا جو کوس تھا it had a big element of the specific language جس کو میں کہتا ہوں the vehicle for the course because ہم اس کے سنٹیکس کے بھی بارے میں بات کر رہے تھے لیکن بار بار میں اس چیز کو stress کرتا رہا ہوں کہ جی آپ کو fundamentals کے اوپر زور لگانا ہے آپ کو یہ پتا ہونا چاہیے کہ جی programming کے طرح ہم کر کیا سکتے ہیں کیسے کرنا ہے وہ چیز اس لنگوچ کے reference book کی اندر موجود ہے یا compiler کی online help کی اندر مل جاتی ہے آپ کو کیسے والا حصہ will always change new languages will evolve they will come into being and you will always have to read and learn about the new languages on the other hand what is to be done کیا کرنے والا ہے that depends on your logical skills and fundamental knowledge اس چیز کو آپ نے develop کرنا ہے business کی دنیا کے اندر بہت ساری programming جو ہے وہ دیتا بیس orientated programming ہوتی ہے جو آج کل کے بڑے دیتا بیس اس ہیں جیسے oracle ہے یا SQL server ہے microsoft سے اور product سے اس کے اندر ایک اور کسم کی language استعمال ہوتی ہے وہ languages ہیں جن کو ہم عام طور پہ structured query languages کہتے ہیں SQL versions کہتے ہیں SQL in fact اتنی important ہے کہ اس کا standard بھی بن چکے so there is an NC standard for that language اس لنگوچ کا اور ہم جو conventional programming لنگوچے کی بات کر رہے ہیں ایک major فرق ہے those languages by and large سے tell me what you want and I will determine how to do it where as in our conventional languages like C or C plus plus we have to tell the language what we want to do and also how to do it there is a difference اس کو آپ دیکھیں گے تو arm terminology کے اندر for third generation language or fourth generation language کی بات ہوری ہوگی وہاں پے سوچنے کا طریقہ پھر ایک طفہ جمپ لگاتا ہے you have to think differently because now you don't worry about how to do that job you just tell the database کہ مجھے چاہیے کیا so you say something like کہ مجھے department number دے دو اس میں بتا دو کتنے employees ہیں اور ان کے جمع کر کے مجھے بتا دو کہ total salary ایک مہینے میں کیا ہوتی ہے that's it you don't tell it how to do it and that language automatically integrates with the database in a certain fashion and comes up with the results اس کے اندر optimizers بھی بلتیں ہیں optimizers means کہ اس کوئری کو یا اس کوسچن کو سب سے efficient لی کیسے execute کرنا ہے وہی اسی کسم کی optimizers ہمارے کمپیلرز میں بھی بلتیں ہیں جب ہم کوڑ لکھتے ہیں کمپیلر اس کوڑ کو ایک دفعہ چھانتا ہے دیکھنے کے لیے کہ اس کو سب سے تیز دریگے سے سب سے efficient لی کیسے execute کیا جا سکتا ہے آج کلکہ جو modern کمپیلرز ہیں اس کے اندر بڑی لم بی چاڑی جو ہے optimization ہوتی ہے ایک آپ کو میں interesting سا واقع سناتا چلوں پرانے زمانے کا یہ کمپیلرز جو ہیں وہ مختلف کمپنیہ لکھتی ہیں software companies یا computer manufacturers لکھتے ہیں ان کمپیلرز کے اندر بھی کئی دفعہ ریس لگ جاتی ہے ریس اس طرح کی لکھ جاتی ہے کہ جی best for trend کمپیلر کس کمپنی کا ہے now standard ایکی ہے the idea is ایک ہی کوڑ کسی کمپیلر کو دیا جائے تو اس کا جو executeable version ہے وہ کتنا تیز چلتا ہے اور کتنی کم memory استعمال کرتا ہے these are normally the two yard sticks of output code انہوں نے جنب speed دیکھنے کے لیے ایک loop ڈال دی ڈمی loop سمجھ لے آپ کی c کے اندر اگر لکھی ہو loop تو ایسی ہوگی for i equal to zero i less than one million i plus plus آگے semi call do nothing ایک کمپیلر جو تھا اگر وہ لیرہا تھا ایک گھنٹا اس کام کو چلانے کی لیے executeable code کو تو دوسرہ کمپیلر جو تھا وہ microsecond میں کر دیتا تھا انہوں نے کہ جی فرق تو ہوگا کمپیلرز میں پر اتنا زیادہ کیسے فرق ہوگا جب اس کو پورا investigate کیا تو پتہ چلا ایک کمپیلر اتنا ہیلی اپٹیمائیس کمپیلر تھا کہ وہ لنگوج کو پڑھتا تھا دیکھتا تھا اس loop میں کچھ نہیں ہو رہا تو اس loop کوئی نکال دو it would do that decision and therefore that program obviously ran in a microsecond the same thing applies to the application of the what and how in our languages in the conventional programming languages we are also doing the how as programmers we need to know how to specify that part we have to tell the computer کہ دی اس problem کو حل کس طرح سے کرنا ہے اگر آپ دیکھیں جو میں نے oracle or SQL ڈیٹا بیسیز کی آپ کو example دیا کہ وہاں پے how ہم نہیں دیتے یاد رہے کہ وہ کہیں computer کے ساتھ پیدا نہیں ہوئے وہ بھی programmers نہیں لکھیں so where is that language provides this facility that you ask the what and I will determine the how that facility itself was provided by programmers so you still need it even advancements in the very field of computing it will be programmers in other words computer scientists who will be producing these advances so fundamentals are important but keeping a breadth of vision is also critically important you have to constantly keep up with the literature keep up with new developments experiment with more and more new tools اگر آپ ایک یا دو لنگوڈی سیکھے ختم کر دیتے ہیں گارنٹیڈ you will be behind the times in no time whatsoever talking about languages is not that important talking about programming is critically important I have mention to you کہ یہ programming کی various features facets کس طرف کو جا رہے ہیں you will constantly come up against new situations اگر آپ کا فندمینٹل نالید سوند ہے کوئی نئی لنگوڈ آپ کو فیز نہیں کر سکے گی you will never feel overpowered by the presence of a new language because your fundamental concept should be sound how they can become sound only by practicing more and more in experimenting more and more بہت ساری چیزیں جو ہیں آپ کے کوریکلم کے اندر وہ ہوں گی فندمینٹل کے اوپر بیست this is the way i believe a proper curriculum should be structured ہم نے یہاں پہ سی اور سی پلس پلس کو as a vehicle استعمال کیا ہے لیکن میں stress usually کرتا رہا ہوں کہ دیو fundamental concepts کیا ہیں آگے چلیں گے آپ کو کوئی اور exercises ملیں گی data structures کا کورس آ رہا ہے ابھی object oriented programming کے اوپر کورس آئے گا نئی languages آئیں گی لیکن again i would like to repeat please do not worry about the syntax of that language that's okay if you know it but things are going to change what is important are the concepts attached to that course in a normal university curriculum ہم جو ہے tools کے اوپر ذور نہیں لگاتے ہم concepts اور fundamentals کے اوپر ذور لگاتے ہیں tools کے اوپر concept میرا تو ایک مزکم یہ ہے کہ جی وہ ایسی چیز ہے کہ آپ کتاب اٹھائیں خود پڑیں اور سیکھنے and that is important for you to realize as well اگر آپ کو word processing آتی ہے اس کا یہ نہیں مطلب کہ آپ کو ایک manufacturer کا ایک software کمپنی کا ایک product استعمال کرنا آتا ہے اگر word processing کہیں میں ایک سامپل لوں تو you the concept دے رہا ہے کہ جی ایک character ہے اس کے کچھ attributes ہوتے ہیں وہ bold ہو سکتا ہے italyx ہو سکتا ہے underline ہو سکتا ہے superscript ہو سکتا ہے subscript ہو سکتا ہے اس کی font کی شکل بدل سکتی اس کا size بدل سکتا ہے یہ چیزیں have nothing to do with product a اور product b they have to do with the concept of word processing if you realize that characters کو جوڑکی ہم word بناتے ہیں word سے پیرگراف بن جاتا ہے تو پیرگراف کی اپنی properties آ جاتی ہے can be justified it can be left justified right justified again it's a facility that most word processors will offer you the important thing is for you to realize کجھ question پوچھنا کنسا ہے if you know what questions to ask the answers will always be there in the reference material that you get the same thing actually applies to programming and I will just repeat myself by saying if you know a sequential structures decision statements and repetition structures کے ساتھ ساری programming کی جا سکتی ہے تو یہ objects or classes are on top they give you a different way of expressing your programming ڈیرز ان پروپ لمس we have covered a lot of material in this course but the material pertains to concept and one vehicle language practicing that language is important because it's a very popular language and most of the operating systems are written in that language nowadays but story should not stop there please stress on the fundamentals learn the concept and move on become experts in this language but learn new languages and learn many of them you will notice that at the end you will be able to do a comparison you will be able to determine اہ یہ پروپ لم ہے اس کے لیے فلانی لنگوج اچھی رہے گی یہ پروپ لم ہے اس کے لیے وہ والی لنگوج استعمال کرنی چاہی ہے that is going to be part of your toolbox your final exams are coming up I hope you do well but that only happens if you have worked hard and studied well for those examinations so I will wish you good luck and say Allah Hafiz