صفحه 1:
فصل ۴ کلاسها (۱) TH EDITION

صفحه 2:
مقدمه * کلاسها مهمترین امکان و ویژگی هستند که برنامه نویسی شیء گرا (000) را مقدور می سازند برنامه نویسی در جاوا شامل تعریف تعدادی کلاس است - هر برنامه یک کلاس است — تمامی نرم افزار کمکی حاوی کلاس‌پاست 7 تمامی انواع تعریفی برنامه نویس کلاس هستند * کلاسها در جاوا نقش محوری دارند http://ce.sharif.edu/~rouhi 42

صفحه 3:
تعریف کلاسها * شمااز قبل به استفاده از کلاسها و اشیاء ایجاد شده از آنها و چگونگی احضار متدهای آنها واقف هستید - برای مثال, شما پیشتر از کلاسیای 5۲109 و 5681006۲ استفاده کردید * اکنون. چگونگی تعریف کلاسهای خود و متدهای آنها. همین طور ایجاد اشیاء خودتان را از آنها می آموزید http://ce.sharif.edu/~rouhi 43

صفحه 4:
هر كلاس يك نوع است * كلاسء نوع به خصوصي از نوع تعريفي برنامه نويس است و مى توان متغيرهايى از نوع يك كلاس تعريف كرد * يك مقدار از نوع يك كلاسء يك شىء يا يك نمونه از كلاس ناميده مى شود - اگر ۸ یک کلاس باشد. در این صورت عبارتبایی مثل «013 از نوع ‎A‏ ‏است». «018 یک شیء از ۸ است» 9 ‎Dla»‏ یک نمونه از ‎Rous‏ ‏است» به یک معنی هستند * یک کلاس انواع داده هایی که یک شیء می تواند داشته باشد. در کنار اعمالی که می تواند انجام بدهد را تعیین می کند

صفحه 5:
مقادیر نوع بدوی در مقایسه با مقادیر نوع کلاسی * یک مقدار نوع بدوی, یک تکه ی منفرد از داده هاست * یک مقدار نوع کلاسی یا شیء می تواند تکه های داده ای متعدد در کنار اعمالی که متد نامیده می شوند. داشته باشد - تمامی اشیاء یک کلاس, متدهای یکسانی دارند < تمامی اشیاء یک کلاس. مقادیر داده ای یکسانی دارند (به عبارتی. نام. نوع و تعداد آنها یکی است) - برای یک شیء مفروض, هر تکه از داده ها می توانند یک مقدار متفاوت نکه بدارند

صفحه 6:
محتوای تعریف یک کلاس تعریف یک کلاس, اقلام داده ها و متدهایی را که تمامی اشیاء آن خواهند داشت مشخص می کند گاهاً به این اقلام داده ها و متدها اعضای شیء گفته می شود اقلام داده ای, فیلدها یا متغیرهای نمونه نامیده می شوند اعلان متغیرهای نمونه و تعاربف متد می توانند به هر ترتیبی در تعریف کلاس قرار بگیرند nttp://ce.sharif.edu/—rouh

صفحه 7:
new ‏عملگر‎ يك شىء از يك كلاس توسط متغيرى از نوع كلاس نامكذارى يا اعلان مى شود ClassName 298۲ در ادامه. بايستى از عملكر لالا©1! استفاده شود. تا شىء: ايجاد شده و با نام متغيرش مرتبط شود ‎classVar = new ClassName();‏ اين عملیات را می توان به صورت زیر ترکیب کرد: ClassName classVar = new ClassName(); http://ce.sharif.edu/~rouhi

صفحه 8:
متدها و متغیرهای نمونه * متغیرهای نمونه را مي توان به شکل دو مثال زیر تعریف کرد: ‎public (Modifier) ,Sssol a, —‏ توجه كنيد (فعلاً): public String instanceVar1; public int instanceVar2; * به منظور ارجاع به يك متغير نمونه ى خاصء قبل از آن. نام شیء مربوطه را به صورت زیر بیاورید: objectName. instanceVar1 objectName. instanceVar2 http://ce.sharif.edu/~rouhi 48

صفحه 9:
متدها و متغیرهای نمونه تعاریف متد به دو قسمت تقسیم می شوند: یکی سرخط (7680/19/) متد و دیگری بدنه ی متد ‎public void myMethod()‏ { ‎code to perform some action‏ ‎and/or compute a value‏ 1 متدها با استفاده از نام شیء فراخواننده و به دنبال آن نام متد. به صورت زیر احضار می شوند: ‎classVar.myMethod();‏ احضار یک متد با اجرای بدنه ی متد معادل است

صفحه 10:
مکان و نام فايلها * به ياد داشته باشيد كه: هر فايل جاوا بايستى با كلاسى كه در بر مى كيرد هم نام بوده و يسوند .31/3[ داشته باشد - برای مثال, یک کلاس به نام 13255) 10۷ بایستی در فایلی به نام ‎on v3 MyClass. java‏ ‎Sa *‏ برنامه ی شما و تمامی کلاسهایی که از آنها استفاده می کند بایستی در یک دایرکتوری يا پوشه قرار بگیرند ‎http://ce.sharif.edu/~rouhi 4-10

صفحه 11:
راجع به متدها بیشتر بدانیم * دو نوع متد وجود دارند: — متدهایی که محاسباتی داشته و یک مقدار بر می گردانند - متدهایی که یک عمل انجام می دهند * اين نوع متد مقداری بر نمی گرداند و متد ۷010 نامیده می شود هر یک از اين نوع متدها در چگونگی تعریف» همین طور نحوه ی احضارشان (معمولاً) با هم اندکی تفاوت دارند nttp://ce.sharif.edu/—rouh 411

صفحه 12:
راجع به متدها بیشتر بدانیم * متدی که مقداری بر می گرداند بایستی نوع آن مقدار را در سرخط خود مشخص کند ‎public typeReturned methodName(paramList)‏ ۴ هر متد 0 در سرخط خود از کلمه ی کلیدی 0 استفاده می کند تا نشان بدهد که مقداری بر نمی گرداند: public void methodName(paramList) http://ce.sharif.edu/~rouhi 4.12

صفحه 13:
main is a void Method ‏برنامه در جاوا صرفاً کلاسی است که یک متد ۲۲121۲ دارد‎ زمانی که شما فرمانی برای اجرای یک برنامه ی جاوا صادر مى كنيده سیستم زمان اجرا متد 10811] را احضار می کند توجه داشته باشید که ۲۲۵110 یک متد ۷0۵01 است. هم چنانکه سرخط آن گواه این مطلب است: public static void main(String[] args) http://ce.sharif.edu/~rouhi 4.13

صفحه 14:
دستورات ۳۵۲۷۲0 * بدنه ی هر دو نوع متد شامل ليستى از اعلاها و دستورات است که در ميان يك زوج [1 قرار می گیرند: public <void or typeReturned> myMethod() { declarations statements http://ce.sharif.edu/~rouhi aaa

صفحه 15:
دستورات ۳۵۲۷۲0 بدنه ی متدی که یک مقدار بر می گرداند بایستی شامل یک یا چند دستور ۲611۲۳ هم باشد دستور ۲611۲۳ مقدار برگشتی را مشخص کرده و احضار متد را پایان می دهد ‎return Expression;‏ E53 JI baa 4 4 Like po rile jo Expression — ‏ب ركشترليسسدش ده در سرخطمتد منتبی‌شود. باشد‎ http://ce.sharif.edu/~rouhi 4.5

صفحه 16:
دستورات ۳۵۲۷۲0 متدی که ۷۵/01 باشد نیازی به دستور ۲6۲1۲۲۱ ندارد. مگر اينکه شرایطی پیش بیاید که بخواهیم پیش از تمام شدن تمام کد اجرایی متد. برگردیم در اينجاء چون متد مقداری بر نمی گرداند. یک دستور ۲6۱۲۳ استفاده می شود که عبارتی ندارد: return; http://ce.sharif.edu/~rouhi

صفحه 17:
تعاریف متد * احضار متدی که مقداری بر می گرداند می تواند به عنوان یک عبارت در هر جایی که مقدار برگشتی آن مورد نیاز است استفاده شود: typeReturned tRVariable; tRVariable = objectName.methodName() ; * احضار یک متد ۷0/0 یک دستور ساده به صورت زیر است: objectName.methodName() ; http://ce.sharif.edu/~rouhi 417

صفحه 18:
هر متدی می تواند به صورت یک متد ۷0[0 استفاده شود * متدی که یک مقدار بر می گرداند می تواند عملی هم انجام بدهد * اگر شما می خواهید که عمل انجام شود اما به مقدار برگشتی نیاز ندارید. می توانید طوری متد را احضار کنید که گویی مقدار نداشته و ۷0/0 است؛ به اين ترتیب. مقدار برگشتی دور ريحتة هی فود objectName. returnedValueMethod ( ) ; nttp://ce.sharif.edu/—rouh

صفحه 19:
متغیرهای محلی متغیری که در میان تعریف یک متد اعلان می شود متغیر محلی نامیده ۰ می شود - تمامی متغیرهایی که در تعریف متد ۲۲۵۱۲ اعلان می شوند متفیرهای ۳ 7 تمامی پارامترهای متد. متغیرهای محلی هستند = اگر دو متد داشته باشیم که هر یک. متغیر محلی یکسانی داشته باشند. اين متغيرها باز هم متغیرهای کاملا متفاوتی هستند (به عبارتی. محلی متدهایشان هستند) nttp://ce.sharif.edu/—rouh

صفحه 20:
متغیرهای سراسری * برخی زبانهای برنامه نویسی نوع دیگری از متغیر را که متغیر سراسری نامیده می شود. به ميان مى أورند * زبان جاوا متغيرهاى سراسرى ندارد! http://ce.sharif.edu/~rouhi 4.20

صفحه 21:
بلاکها * بلاک نامی دیگر برای یک دستور مرکب است. یعنی مجموعه ای از دستورات جاوا که در دل یک زوج [) قرار می گیرند * هر متغير كه در ميان یک بلاک اعلان می شود محلی آن بلاک است و نمی تواند در بیرون از آن بلاک استفاده شود همین که متفیری در میان یک بلاک اعلان شد. نام آن نمی تواند برای هر چیز دیگری در تعریف همان متد استفاده شود http://ce.sharif.edu/~rouhi 421

صفحه 22:
اعلان متغیرها در دستور ‎FOr‏ شما مى توانيد يك يا جند متفیر را در مان بخش مقداردهی آغازین يك دستور 101 اعلان كنيد متغيرى كه به اين نحو اعلان مى شود. محلى حلقه ى 501 خواهد بود و نمى تواند در بيرون از حلقه استفاده شود اكر مى خواهيد از اين متغير در بيرون از حلقه هم استفاده كنيد. در اين صورت آن را در بيرون از حلقه ى 101 اعلان كنيد nttp://ce.sharif.edu/—rouh 4-22

صفحه 23:
پارامترهای از نوع بدوی متدهایی که تابحال ديده ايم هيج گونهپارامتری نداشتند که با یک زوج پارانتز تهی در سرخط متد مشخص می شد برخی متدها نیاز به دریافت داده های اضافه تری از طریق لیستی از پارامترها دارند تا کارشان را انجام بدهند - به اين پارامترها, پارامترهای فرمال نیز گفته می شود nttp://ce.sharif.edu/—rouh

صفحه 24:
پارامترهای از نوع بدوی * ليست يارامترء توصیفی از داده های لازم یک متد را ارائه می دهد - آن تعداد و نوع داده های تک تک لازم آتبا را مشخص می کند. ترتیبی که بایستی داده شوند و اسامی محلی این مقادیر که در متد استفاده شده اند: public double myMethod(int pl, int p2, double p3) http://ce.sharif.edu/~rouhi 4.24

صفحه 25:
پارامترهای از نوع بدوی * ومانيكه متدئ أحضار مى شوم‌بایستی مقادیرسانبی جعدو مشقل آرخویشا ارسال شوند - به آر گومانا پارامترهای واقعی نیز گفته می شود * بایستی تعداد و ترتیب آرگومانها با آنهایی که در لیست پارامترها هستند تطبیق نمایند * بایستی نوع هر آرگومان با نوع پارامتر متناظرش سازگار باشد: int a=1,b=2,c=3; double result = myMethod(a,b,c);

صفحه 26:
پارامترهای از نوع بدوی * در مثال قبل, مقدار هر آرگومان (نه نام متغیر) در پارامتر متناظر از متد قرار مى كيرد - اين روش اتصال آركومانها به بارامترهاى فرمال به راهكار فراخوانى با مقدار معروف است

صفحه 27:
پارامترهای از نوع بدوی اگر نوع آرگومانها و پرامترها به طور دقیق تطبیق ننمایند. جاوا سعی خواهد كرد كه يك تبديل نوع خودكار انجام بدهد - در مثال قبل. مقدار ]110 آرگومان ) به یک 00۱1016 تبدیل خواهد شد <- یک آرگومان بدوی می تواند به صورت خودکار از هر کدام از انواع زیر به هر یک از آنبایی که در سمت راست آن نوع در لیست زیر باشد تبدیل نوع داشته باشد: byte>shortint—Long—float—double http://ce.sharif.edu/~rouhi

صفحه 28:
پارامترهای از نوع بدوی * یک پارامتر را اغلب می توان به صورت یک مکان خالی یا جانگهدار تصور کرد که با مقدار آرگومان متناظرش پر می شود * با این وجود. یک پارامتر بیش از اینهاست: در حقیقت. آن یک متغیر زمانیکه یک متد احضار می شود. مقدار آرگومانش محاسبه شده و پارامتر متناظر (به عبارتی. متغیر محلی) به مقدار آن مقداردهی می شود حتی اگر مقدار یک پارامتر فرمال در میان یک متد تغییر یابد (به عبارتی» به عنوان یک متغیر محلی استفاده شود) مقدار آرگومان نمی تواند تغییر يابد

صفحه 29:
پارامتر فرمالی كه به عنوان یک متغیر محلی استفاده می شود( از ۵) Display 4.6 A Formal Parameter Used as a Local Variable This io the file BilL. java. 1 import java.util.Scanne 2 public class Bill 3 4 4 public static double RATE = 150.00; //DoLlars per quarter hour 5 private int hours; 6 private int minutes; 7 private double fee; (continued) e.sharif.edu/~rouhi 429

صفحه 30:
پارامتر فرمالی که به عنوان یک متفیر محلی استفاده می شود (۲ از ۵) Display 4.6 A Formal Parameter Used as a Local Variable 8 public void inputTimeWorked() 9 { 16 system.out.printinC-Enter nunber of full hours worked” 1 systen.out.printIn(“folloved by number of minutes:"): 2 Scanner keyboard = new Scanner(System.in)i conputeFes uses the 5 hours = keyboard. nextint() ‏سس سم‎ 4 minutes = keyboard .nextint(: ‏ور‎ ‏رد ود‎ 16 public double conputeFeeCint hoursWorked, int minutesworked) vo 8 " minuteshorked = hoursWorked*60 + minutesvorke » int quorterHours = minutesworked/15; //Any remaining Fraction of @ 2 71 warter hour is not charged for ‏ماع ع اس ام مس رآ‎ ار وم سس عن اممو دماله كا لمعا ولاده امام ‎public void updateFee() gee 1 4‏ 23 موسر اما ۳۵ ‎Jolis‏ 0 ‎fee = computeFeeChours, minutes);‏ 25 }2% (continued) httpi/ice.sharif.edu/~roubh 4:30

صفحه 31:
پارامتر فرمالی که به عنوان یک متفیر محلی استفاده می شود (۳ از ۵) Display 4.6 A Formal Parameter Used as a Local Variable 27 public void outputBill() 28 1 29 System.out.printIn("Time worked: "); 30 system.out.printIn(hours +" hours and" + minutes + " minutes"); 31 system.out.printin("Rate: $" + RATE + " per quarter hour."); 32 System.out.printin("Amount due: $" + fee); 33 1 34 1 (continued) http://ce.sharif.edu/~rouhi 431

صفحه 32:
بارامتر فرمالى که به عنوان یک متغیر محلی استفاده می شود (۴ از ۵) A Formal Parameter Used as a Local Variable public class BillingDialog This io the file BiLLingDialog. java. public static void main(String{] args) System.out.printIn("Welcome to the law offices of"); System.out.printin("Dewey, Cheatham, and Howe."); Bill yourBill = new BillQ; yourBill. inputTimeWorked(); yourBill updateFee() ; yourBill.outputBillQ ; System.out.printin("We have placed a lien on your house."); System.out.printIn("It has been our pleasure to serve you." (continued) e.sharif.edu/~rouhi 4.32 + Display 4.6 1 2 3 4 5 6 7 8 9 10 11 12 13 14

صفحه 33:
پارامتر فرمالی که به عنوان یک متفیر محلی استفاده می شود (۵ از ۵) Sample Dialogue Welcome to the law offices of Dewey, Cheatham, and Howe. Enter number of full hours worked followed by number of minutes: 3 48 Time worked: 3 hours and 48 minutes Rate: $150.8 per quarter hour. Amount due: $2250.0 We have placed a Lien on your house. It has been our pleasure to serve you. http://ce.sharif.edu/~rouhi 4.33

صفحه 34:
سهل انگاری و اشتباه: استفاده از اصطلاحات «بارامتر» و «آرگومان» * تعجب نکنید که افرادی هستند که اغلب از اصطلاحات پارامتر و آرگومان به جای هم استفاده می کنند http://ce.sharif.edu/~rouhi 4.34

صفحه 35:
پارامتر ۲۱15 * اين مطلب که متغیرهای نمونه بایستی به شکل < 6211109 ۲۳6 6 00[66. > استفاده شوند جا افتاده است * اگر یک نام. آشکارا برای شیء فراخواننده لازم می شود. می توان از کلمه ی کلیدی 1015 استفاده کرد - همواره می توان برای دسترسی ۳066۷5۲1016 105 ۱۷ از شیء مورد نظر از 16 2066۷5۳10 ۰۱۱105 11115 استفاده کرد. nttp://ce.sharif.edu/—rouh 4.35

صفحه 36:
this ‏پارامتر‎ * اگر یک پارامتر یا متفیر محلی دیگر هم نام در متد استفاده می شود بایستی از 1915 استفاده شود ‎wad‏ در ‎pat‏ اینصورت. تمامی نمونه های نام متغیر به صورت محلی تفسیر می شوند: ‎int someVariable = this.someVariable local instance ‎http://ce.sharif.edu/~rouhi 4:36

صفحه 37:
پارامتر ‎this‏ ‏يارامتر 1115 نوعی پارامتر مخفی است * هرچند که در لیست پارامتر یک متد ظاهر نمی شود باز هم یک پارامتر است * زمانیکه یک متد احضار می شود. شیء فراخواننده به صورت خودکار به 5 متصل می شود http://ce.sharif.edu/~rouhi 437

صفحه 38:
متدهایی که یک مقدار منطقی بر می گردانند احضار متدی که یک مقدار 0001681 بر می گرداند ۲116 یا 6 بر می گرداند بنابراين» تجربه ی خوبی است که از این قبیل متدها برای کنترل دستورات و حلقه ها که انتظار یک عبارت منطقی داریم. استفاده کنیم - دستورات 56ا6. حلقه ی ‎While‏ از اين دست.

صفحه 39:
متدهای 60۱۵15 و 1051۲۱۳9 * جوا انتظار متدهای خاصی. نظیر 60115 و 051۲109 را در تمام: يا تقريباً همه ی کلاسها دارد * هدف از 60115 که یک متد با مقدار برگشتی منطقی است. مقایسه ی دو شیء که آیا آنها شرایط «مساوی بودن» را دارند - توجه: شما نمی توانید برای مقایسه ی اشیاء از -- استفاده کنید! كلاش است public boolean equals(ClassName objectName) ‏هدف از متد 051109 برگرداندن یک مقدار 511]00 است که مبین داده های‎ * درون شیء است: ‎public String toString()‏ http://ce.sharif.edu/~rouhi 4.39

صفحه 40:
آزمون متدها * هر متد بایستی در برنامه ای که تنها برنامه ی تست نشده است. آزمایش شود - برنامه ای که هدف آن تنیا تست یک متد است برنامه ی 0/1۷67 نامیده می شود * یک مند اغلب متدهای دیگر را احضار می کند. لذا یک شیوه ی انجام اين کار آن آست که نخست تمامی متدهایی را که توسط آن متد احضار می شوند تست کنیم و سچبین خود متده‌را تست نماييم. - به اين شيوه. تست بايين به بالا - ‎bottom-up testing‏ گفته می شود * _گاهی اوقات لازم می شود که یک متد. قبل از متدی که به آن وابسته است خاتمه یافته یا تبتت شوده قینت گرده: — در این حالت. از نسخه ی ساده شده ای از متد که. ته کد - 56/0 نامیده می شود استفاده کنید تا یک مقدار برای تست بر کرداند nttp://ce.sharif.edu/—rouh

صفحه 41:
قاعده ی اساسی آزمون متدها * هر متد بایستی در یک برنامه نست شود که د رآن هر متد د يكر برنامه ی تست کننده پیشتر به صورت کامل تست و عیب یابی شده باشند nttp://ce.sharif.edu/—rouh 4-41

صفحه 42:
مخفی کردن اطلاعات و ۴۱6۵05۱۱۵11010 * مخفی کردن اطلاعات (۱/0/۳79/ ‎SSH Joe Information‏ چگونگی استفاده از یک کلاس از جزئیات پیاده سازی آن است - ۸۵5۲۲۵6۲۱00 لصطلاح دیگرعاسکه ب رلعبیانمفیوم ک نا گذلشترچزتیابسه منظور لجتنابلز آوردنب یشاز حدلطلاعادلستفلده می‌شسود ‎Encapsulation +‏ به ليزمعنإستكه دادم هاو متدهاويكى ‎cig oa 4 OL‏ کواحد منفرد ت رکیبش وند (به عبلرعی ی کشیع ‎(OLS‏ که لینک ار جزئیاتپ یاده سازیرا پنهانمی‌سازد ‏- دانستن جزئیات غیرضروری است چون تعامل با شیء از طریق یک رابط خوش تعریف و ساده صورت مى كيرد ‏- در جاو؛ مخفی کردن جزئیات با 0۲۱۷۵۲6 علامت زدن آنبا انجام می شود ‎

صفحه 43:
یک زوج اختصار مهم: ۵۳۱ و ۸0۲ Application crf Semis dol, >but, API ٠ ‏لاس توصیف‎ Shel, (Programming Interface ‏چگونگی لستفاده از کاهرلست‎ - یک برنامه نویس به منظور استفاده از یک کلاس که طراحی خوبی داشته است تنبا نیاز به خواندن ۸۳۱ آن دارد ‎٠‏ یک ۸۷2۲ يا نوع داده ی |¢1;33. ‎Abstract Data Type)‏ یک نوع داده است که با استفاده از تکنیکهای خوب مخفی کردن اطلاعات ‏نوشته شده است ‎

صفحه 44:
اصلاحگرهای 0۱013 و ‎private‏ اصلاحگر 0100116 به این معنی است که هیچ محدودیتی روی جای استفاده از یک متغیر نمونه يا متد وجود ندارد اصلاحگر 0۲1۷۵6 به این معنی است که یک متغیر نمونه یا متد نمی تواند با نام خارج از کلاس دستیابی شود تجربه ی برنامه نویسی خوبی است که تمامی متفیرهای نمونه را 0۲1۷۵:6 تعریف کنیم اکثر متدها >امالام هستند و از این رو دسترسی کنترل شده ای به شیء فراهم می ‎aus‏ معمول تنها در صورتی متدها 0۳/۷316 تعریف می شوند که به عنوان متدهای کمکی سایر متدهای کلاس أستفاده شوند

صفحه 45:
متدهای دستیابی کننده (۸۰6550۲) و تغیبردهنده ‎(Mutator)‏ ‏متدهای دستیابی کننده به برنامه نویس امکان می دهند تا مقدار متغیرهای نمونه ی یک شیء را بدست آورد - داده ها می توانند دستیابی شوند اما امکان تغییر ندارند - نام یک متد دستیابی کننده نوعاً با کلمه ی 96 شروع می شود متدهای تغییردهنده به برنامه نویس امکان تغییر مقادیر متفیرهای نمونه ی یک شىء را به شيوه اى كنترل شده فراهم مى كنند - داده هاى آمده (ورودى به متد) نوعاً تست شده ويا فيلتر مى شوند - نام يك متد تغييردهنده نوعاً با كلمه ى :أ©5 شروع مى شود

صفحه 46:
(Encapsulation) ‏ان سازی‎ Display ‏من‎ Encapsulation An encapsulated class ‘A class definition should have no public Instance variables. http://ce.sharif.edu/—rouhi

صفحه 47:
یک کلاس به اعضای خصوصی تمامی اشیاء کلاس دسترسی دارد در ميان تعریف یک کلاس. نه تنها اعضای خصوصی شیء فراخواننده. بلکه اعضای خصوصی هر شیء کلاس قابل دسترسی هستند nttp://ce.sharif.edu/—rouh 4.47

صفحه 48:
متدهای تغییر دهنده می توانند یک مقدار منطقی بر گردانند * برخی متدهای تفییردهنده هر زمان که مقادیری بگیرند که برایشان ملموس نیست یک پیغام خطا صادر کرده و برنامه را خاتمه:می دهند * رهیافت دیگر آن است که تغییردهنده ای داشته باشیم که مقادیر را تست کند. اما هرگز برنامه را خاتمه ندهد * درعوض, اجازه دهیم که یک مقدار منطقی برگرداند و این برنامه ی فراخواننده باشد که اگر تفییرات را ملموس نیافت با شرایط کنار بیاید

صفحه 49:
پیش شرط ها و پس ‎g Preconditions) & b yi‏ ‎(Postconditions‏ ‏پیش شرط یک متد می گوید که در زمان فراخوانی متد. چه چیزی درست فرض می شود پس ار یک متد می گونده‌ماذامی. که پیش فرط برقران انسست؛ چه چیزی بعد از اجرای متد درست خواهد بود ° تجربه ی خوبی است که همواره در طراحی یک متد و در زمان نوشتن توضیح برای بخش های مختلف یک برنامه. پیش شرط ها و پس شرط ها را هم لحاظ کنیم

صفحه 50:
Overloading * 2۷6/030/9 زمانی(سنکه دو با چند متدد رک ای کسانینام متد یکسانی‌دایند * جهت درستی عملیات هر دو تعریف نام متد بایستی 5/93/76 های متفاوتی داشته باشند - یک 510۲3111۳6 شامل نام یک متد به همراه لیست پارامترهای آن است - جیت تمایز 5002۲6 ها لازم است که تعداد و یا نوع پارامترها متفاوت باشند nttp://ce.sharif.edu/—rouh

صفحه 51:
07/103019 و تبميلنوع خودكار اكر جاوا نتواند امضاى متدى بيابد كه با احضار يك متد دقيقاً مطابقت نمايد. سعى خواهد كرد كه از تبديل نوع خودكار استفاده كند تعامل 0۷6۲۱0301۲9 و تبدیل نوع خودکار می تواند نتایج ناخواسته ای به بار آورد در برخی شرایط ۷6۲۱0601۲9( به خاطر تبدیل نوع خودکار: یک حضار متد منفرد می تواند به شیوه های متعدد تعبیر شده و به نتیجه Sen < احضار گنگ متدها در جاوا منجر به خطا خواهد شد

صفحه 52:
سهل انگاری و اشتباه: شما نمی توانید بر اساس نوع برگشتی ۵ داشته باشیدا * امضای یک متد تنها شامل نام متد و نوع پارامترهای آن است - امضا نمی تواند نوع بر گشتی را شامل شود! * جاواء متدهایی با نام یکسان و نوع برگشتی متفاوت را در یک کلاس اجازه نمی دهد nttp://ce.sharif.edu/—rouh 4-52

صفحه 53:
شما نمی توانید عملگرها را در جاوا 0۷6۲۱0۵0 کنید! برغم بسیاری از زبانهای برنامه نویسی, نظير :)++ كه امكان 60 کردن عملگرها (برای مثال» + - و از این دست) را فراهم می کنند. جاوا اين کار را اجازه نمی دهد! - شماتنیا می توانید برای انجام عملیات مطلوب خود از نام متد و نحو معمول متد استفاده کنید

صفحه 54:
(Constructors) & ow jlw * سازنده نوع خاصی از متد است که برای مقداردهی آغازین متغیرهای نمونه ی یک شیء طراحی می شود: public ClassName(anyParameters) {code} ‏سازنده بایستی با کلاس هم نام باشد‎ - - سازنده هیچ نوع بر گشتی. حتی 1/010 هم ندارد - سازنده ها نوعاً 0۷6۲۱030 می شوند http://ce.sharif.edu/~rouhi 454

صفحه 55:
(Constructors) & ow jl سازنده در زمانى كه يك شىء از كلاس با استفاده از عملكر /الا©1! ايجاد مى شوده فراخوانى مى شود: ClassName objectName = new ClassName(anyArgs) ; - بایستی نام سازنده و لیست آرکومانیا (در صورت وجود) در داخل پارانتز بعد از عملكر ۷ قرار بكيرند - اين قنهها شيوه ى قانونى احضار يك سازنده است: سازنده نمى تواند مثل یک متد معمولى احضار شود اكر يك سازنده دوباره احضار شود (با استفاده از عملكر ‎sl eg KNEW‏ دور ريخته مى شود و يك شىء كه به كل جديد است ايجاد مى شود - در صورتی که می خواهید مقادیر متفیرهای نمونه ی شیع را تفییر بدهید. به جاى اين کار از متدهای تغییردهنده استفاده کنید! nttp://ce.sharif.edu/—rouh 455

صفحه 56:
شما می توانید متد دیگری را در داخل یک سازنده احضار کنبد * اولین عملی که سازنده در پیش می گیرد ایجاد یک شیء با متفیرهای نمونه است ۰ بنابراین» قانونی است که متد دیگری را در میان تعریف یک سازنده احضار کنید. چرا که آن نیز مانند شیء فراخواننده اش شیء به تازگی ایجاد شده را دارد - برای مثال. می توان برای مقداردهی مقادیر متفیرهای نمونه از متدهای تفییردهنده استفاده کرد - حتی برای یک سازنده امکان پذیر است که سازنده ای دیگر را احضار کند!

صفحه 57:
سازنده یک پارامتر 5 دارد مثل هر متد معمولی. هر سازنده یک پارامتر5أ 0 دارد يارامتر 1115 می تواند به صورت آشکارا استفاده شود. اما حضور آن بیشتر قابل درک است تا نوشته شود اولین عملی که سازنده در پیش می گیرد ایجاد خودکار یک شیء با متفیرهای نمونه يس از اين ‎GIF‏ در میان تعریف یک سازنده. پارامتر 015 به شیء ایجاد شده توسط سازنده ارجاع دارد http://ce.sharif.edu/~rouhi ‏که‎

صفحه 58:
یک سازنده ی بدون آرگومان کار بگذارید اگر هیچ سازنده ای در کلاس خود نگذارید. جاوا به صورت خودکار یک سازنده ی پیش فرض 01ا0673) یا بدون آرگومان ایجاد خواهد کرد؛ این سازنده. هیچ مقداردهی آغازینی انجام نمی دهد. اما امکان ایجاد شیء را فراهم می کند اماء اگر تنها یک سازنده در کلاس خود داشته باشید. جاوا سازنده ی پیش فرض را فراهم نخواهد کرد اگر سازنده ای در کلاس خود تعریف می کنید. حتماً سازنده ی بدون آرگومان خودتان را نیز لحاظ کنید! nttp://ce.sharif.edu/—rouh 458

صفحه 59:
مقداردهی آغازین پیش فرض متفیرها ۴ متغیرهای نمونه در جاوا به صورت خودکار مقدار اولیه می گیرند - انواع 0001630 به 2156] مقداردهی می شوند - سایر بدویات به صفر نوع خودشان مقداردهی می شوند - انواع کلاسی به |الا۱] مقداردهی می شوند * با این وجود. تجربه ی خوبی است که متغیرهای نمونه را به صورت آشکارا در یک سازنده مقدار اولیه بدهید توجه: متغیرهای محلی به صورت خودکار مقدار اولیه نمی گیرند!

صفحه 60:
StringTokenizer ‏کلاس‎ * برای بازیابی کلمات یا 0/6/1]های یک رشته ی چندکلمه ای از کلاس ‎StringTokenizer‏ استفاده می شود - برای جداکردن هر یک از 0161]ها می توانید از کاراکترهای 6 یبا هر کاراکتری را که برای جداکردن کلمات مطلوب می دانید مشخص کرده و استفاده کنید - برای اینکه بتوانید از کلاس ۲016۱/267 51۲9 استفاده کنید حتماً عبارت 1۲000۲۲ زیر را به ابتدای فایل حاوی کلاس خود اضافه کنید: import java.util.StringTokenizer;

صفحه 61:
(¥ 311) 51۳1۴9۲016۳۴3126 ۲ ‏برخی متدهای کلاس‎ Display 4.17 Some Methods in the Class StringTokenizer The class StringTokenizer is in the java.util package. public StringTokenizer(String theString) Constructor for a tokenizer that will use whitespace characters as separators when finding tokens in theString. public StringTokenizer(String theString, String delimiters) Constructor for a tokenizer that will use the characters in the string delimiters as separators when finding tokens in theString. public boolean hasMoreTokens() Tests whether there are more tokens available from this tokenizer’s string. When used in conjunction with nextToken, it returns true as long as nextToken has not yet returned all the tokens in the string; returns false otherwise. (continued) nttp://ce.sharif.edu/—rouh 4-61

صفحه 62:
)۲ ‏برخی متدهای کلاس 9۲۲1۳9۲01603126۲ (۲از‎ Display 4.17 | Some Methods in the Class StringTokenizer public String nextToken() Returns the next token from this tokenizer's string. (Throws NoSuchE Lement Exception if there are no ‘more tokens to retum.)® public String nextToken(String delimiters) First changes the delimiter characters to those in the string deLimi ters. Then returns the next token from this tokenizer's string. after the invocation is completed, the delimiter characters are those in the string delimiters. ihrows NoSuchE Lement Exception if there are no more tokens to return. Throws NulLPointerException if delimiters is nul1.)” public int countTokens() Returns the number of tokens remaining to be returned by next Token. nttp://ce.sharif.edu/—rouh 4-62

فصل 4 تعریف کالسها ()1 مقدمه • کالسها مهمترین امکان و ویژگی هستند که برنامه نویسی شیء گرا ( )OOPرا مقدور می سازند • برنامه نویسی در جاوا شامل تعریف تعدادی کالس است – هر برنامه یک کالس است – تمامی نرم افزار کمکی حاوی کالسهاست – تمامی انواع تعریفی برنامه نویس کالس هستند • کالسها در جاوا نقش محوری دارند 4-2 ‏http://ce.sharif.edu/~rouhi تعریف کالسها • شما از قبل به استفاده از کالسها و اشیاء ایجاد شده از آنها و چگونگی احضار متدهای آنها واقف هستید – برای مثال ،شما پیشتر از کالسهای Stringو Scannerاستفاده کردید • اکنون ،چگونگی تعریف کالسهای خود و متدهای آنها ،همین طور ایجاد اشیاء خودتان را از آنها می آموزید 4-3 ‏http://ce.sharif.edu/~rouhi هر کالس یک نوع است • کالس ،نوع به خصوصی از نوع تعریفی برنامه نویس است و می توان متغیرهایی از نوع یک کالس تعریف کرد • یک مقدار از نوع یک کالس ،یک شیء یا یک نمونه از کالس نامیده می شود – اگر Aیک کالس باشد ،در این صورت عبارتهایی مثل « blaاز نوع A است» bla« ،یک شیء از Aاست» و « blaیک نمونه از کالس A است» به یک معنی هستند • یک کالس انواع داده هایی که یک شیء می تواند داشته باشد ،در کنار اعمالی که می تواند انجام بدهد را تعیین می کند 4-4 ‏http://ce.sharif.edu/~rouhi مقادیر نوع بدوی در مقایسه با مقادیر نوع کالسی • یک مقدار نوع بدوی ،یک تکه ی منفرد از داده هاست • یک مقدار نوع کالسی یا شیء می تواند تکه های داده ای متعدد در کنار اعمالی که متد نامیده می شوند ،داشته باشد – تمامی اشیاء یک کالس ،متدهای یکسانی دارند – تمامی اشیاء یک کالس ،مقادیر داده ای یکسانی دارند (به عبارتی ،نام، نوع و تعداد آنها یکی است) – برای یک شیء مفروض ،هر تکه از داده ها می توانند یک مقدار متفاوت نگه بدارند 4-5 ‏http://ce.sharif.edu/~rouhi محتوای تعریف یک کالس • تعریف یک کالس ،اقالم داده ها و متدهایی را که تمامی اشیاء آن خواهند داشت مشخص می کند • گاهًا به این اقالم داده ها و متدها اعضای شیء گفته می شود • اقالم داده ای ،فیلدها یا متغیرهای نمونه نامیده می شوند • اعالن متغیرهای نمونه و تعاریف متد می توانند به هر ترتیبی در تعریف کالس قرار بگیرند 4-6 ‏http://ce.sharif.edu/~rouhi عملگر new • یک شیء از یک کالس توسط متغیری از نوع کالس نامگذاری یا اعالن می شود ;classVar ‏ClassName • در ادامه ،بایستی از عملگر newاستفاده شود ،تا شیء ،ایجاد شده و با نام متغیرش مرتبط شود ;)(classVar = new ClassName • این عملیات را می توان به صورت زیر ترکیب کرد: ;)(ClassName classVar = new ClassName 4-7 ‏http://ce.sharif.edu/~rouhi متدها و متغیرهای نمونه • متغیرهای نمونه را می توان به شکل دو مثال زیر تعریف کرد: – به اصالحگر ( public )modifierتوجه کنید (فعًال): ;public String instanceVar1 ;public int instanceVar2 • به منظور ارجاع به یک متغیر نمونه ی خاص ،قبل از آن ،نام شیء مربوطه را به صورت زیر بیاورید: ‏objectName.instanceVar1 ‏objectName.instanceVar2 4-8 ‏http://ce.sharif.edu/~rouhi متدها و متغیرهای نمونه • تعاریف متد به دو قسمت تقسیم می شوند :یکی سرخط ( )headingمتد و دیگری بدنه ی متد )(public void myMethod { ‏code to perform some action ‏and/or compute a value } • متدها با استفاده از نام شیء فراخواننده و به دنبال آن نام متد ،به صورت زیر احضار می شوند: ;)(classVar.myMethod • احضار یک متد با اجرای بدنه ی متد معادل است 4-9 ‏http://ce.sharif.edu/~rouhi مکان و نام فایلها • به یاد داشته باشید که :هر فایل جاوا بایستی با کالسی که در بر می گیرد هم نام بوده و پسوند java.داشته باشد – برای مثال ،یک کالس به نام MyClassبایستی در فایلی به نام MyClass.javaقرار بگیرد • فعًال ،برنامه ی شما و تمامی کالسهایی که از آنها استفاده می کند بایستی در یک دایرکتوری یا پوشه قرار بگیرند 4-10 ‏http://ce.sharif.edu/~rouhi راجع به متدها بیشتر بدانیم • دو نوع متد وجود دارند: – متدهایی که محاسباتی داشته و یک مقدار بر می گردانند – متدهایی که یک عمل انجام می دهند • این نوع متد مقداری بر نمی گرداند و متد voidنامیده می شود • هر یک از این نوع متدها در چگونگی تعریف ،همین طور نحوه ی احضارشان (معموًال) با هم اندکی تفاوت دارند 4-11 ‏http://ce.sharif.edu/~rouhi راجع به متدها بیشتر بدانیم • متدی که مقداری بر می گرداند بایستی نوع آن مقدار را در سرخط خود مشخص کند )public typeReturned methodName(paramList • هر متد voidدر سرخط خود از کلمه ی کلیدی voidاستفاده می کند تا نشان بدهد که مقداری بر نمی گرداند: )public void methodName(paramList 4-12 ‏http://ce.sharif.edu/~rouhi main is a void Method • برنامه در جاوا صرفًا کالسی است که یک متد mainدارد • زمانی که شما فرمانی برای اجرای یک برنامه ی جاوا صادر می کنید، سیستم زمان اجرا متد mainرا احضار می کند • توجه داشته باشید که mainیک متد voidاست ،هم چنانکه سرخط آن گواه این مطلب است: )public static void main(String[] args 4-13 ‏http://ce.sharif.edu/~rouhi return دستورات • بدنه ی هر دو نوع متد شامل لیستی از اعالنها و دستورات است که در :میان یک زوج {} قرار می گیرند public <void or typeReturned> myMethod() { declarations statements } http://ce.sharif.edu/~rouhi 4-14 دستورات return • بدنه ی متدی که یک مقدار بر می گرداند بایستی شامل یک یا چند دستور returnهم باشد • دستور returnمقدار برگشتی را مشخص کرده و احضار متد را پایان می دهد ;return Expression – Expressionمی تواند هر عبارتی که به یک مقدار از نوع برگشتی لیست شده در سرخط متد منتهی شود ،باشد 4-15 ‏http://ce.sharif.edu/~rouhi دستورات return • متدی که voidباشد نیازی به دستور returnندارد ،مگر اینکه شرایطی پیش بیاید که بخواهیم پیش از تمام شدن تمام کد اجرایی متد، برگردیم • در اینجا ،چون متد مقداری بر نمی گرداند ،یک دستور return استفاده می شود که عبارتی ندارد: ;return 4-16 ‏http://ce.sharif.edu/~rouhi تعاریف متد • احضار متدی که مقداری بر می گرداند می تواند به عنوان یک عبارت در هر جایی که مقدار برگشتی آن مورد نیاز است استفاده شود: ;typeReturned tRVariable ;)(tRVariable = objectName.methodName • احضار یک متد ،voidیک دستور ساده به صورت زیر است: ;)(objectName.methodName 4-17 ‏http://ce.sharif.edu/~rouhi هر متدی می تواند به صورت یک متد voidاستفاده شود • متدی که یک مقدار بر می گرداند می تواند عملی هم انجام بدهد • اگر شما می خواهید که عمل انجام شود ،اما به مقدار برگشتی نیاز ندارید ،می توانید طوری متد را احضار کنید که گویی مقدار برگشتی نداشته و voidاست؛ به این ترتیب ،مقدار برگشتی دور ریخته می شود: ;)(objectName.returnedValueMethod 4-18 ‏http://ce.sharif.edu/~rouhi متغیرهای محلی • متغیری که در میان تعریف یک متد اعالن می شود متغیر محلی نامیده می شود – تمامی متغیرهایی که در تعریف متد mainاعالن می شوند متغیرهای محلی هستند – تمامی پارامترهای متد ،متغیرهای محلی هستند • اگر دو متد داشته باشیم که هر یک ،متغیر محلی یکسانی داشته باشند، این متغیرها باز هم متغیرهای کامًال متفاوتی هستند (به عبارتی ،محلی متدهایشان هستند) 4-19 ‏http://ce.sharif.edu/~rouhi متغیرهای سراسری • برخی زبانهای برنامه نویسی ،نوع دیگری از متغیر را که متغیر سراسری نامیده می شود ،به میان می آورند • زبان جاوا متغیرهای سراسری ندارد! 4-20 ‏http://ce.sharif.edu/~rouhi بالکها • بالک نامی دیگر برای یک دستور مرکب است ،یعنی مجموعه ای از دستورات جاوا که در دل یک زوج {} قرار می گیرند • هر متغیر که در میان یک بالک اعالن می شود محلی آن بالک است و نمی تواند در بیرون از آن بالک استفاده شود • همین که متغیری در میان یک بالک اعالن شد ،نام آن نمی تواند برای هر چیز دیگری در تعریف همان متد استفاده شود 4-21 ‏http://ce.sharif.edu/~rouhi اعالن متغیرها در دستور for • شما می توانید یک یا چند متغیر را در میان بخش مقداردهی آغازین یک دستور forاعالن کنید • متغیری که به این نحو اعالن می شود ،محلی حلقه ی forخواهد بود و نمی تواند در بیرون از حلقه استفاده شود • اگر می خواهید از این متغیر در بیرون از حلقه هم استفاده کنید ،در این صورت آن را در بیرون از حلقه ی forاعالن کنید 4-22 ‏http://ce.sharif.edu/~rouhi پارامترهای از نوع بدوی • متدهایی که تابحال دیده ایم هیچ گونه پارامتری نداشتند که با یک زوج پارانتز تهی در سرخط متد مشخص می شد • برخی متدها نیاز به دریافت داده های اضافه تری از طریق لیستی از پارامترها دارند تا کارشان را انجام بدهند – به این پارامترها ،پارامترهای فرمال نیز گفته می شود 4-23 ‏http://ce.sharif.edu/~rouhi پارامترهای از نوع بدوی • لیست پارامتر ،توصیفی از داده های الزم یک متد را ارائه می دهد – آن تعداد و نوع داده های تک تک الزم آنها را مشخص می کند ،ترتیبی که بایستی داده شوند و اسامی محلی این مقادیر که در متد استفاده شده اند: )public double myMethod(int p1, int p2, double p3 4-24 ‏http://ce.sharif.edu/~rouhi پارامترهای از نوع بدوی • زمانیکه متدی احضار می شود ،بایستی مقادیر مناسبی به متد و به شکل آرگومانها ارسال شوند – به آرگومانها پارامترهای واقعی نیز گفته می شود • بایستی تعداد و ترتیب آرگومانها با آنهایی که در لیست پارامترها هستند تطبیق نمایند • بایستی نوع هر آرگومان با نوع پارامتر متناظرش سازگار باشد: ;int a=1,b=2,c=3 ;)double result = myMethod(a,b,c 4-25 ‏http://ce.sharif.edu/~rouhi پارامترهای از نوع بدوی • در مثال قبل ،مقدار هر آرگومان (نه نام متغیر) در پارامتر متناظر از متد قرار می گیرد – این روش اتصال آرگومانها به پارامترهای فرمال به راهکار فراخوانی با مقدار معروف است 4-26 ‏http://ce.sharif.edu/~rouhi پارامترهای از نوع بدوی • اگر نوع آرگومانها و پارامترها به طور دقیق تطبیق ننمایند ،جاوا سعی خواهد کرد که یک تبدیل نوع خودکار انجام بدهد – در مثال قبل ،مقدار intآرگومان Cبه یک doubleتبدیل خواهد شد – یک آرگومان بدوی می تواند به صورت خودکار از هر کدام از انواع زیر به هر یک از آنهایی که در سمت راست آن نوع در لیست زیر باشد تبدیل نوع داشته باشد: ‏byteshortintlongfloatdouble 4-27 ‏http://ce.sharif.edu/~rouhi پارامترهای از نوع بدوی • یک پارامتر را اغلب می توان به صورت یک مکان خالی یا جانگهدار تصور کرد که با مقدار آرگومان متناظرش پر می شود • با این وجود ،یک پارامتر بیش از اینهاست :در حقیقت ،آن یک متغیر محلی است • زمانیکه یک متد احضار می شود ،مقدار آرگومانش محاسبه شده و پارامتر متناظر (به عبارتی ،متغیر محلی) به مقدار آن مقداردهی می شود • حتی اگر مقدار یک پارامتر فرمال در میان یک متد تغییر یابد (به عبارتی ،به عنوان یک متغیر محلی استفاده شود) مقدار آرگومان نمی تواند تغییر یابد 4-28 ‏http://ce.sharif.edu/~rouhi پارامتر فرمالی که به عنوان یک متغیر محلی استفاده می شود ( 1از )5 4-29 ‏http://ce.sharif.edu/~rouhi پارامتر فرمالی که به عنوان یک متغیر محلی استفاده می شود ( 2از )5 4-30 ‏http://ce.sharif.edu/~rouhi پارامتر فرمالی که به عنوان یک متغیر محلی استفاده می شود ( 3از )5 4-31 ‏http://ce.sharif.edu/~rouhi پارامتر فرمالی که به عنوان یک متغیر محلی استفاده می شود ( 4از )5 4-32 ‏http://ce.sharif.edu/~rouhi پارامتر فرمالی که به عنوان یک متغیر محلی استفاده می شود ( 5از )5 4-33 ‏http://ce.sharif.edu/~rouhi سهل انگاری و اشتباه :استفاده از اصطالحات «پارامتر» و «آرگومان» • تعجب نکنید که افرادی هستند که اغلب از اصطالحات پارامتر و آرگومان به جای هم استفاده می کنند • زمانیکه این اصطالحات را می بینید ،شما ممکن است مجبور شوید که معنی دقیق آنها را از میان متن تعیین کنید 4-34 ‏http://ce.sharif.edu/~rouhi پارامتر this • این مطلب که متغیرهای نمونه بایستی به شکل <the calling > .object nameاستفاده شوند جا افتاده است • اگر یک نام ،آشکارا برای شیء فراخواننده الزم می شود ،می توان از کلمه ی کلیدی thisاستفاده کرد – همواره می توان برای دسترسی myInstanceVaribleاز شیء مورد نظر از this.myInstanceVariableاستفاده کرد. 4-35 ‏http://ce.sharif.edu/~rouhi پارامتر this • اگر یک پارامتر یا متغیر محلی دیگر هم نام در متد استفاده می شود بایستی از thisاستفاده شود – در غیر اینصورت ،تمامی نمونه های نام متغیر به صورت محلی تفسیر می شوند: ‏int someVariable = this.someVariable ‏instance 4-36 ‏local ‏http://ce.sharif.edu/~rouhi پارامتر this • پارامتر thisنوعی پارامتر مخفی است • هرچند که در لیست پارامتر یک متد ظاهر نمی شود ،باز هم یک پارامتر است • زمانیکه یک متد احضار می شود ،شیء فراخواننده به صورت خودکار به thisمتصل می شود 4-37 ‏http://ce.sharif.edu/~rouhi متدهایی که یک مقدار منطقی بر می گردانند • احضار متدی که یک مقدار booleanبر می گرداند trueیا falseبر می گرداند • بنابراین ،تجربه ی خوبی است که از این قبیل متدها برای کنترل دستورات و حلقه ها که انتظار یک عبارت منطقی داریم ،استفاده کنیم – دستورات ،if-elseحلقه ی whileو از این دست. 4-38 ‏http://ce.sharif.edu/~rouhi متدهای equalsو toString • جاوا انتظار متدهای خاصی ،نظیر equalsو toStringرا در تمام ،یا تقریبًا همه ی کالسها دارد • هدف از equalsکه یک متد با مقدار برگشتی منطقی است ،مقایسه ی دو شیء کالس است تا ببیند که آیا آنها شرایط «مساوی بودن» را دارند – توجه :شما نمی توانید برای مقایسه ی اشیاء از == استفاده کنید! )public boolean equals(ClassName objectName • هدف از متد toStringبرگرداندن یک مقدار Stringاست که مبین داده های درون شیء است: )(public String toString 4-39 ‏http://ce.sharif.edu/~rouhi آزمون متدها • هر متد بایستی در برنامه ای که تنها برنامه ی تست نشده است ،آزمایش شود – برنامه ای که هدف آن تنها تست یک متد است برنامه ی driverنامیده می شود • یک متد اغلب متدهای دیگر را احضار می کند ،لذا یک شیوه ی انجام این کار آن است که نخست تمامی متدهایی را که توسط آن متد احضار می شوند تست کنیم و سپس خود متد را تست نماییم – به این شیوه ،تست پایین به باال – bottom-up testingگفته می شود • گاهی اوقات الزم می شود که یک متد ،قبل از متدی که به آن وابسته است خاتمه یافته یا تست شود ،تست گردد – در این حالت ،از نسخه ی ساده شده ای از متد که ،ته کد – stubنامیده می شود استفاده کنید تا یک مقدار برای تست برگرداند 4-40 ‏http://ce.sharif.edu/~rouhi قاعده ی اساسی آزمون متدها • هر متد بایستی در یک برنامه تست شود که در آن هر متد دیگر برنامه ی تست کننده پیشتر به صورت کامل تست و عیب یابی شده باشند 4-41 ‏http://ce.sharif.edu/~rouhi مخفی کردن اطالعات و Encapsulation • مخفی کردن اطالعات ( )Information hidingعمل تفکیک چگونگی استفاده از یک کالس از جزئیات پیاده سازی آن است – Abstractionاصطالح دیگری است که برای بیان مفهوم کنارگذاشتن جزئیات به منظور اجتناب از آوردن بیش از حد اطالعات استفاده می شود • Encapsulationبه این معنی است که داده ها و متدهای یک کالس به صورت یک واحد منفرد ترکیب شوند (به عبارتی ،یک شیء کالس) که این کار ،جزئیات پیاده سازی را پنهان می سازد – دانستن جزئیات غیرضروری است چون تعامل با شیء از طریق یک رابط خوش تعریف و ساده صورت می گیرد – در جاوا ،مخفی کردن جزئیات با privateعالمت زدن آنها انجام می شود 4-42 ‏http://ce.sharif.edu/~rouhi یک زوج اختصار مهم API :و ADT • APIیا رابط برنامه نویسی کاربردی (Application )Programming Interfaceبرای یک کالس ،توصیف چگونگی استفاده از کالس است – یک برنامه نویس به منظور استفاده از یک کالس که طراحی خوبی داشته است تنها نیاز به خواندن APIآن دارد • یک ADTیا نوع داده ی انتزاعی ( )Abstract Data Typeیک نوع داده است که با استفاده از تکنیکهای خوب مخفی کردن اطالعات نوشته شده است 4-43 ‏http://ce.sharif.edu/~rouhi اصالحگرهای publicو private • اصالحگر publicبه این معنی است که هیچ محدودیتی روی جای استفاده از یک متغیر نمونه یا متد وجود ندارد • اصالحگر privateبه این معنی است که یک متغیر نمونه یا متد نمی تواند با نام، خارج از کالس دستیابی شود • تجربه ی برنامه نویسی خوبی است که تمامی متغیرهای نمونه را privateتعریف کنیم • اکثر متدها publicهستند و از این رو دسترسی کنترل شده ای به شیء فراهم می کنند • معموًال ،تنها در صورتی متدها privateتعریف می شوند که به عنوان متدهای کمکی سایر متدهای کالس استفاده شوند 4-44 ‏http://ce.sharif.edu/~rouhi متدهای دستیابی کننده ( )Accessorو تغییردهنده ()Mutator • متدهای دستیابی کننده به برنامه نویس امکان می دهند تا مقدار متغیرهای نمونه ی یک شیء را بدست آورد – داده ها می توانند دستیابی شوند اما امکان تغییر ندارند – نام یک متد دستیابی کننده نوعًا با کلمه ی getشروع می شود • متدهای تغییردهنده به برنامه نویس امکان تغییر مقادیر متغیرهای نمونه ی یک شیء را به شیوه ای کنترل شده فراهم می کنند – داده های آمده (ورودی به متد) نوعًا تست شده و یا فیلتر می شوند – نام یک متد تغییردهنده نوعًا با کلمه ی setشروع می شود 4-45 ‏http://ce.sharif.edu/~rouhi )Encapsulation( پنهان سازی http://ce.sharif.edu/~rouhi 4-46 یک کالس به اعضای خصوصی تمامی اشیاء کالس دسترسی دارد • در میان تعریف یک کالس ،نه تنها اعضای خصوصی شیء فراخواننده، بلکه اعضای خصوصی هر شیء کالس قابل دسترسی هستند 4-47 ‏http://ce.sharif.edu/~rouhi متدهای تغییردهنده می توانند یک مقدار منطقی برگردانند • برخی متدهای تغییردهنده هر زمان که مقادیری بگیرند که برایشان ملموس نیست یک پیغام خطا صادر کرده و برنامه را خاتمه می دهند • رهیافت دیگر آن است که تغییردهنده ای داشته باشیم که مقادیر را تست کند ،اما هرگز برنامه را خاتمه ندهد • درعوض ،اجازه دهیم که یک مقدار منطقی برگرداند و این برنامه ی فراخواننده باشد که اگر تغییرات را ملموس نیافت با شرایط کنار بیاید 4-48 ‏http://ce.sharif.edu/~rouhi پیش شرط ها و پس شرط ها ( Preconditionsو )Postconditions • پیش شرط یک متد می گوید که در زمان فراخوانی متد ،چه چیزی درست فرض می شود • پس شرط یک متد می گوید ،مادامی که پیش شرط برقرار است ،چه چیزی بعد از اجرای متد درست خواهد بود • تجربه ی خوبی است که همواره در طراحی یک متد و در زمان نوشتن توضیح برای بخش های مختلف یک برنامه ،پیش شرط ها و پس شرط ها را هم لحاظ کنیم 4-49 ‏http://ce.sharif.edu/~rouhi Overloading • Overloadingزمانی است که دو یا چند متد در کالس یکسانی نام متد یکسانی دارند • جهت درستی عملیات ،هر دو تعریف نام متد بایستی signatureهای متفاوتی داشته باشند – یک signatureشامل نام یک متد به همراه لیست پارامترهای آن است – جهت تمایز signatureها الزم است که تعداد و یا نوع پارامترها متفاوت باشند 4-50 ‏http://ce.sharif.edu/~rouhi Overloadingو تبدیل نوع خودکار • اگر جاوا نتواند امضای متدی بیابد که با احضار یک متد دقیقًا مطابقت نماید ،سعی خواهد کرد که از تبدیل نوع خودکار استفاده کند • تعامل overloadingو تبدیل نوع خودکار می تواند نتایج ناخواسته ای به بار آورد • در برخی شرایط ،Overloadingبه خاطر تبدیل نوع خودکار ،یک احضار متد منفرد می تواند به شیوه های متعدد تعبیر شده و به نتیجه برسد – احضار گنگ متدها در جاوا منجر به خطا خواهد شد 4-51 ‏http://ce.sharif.edu/~rouhi سهل انگاری و اشتباه :شما نمی توانید بر اساس نوع برگشتی overloadداشته باشید! • امضای یک متد تنها شامل نام متد و نوع پارامترهای آن است – امضا نمی تواند نوع برگشتی را شامل شود! • جاوا ،متدهایی با نام یکسان و نوع برگشتی متفاوت را در یک کالس اجازه نمی دهد 4-52 ‏http://ce.sharif.edu/~rouhi شما نمی توانید عملگرها را در جاوا Overloadکنید! • برغم بسیاری از زبانهای برنامه نویسی ،نظیر ++Cکه امکان overloadکردن عملگرها (برای مثال - ،+ ،و از این دست) را فراهم می کنند ،جاوا این کار را اجازه نمی دهد! – شما تنها می توانید برای انجام عملیات مطلوب خود از نام متد و نحو معمول متد استفاده کنید 4-53 ‏http://ce.sharif.edu/~rouhi سازنده ها ()Constructors • سازنده نوع خاصی از متد است که برای مقداردهی آغازین متغیرهای نمونه ی یک شیء طراحی می شود: }public ClassName(anyParameters){code – سازنده بایستی با کالس هم نام باشد – سازنده هیچ نوع برگشتی ،حتی voidهم ندارد – سازنده ها نوعًا overloadمی شوند 4-54 ‏http://ce.sharif.edu/~rouhi سازنده ها ()Constructors • سازنده در زمانی که یک شیء از کالس با استفاده از عملگر newایجاد می شود، فراخوانی می شود: ;)ClassName objectName = new ClassName(anyArgs – بایستی نام سازنده و لیست آرگومانها (در صورت وجود) در داخل پارانتز بعد از عملگر newقرار بگیرند – این تنها شیوه ی قانونی احضار یک سازنده است :سازنده نمی تواند مثل یک متد معمولی احضار شود • اگر یک سازنده دوباره احضار شود (با استفاده از عملگر ،)newشیء اول دور ریخته می شود و یک شیء که به کل جدید است ایجاد می شود – در صورتی که می خواهید مقادیر متغیرهای نمونه ی شیء را تغییر بدهید ،به جای این کار از متدهای تغییردهنده استفاده کنید! 4-55 ‏http://ce.sharif.edu/~rouhi شما می توانید متد دیگری را در داخل یک سازنده احضار کنید • اولین عملی که سازنده در پیش می گیرد ایجاد یک شیء با متغیرهای نمونه است • بنابراین ،قانونی است که متد دیگری را در میان تعریف یک سازنده احضار کنید ،چرا که آن نیز مانند شیء فراخواننده اش شیء به تازگی ایجاد شده را دارد – برای مثال ،می توان برای مقداردهی مقادیر متغیرهای نمونه از متدهای تغییردهنده استفاده کرد – حتی برای یک سازنده امکان پذیر است که سازنده ای دیگر را احضار کند! 4-56 ‏http://ce.sharif.edu/~rouhi سازنده یک پارامتر thisدارد • مثل هر متد معمولی ،هر سازنده یک پارامتر thisدارد • پارامتر thisمی تواند به صورت آشکارا استفاده شود ،اما حضور آن بیشتر قابل درک است تا نوشته شود • اولین عملی که سازنده در پیش می گیرد ایجاد خودکار یک شیء با متغیرهای نمونه است • پس از این کار ،در میان تعریف یک سازنده ،پارامتر thisبه شیء ایجاد شده توسط سازنده ارجاع دارد 4-57 ‏http://ce.sharif.edu/~rouhi یک سازنده ی بدون آرگومان کار بگذارید • اگر هیچ سازنده ای در کالس خود نگذارید ،جاوا به صورت خودکار یک سازنده ی پیش فرض ( )defaultیا بدون آرگومان ایجاد خواهد کرد؛ این سازنده ،هیچ مقداردهی آغازینی انجام نمی دهد ،اما امکان ایجاد شیء را فراهم می کند • اما ،اگر تنها یک سازنده در کالس خود داشته باشید ،جاوا سازنده ی پیش فرض را فراهم نخواهد کرد • اگر سازنده ای در کالس خود تعریف می کنید ،حتمًا سازنده ی بدون آرگومان خودتان را نیز لحاظ کنید! 4-58 ‏http://ce.sharif.edu/~rouhi مقداردهی آغازین پیش فرض متغیرها • متغیرهای نمونه در جاوا به صورت خودکار مقدار اولیه می گیرند – انواع booleanبه falseمقداردهی می شوند – سایر بدویات به صفر نوع خودشان مقداردهی می شوند – انواع کالسی به nullمقداردهی می شوند • با این وجود ،تجربه ی خوبی است که متغیرهای نمونه را به صورت آشکارا در یک سازنده مقدار اولیه بدهید • توجه :متغیرهای محلی به صورت خودکار مقدار اولیه نمی گیرند! 4-59 ‏http://ce.sharif.edu/~rouhi کالس StringTokenizer • برای بازیابی کلمات یا tokenهای یک رشته ی چندکلمه ای از کالس StringTokenizerاستفاده می شود – برای جداکردن هر یک از tokenها می توانید از کاراکترهای whitespaceیا هر کاراکتری را که برای جداکردن کلمات مطلوب می دانید مشخص کرده و استفاده کنید – برای اینکه بتوانید از کالس StringTokenizerاستفاده کنید حتمًا عبارت importزیر را به ابتدای فایل حاوی کالس خود اضافه کنید: ;import java.util.StringTokenizer 4-60 ‏http://ce.sharif.edu/~rouhi )2 از1( StringTokenizerبرخی متدهای کالس http://ce.sharif.edu/~rouhi 4-61 )2 از2( StringTokenizerبرخی متدهای کالس http://ce.sharif.edu/~rouhi 4-62

51,000 تومان