0% found this document useful (0 votes)
39 views140 pages

Amozesh Java Sadee

Uploaded by

khankushaniahmad
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
39 views140 pages

Amozesh Java Sadee

Uploaded by

khankushaniahmad
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 140

‫‪www.SourceSara.

com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫‪1‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫بسم تعالی‬
‫زبان برنامه نویسی جاوا در دنیا روز به روز با اقبال بیشتری مواجه می شود و عده ی زیادی به برنامه نویسی با این زباان روی مای‬
‫آورد‪ .‬دلیل این هم روشن است‪ :‬امن بودن و در عین حال قدرت زبان جاوا باعث گردیده‪ ،‬تعداد برنامه نویس هایی که با جاوا کار می‬
‫کنند از تعداد برنامه نویس هایی که با سایر زبان های برنامه نویسی کار می کنند به مراتب بیشتر باشد‪ .‬در کنار این موضوع شاهد‬
‫رواج گسترده ی گوشی های هوشمند بین تمام مردم دنیا هستیم‪ ،‬که اکثرا از سیستم عامل اندروید استفاده میکنند و حاال آنکاه‬
‫ما برای ایجاد و نوشتن اپلیکیشن ها و برنامه های جانبی روی اندروید بایستی از جاوا استفاده کنیم‪ .‬باید توجه داشت کاه بشا‬
‫رابط کابری اندروید با زبان جاوا نوشته شده است و برنامه های اندرویدی میتوانند برای ارتباط با الیه های زیرین سیساتم عامال‬
‫اندروید از کتابشانه های جاوایی اندروید بهره ببرند ‪.‬همچنین برای کار با پایگاه داده هایی همچون اوراکل‪ ،‬بدون دانستن زبان جااوا‬
‫امری غیر ممکن است‪ .‬زیرا که برای کاربا پایگاه داده ی اوراکل می بایستی حتما ‪ ،‬با جاوا آشنایی داشته باشیم‪ .‬ماا باا اساتفاده از‬
‫جاوا قدر خواهیم بود تا برنامه های کاربردی‪ ،‬برای لینوکس ‪ ،‬اندروید و ویندوز بنویسیم‪.‬‬

‫هدف بنده از نگارش این کتاب ارتقای سطح علمی جاوا در ایران بوده و معیار اصلی من هنگام تالیف کتاب مورد توجه قارار دادن‬
‫خوانندگان مبتدی و کاربرانی که اصال برنامه نویسی نکرده اند بوده است‪ .‬در عین حال از کابران حرفه ای نیز غافل نشده ام‪ ،‬و ایان‬
‫کتاب شامل نکات ارزنده ای برای متشصصین حرفه ای کامپیوتر است‪.‬‬

‫میرود‪ .‬سعی من در تالیف این کتااب باه صاورت‬ ‫رویه آموزشی کتاب هم از مطالب مقدماتی شروع شده و تا سطح پیشرفته پی‬
‫خود آموز بوده به صورتی که شما دیگر نیازی به کالس آموزشی یا استاد ندارید‪.‬‬

‫و اما وجه تسمیه این کتاب با سایر کتاب های فارسی جاوا موجود در ایران ‪ ،‬در این است که بنده تمام مطالب فصل های کتاب را از‬
‫های کتاب های معتبر انگلیسی اخذ کرده و به جرات می توانم بگویم حتی از یک منبع فارسی (که معماوال پار از‬ ‫آخرین ویرای‬
‫اشتباه اند) استفاده نکرده ام‪.‬‬

‫فرض من در هنگام نوشتن کتاب این بوده است‪ ،‬که خوانندگان این کتاب در سطح مقدماتی و پایین قرار دارند و قدم به قادم‬ ‫پی‬
‫توسط مطالعه ی این کتاب به سطح خوبی در جاوا خواهند رسید‪.‬‬

‫‪ .‬خواننده گان عزیز میتوانند نظرات و پیشنهادات خود را از طریق زیر به مولف کتاب ‪ ،‬هادی خداپناه ارسال کنند‪:‬‬

‫‪https://telegram.me/hadi_khodapanah_computer‬‬ ‫آی دی تلگرام ‪:‬‬ ‫‪-1‬‬

‫‪[email protected]‬‬ ‫‪ -2‬ایمیل‬

‫این کتاب‪ ،‬میتوانید به کانال زیر رجوع کنید‪:‬‬ ‫‪ -3‬برای اطالع و دانلود از آخرین تالیفات دیگر و نیز آخرین ویرای‬

‫‪https://telegram.me/khodapanah_hadi_IT‬‬

‫هادی خداپناه‬

‫‪1395/6/13‬‬

‫‪2‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫فهرست مطالب‬

‫فصل ‪1‬‬
‫نصب ‪6...............................................................................................................................................JAVA‬‬
‫نصب ‪16........................................................................................................................................... eclipse‬‬

‫فصل ‪2‬‬

‫متغیر‪28...............................................................................................................................................................‬‬
‫انواع داده ها در جاوا ‪28..............................................................................................................................‬‬
‫تخصیص مقدار به متغیر های دارای مقدار اولیه ‪30......................................................................‬‬
‫عبارات تخصیص (‪30.........................................................................)Assignment Statements‬‬

‫نوع داده ی ‪32..................................................................................................................................... char‬‬


‫نوع ‪33..............................................................................................................................................boolean‬‬
‫نوع داده های اعشاری در جاوا ‪35............................................................................................................‬‬
‫نوع داده ای صحیح در جاوا‪36...................................................................................................................‬‬
‫انوع مرجع(‪37..........................................................................................................)Reference Types‬‬

‫ایجاد مقادیر جدید با اعمال عملگرها (‪41.........)Creating New Values by Applying Operators‬‬
‫عملگر های افزایش ( ‪ )increment‬و کاهش (‪43.............................................. )decrement‬‬
‫عملگر های تخصیص (‪45...................................................................... )Assignment Operators‬‬
‫فصل ‪3‬‬
‫)‪49.................................................................................Making Decisions (Java if Statements‬‬

‫کنترل کلید های فشار داده شده از کیبورد‪51......................................................................................‬‬


‫ایجاد کردن مقادیر تصادفی‪53.....................................................................................................................‬‬
‫دستورات انتخابی ‪54.........................................................................................................................................‬‬
‫عالمت ==(‪55................................................................................................)The double equal sign‬‬
‫‪ else‬بدون ‪ if‬کاربرد ‪56..............................................................................................................................‬‬

‫ایجاد شرط با عملگر های مقایسه ای و منطقی ‪57...............................................................................‬‬

‫مقایسه ی اشیاء (‪58...........................................................................................)Comparing objects‬‬


‫‪3‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫عملگر های منطقی در جاوا‪60.......................................................................................................................‬‬

‫ساخت ‪ if‬های تودرتو ‪64............................................................................................................................‬‬

‫‪Switch‬در جاوا ‪66...........................................................................................................................................‬‬

‫‪ Switch‬جدید و بهبود یافته ‪69................................................................................................................‬‬

‫فصل ‪4‬‬

‫تکرار دستور العمل ها بارها و بارها ( دستور ‪ while‬در جاوا) ‪72.........................................‬‬

‫تکرار تا تعدادی معین(حلقه ی ‪ for‬در جاوا ) ‪75.............................................................................‬‬

‫اجرا تا زمانی که آنچه میخواهید را به دست آورید ( حلقه ی ‪ do‬در جاوا) ‪78................‬‬

‫ذخیره ی یک کارکتر تنها ‪80......................................................................................................................‬‬

‫کارکردن با فایل ها در جاوا ‪81................................................................................................................‬‬

‫محدوده ی متغیر ها ‪82............................................................................................................................‬‬

‫فصل ‪5‬‬

‫تعریف کالس ‪85.............................................................................................................................................‬‬

‫تعریف متغیر ها و تعریف اشیاء ‪87........................................................................................................‬‬

‫کالس های عمومی ( ‪89...................................................................................... ) Public classes‬‬

‫تعریف متد داخل کالس ‪89.......................................................................................................................‬‬

‫یک ‪ Account‬که خودش را نمایش میدهد ‪90..............................................................................‬‬

‫فرستادن و گرفتن مقدار به ‪ Method‬ها ‪92............................................................................... :‬‬

‫خطا ‪98................................................................................................................................................................‬‬

‫برنامه نویسی خوب (‪102..................................................................... )Good programming‬‬

‫فراخوانی ‪103................................................................................................... Accessor Methods‬‬

‫‪4‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫فصل ‪6‬‬

‫ذخیره کردن داده ها در فایل ‪109..................................................................................................‬‬

‫‪ Copy‬و ‪ Past‬کردن کد ‪110....................................................................................................‬‬

‫خواندن یک خط در هر دفعه ‪112.....................................................................................................‬‬

‫ایجاد یک زیر کالس ‪115.........................................................................................................................‬‬

‫ایجاد زیر کالس ها شکل گیری عادت هاست ‪118..................................................................‬‬

‫استفاده از زیر کالس ها ‪119.................................................................................................................‬‬

‫تطابق انواع(‪120........................................................................................................ )types match‬‬

‫تغییر دادن متد های قبلی ‪121.........................................................................................................‬‬

‫استفاده از متد ها از درون زیرکالس ها و کالس ها ‪124.........................................................‬‬

‫فصل ‪7‬‬

‫مقیاس دما (‪ )temperature scale‬چیست ‪127.........................................................................‬‬

‫( انواع ‪enum‬جاوا) ‪127..........................................................................................................................‬‬

‫‪ Temperature‬چیست؟ ‪128..............................................................................................................‬‬

‫با سازنده(‪ )statements‬چه کاری میتوان انجام داد ‪129.......................................................‬‬

‫دو راه برای انجام یک کار ‪131..........................................................................................................‬‬

‫ساخت ‪ temperatures‬بهتر ‪132.....................................................................................................‬‬

‫‪133........................................................................................................................ Using all this stuff‬‬

‫یک سازنده ی پیش فرض ‪134..............................................................................................................‬‬

‫سازنده ای که کارهای بیشتری انجام میدهد ‪135.......................................................................‬‬


‫منابع ‪138........................................................................................................................................................‬‬

‫‪5‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫فصل ‪1‬‬

‫‪6‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫نصب ‪JAVA‬‬
‫در ابتدا فایل )‪ JDK (Java SE Development Kit‬و نیز فایل ‪JRE: (Java Runtime‬‬
‫)‪ Environment‬رو از سایت رسمی آن به آدرس‬

‫‪http://www.oracle.com/technetwork/java/javase/downloads/index.html‬‬

‫دانلود کنید‪.‬و هر دو را نصب کنید‪. .‬‬

‫توجه کنید که در زمانی که این مطلب رو می نویسم‪ ،‬گویا ایران تحریم شده است و باید از ‪( VPN‬همون فیلتر‬
‫شکن خودمون)استفاده کنیم از سایت باال این دو فایل رو دانلود کنید‪ .‬با اینکه از سایت های ایرانی آنها را تهیه‬
‫نمایید‪.‬‬

‫بعد کلیک روی دکمه ی مششص شده در تصویر زیر رو به خواهید گشت‪.‬‬

‫متناسب‬ ‫‪JDK‬‬ ‫سپس گزینه ی ‪ Accept License Agreement‬را تیک دار کنید‪ .‬و از داخل کتدر قرمز رنگ‬
‫با سیستم عامل خود را انتشاب کنید‪.‬‬

‫‪7‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫‪8‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫نوبت به نصب آن میرسد‬ ‫‪JDK‬‬ ‫بعد از دانلود فایل‬

‫فایل اجرایی جاوا (‪ )jdk‬را اجرا‬


‫کنید‪.‬‬

‫‪Next‬‬ ‫در کادر اول زیر روی‬


‫کلیک کنید‪.‬‬

‫در کادر دوم نیز بعد از مشخص‬


‫کردن مسیر نصب جاوا روی‬
‫‪Next‬کلیک کنید‬

‫‪9‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫در اینجا بعد از مشخص کردن پوشه ی مقصد برای نصب جاوا روی ‪Next‬کلیک کنید‪.‬‬

‫‪10‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫در کادر پایین اظهار میکند که جاوا با موفقیت نصب شد‪...‬روی ‪Close‬کلیک کنید‪...‬‬

‫‪11‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫‪System‬‬ ‫حال که ما جاوا را نصب کردیم‪.‬بایستی جاوا رو به سیستم عامل خود معرفی کنیم‪ .‬برای اینکار وارد کنترل پنل شوید و روی‬
‫کلیک کنید‬

‫کلیک کنید‬ ‫آنگه پنجره ای ظاهر خواهد گشت که روی ‪Advanced system settings‬‬

‫حال پنجره ای ظاهر میشود که باید روی‬


‫‪ Environment Variables‬کلیک‬
‫کنید‬

‫‪12‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫دوباره پنجره ی جدیدی ظاهر خواهد گشت که در قسمت ‪ system variables‬روی دکمه ی ‪New‬‬
‫کلیک کنید‬

‫با این کادر یک متغیر جدید ایجاد میشود‬


‫که بایستی مقدار دهی کنید‬

‫پنجره ظاهر شده را مانند رو به رو پر کنید(با این‬


‫کار متغییر را مقداردهی می کنید)‪ .‬در قسمت‬
‫‪ Value‬مسیری که قبال مشخص کرده اید را‬
‫بنویسید‬

‫بعد از این مرحله باید مسیر دایرکتوری ‪ bin‬را در‬


‫متغیر سیستمی ‪ PATH‬قرار دهیم‪ .‬برای این کار‬

‫‪13‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫بگردید‪.‬‬ ‫دوباره در قسمت ‪ system variables‬به دنبال متغیر ‪path‬‬

‫‪14‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫‪ Path‬را انتخاب کرده و روی ‪ Edit‬کلیک‬


‫کنید‪.‬‬

‫در قسمت ‪ value‬به آخر خط رفته و یک سِمی‬


‫کالِن قرار دهید ‪.‬‬

‫بعد از قرار دادن سمی کالن‪ ،‬نشانگر ماوس خود را بعد از سمی کالن قرار دهید و بعد مسیر دایرکتوری ‪ bin‬را در این‬
‫کنید‪.‬‬ ‫قسمت ‪paste‬‬

‫در نهایت رو ‪ OK‬کلیک کنید‪ .‬و کامپیوتر خود را‬


‫رستارت کنید‪.‬‬

‫‪15‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫نصب ‪eclipse‬‬

‫در آخر نوبت به نصب برنامه ی ‪ eclipse‬میرسه که میتونید اون رو از سایت زیر دانلود و نصب کنید ‪.‬آموزش‬
‫دانلود از سایت را در زیر قرار دادم‪.‬‬

‫‪https://eclipse.org/downloads/‬‬

‫‪16‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫‪17‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫‪18‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫در تصویر شماره ی سه در باال ‪ ،‬باید با توجه به سیستم عامل خود یک گزینه رو انتخاب کنید‪.‬‬

‫بعد از دانلود برنامه نوبت به نصب و اجرای آن میرسد‪.‬‬

‫ما با استفاده از این برنامه ی ایکلیپس برنامه های نوشته شده ی جاوا را اجرا و تست خواهیم کرد‬

‫ابتدا فایل فشرده رو از حالت فشرده خارج‬


‫کنید‪.‬‬

‫فایل ‪ eclipse‬رو اجرا کنید‪.‬‬

‫‪19‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫در کادر باال مسیری که پروژه های جاوا ذخیره خواهند شد رو مشخص کنید‪.‬‬

‫همچنین اگر گزینه ی پایینی را تیک بزنید آنگاه دیگر این کادر نمایش داده نخواهد شد و مسیری که برای ذخیره ی برنامه‬
‫ها مشخص کرده اید به عنوان پیش فرض تعببن میگردد‪.‬‬

‫زمانی که فایل ‪ eclipse‬رو اجرا کردید صفحه خوشامد گویی مانند باال ظاهر خواهد گشت‪ .‬رو دکمه ی ‪Worckbench‬‬
‫که با فلش سبز مشخص شده است کلیک کنید‪.‬‬

‫‪20‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫حال نوبت آن است که اولین پروژه جاوای خودمان را ایجاد کنیم‪ .‬برای این من مانند تصویر زیر عمل کنید‪.‬‬

‫‪21‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫بعد از انتخاب ‪ Java Project‬پنجره ی زیر نمایش داده خواهد شد ‪ .‬در کادر باال نام‬
‫پروژه ی خود را بنویسید که من ‪ FirstJavaProgrm‬را برای نام برنامه نوشتم‬

‫‪22‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫سپس روی ‪ Finish‬کلیک کنید‪.‬‬

‫حال باید یک کالس برای پروژه ی خود ایجاد کنیم‪ .‬برای اینکار روی پروژه ی خود یعنی‬
‫‪ FirstJavaProgrm‬راست کلیک کنید و مانند تصویر زیر عمل کنید‬

‫‪23‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫توجه ‪ :‬قسمتی که با فلش قرمز مشخص شده را ‪ Package Explorer‬نامیده میشود ‪ .‬تمام پروژه هایی‬
‫که ما ایجاد می کنیم در این قسمت قرار خواهد گرفت‪.‬‬

‫بعد از کلیک روی ‪ class‬با پنجره ی زیر روبه رو خواهیم شد‪.‬‬

‫در بیضی سبز رنگ ‪ Package‬پکیج مشخص میشود‪ .‬که بعدا در این مورد توضیح خواهم داد‪.‬‬

‫در قسمت ‪ Name‬که ب بیضی قرمز مشخص شده نام کالس خود را می نویسیم‪.‬‬

‫در قسمت آخر که با مستطیل قرمز مشخص شده است اگر تیک دار باشد ‪ Eclipse‬به ظور خودکار متد ‪ main‬را در‬
‫کالس های ما پیاده سازی میکند‪.‬‬

‫‪24‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫روی ‪ Finish‬کلیک کنید‪.‬‬

‫بعد از ساخته شدن کالس با تصویر زیر مواجه خواهید شد‬

‫‪25‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫که با فلش قرمز مشخص شده کلیک کنید تا فضای بیشتری برای کد نویس ی داشته باشیم‪.‬‬ ‫روی دکمه ی ‪Maximize‬‬

‫حال یک برنامه ی نمونه ایجاد میکنیم تا مطلب کامال جا بیافتد‪ .‬البته نگران نباشید این برنامه فقط برای آشنایی شما با چگونگی ایجاد‬
‫و اجرای یک برنامه ی جاوا در ایکلیپس است‪ .‬و اگر کد های نوشته شده رو نمی فهمید اصال مهم نیست!!!!! چون در فصلهای بعدی‬
‫همه ی کدها را ریز به ریز توضیح خواهم داد‪.‬‬

‫‪26‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫به عنوان مثال میخواهیم برنامه ی ما عبارت ‪ Welcome to Java Programming‬رو چاپ کند بنابرین باید از‬
‫دستور )(‪ System.out.println‬در جاوا استفاده کنیم‪.‬‬

‫در نهایت کلیدهای ترکیبی ‪ CTRL + S‬رو بزنید تا برنامه ذخیره شود‪ .‬در دست آخر کلید های ‪CTRL + F11‬‬

‫رو نگه دارید تا برنامه اجرا گردد‪ .‬حاصل اجرای برنامه رو در تصویر پایین می بینیم‪.‬‬

‫‪27‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫‪28‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫فصل ‪2‬‬

‫‪29‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫متغیر‪:‬‬

‫به طور خالصه میتوان متغیررا اینگونه تعریف نمود ‪:‬‬

‫"متغیر‪ ،‬اسمی برای مکانی از حافظه ی کامپیوتر است‪ ،‬که داده ها در آنجا ذخیره میشوند‪".‬‬

‫انواع داده ها در جاوا ‪:‬‬

‫به طور دقیق‪ ،‬جاوا دارای هشت نوع داده ی اصلی می باشد‪ ،‬که جدول ‪ 4-1‬لیست کامل انواع اصلی در جاوا‬

‫را نمایش میدهد‬

‫‪30‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫تخصیص مقدار به متغیر های دارای مقدار اولیه ‪:‬‬

‫برای اینکه کامال درک نمایید که چه اتفاقی برای متغیری که دارای مقدار اولیه میباشد هنگام تخصیص مقدار‬
‫جدید می افتد به شکل ‪ 4-1‬دقت نمایید‪:‬‬

‫توجه ‪ :‬متغیر تغییر میکند ولی یک لیترال تغییر ناپذیر است‪.‬‬

‫عبارات تخصیص (‪)Assignment Statements‬‬

‫در تخصیص‪ ،‬شما یک مقدار را به چیزی که در بیشتر مواقع متغیر است اختصاص میدهید در موقع تخصیص‬
‫شما باید از عملگر = استفاده نمایید‪ .‬بشکل ‪-2‬نشان دهنده ی همین موضوع است ‪:‬‬

‫‪31‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫شکل ‪ 4-3‬چگونگی افزایش مقدار متغیر ‪ amountInAccount‬را توضیح میدهد‪ ،‬که مقدار قبلی متغیر را به‬
‫اندازه ی‪ 1000000‬واحد افزایش می دهد‪.‬‬

‫(با توجه به شکل ‪ 4-2‬مقدار اولیه متغیر ‪ amountInAccount‬مقدار ‪ 50.22‬بوده است) ‪.‬‬

‫‪32‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫نوع داده ی ‪: char‬‬

‫نوع داده ای که در جاوا برای ذخیره سازی کاراکتر ها استفاده میشود ‪ char‬نام دارد‪.‬‬

‫مثال ‪ 4 -4‬یک برنامه ساده که از نوع داده ی ‪ char‬استفاده میکند را نشان میدهد‪:‬‬

‫{ ‪public class CharDemo‬‬

‫{ )][‪public static void main(String args‬‬

‫;'‪charmyLittleChar = 'b‬‬

‫;)‪charmyBigChar = Character.toUpperCase(myLittleChar‬‬

‫;)‪System.out.println(myBigChar‬‬

‫}‬

‫}‬
‫‪:‬‬ ‫خروجی حاصل از اجرای مثال ‪4-4‬‬

‫در خط ‪ 3‬متغیر ‪myLittleChar‬تعریف شده و در ضمن با مقدار ‪b‬مقدار‬

‫دهی شده است‪ ،‬دقت کنید که ‪b‬میان دو تا تک کوتیشن قرار گرفته‬

‫است‪.‬در جاوا همیشه لیترال های ‪ char‬میان تک کوتیشن قرار میگیرند‪.‬‬

‫در خط ‪ 4‬متغییر ‪ myBigChar‬تعریف میگردد‪ ،‬و در مقدار دهی به آن ‪،‬‬

‫که ‪ Character.toUpperCase‬نام دارد فراخوانی میکند‪.‬متد‬ ‫را‬ ‫برنامه یک متد ‪API‬‬

‫‪ Character.toUpperCase‬همانطور که از نامش میتوان حدس زد‪ .‬حرف را میگیرد و معادل ‪UpperCase‬‬

‫(حروف‪-‬بزرگ) آن را باز میگرداند‪.‬که در اینجا متغییر ‪myLittleChar‬را که حاوی لیترال ‪ b‬میباشد را‬

‫گرفته ‪ ،‬و معدل حرف بزرگ(‪)UpperCase‬آن را که ‪B‬میباشد باز میگرداند‪ .‬این ‪B‬بازگزدانده شده در‬

‫‪myBigChar‬ذخیره میگردد‪.‬‬
‫‪33‬‬
www.SourceSara.com ‫ آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬- ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا‬

:‫توجه‬

char mychar='Hadi'; //Error

‫ در یک زمان بیش از یک‬،‫ با خطا روبرو خواهید شد شما نمیتوانید‬، ‫اگر سعی کنید کدی مانند باال بنویسید‬

‫ اگر میخواهید کلمه یا جمله ای را در جاوا ذخیره کنید به‬.‫ ذخیره کنید‬char ‫حرف در در متغیری از نوع‬

.)‫ در فصل های بعدی توضیح داده شده است‬string ‫ (در مورد‬.‫ نیاز خواهید داشت‬String ‫چیزی به نام‬

: boolean ‫نوع‬

. false ‫ یا‬true : ‫ فقط دو مقدار را ذخیره میکند‬Boolean ‫یک متغیر نوع‬

:.‫ طریقه ی استفاده از متغیر بولین را روشن میسازد‬4-5 ‫مثال‬

public class ElevatorFitter2 {

public static void main(String args[]) {

System.out.println("True or False?");

System.out.println("You can fit all ten of the");

System.out.println("Brickenchickerdectuplets");

System.out.println("on the elevator:");

System.out.println();

intweightOfAPerson = 150;

intelevatorWeightLimit = 1400;

intnumberOfPeople =

elevatorWeightLimit / weightOfAPerson;

booleanallTenOkay = numberOfPeople>= 10;

System.out.println(allTenOkay); 34

}
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫خروجی حاصل از اجرای مثال ‪: 4-5‬‬

‫در مثال باال در خط یازدهم‪ ،‬متغیر ‪ allTenOkay‬از نوع ‪ boolen‬می باشد‪.‬برای یافتن ارزش (مقدار)‬

‫‪ allTenOkay‬برنامهچک میکند که آیا ‪ numberOfPeople‬بزرگتر تا مساوری ده است یا نه ؟‬

‫(سمبل =< نماد بزرگتر یا مساوی در جاوا میباشد)‪.‬‬

‫شده در‬ ‫‪ numberOfPeople >= 10‬یک عبارت است‪ .‬ارزش این عبارت به مقدار ذخیره‬

‫بستگی دارد‪ .‬اما شما با نگاه کردن به کد برنامه میتوانید بفهمید مه مقدار‬ ‫‪numberOfPeople‬‬

‫‪ numberOfPeople‬بزرگتر مساوی ده نیست‪ .‬بنابراین ارزش عبارت ‪ numberOfPeople >= 10‬برابر با‬

‫‪ false‬خواهد بود‪.‬‬

‫نکته ‪ :‬هر قسمت از برنامه های جاوا که ارزش (‪ )value‬داشته باشد یک عبارت است‪.‬‬

‫در خط هفتم ‪ ،‬از )(‪ System.out.println‬استفاده شده ‪ ،‬درحالی که هیچ چیزی درون پارانتز های آن وجود‬

‫ندارد‪ ،‬این باعث میشود جاوا یک خط خالی ایجاد کند‪.‬‬

‫‪35‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫نوع داده های اعشاری در جاوا ‪:‬‬

‫جاوا داری دو نوع داده اعشاری اصلی می باشد‪ double :‬و ‪ . float‬تفاوت اساسی این دونوع این در این است‬

‫که ‪ double‬دارای دقتی مضاعف نسبت به ‪ float‬می باشد و میتوانید اعداد اعشاری بزرگتری را در خود جا‬

‫دهد‪ .‬برای مشاهده ی محدوده ی مقادیر به جدول ‪ 4-1‬رجوع کنید‪ .‬برای روشن شدن مطلب به مثال ‪4-2‬‬

‫{ ‪public class Millionaire‬‬

‫{ )][‪public static void main(String args‬‬

‫;‪doubleamountInAccount‬‬

‫;‪amountInAccount = 50.22‬‬

‫;‪amountInAccount = amountInAccount + 1000000.00‬‬

‫;)"‪System.out.print("You have $‬‬

‫;)‪System.out.print(amountInAccount‬‬

‫;)"‪System.out.println("in your account.‬‬

‫}‬

‫}‬

‫در زیر توجه کنید‪:‬‬

‫خروجی مثال ‪: 4-2‬‬

‫در خططط سططوم ‪ ،‬متغیططر ‪ amountInAccount‬از نططوع ‪ double‬تعریططف شططده اسططت‪ .‬در خطط پططنجم مقطدار قب ططی‬

‫‪ amountInAccount‬با ‪ 1000000‬جمع شده و حاصل داخل ‪ amountInAccount‬قرار گرفته است‪.‬‬

‫‪36‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫توجه کنید که ‪ F‬موجود در انتهای لیترال های ‪ ،‬برای مشخص کردن اینکه اینها از نطوع ‪ float‬هسطتند بطه کطار‬

‫رفته اند‪ ،.‬و این مقادیر از نوع هگزادیسیمال نمی باشند‪.‬‬

‫نوع داده ای صحیح در جاوا ‪:‬‬

‫جاوا دارای چهار نوع داده ای نوع صحیح اصلی را پشتیبانی میکند‪ .‬محدوده مقادیر این انواع داده ای را‬

‫میتوانید در جدول ‪ 4-1‬مشاهده نمایید‪ .‬توجه داشته باشید که در مواردی که مقدار متغیر در طول برنامه‬

‫به طور مکرر تغییر میکند و یا از مقدار دقیق مقادیر این متغییر ها در طول اطالع ندارید ‪ ،‬بهتر است از نوع‬

‫داده ای را استفاده کنید که به اندازه ی کافی بزرگ باشد تا احتمال سریز ( ‪ )overflow‬را به حداقل‬

‫برسانید‪ .‬جهت فهم بهتر به مثال ‪ 4-3‬دقت نمایید‬

‫{‪public class ElevatorFitter‬‬

‫[]) {‪public static void main(String args‬‬

‫;‪intweightOfAPerson‬‬

‫;‪intelevatorWeightLimit‬‬

‫;‪intnumberOfPeople‬‬

‫;‪weightOfAPerson = 150‬‬

‫;‪elevatorWeightLimit = 1400‬‬

‫= ‪numberOfPeople‬‬

‫;‪elevatorWeightLimit / weightOfAPerson‬‬

‫;)"‪System.out.print("You can fit‬‬

‫;)‪System.out.print(numberOfPeople‬‬

‫;)"‪System.out.println("people on the elevator.‬‬

‫}‬

‫}‬
‫‪37‬‬
www.SourceSara.com ‫ آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬- ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا‬

:‫خروجی حاصل از اجرای برنامه ی باال‬

‫و‬elevatorWeightLimit ‫ سپس متغیر های‬.‫تعریف گردیده‬int ‫از نوع‬weightOfAPerson ‫در خط سوم متغییر‬

.‫در خطوط بعدی تعربف شده است‬int ‫از نوع‬numberOfPeople

elevatorWeightLimit/PersonWeight ‫ یعنی اول عبارت‬،‫در خط هشتم ابتدا داخل پارانتز حساب میشود‬

.‫ ذخیره میگردد‬numberOfPeople ‫محاسبه شده و سپس نتیجه ی نهایی در متغیر‬

)Reference Types(‫انوع مرجع‬

‫ به طور مشابه چند نوع اصلی در‬.‫با ترکیب چیزی های ساده شما عناصر پیچیده تری را به دست می آورید‬

importjavax.swing.JFrame;

public class ShowAFrame {

public static void main(String args[]) {

JFramemyFrame = new JFrame();

String myTitle = "Blank Frame";

myFrame.setTitle(myTitle);

myFrame.setSize(300, 200);

myFrame.setDefaultCloseOperation

(JFrame.EXIT_ON_CLOSE);

myFrame.setVisible(true);

} 38
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫جاوا را میتوان با یکدیگر ترکیب کرد و انواع مرجع را به دست آورد‪ .‬برای روشن سازی بهتر مطلب به مثال‬

‫‪ 6-4‬را که در زیر آورده به دقت توجه کنید‪:‬‬

‫خروجی حاصل از برامه ‪: 4-6‬‬

‫در مثال ‪ 4-6‬دو نوع مرجع تعریف گردیده است که هر دوی آنها در ‪ API‬جاوا تعریف شده اند‪ (.‬اولی را که‬

‫شما در بیشتر اوقات استفاده خواهید کرد) ‪ String‬نام دارد‪ .‬نوع دیگر (که شما از آن در ساخت ‪ GUI‬ها‬

‫استفاده خواهید کرد) ‪ JFrame‬نام دارد‪.‬‬

‫‪ String‬گروهی از کاراکتر هاست‪ ،‬آن شبیه آن است که چندین مقدار ‪ char‬را در یک سطر داشته باشد‪.‬‬

‫‪ String‬اعالن گردیده و "‪ "Blank Frame‬به آن تخصیص داده شده است‪ .‬توجه‬ ‫متغیر ‪myTitle‬از نوع‬

‫داشته باشید که کالس ‪ String‬در ‪ API‬جاوا اعالن شده است‪.‬‬

‫در برنامه های جاوا ‪ ،‬عالمت دابل کوتیشن در ابتدا و انتهای لیترال های ‪ String‬باید وجود داشته باشد‪.‬‬

‫‪ JFrame‬در جاوا بسیار شبیه به ‪window‬میباشد‪ (.‬با این تفاوت که شما ‪JFrame‬را بجای ‪ window‬فراخوانی‬

‫میکنید)‪.‬‬

‫سعی نکنید تمام خطوط مثال ‪ 4-6‬تفسیر کنید‪ .‬تنها چیزی که باید از این مثال یادبگیرید‪ ،‬اعالن دو متغییر‬

‫مرجع ‪ ،‬یعنی ‪myFrame‬از نوع ‪ JFrame‬ونیز ‪myTitle‬از نوع ‪ String‬میباشد‪ (.‬در فصول بعدی در مورد دیگر‬

‫خطوط این مثال توضیح داده خواهد شد)‪.‬‬

‫‪39‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫نکته ی مهم دیگر آن هست که ‪ String‬و ‪ JFrame‬نام کالس میباشند و در حالت کلی هر کالس در جاوا‬

‫یک نوع مرجع میباشد‪(.‬در مورد کالس های جاوا دو فصل های بعدی توضیح داده خواهد شد)‪.‬‬

‫شمامیتوانیدمتغییریازنوع‪ double‬را به صورت زیراعالن کنید‪:‬‬

‫;‪doubleamountInAccount‬‬

‫;‪doubleamountInAccount = 50.22‬‬

‫;‪JFramemyFrame‬‬

‫;)(‪JFramemyFrame = new JFrame‬‬

‫شما همچنین میتوانید ‪ myframe‬را از نوع ‪ JFrame‬اختصاص دهید ‪:‬‬

‫در شکل ‪ 4-10‬متغیر ‪ myframe‬به مثال و نمونه ای از کالس ‪ JFrame‬ارجاع میکند‪( .‬در فصول بعدی در‬

‫مورد کالس و شی به طور کامل توضیح داده خواهد شد)‪.‬‬

‫‪40‬‬
www.SourceSara.com ‫ آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬- ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا‬

‫ در طول برنامه استفاده‬javax.swing.JFrame ‫ شما اعالن میکنید کف در این برنامه از‬4-6 ‫در خط اول مثال‬

،‫ استفاده میکنید‬JFrame ‫ حذف کنید مجبور هستید هر جا که از‬4-6 ‫ اگر خط یک را از برنامه‬.‫خواهید کرد‬

‫ باید‬4-6 ‫ به درک بهتر برنامه زیر را با حذف خط اول از مثال‬.‫ را تکرار کنید‬javax.swing.JFrame ‫نام کامل‬

public class ShowAFrame {

public static void main(String args[]) {

javax.swing.JFramemyFrame =

newjavax.swing.JFrame();

String myTitle = "Blank Frame";

myFrame.setTitle(myTitle);

myFrame.setSize(3200, 200);

myFrame.setDefaultCloseOperation

(javax.swing.JFrame.EXIT_ON_CLOSE);

myFrame.setVisible(true); 41
}

}
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫برنامه را به شکل زیر تغییر دهید‪.‬‬

‫ایجاد مقادیر جدید با اعمال عملگرها (‪: )Creating New Values by Applying Operators‬‬

‫عملیات روی داده ها‪ :‬مقدار یک متغیر ممکن است نتیجه ی یک عبارت محاسباتی و یا سایر عملیات روی داده‬
‫ها باشد‪ .‬برای انجام عملیات مختلف بر روی داده ها از عملگر ها استفاده میشود‪.‬‬

‫ابتدا برای توضیح کارکرد عملگرها محاسباتی در جاوا و اینکه از آن ها چگونه در برنامه هایمان استفاده کنیم‬
‫به جدول زیر توجه نمایید‬

‫نتیجه‬ ‫مثال‬ ‫نام عملگر‬ ‫عملگر‬ ‫نوع عملگر‬

‫‪20‬‬ ‫‪5*4‬‬ ‫ضرب‬ ‫*‬ ‫محاسباتی‬

‫‪2‬‬ ‫‪10/4‬‬ ‫تقسیم‬ ‫‪/‬‬

‫‪7‬‬ ‫‪2+5‬‬ ‫جمع‬ ‫‪+‬‬

‫‪4‬‬ ‫‪9-5‬‬ ‫منها‬ ‫‪-‬‬

‫‪3‬‬ ‫‪5%23‬‬ ‫باقیمانده‬ ‫‪%‬‬

‫عملگر های حسابی در جدول شرح داده شده اند نکته ای که نباید فراموش کرد این است حاصل تقسیم عدد صحیح‬
‫بر عدد صحیح دیگری عدد صحیح خواهد بود ‪ .‬البته ابن نکته از جدول باال هم قابل مشاهده واست‪.‬حال برای روشن‬
‫شدن هر چه بهتر عملگرهای حسابی با مثال ‪ 4-7‬که در زیر آورده شده توجه نمایید‪:‬‬

‫‪42‬‬
www.SourceSara.com ‫ آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬- ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا‬

import static java.lang.System.out;

public class MakeChange {

public static void main(String args[]) {

int total = 248;

int quarters = total / 25;

intwhatsLeft = total % 25;

int dimes = whatsLeft / 10;

whatsLeft = whatsLeft % 10;

int nickels = whatsLeft / 5;

whatsLeft = whatsLeft % 5;

int cents = whatsLeft;

out.println("From" + total + "cents you get");

out.println(quarters + "quarters");

out.println(dimes + "dimes");

out.println(nickels + "nickels");

out.println(cents + "cents");

43
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫خروجی مثال باال ‪:‬‬

‫به خط اول برنامه ی باال توجه نمایید‪ import static java.lang.System.out ; :‬آن را با خط اول مثال ‪4-6‬‬

‫;‪ import javax.swing.JFrame‬مقایسه نمایید‪.‬‬

‫با اضافه نمودن ;‪ import static java.lang.System.out‬به مثال ‪ 4-7‬کد برنامه کمی برای نوشتن آسانتر‬

‫شده و حتی خواندن آن را نیز سهل میشود‪ .‬بدین صطورت کطه شطما بجطای ‪ System.out.println‬فقطط از‬

‫عبارت کوتاهتر ‪ out.println‬استفاده کرده اید‪.‬‬

‫باید توجه نمود شما میتوانید خط اول برنامه ‪ import static java.lang.System.out‬را حذف نمطوده و‬

‫به جای عبارت ‪ out.println‬عبارت ‪ System.out.println‬را جایگزین آن نمایید‪.‬‬

‫ولی اما در مثال ‪ 4-7‬کاری که برنامه انجام میدهد‪ :‬خرد کردن پول ‪ 248‬سنتی به سکه های رایج در ایطاالت‬

‫متحططده یعنططی ‪1 ::‬سططنتی ‪ 5 ،‬سططنتی (‪ 10 ، )nickel‬سططنتی(‪ 25 ، )dime‬سططنتی(‪ )quarter‬میباشططد‪ .‬کططالس‬

‫‪ MakeChange‬کمترین تعداد سکه های که با آن ها میتوان یک ‪ 248‬سنتی را خرد کرد ارائه میدهد‪.‬‬

‫عملگر های افزایش ( ‪ )increment‬و کاهش (‪: )decrement‬‬

‫جاوا عملگر های بسیار مرتبی دارد که کار را برای ما ساده میکند‪ .‬عملگر افزایشی یک واحد افزایش و عملگر‬

‫کاهشی یک واحد کم میکند‪.‬عملگر افزایشی را با دو تا بعالوه (‪ )++‬و عملگر کاهش را با دوتا منها (‪ )--‬نشان‬

‫خواهیم داد ‪ .‬برای آنکه بفهمید آن ها چگونه کار میکنند به چند تا مثال نیاز دارید‪.‬‬

‫‪44‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫کارکرد این عملگر ها بستگی دارد که شما آن ها را کجای متغیر به کار برده باشید‪..‬اگر آن را قبل از یک‬

‫متغیر به کار ببرید آن ‪ preincrement‬نامیده میشود‪ .‬به مثال ‪ 4-12‬توجه نمایید‪:‬‬

‫شما ‪ ++‬را قبل از متغیر قرار میدهید و کامپیوتر قبل از اینکه از متغیر مورد نظر در یک عبارت دیگر استفاده‬

‫کند مقدار آن را یک واحد افزایش میدهد‪.‬‬

‫برای مثال در خط هفتم برنامه ابتدا ‪numberOfBunnies‬یک واحد افزایش یافته و سپس چاپ میگردد‪.‬‬

‫ولی اگر عملگر افزایش یعد از متغیر قرار گیرد (‪ ،)postincrement‬نمایده میشود و ابتدا متغیر با همان‬

‫مقدار دز یک عبارت شرکت کرده و سپس افزایش صورت میگیرد‪ .‬برای درک بهتر به مثال ‪ 4-14‬توجه‬

‫نمایید‪:‬‬

‫‪45‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫نکته ای که ممکن است بی دقتی به آن موجب فاجعه شود نادیده گرفتن تفاوت مابین ‪ preincrement‬و‬

‫‪ postincrement‬میباشد و این به برنامه ی شما بستگی دارد که از کدام یک استفاده کنید‪.‬‬

‫نکته ی ‪ : 1‬در ‪ )--numberOfBunnies (predecrement‬کامپیوتر ایتدا یک واحد از متغیر کم کرده و بعد‬

‫آن را در بقیه ی عبارت استفاده میکند‪.‬‬

‫نکته ‪ : 2‬در ‪ )numberOfBunnies--( postdecrement‬کامپیوتر ابتدا متغیر را با مقدار قبلی در عبارت‬

‫حساب کرده و سپس از مقدار آن یک واحد میکاهد‪.‬‬

‫عملگر های تخصیص (‪: )Assignment Operators‬‬

‫جاوا عملگر های تخصیص گوناگونی دارد که شما میتوانید عملیات های جمع و تفریق و ضرب تقسیم و ‪ ....‬را‬

‫انجام دهید‪.‬برای مثال در مثال پایین توجه کنید چگونه ‪ +=5‬به مقدار متغیر ‪ numberOfBunnies‬پنج واحد‬

‫می افزاید‪ .‬و یا چگونه ‪ *=2‬مقدار ‪ numberOfBunnies‬را دوبرابر میکند‪......‬برای آموزش عملکرد این‬

‫عملگر ها به مثال ‪ 4-8‬توجه نمایید ‪:‬‬

‫‪46‬‬
www.SourceSara.com ‫ آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬- ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا‬

public class UseAssignmentOperators {

public static void main(String args[]) {

intnumberOfBunnies = 27;

intnumberExtra = 53;

numberOfBunnies += 1;

System.out.println(numberOfBunnies);

numberOfBunnies += 5;

System.out.println(numberOfBunnies);

numberOfBunnies += numberExtra;

System.out.println(numberOfBunnies);

numberOfBunnies *= 2;

System.out.println(numberOfBunnies);

System.out.println(numberOfBunnies -= 7);

System.out.println(numberOfBunnies = 100);

:: ‫خروجی‬

‫ شما میتوانید‬،‫ ویژگی های خاض عملگر هاس جاوا میباشند‬4-8 ‫دو خط آخر مثال‬

‫در خط‬.‫عملیات تخصیص در به عنوان بخشی از یک عبارت در جاوا انجام دهید‬

‫مقدار‬ ‫و‬ ‫میکاهد‬ numberOfBunnies ‫از‬ ‫واحد‬ 7 ‫عملگر‬ ‫سیزدم‬

47
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫‪ numberOfBunnies‬از ‪ 172‬به ‪ 165‬کاهش پیدا میکند‪ .‬و بعد با این مقدار جدید ‪System.out.println‬‬

‫فراخوانی میشود ‪.‬و در خط چهاردهم نشان میدهد که تخصیص مقدار به یک متغیر میتواند خود بخشی از‬

‫یک عبارت بزرگتر باشد‪.‬‬

‫‪48‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫فصل ‪3‬‬

‫‪49‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫)‪Making Decisions (Java if Statements‬‬

‫زمانی که شما در حال نوشتن برنامه های کامپیوتری هستید دائما در معرض انتخاب مسیر برنامه قرار‬

‫دارید‪( -‬آیا کاربر پسوردش را به درستی واردکرده است؟ اگر بله‪ ،‬پس اجازه بده کاربر وارد سیستم شده‬

‫و با آن کار کند‪ .‬اگر خیر‪ ،‬پس به کاربر اجازه ی ورود نده‪ . ).‬پس شما در برنامه های جاوا به راهی برای‬

‫شاخه شاخه کردن برنامه و انتخاب بین شاخه ها احتیاج دارید‪ .‬خوشبختانه جاوا برای این منظور راه حلی دارد‬

‫که عبارات ‪ if‬نامیده میشوند‪.‬‬

‫ابتدا یک مثال زده و سپس از روی مثال زیر عبارات ‪if‬و چند مبحث دیگر را توضیح خواهم داد‪.‬‬

‫‪50‬‬
www.SourceSara.com ‫ آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬- ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا‬

:: 5-1 ‫مثال‬

import static java.lang.System.out;

importjava.util.Scanner;

importjava.util.Random;

public class GuessingGame {

public static void main(String args[]) {

Scanner keyboard = new Scanner(System.in);

out.print("Enter an int from 1 to 10: ");

intinputNumber = keyboard.nextInt();

intrandomNumber = new Random().nextInt(10) + 1;

if (inputNumber == randomNumber) {

out.println("**********");

out.println("*You win.*");

out.println("**********");

} else {

out.println("You lose.");

out.print("The random number was ");

out.println(randomNumber + ".");

out.println("Thank you for playing.");

keyboard.close();

51
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫خروجی مثال ‪: 5-1‬‬

‫برنامه ‪ 5-1‬یک بازی ساده است‪ .‬یک عدد حدسی را از کاربر گرفته و سپس یک عدد تصادفی مابین ‪ 1‬تا‬

‫‪ 10‬تولید میکند‪..‬اگر عدد وارد شده توسط کاربر با عدد تصادفی تولید شده توسط برنامه یکسان باشد‪،‬‬

‫کاربر برنده شده و در غیر این صورت بازنده است و برنامه به کاربر میگوید که عدد تصادفی چه بوده‬

‫است‪.‬‬

‫کنترل کلید های فشار داده شده از کیبورد‪:‬‬

‫به این تکه کد که برشی از مثال ‪ 5-1‬است دقت نمایید ‪:‬‬

‫;‪importjava.util.Scanner‬‬

‫;)‪Scanner keyboard = new Scanner(System.in‬‬

‫;)(‪intinputNumber = keyboard.nextInt‬‬

‫این شبه کد هر عددی که کاربر از طریق کیبورد وارد کند را گرفته و در خط سوم آن را در متغیر‬

‫‪ inputNumber‬قرار میدهد‪ .‬زمانی که شما میخواهید از کیبورد داده ای را دریافت کنید دو خط اول را‬

‫فقط یکبار در برنامه قرار میدهید‪ .‬بعدا در برنامه تان‪ ،‬هر زمان که نیاز باشد کاربر داده ی ‪ int‬ای را تایپ‬

‫‪52‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫کند باید کدی همانند خط سوم از شبه کد باال که شامل فراخوانی ‪ nextInt‬باشد را بنویسید ‪ .‬تا داده ای‬

‫;‪importjava.util.Scanner‬‬

‫;)‪Scanner readingThingie = new Scanner(System.in‬‬

‫;)(‪intvalueTypedIn = readingThingie.nextInt‬‬

‫وارد شده از کیبورد گرفته شده و در متغیر مورد نظر ذخیره شود‪.‬‬

‫تمام کلمات موجود در شبه کد سه خطی باال بجز دوتای آن ها جزئی از جاوا بوده و در جاوا موجود‬

‫میباشند‪ .‬آن دو نامی که من از خودم انتخاب کردم ‪ inputNumber‬و ‪ keyboard‬میباشند‪ .‬پس برای‬

‫روشن تر ساختن موضوع شبه کد باال را فقط در از جنبه ی نام هایی که خودم انتخاب کردم تغییر میدهم ‪:‬‬

‫من نمیخواهم تمام مفاهیم و جزئیات مثال ‪ 5-1‬را توضیح بدهم ولی ذکر چند نکته ضروری ست ‪:‬‬

‫نکته ‪ : 1‬وقتی ‪ import java.util.Scanner‬را به کار بردید از کلمه ی کلیدی ‪ static‬استفاده نمیکنید‪.‬ولی‬

‫وقتی ‪ import java.lang.System.out‬را به کار بردید از کلمه ی کلیدی ‪ static‬استفاده کردید‪ .‬این امر به‬

‫این خاطر است که ‪ Scanner‬نام کالس است‪ .‬در حالی که ‪ System.out‬نام هیچ کالسی در جاوا نیست‪.‬‬

‫نکته ی ‪ :2‬معموال ( روی کامپیوتر های رومیزی و لب تاب ها) کلمه ی ‪ System.in‬برای استفاده کیبورد‬

‫به کار میرود‪.‬‬

‫نکته ی‪ :3‬زمانی که شما انتظار دارید کاربر مقدار عددی صحیحی را وارد نماید از )(‪ nextIn‬استفاده کنید‪.‬‬

‫اگر انتظار دارید مقداری اعشاری وارد نماید از )(‪ nextDouble‬استفاده نمایید‪ .‬اگر انتظار دارید یکی از‬

‫مقادیر درست یا غلط را وارد نماید از )(‪ nextBoolean‬استفاده نمایید‪ .‬اگر انتظار دارید که کاربر کلماتی‬

‫نظیر ‪ Hadi, Java, Computer‬و‪ ...‬را وارد نماید از )(‪ next‬استفاده نمایید‪.‬‬

‫‪53‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫نکته ی‪ : 4‬شما میتوانید چندین مقدار را از طریق کیبورد یکی پی از دیگری دریافت نمایید ‪.‬برای این کار از‬

‫)(‪ keyboard.nextInt‬چندین بار استفاده نمایید‪.‬‬

‫نکته ی‪ :5‬زمانی که شما از ‪ Scanner‬جاوا استفاده میکنید‪ ،‬شما باید بعد از آخرین فراخوانی ‪ ، nextInt‬متد‬

‫‪ close‬را فراخوانی نمایید‪.‬مانند خط بیست و سوم از مثال ‪.5-1‬‬

‫ایجاد کردن مقادیر تصادفی‬

‫رسیدن به مقادیر واقعی تصادفی به طور شگفت آوری مشکل است‪.‬یک کامپیوتر در تولید مقادیر تصادفی‬

‫ممکن است به نظر رسد که واقعا دارد مقادیر تصادفی تولید میکند‪.‬و لی در انتها تنها چیزی که به آن گفته‬

‫شده را انجام میدهد و این یک فشن و روش کامال قطعی ست نه تصادفی‪.‬‬

‫پس در مثال ‪ 5-1‬زمانی که کامپیوتر کد زیر را اجرا میکند‪:‬‬

‫;‪importjava.util.Random‬‬

‫;‪intrandomNumber = new Random().nextInt(10) + 1‬‬

‫به نظر مقادیر وتصادفی مابین ‪ 1‬تا ‪ 10‬تولید میکند ولی این مقادیر دراصل‪ ،‬واقعا تصادفی نیستند‪ .‬کامپیوتر‬

‫فقط از دستور العمل های داد شده به آن پیروی میکتد‪.‬‬

‫نگران نباشید که ‪ new Random().nextIn‬چه معنی میدهد‪ .‬هدف از مثال ‪ 5-1‬یادگیری یک سری مباحث‬

‫مورد نظر این فصل میباشد‪ .‬اگر معنی برخی کد ها را در مثال هایی که می آوریم جای نگرانی نیست‪ .‬چون‬

‫برخی از این کدها و مفاهیم و فصول بعدی توضیح داده خواهد شد‪.‬‬

‫‪54‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫دستورات انتخابی ‪:‬‬

‫همان طور که در مثال ‪ 5-1‬مشاهده میکنید عبارت ‪ if‬یک انشعاب در برنامه را نشان میدهد‪ .‬کامپیوتر فقط‬

‫یکی از دو شاخه را انتخاب خواهد کرد شاخه ‪ You win‬یا شاخه ی ‪ You lose‬را‪ .‬کامپیوتر یکی از دو شاخه را با‬

‫تست کردن درست یا غلط بودن شرط ‪ ،‬انتخاب خواهد کرد‪ .‬شرطی که تست خواهد شد ‪:‬‬

‫‪inputNumber == randomNumber‬‬

‫شکل ‪ 5-2‬دستور ‪ if‬را به صورت گرافیکی نشان میدهد ‪:‬‬

‫همانطور که از شکل پیداست‪.‬‬

‫شبیه یک‬ ‫‪if‬‬ ‫یک عبارت‬

‫انتشعاب و شاخه شاخه شدن‬

‫در یک مسیر و راه میباشد‪.‬‬

‫آیا ‪ inputNumber‬با ‪ randomNumber‬برابر است ؟ اگر شرط درست باشد ‪ ،‬برنامه بلوک مابین شرط‬

‫و کلمه ی ‪ else‬را اجرا خواهد کرد‪ .‬اما اگر شرط نادرست باشد کامپیوتر بلوک بعد از کلمه ی ‪ else‬را اجرا‬

‫‪55‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫خواهد نمود‪ .‬به هر حال کامپیوتر آخرین فراخوانی ‪ println‬را اجرا خواهد کرد و ‪Thank you for playing‬‬

‫را نمایش خواهد داد‪.‬‬

‫عالمت ==(‪:)The double equal sign‬‬

‫عالمت مساوی = برای تخصیص یک لیترال به یک متغیر یا تخصیص مقدار یک متغیر به یک متغیر دیگر و‪.....‬‬
‫به کار میرود‪ .‬در حال که عالمت دو تا مساوی == برای مقایسه ی دو مقدار به کار برده میشود تا بفهمیم که‬
‫آیا آنها دارای مقداری یکسان اند یا خیر ؟‬

‫‪56‬‬
www.SourceSara.com ‫ آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬- ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا‬

else ‫ بدون‬if ‫کاربرد‬

‫ در این صورا باید مثال‬.‫ شاید نخواهید به کاربر بگویید که او باخته است‬،‫ دوباره نگاهی بیاندازید‬5-1 ‫به مثال‬:

: 5-2 ‫ را به صورت زیر ویرایش کنید مثال‬1-5

import static java.lang.System.in;

import static java.lang.System.out;

importjava.util.Scanner;

importjava.util.Random;

public class DontTellThemTheyLost {

public static void main(String args[]) {

Scanner keyboard = new Scanner(in);

out.print("Enter an int from 1 to 10: ");

intinputNumber = keyboard.nextInt();

intrandomNumber = new Random().nextInt(10) + 1;

if (inputNumber == randomNumber) {

out.println("*You win.*");

out.println("That was a very good guess :-)");

out.print("The random number was ");

out.println(randomNumber + ".");

out.println("Thank you for playing.");

keyboard.close();

57
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫خروجی مثال ‪: 5-2‬‬

‫‪ else‬ندارد اگر ‪ inputNumber‬با‬ ‫مثال ‪ 5-2‬بخش‬

‫‪ randomNumber‬برابر باشد برنامه ‪ You win‬را چاپ‬

‫خواهد نمود در غیر این صورت برنامه ‪ You win‬را چاپ‬

‫نخواهد کرد‪.‬‬

‫ایجاد شرط با عملگر های مقایسه ای و منطقی ‪:‬‬

‫جاوا عملگر ها و ابزار های بسیار فراوانی برای نیاز های متنوع شما در ایجاد شرط داراست‪ .‬در این بخش‬

‫قصد داریم به این موضوع بپردازیم‪.‬‬

‫جدول ‪ 5-1‬به شما نشان میدهد که چگونه ی میتوانید از عملگر های مقایسه ای برای مقایسه یک چیز با‬

‫دیگری استفاده کنید‪.‬‬

‫‪58‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫مقایسه ی اشیاء (‪)Comparing objects‬‬

‫زمانی که شما کار کردن با اشیاء را شروع کردید‪ ،‬شما خواهید دانست که میتوانید از == و =! برای مقاسه‬

‫ی اشیاء با یکدیگر استفاده کنید‪ .‬برای مثال یک دکمه که شما روی نمایشگر کامپیوتر می بینید یک شیء است‪.‬‬

‫شما میتوانید با نوشتن یک برنامه جویا شوید که آیا یک چپ کلیک روی دکمه خاص روی نمایشگر کامپیوتر‬

‫اتفاق است یا نه ؟شما میتوانید این کار را با استفاده از عملگر های کیفیت جاوا (‪)Java's equality operator‬‬

‫انجام دهید‪.‬‬

‫{ )‪if (e.getSource() == bCopy‬‬

‫;))(‪clipboard.setText(which.getText‬‬

‫اما برای مقایسه دو ‪ String‬باید توجه داشته باشید که‪ ،‬هنگام این مقایسه استفاده از == بدین معنی است‬

‫که " آیا این ‪ String‬دقیقا در محلی از حافظه که ‪ String‬دیگر قرار دارد‪ ،‬ذخیره شده است"‪ .‬معموال شما‬

‫چنین خواسته اس ندارید‪ . .‬حال برای پرسیدن اینکه " آیا این ‪ String‬دقیقا همان کاراکترهایی را دارد که‬

‫‪ String‬دیگر داراء میباشد" یک متد به اسم ‪ equals‬وجود دارد که در ‪API (Application Programming‬‬

‫)‪ Interface‬تعریف گردیده است‪ equals .‬دو ‪ String‬را مقایسه می مند که ببیند که آیا آن ها کاراکتر‬

‫های یکسانی دارند یا خیر؟ به مثال ‪ 5-3‬توجه نمایید ‪.‬‬

‫در مثال ‪ keyboard.next() 5-3‬فراخوانی شده و هر چیزی که کاربر روی کیبورد کامپیوتر تایپ کند را‬

‫گردآوری میکند‪ .‬سپس کلمه ی تایپ شده را در متغیری به نام ‪ password‬ذخیره میکند‪.‬و در نهایت با‬

‫استفاده از ‪ if‬تفاوت == و متد ‪ equals‬نشان داده می شود‪.‬‬

‫در فراخوانی متد ‪ equals‬مهم نیست که کدام ‪ String‬داخل پارانتز و کدام یک قبل از نقطه باشد ‪ ،‬برای‬

‫مثال میتوانستیم بخط بیست و دمم را به شکل زیر نیز بنویسیم‪:‬‬

‫‪59‬‬
www.SourceSara.com ‫ آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬- ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا‬

if ("swordfish".equals(password))

.‫ هیچ نغییری نمیکرد‬5-3 ‫که در این صورت معنی و کارکرد برنامه‬

import static java.lang.System.*;


importjava.util.Scanner;
public class CheckPassword {
public static void main(String args[]) {
out.print("What's the password?");
Scanner keyboard = new Scanner(in);
String password = keyboard.next();
out.println("You typed >>" + password + "<<");
out.println();
if (password == "swordfish") {
out.println("The word you typed is stored");
out.println("in the same place as the real");
out.println("password. You must be a");
out.println("hacker.");
} else {
out.println("The word you typed is not");
out.println("stored in the same place as");
out.println("the real password, but that's");
out.println("no big deal.");
}
out.println();
if (password.equals("swordfish")) {
out.println("The word you typed has the");
out.println("same characters as the real");
out.println("password. You can use our");
out.println("precious system.");
} else {
out.println("The word you typed doesn't");
out.println("have the same characters as");
out.println("the real password. You can't");
out.println("use our precious system.");
}
keyboard.close();
}
}

60
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫خروجی مثال ‪: 5-3‬‬

‫در اولین خط برنامه ‪ 5-3‬یک راه تنبلی را نشان میدهد شما با نوشتن *‪import static java.lang.System.‬‬

‫یک راه سهل و آسان را انتخاب کرده اید ‪ ،‬این یک خط تقریبا معادل ‪ 30‬عدد ‪ import‬جداگانه ی دیگر مانند‬

‫‪ System.in:‬و ‪ System.out , System.err, System.nanoTime‬و‪ .........‬میباشد‪ .‬کابرد این نوع به‬

‫کاربردن *(ستاره) در برنامه های بزرگ است که باعث کوتاه تر شدن کد برنامه خواهد شد‪.‬‬

‫عملگر های منطقی در جاوا‬

‫جاوا تعدای عملگر برای کار ئ تست مقادیر منطقی دارد که در جدول زیر نشان داده شده اند ‪:‬‬

‫شما میتوانید از این عملگر ها در شرط ها به طور مهرانه ای استفاده کنید‪ .‬به مثال ‪ 5-4‬دقت نمایید‪:‬‬

‫‪61‬‬
www.SourceSara.com ‫ آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬- ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا‬

‫ و پسورد‬bburd ‫ زمانی که یوزرنیم‬، ‫ در زیر نشان داده شده است‬5-4 ‫حاصل اجرای چندین بار مثال‬

‫ کاربر پیام مناسب‬.‫ می باشد‬preakston ‫ و پسورد‬hritter ‫ می باشد و یا زمانی که یوزرنیم‬swordfish

‫ در غیر این صورت پیامی مبنی در‬،‫را که نشان می دهد یوزرنیم و پسورد صحییح هستند را دریافت میکند‬

.‫نامعتبر بودن یوزرنیم و پسورد دریافت میکند‬

importjavax.swing.JOptionPane;
public class Authenticator {
public static void main(String args[]) {
String username =
JOptionPane.showInputDialog("Username:");
String password =
JOptionPane.showInputDialog("Password:");
if (
username != null && password != null &&
(
(username.equals("bburd") &&
password.equals("swordfish")) ||
(username.equals("hritter") &&
password.equals("preakston"))
)
)
{
JOptionPane.showMessageDialog
(null, "You're in.");
} else {
JOptionPane.showMessageDialog
(null, "You're suspicious.");
}
}
}

62
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫خروجی حاصل از اجرای مثال ‪: 5-4‬‬

‫مثال ‪ 5-4‬یک روش تازه را برای گرفتن ورودی از کاربر نشان میدهد‪ .‬روس صفحه نمایش یک کادر پیام‬

‫(دیالوگ) مبنی در درخواست از کاربر برای وارد کردن ورودی‪ ،‬نشان داده می شود‪.‬‬

‫= ‪String password‬‬ ‫;)"‪JOptionPane.showInputDialog("Password:‬‬

‫درمثال ‪ 5-4‬دوباز از ‪ JOptionPane.showInputDialog‬استفاده شده است‪ .‬یک بار برای گرفتن یوزرنیم‬

‫و دیگر بار برای گرفتن پسورد‪ .‬برای مثال )"‪ JOptionPane.showInputDialog("Username‬یک کادر‬

‫محاوره ای (دیالوگ) شامل فیلدی برای وارد کردن متن و نیز دکمه های ‪ OK‬و ‪ Cancel‬به نمایش در می‬

‫‪63‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫آورد‪ .‬زمانی که کاربر بروی ‪ OK‬کلیک می نماید‪ .‬کامپیوتر هر آنچه که در فیلد متن وارد شده را داخل‬

‫یک متغیر قرار می دهد‪.‬‬

‫حال به قسمت دوم ‪ ،‬خط یازدهم برنامه دقت نمایید‪:‬‬

‫;)"‪JOptionPane.showMessageDialog (null, "You're in.‬‬

‫این خط نیز یک کادر محاوره ای(دیالوگ) نمایش می دهد با این تفاوت که هیچ فیلد متنی برای وترد کردن‬

‫اطالعات وجود ندارد‪ .‬نام ‪JOptionPane‬در ‪ API‬جاوا درون چیزی که ‪ javax.swing‬نامیده میشود‪ ،‬تعریف‬

‫شده است‪ .‬دلیل وجود خط اول نیز همین موضوع است‪.‬‬

‫در مثال باال ‪ JOptionPane.showInputDialog‬به زیبایی کار میکند زیرا کاربر یوزرنیم و پسورد را به‬

‫صورت رشته ای از کاراکتر ها وارد میکند‪ .‬اگر شما میخواهد کاربر مقدار ‪ int‬را وارد کند باید چیزی شبیه‬

‫))"?‪intnumberOfCows = Integer.parseInt(JOptionPane. showInputDialog("How many cows‬‬

‫تایپ کنید‪ .‬ویا برای دریافت کردن مقدار ‪ double‬از کار بر باید چیزی شبیه به زیر را تایپ کنید‪.‬‬

‫))"‪doublefractionOfHolsteins = Double. parseDouble(JOptionPane.showInputDialog("Holsteins:‬‬

‫توجه داشته باشید که ‪ username != null‬به این معنی ست که یوزرنیم تهی نیست‪ ،‬یااینکه یوزنیم دارای‬

‫یک مقدار است‪.‬‬

‫‪64‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫توجه ‪ :‬دو عبارات ‪ username != null‬و نیز ‪ password != null‬اختیاری نیستند‪ .‬اگر شما آن ها را از برنامه‬

‫حذف کنید و سپس برنامه را اجرا کنید و در کادر ظالهر شده روی ‪ Cancel‬کلیک کنید برنامه مقابل‬

‫چشمانتان خطای ‪ NullPointerException‬ر امیگیرد‪ .‬برای تمرین این خطوط را حذف کرده و دوباره رنامه‬

‫را اجرا کنید تا عمال با این نوع خطال آشنا شوید‪.‬‬

‫‪ null‬در خطوط دهم و یازدهم کامال متفاوت است‪ ،‬فراخوانی‬ ‫کاربرد کلمه ی کلیدی‬
‫‪ showMessageDialog‬به جاوا میگوید که یک کادر محاوره ای (دیالوگ) جدید ایجاد کند‪ .‬کلمه ‪ null‬بر‬
‫این موضوع اشاره میکند که کادر محاوره ای جدید بر روی هیچ یک از کادر های محاوره ای قبلی سبز‬
‫نشود‪.‬‬

‫ساخت ‪ if‬های تودرتو‬

‫در جاوا می توان از یک ‪ if‬داخل ‪ if‬دیگر استفاده کرد‪ .‬به مثال ‪ 5-5‬دقت کنید ‪:‬‬

‫;‪import static java.lang.System.out‬‬


‫;‪importjava.util.Scanner‬‬
‫{ ‪public class Authenticator2‬‬
‫{ )][‪public static void main(String args‬‬
‫;)‪Scanner keyboard = new Scanner(System.in‬‬
‫;)" ‪out.print("Username:‬‬
‫;)(‪String username = keyboard.next‬‬
‫{ ))"‪if (username.equals("bburd‬‬
‫;)" ‪out.print("Password:‬‬
‫;)(‪String password = keyboard.next‬‬
‫{ ))"‪if (password.equals("swordfish‬‬
‫;)"‪out.println("You're in.‬‬
‫{ ‪} else‬‬
‫;)"‪out.println("Incorrect password‬‬
‫}‬
‫{ ‪} else‬‬
‫;)"‪out.println("Unknown user‬‬
‫}‬
‫‪65‬‬
‫;)(‪keyboard.close‬‬
‫}‬
‫}‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫خروجی حاصل از چندین بار اجرای مثال ‪: 5-5‬‬

‫شما برای وارد شدن باید هر دوی یوزرنیم و پسورد را درست وارد کنید‪(.‬‬

‫به عبارتی دیگر هر دو شرط ‪ if‬باید درست باشد)‪ .‬شرط اول درستی‬

‫یوزرنیم را برسی میکند‪ .‬شرط دوم درستی پسورد را برسی میکند‪ .‬اگر شما‬

‫اولین شرط(یوز نیم ) را درست وارد کنید‪ .‬شما به سوی ‪ if‬دیگری که شرط‬

‫دوم(پسورد) را برسی میکند پیش روی میکنید‪ .‬در اولین ‪ if‬شرط(یوزنیم) را نادرست وارد کنید‪ ،‬هرگز‬

‫شرط ‪ if‬دوم (پسورد) از شما پرسیده نخواهد شد‪.‬‬

‫بهتر‬ ‫درک‬ ‫برای‬

‫نمودار‬ ‫به‬ ‫موضوع‬

‫گرافیکی ‪ 5-7‬دقت کنید ‪:‬‬

‫‪66‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫البته این مثال فقط برای یادگیری ‪ if‬های تو در تو آورده شده و شاید در کاربرد آن در عمل باید کمی‬

‫تغییرات روی آن انجام دهیم‪ -1 :‬پسورد وارد شده توسط کاربر به صورت ستاره دار نشان داده نمیشود‪.‬‬

‫این امنیت را پایین می آورد ‪ -2‬هیچ گونه عمل کدگذاری(‪ )encrypting‬روی پسورد انجام نمیشود‪ -3 .‬کبه‬

‫کابران غیر قانونی که سعی در وارد شدن به سیستم دارند نشان داده میشود که کدام یک از ‪ username‬یا‬

‫پسورد را اشتباه وارد میکنند‪......‬هدف از گفتن این مسائل فقط آشنا کردن شما بود و قصد پیاده کردن این‬

‫مسائل را در این فصل نداریم‪.‬‬

‫‪Switch‬در جاوا‬

‫وقتی که قصد داریم از تعداد زیادی گزینه فقط یک مورد آنها را انتخاب کنیم دستور ‪ switch‬کاربرد دارد‬

‫‪:‬ابتدا به مثال ‪ 5-6‬دقت نمایید ‪:‬‬

‫;‪import static java.lang.System.out‬‬


‫;‪importjava.util.Scanner‬‬
‫{ ‪public class JustSwitchIt‬‬
‫{ )][‪public static void main(String args‬‬
‫;)‪Scanner keyboard = new Scanner(System.in‬‬
‫;)" ?‪out.print("Which verse‬‬
‫;)(‪int verse = keyboard.nextInt‬‬
‫{ )‪switch (verse‬‬
‫‪case 1:‬‬
‫;)"‪out.println("That's because he has no brain.‬‬
‫;‪break‬‬
‫‪case 2:‬‬
‫;)"‪out.println("That's because he is a pain.‬‬
‫;‪break‬‬
‫‪case 3:‬‬
‫;)"‪out.println("'Cause this is the last refrain.‬‬
‫;‪break‬‬
‫‪default:‬‬
‫;)"‪out.println("No such verse. Please try again.‬‬
‫;‪break‬‬
‫}‬
‫;)"‪out.println("Ohhhhhhhh . . . .‬‬
‫‪67‬‬
‫;)(‪keyboard.close‬‬
‫}‬
‫}‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫‪ .‬ابتدا کاربر یک عدد مانند عدد ‪ 2‬را وارد میکند‪ .‬سپس‬

‫برنامه به ابتدای عبارت ‪ switch‬یعنی خط هشتم میرسد‪.‬‬

‫کامپیوتر مقدار متغیر ‪ verse‬را برسی میکند‪ .‬بعد از آنکه‬

‫کامپیوتر تشخیص داد که مقدار متغیر ‪ verse‬عدد ‪ 2‬است‪ .‬هر یک از ‪ case‬های عبارت ‪ switch‬را برسی‬

‫میکند‪ .‬عدد ‪ 2‬با اولین ‪ case‬مطابقت ندارد ‪ .‬پس کامپیوتر به ‪ case‬دوم حرکت میکند‪ ..‬مقدار متغیر ‪verse‬‬

‫با مقدار ‪ case‬دوم مطابقت دارد پس کامپیوتر دستوری که بالفاصله بعد از ‪ case‬دوم میآید را اجرا‬

‫میکند‪.‬‬

‫حال ‪ case‬دوم دارای ‪ 2‬دستور است که اولی ‪ ..That's because he is a pain‬را نمایش میدهد‪ .‬و دومی‬

‫دستور ‪ break‬است‪.‬زمانی که کامپیوتر به دستور ‪ break‬میرسد ‪ ،‬برنامه از ‪ switch‬خارج شده و به‬

‫اولین دستور بعد ‪ switch‬که در اینجا )"********************"(‪ out.println‬میباشد میرسد‪ .‬شکل‬

‫‪: 9-5‬‬

‫حال اگر دستور ‪ break‬را حذف کنیم چه اتفاقی‬

‫می افتد؟؟ در این صورت دستورات تمام ‪case‬‬

‫های بعدی نیز اجرا خواهند شد‪.‬‬

‫‪68‬‬
www.SourceSara.com ‫ آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬- ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا‬

switch ‫برنامه از‬.That's because he is a pain ‫ دوم حذف کنیم بعد از نمایش‬case ‫ را از‬break ‫مثال اگر‬

‫ خوب با توجه با این نکته‬.‫ نیز نمایش داده خواهد شد‬Cause this is the last refrain ‫خارج نشده و‬

‫ یک خطالی‬case ‫ در انتهای هر‬break ‫ اما فراموش کردن‬. ‫ اجباری نیست‬default ‫ موجود در‬break

5-7 ‫ برای که شما با عواقب ناخوشایند این فراموشی آشنا شوید به مثال‬. ‫رایج در برنامه نویسی است‬

.‫دقت کنید‬

import static java.lang.System.out;


importjava.util.Scanner;
public class FallingForYou {
public static void main(String args[]) {
Scanner keyboard = new Scanner(System.in);
out.print("Which verse? ");
int verse = keyboard.nextInt();
switch (verse) {
case 3:
out.print("Last refrain, ");
out.println("last refrain,");
case 2:
out.print("He's a pain, ");
out.println("he's a pain,");
case 1:
out.print("Has no brain, ");
out.println("has no brain,");
}
out.println("In the rain, in the rain.");
out.println("Ohhhhhhhh...");
out.println();
keyboard.close();
}
}
69
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫خروجی حاصل ‪:‬‬

‫همانطور که مشاهده میکنید‪ .‬ما ‪ 3‬را وارد کردیم ‪ ،‬که عدد ‪ 3‬با‬

‫اولین ‪ case‬مطابقت دارد و دستورات اولین ‪ case‬اجرا میشود ‪,‬‬

‫ولی چون ‪ break‬را فراموش کردیم‪ ،‬دستورات ‪ case‬های بعدی‬

‫هم به ترتیب اجرا شده اند‪.‬‬

‫‪ Switch‬جدید و بهبود یافته‬

‫در مثال های ‪ 5-6‬و ‪ ، 5-7‬متغیر ‪ ( verse‬از نوع ‪ ) int‬دستور ‪ switch‬را به یکی از ‪ case‬ها هدایت‬

‫میکند‪ ..‬یک متغیر ‪ int‬داخل داستور ‪ switch‬در همه ورژن های جاوا کار میکند‪ -‬در ورژن های قدیمی‬

‫جاوا ‪ ،‬فقط انواع ‪ char‬و تعدار کمی از انواع دیگر داخل دستور ‪ switch‬کار میکرند‪ -‬اما اگر شما از جاوا‪ 7‬با‬

‫نسخه های جدید تر استفاده میکنید‪ ،‬میتوانید از مقادیر ‪ String‬داخل ‪ switch‬برای انتخاب و اجرای یکی‬

‫از ‪ case‬ها استفاده کنید‪ .‬اگر شما از جاوا برای ایجاد اپلیکیشن های ‪ Android‬استفاده میکنید توجه کنید که‬

‫در جاوا ‪ 6‬و کلیه ورژن های قدیمی جاوا ‪ ،‬شما نمی توانید برای پرش میان ‪ case‬ها داخل دستور ‪، switch‬‬

‫از مقادیر ‪ string‬استفاده نمایید‪ .‬به مثال ‪ 5-8‬دقت کنید‬

‫‪70‬‬
www.SourceSara.com ‫ آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬- ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا‬

import static java.lang.System.out;


importjava.util.Scanner;
public class SwitchIt7 {
public static void main(String args[]) {
Scanner keyboard = new Scanner(System.in);
out.print("Which verse (one, two or three)? ");
String verse = keyboard.next();
switch (verse) {
case "one":
out.println("That's because he has no brain.");
break;
case "two":
out.println("That's because he is a pain.");
break;
case "three":
out.println("'Cause this is the last refrain.");
break;
default:
out.println("No such verse. Please try again.");
break;
}
out.println("Ohhhhhhhh. . . .");
keyboard.close();
}
}

: ‫خروجی‬

71
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫فصل ‪4‬‬

‫‪72‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫تکرار دستور العمل ها بارها و بارها ( دستور ‪ while‬در جاوا)‬

‫در اینجا یک بازی حدس زدن برای شما مثال زده شده است‪ .‬کامپیوتر اعداد تصادفی از یک تا ده تولید‬

‫میکند‪ .‬و سپس کامپیوتر از شما میخواهد که اعداد را حدس بزنید اگر حدس شما اشتباه بود بازی ادامه می‬

‫یابد‪ ،‬و چنانچه حدس شما درست باشد بازی خاتمه می یابد‪ .‬سپس با استفاده از ایم مثال به توضیح حلقه ی‬

‫‪ while‬خواهیم پرداخت‪ .‬مثال ‪: 6-1‬‬

‫‪73‬‬
www.SourceSara.com ‫ آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬- ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا‬

import static java.lang.System.out;


importjava.util.Scanner;
importjava.util.Random;
public class GuessAgain {
public static void main(String args[]) {
Scanner keyboard = new Scanner(System.in);
intnumGuesses = 0;
intrandomNumber = new Random().nextInt(10) + 1;
out.println(" ************ ");
out.println("Welcome to the Guessing Game");
out.println(" ************ ");
out.println();
out.print("Enter an int from 1 to 10: ");
intinputNumber = keyboard.nextInt();
numGuesses++;
while (inputNumber != randomNumber) {
out.println();
out.println("Try again...");
out.print("Enter an int from 1 to 10: ");
inputNumber = keyboard.nextInt();
numGuesses++;
}
out.print("You win after ");
out.println(numGuesses + " guesses.");
keyboard.close();
}
}

74
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫خروجی مثال ‪: 6-1‬‬

‫در این خروجی کامپیوتر یک عدد تصادفی تولید کرده و از کاربر‬

‫خواسته و عدد تولید شده را حدس بزند‪ ،‬کاربر در اولین حدس‬

‫خود اشتباه میکند‪ .‬ولی در تالش دوم عدد تصادفی را به درستس‬

‫حدس میزند‪ .‬و پیام ‪ You Win ….‬را دریافت میکند‪ ،‬توجه کنید که به ازای هر حدس متغیر ‪numGuesses‬‬

‫یک واحد افزایش می یابد‪.‬‬

‫به خط شانزدهم دقت کنید کاری که این دستور انجام میدهد این است که تا زمانی که متقغیر‬

‫‪ ( randomNumber‬عدد تصادفی تولید شده توسط کامپیوتر) و متغیر ‪ ( inputNumber‬عدد وارد شده‬

‫توسط کاربر) نامساوی باشند‪ .‬دستورات خطوط ‪ 17‬الی ‪ 21‬را تکرار نماید‪ 6-2 .‬کارکرد این مثال را‬

‫روشن‬

‫میکند‪:‬‬

‫‪75‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫اگر یکبار دیگر کد مثال باال را مرور کنید‪ .‬خواهید دانست که تنها کاری که حلقه ی ‪ while‬انجام میدهد این‬

‫است که تا زمانی که شرط اش درست باشد‪ ،،‬دستورات موجود در اولین بلوک بعدی اش را تکرار میکند‪..‬‬

‫تکرار تا تعدادی معین(حلقه ی ‪ for‬در جاوا )‬

‫ابتدا به مثال ‪ 6-2‬توجه نمایید‪ ،‬سپس حلقه ‪ for‬از روی این مثال توضیح داده خواهد شد‪.‬‬

‫;‪import static java.lang.System.out‬‬


‫{ ‪public class Yawn‬‬
‫{ )][‪public static void main(String args‬‬
‫{ )‪for (int count = 1; count <= 10; count++‬‬
‫;)" ‪out.print("The value of count is‬‬
‫;)‪out.print(count‬‬
‫;)"‪out.println(".‬‬
‫}‬
‫;)"!‪out.println("Done‬‬
‫}‬
‫}‬

‫خروجی ‪:‬‬

‫زمانی که برنامه را اجرا می کنید‪ ،‬حلقه ی ‪ for‬با تخصیص دادن یک به متغیر ‪ count‬شروع میشود‪ .‬سپس‬

‫مقدار ‪ count‬برسی میشود تا اطمینان حاصل شود که کوچکتر مساوی ده میباشد‪ .‬اگر درست بود برنامه‬

‫پیش میرود ‪ ،‬و دستورات مابین دو آکوالد را اجرا میکند‪ ،‬و در آخر یک واحد به ‪ count‬می افزاید‪.‬‬

‫‪76‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫شکل ‪ 6-2‬کارکرد حلقه ‪ for‬در این مثال را توضیح میدهد ‪:‬‬

‫اجرای حلقه ی ‪ for‬ادامه می یابد تا اینکه مقدار ‪ count‬به ‪ 11‬می رسد‪ .‬در این هنگام شرط حلقه ( کوچکتر‬

‫مساوی بودن مقدار ‪ count‬از ‪ ) 10‬نادرست می شود‪ .‬پس اجرای حلقه به پایان میرسد‪ .‬و برنامه از اولین‬

‫دستوری که بالفاصله بعد از ‪ for‬آمده است ‪ ،‬ادامه پیدا می کند‪.‬‬

‫حالت کلی دستور ‪ for‬به صورت زیر است‪:‬‬

‫(‪for ( initialization ; expression ; update‬‬

‫‪77‬‬
www.SourceSara.com ‫ آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬- ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا‬

‫ میرسد فقط یکبار اجرا‬for ‫ زمانی که برنامه برای اولین بار به عبارت‬: )‫(مقدار دهی اولیه‬initialization
.‫میشود‬

.)‫ چندین بار ارزیابی میشود (قبل از هر تکرار‬: )‫(شرط‬Expression

.)‫ چندین بار اعمال میشود( بعد از هر تکرار‬: )‫(به روز رسانی متغیر حلقه‬Update

:‫ که در زیر آورده شده و یک شعر کودکانه ی انگلیسی را چاپ میکند دقت کنید‬6-3 ‫به مثال‬
import static java.lang.System.out;
public class AlsAllWet {
public static void main(String args[]) {
for (int verse = 1; verse <= 3; verse++) {
out.print("Al's all wet. ");
out.println("Oh, why is Al all wet? Oh,");
out.print("Al's all wet 'cause ");
out.println("he's standing in the rain.");
out.println("Why is Al out in the rain?");
switch (verse) {
case 1:
out.println("That's because he has no brain.");
break;
case 2:
out.println("That's because he is a pain.");
break;
case 3:
out.println("'Cause this is the last refrain.");
break;
}
switch (verse) {
case 3:
out.println("Last refrain, last refrain,");
case 2:
out.println("He's a pain, he's a pain,");
case 1:
out.println("Has no brain, has no brain,");
}
out.println("In the rain, in the rain.");
out.println("Ohhhhhhhh...");
out.println();
}
out.print("Al's all wet. ");
out.println("Oh, why is Al all wet? Oh,");
out.print("Al's all wet 'cause ");
out.println("he's standing in the rain.");
}
}

78
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫مثال باال مروری هم به مطالب فصل قبلی میکند‪ .‬دو عبارت ‪ switch‬داخل حلقه ی ‪ for‬به کار رفته اند‪.‬‬

‫یکی از این ‪ switch‬ها از دستور ‪ break‬استفاده میکند و دیگری نه‪.‬‬

‫متغیر ‪ verse‬به عنوان متغیر حلقه ی ‪ for‬عمل میکند ابتدا مقدار ‪ 1‬و سپس ‪ 2‬و درنهایت مقدار ‪ 3‬را به‬

‫خود میگیرد که در هر یک از این حاالت ‪ case‬های مناسب درعبارات ‪ switch‬اجرا میشوند‪ .‬زمانی که شرط‬

‫حلقه نادرست میشود ( مقدار ‪ count‬بزرگتر از سه میشود) برنامه بالفاصله از حلقه خارج شده و چهار‬

‫دستور انتهای برنامه را اجرا میکند‪.‬‬

‫اجرا تا زمانی که آنچه میخواهید را به دست آورید ( حلقه ی ‪ do‬در جاوا)‬

‫اولین سوالی که ممکن از خود بپرسید این است که این حلقه چه تفاوتی با حلقه ی ‪ while‬دارد‪ .‬جواب این‬
‫است که حلقه ی ‪ while‬حداقل یکبار اجرا خواهد شد‪ .‬چون شرط حلقه در انتهای حلقه برسی میشود)‪.‬‬

‫بعد مثال ‪ 6-4‬توضیحات بیشتری داده خواهد شد‪.‬‬


‫;‪importjava.io.File‬‬
‫;‪import static java.lang.System.out‬‬
‫;‪importjava.util.Scanner‬‬
‫{ ‪public class DeleteEvidence‬‬
‫{ )][‪public static void main(String args‬‬
‫;)"‪File evidence = new File("cookedBooks.txt‬‬
‫;)‪Scanner keyboard = new Scanner(System.in‬‬
‫;‪char reply‬‬
‫{ ‪do‬‬
‫;)" )‪out.print("Delete evidence? (y/n‬‬
‫= ‪reply‬‬
‫;)‪keyboard.findWithinHorizon(".",0).charAt(0‬‬
‫;)'‪} while (reply != 'y' && reply != 'n‬‬
‫{ )'‪if (reply == 'y‬‬
‫;)"‪out.println("Okay, here goes...‬‬
‫;)(‪evidence.delete‬‬
‫;)"‪out.println("The evidence has been deleted.‬‬
‫{ ‪} else‬‬
‫;)"‪out.println("Sorry, buddy. Just asking.‬‬
‫}‬
‫;)(‪keyboard.close‬‬
‫‪79‬‬
‫}‬
‫}‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫خروجی حاصل از دوبار اجرای مثال باال ‪:‬‬

‫قبل از حذف فایل برنامه از کاربر می پرسد که فایل را خذف کند یا‬

‫نه ؟؟ اگر کاربر ‪ y‬یا ‪n‬جواب دهد برنامه همانطور که کاربر‬

‫انتظار دارد پیش میرود‪ .‬اما اگر کاربر از هرگونه کارکتر دیگر(‬

‫مانند اعداد ‪ ،‬حروف بزرگ‪ ،‬سمبل ها‪ )....................‬استفاده کند‪ .‬برنامه از کاربر دوباره سوال خواهد کرد‪.‬‬

‫حال سوالی که مطرح میشود این است که استفاده از حلقه ی ‪ do‬در اینجا چه لزومی دارد؟؟؟در پاسخ باید‬

‫گفت که در اینجا برنامه برای اینکه از کاربر سوالی بپرسد نیازی به برسی شرط حلقه ندارد( البته قبل از‬

‫کاربر پاسخی بدهد‪ ،‬چیزی برای برسی وجود ندارد) و بعد اینکه کاربر به سوال مربوطه جواب داد شرط‬

‫حلقه برسی خواهد شد‪.‬‬

‫‪80‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫توجه‪ :‬در مورد کاردن با فایل ها در فصول توضیح داده خواهد شد‪ .‬هدف این مثال فقط آشنایی با حلقه ی‬
‫‪ do‬میباشد نه آموزش کار با فایل ها‪.‬‬

‫شما میتوانید کیفیت برنامه را حتی بهتر هم کنید چون کاربر ممکن است به بزرگ یا کوچک بودن حروف بی‬
‫توجه باشد شما میتوانید شرط حلقه را به صورت زیر گسترش دهید ‪:‬‬

‫{ ‪do‬‬
‫;)" )‪out.print("Delete evidence? (y/n‬‬
‫;)‪reply = keyboard.findWithinHorizon(".", 0).charAt(0‬‬
‫&& '‪} while (reply != 'y' && reply != 'Y‬‬
‫;)'‪reply != 'n' && reply!='N‬‬

‫{ )'‪if (reply == 'y' || reply == 'Y‬‬

‫ذخیره ی یک کارکتر تنها‬

‫در مثال ‪ 5-3‬کاربر یک کلمه ای را در کیبورد تایپ می کرد و متد ‪ keyboard.next‬کلمه تایپ شده را‬

‫گرفته و داخل متغیر ‪ String‬به نام ‪ password‬ذخیره میکرد‪ .‬در آن مثال همه چیز به خوبی به پیش‬

‫میرفت چون ‪ String‬می تواند تعداد زیادی کارکتر را در خود جاء دهد ‪ .‬اما در مثال باال شما انتظار‬

‫ندارید که کاربر چندین کاراکتر وارد کند‪ ،‬شما انتظار دارید که کاربر فقط یک حرف ( ‪ y‬یا ‪ ) n‬وارد نماید‪ ،‬به‬

‫همین دلیل متغیری از نوع ‪ String‬به کار نمی برید‪ .‬در عوض متغیر از نوع ‪ char‬به کار می برید‪ ،‬متغیر که‬

‫فقط یک سمبل را در یک زمان می تواند نگه دارد‪ API .‬جاوا چیزی به نام ‪ nextChar‬ندارد‪ .‬پس برای‬

‫خواندن چیزی که با متغیر نوع ‪ char‬هم خوانی داشته باشد باید چیزی شبیه تکه کد زیر را به کار ببرید‪:‬‬

‫)‪keyboard.findWithinHorizon(".", 0).charAt(0‬‬

‫شما میتوانید دقیقا از کد باال هر جا که نیاز دازید تنها یک کاراکتر تنها را بخوانید ‪ ،‬استفاده کنید‪.‬‬

‫‪81‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫کارکردن با فایل ها در جاوا‬

‫جزئیات این موضوع در فصول بعدی ارائه خواهد شد‪ ،‬اما برای آشنایی با مطلب در اینجا توضیحاتی ارائه‬

‫میشود‪ .‬شما میتوانید در ‪ API‬جاوا یک کالس به نام ‪ java.io.File‬پیدا کنید‪ .‬عبارت ‪:‬‬

‫;)"‪File evidence = new File("cookedBooks.txt‬‬

‫درون حافظه ی کامپیوتر یک شی جدید ایجاد می کند‪ .‬این شی از کالس ‪ java.io.File‬شکل گرفته است‪.‬‬

‫این شی هر چیزی را که برنامه نیا دازد در مورد فایل ‪ cookedBooks.txt‬بداند توصیف میکند‪ .‬با توجه ب‬

‫این نکته متغیر ‪ evidence‬به فابل روی دیسک ‪ cookedBooks.txt‬رجوع میکند‪.‬‬

‫شی ‪ evidence‬یک مثال از کالس ‪ java.io.File‬است که دارای متد ‪ delete‬می باشد‪ .‬زمانی که شما‬

‫‪ evidence.delete‬را فراخوانی میکنید‪ ،‬کامپیوتر فایل مربوطه را پاک میکند‪ .‬البته شما نمی توانید چیزی را‬

‫ککه وجود ندارد را پاک کنید‪ ،‬برای مثال در دستور‬

‫;)"‪File evidence = new File("cookedBooks.txt‬‬

‫جاوا برسی نمی کند که آیا فایلی به نام ‪ cookedBooks.txt‬وجود دارد یا نه ؟ برای اینکه جاوا را مجبور‬

‫کنید که این برسی را انجام دهد چنین راه دارید‪ ،‬ساده ترین راه فراخوانی متد ‪ exists‬میباشد‪ .‬زمانی که‬

‫شما )(‪ evidence.exists‬را فراخوانی می کنید‪ .‬متد به فولدری که جاوا اتظار دارد ‪ cookedBooks.txt‬را‬

‫پیدا کند ‪ ،‬نگاه میکند فراخوانی )(‪ evidence.exists‬مقدار ‪ true‬را برمی گرداند اگر ‪ cookedBooks.txt‬را‬

‫پیدا کند و در غیر این صورت مقدار ‪ false‬بر میگرداند‪ .‬در اینجا نسخه ی دیگر از مثال ‪ 6-4‬را باقبلیت‬

‫چک کردن وجود فایل آورده می شود ‪:‬‬

‫‪82‬‬
www.SourceSara.com ‫ آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬- ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا‬

importjava.io.File;
import static java.lang.System.out;
importjava.util.Scanner;
public class DeleteEvidence {
public static void main(String args[]) {
File evidence = new File("cookedBooks.txt");
if (evidence.exists()) {
Scanner keyboard = new Scanner(System.in);
char reply;
do {
out.print("Delete evidence? (y/n) ");
reply =
keyboard.findWithinHorizon(".", 0).charAt(0);
} while (reply != 'y' && reply != 'n');
if (reply == 'y') {
out.println("Okay, here goes...");
evidence.delete();
out.println("The evidence has been deleted.");
} else {
out.println("Sorry, buddy. Just asking.");
}
keyboard.close();
}
}
}

‫محدوده ی متغیر ها‬

‫ اگر شما متغیری را‬.‫ یک بلوک را ایجاد میکنند‬،‫مجموعه از عبارات که درون دو آکوالد {} قرار گرفته اند‬

‫ برای نمونه اگر در‬.‫داخل یک بلوک تعریف کنید نمی توانید خارج از آن بلوک از آن متغیر استفاده کنید‬

:‫ را به صورت زیر تغییر می دادید خطا دریافت می کردید‬6-4 ‫مثال برای نمونه اگر مثال‬

do {
out.print("Delete evidence? (y/n) ");
char reply =
keyboard.findWithinHorizon(".", 0).charAt(0);
} while (reply != 'y' && reply != 'n'); 83
if (reply == 'y')
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫زیرا متغیر ‪ reply‬داخل بلوک مربوط به حلقه ی ‪ do‬اعالن گردیده و فقط در همانجا قابل استفاده است‪،‬‬

‫ولی در باال خارج از بلوک مربوطه نیز از‪ reply‬سه مرتبه استفاده شده که این باعث ایجاد خطا خواهد‬

‫گردید‪.‬‬

‫‪84‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫فصل ‪5‬‬

‫‪85‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫تعریف کالس‬

‫چه چیزی دو حساب بانکی را در یک بانک مشترک متمایز میکند؟؟ اگر از یک بانک دار این سوال را بپرسید‪،‬‬
‫پاسخ طوالنی خواهد شنید ‪ ،‬ولی منظور اصلی ما از تفاوت حساب های بانکی در برنامه ی بانکداری و‬
‫چگونگی برنامه نویسی برای ایجاد این تفاوت است‪ .‬برای مثال احتماال در حساب های بانکی یک متغیر به نام‬
‫‪ balance‬وجود دارد‪ ،‬که برای حساب من دارای مقدار ‪ 24.02‬و برای حساب شما دارای مقدار ‪55.63‬‬
‫حساب من‪ ،‬و متغیر‬ ‫می باشد‪ .‬حال سوال این است‪ :‬چگونه در برنامه ی بانکداری مابین متغیر ‪balance‬‬
‫حساب شما تفاوت قائل شده و آنها را از هم تشخیص دهیم‪.‬‬ ‫‪balance‬‬

‫اولی را داخل شی اول ‪ ،‬و متغیر ‪balance‬‬ ‫تفاوت ایجاد دو شی (‪ )object‬جداگانه است‪ .‬متغیر ‪balance‬‬
‫دوم را داخل شی دوم قرار دهید‪ .‬شما همچنین میتوانید متغیر های ‪ name‬و ‪address‬درون هریک قرار‬
‫دهید‪ ،.‬پی شما دو شی خواهید داشت‪ ،‬و هر شی یک حساب بانکی را نشان میدهد‪ .‬حال در اینجا هر شی‬
‫مثالی ونمونه ای از کالس ‪Account‬است‪.‬‬

‫ولی با این راحل مشکل به طور کامل حل نشده است‪.‬در واقع تا به اینجا شما دو شی در برنامه ی‬
‫کامپیوتری خود دارید‪ .‬حال شما میتوانید دو متغیر برای رجوع به این دو شی داشته باشید‪ ،‬فرض کنید اولین‬
‫متغیر را به نام ‪ myAccount‬و متغیر دوم را با نام ‪ yourAccount‬ایجاد کنید‪.‬که اولین متغیر به شی اول‬
‫(حساب بانکی من) که و دومین متغیر به شی دوم (جساب بانکی شما) اشاره میکند‪.‬برای مثال ‪:‬‬

‫‪86‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫در باال دو شی که مثالی از یک ‪ class‬به نام ‪ Account‬بودند آورده شده بود‪ .‬ولی بر استفاده از این‬
‫موضوع شما باید کالس ‪ Account‬را از قبل تعریف کنید برای روشن شدن موضوع به تعریف‬
‫کالس ‪ Account‬در جاوا دقت نمایید‪:‬‬

‫{ ‪public class Account‬‬


‫;‪String name‬‬
‫;‪String address‬‬
‫;‪double balance‬‬
‫}‬

‫در واقع این تعریف به برنامه میگوید که هر مثال و نمونه ای از کالس ‪ ( Account‬یعنی اشیا) سه متغیر‬
‫خواهند داشت‪ name -‬و ‪ address‬و ‪ - balance‬در برنامه نویسی جاوا متغیر هایی که داخل کالس ( نه‬
‫داخل ( ‪ method‬تعریف شده اند ‪ ،‬فیلد (‪ ) field‬نامیده میشوند‪.‬‬

‫‪87‬‬
www.SourceSara.com ‫ آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬- ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا‬

‫تعریف متغیر ها و تعریف اشیاء‬

.‫ سپس از روی این مثال به توضیح مطالب خواهیم پرداخت‬،‫ دقت کنید‬7-2 ‫ابتدا به مثال‬

import static java.lang.System.out;


public class UseAccount {
public static void main(String args[]) {
Account myAccount;
Account yourAccount;
myAccount = new Account();
yourAccount = new Account();
myAccount.name = "HadiKhodapanah";
myAccount.address = "222 Cyberspace Lane";
myAccount.balance = 24.02;
yourAccount.name = "Ali Alizadeh";
yourAccount.address = "111 Consumer Street";
yourAccount.balance = 55.63;
out.print(myAccount.name);
out.print(" (");
out.print(myAccount.address);
out.print(") has $");
out.print(myAccount.balance);
out.println();
out.print(yourAccount.name);
out.print(" (");
out.print(yourAccount.address);
out.print(") has $");
out.print(yourAccount.balance);
}
}

‫ مثال مثال‬.‫ وجود دارد که یک برنامه ی باال را شکل میدهد‬UseAccount ‫ و‬Account ‫در اینجا دو کالس‬
.‫) دارد‬main method( ‫ یک متد اصلی‬UseAccount ‫ را تعریف میکند و کالس‬UseAccount ‫ کالس‬2-7
.) myAccount ‫ و‬yourAccount ‫ متغیر های مخصوص خود را داراست ( یعنی متغیر های‬main ‫متد‬

‫ ( خطوط چهرم و پنجم ) کمی گمراه کننده هستند به معنی این خطوط دقت‬main ‫دو خط اول داخل متد‬
‫ را‬yourAccount ‫ اگر و زمانی که من متغیر‬: ‫ بدین معنی است که‬Account yourAccount ‫ خط‬: ‫کنید‬
.‫ خواهد بود‬Account ‫ این متغیر به چیزی رجوع میکند که آن چیز مثال و نمونه ای از کالس‬،‫ایجاد میکنم‬

‫ یک شی به وسیله ی فراخوانی کالس‬،‫ را اجرا میکند‬new Account() ‫از لحاظ فنی زمانی که کامپیوتر کد‬
..‫ ساخته میشود‬Account ‫سازنده ی‬

88
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫زمانی که کامپیوتر کد )( ‪ yourAccount = new Accoun‬را اجرا می کند‪ .‬کامپیوتر یک شی جدید‬


‫ساخته و متغیر ‪ yourAccount‬به آن شی ارجاع میکند‪ .‬برای روشن شدن موضوع ‪ ،‬به شکل باال رجوع کنید‪.‬‬

‫حال به خروجی حاصل از کمپایل و اجرای برنامه های ‪ 7-1‬و ‪ 7-2‬دقت کنید‪:‬‬

‫‪89‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫کالس های عمومی ( ‪) Public classes‬‬

‫کالس ‪ Account‬به صورت ‪ public‬است‪ ،‬یک کالس ‪ public‬برای همه ی کاربران به وسیله ی کالس‬
‫های دیگر در دسترس است‪ ،‬برای نمونه کالس ‪ UseAccount‬نیز به صورت ‪ public‬هست‪ .‬وقتی که‬
‫کالسی شامل متد ‪ main‬است‪ ،‬برنامه نویسان جاوا تمایل دارند که کالس را به صورت ‪ public‬تعریف‬
‫کنند‪ ،‬بدون اینکه زیاد در مورد کسی که از کالس استفاده خواهد کرد فکر کنند !!!!‬

‫زمانی که شما کالسی را به صورت ‪ public‬اعالن میکنید‪ ،‬شما باید کالس را در فایلی که هم نام کالس است‪،‬‬
‫معرفی و ذخیره کنید‪ .‬برای مثال زمانی که شما ‪ public class MyImportantCode‬را اعالن میکنید‪ ،‬شما‬
‫باید کدهای کالس را در فایلی به نام ‪ MyImportantCode.java‬قرار دهید‪ .‬اگر کد شما دارای دو کالس‬
‫‪ public‬باشد شما باید دست کم دو فایل ‪ .java‬را در نظر بگیرید‪ ،‬به عبارتی دیگر شما نمی توانید دو‬
‫کالس ‪ public‬را در یک فایل ‪ .java‬ذخیره کنید‪.‬‬

‫تعریف متد داخل کالس‬

‫محتویای اطالعات موجود در دو حساب بانک را در نظر بگیرید ‪:‬‬

‫جدول باال نشان میدهد که هر حساب سه چیز دازد – ‪ - name , address , balance‬این شیوه ی بود که‬
‫قبل از اینکه برنامه نویسی شیء گرا وارد عرصه شود مورد استفاده قرار میگرفت‪ .‬اما برنامه نویسی شیء‬
‫گرا تغییر بزرگی را در تفکر برنامه نویسی ایجاد کرد‪ .‬با برنامه نویسی شیء گرا هر حساب (‪ )account‬می‬
‫تواندیک ‪ name‬و یک ‪ address‬و یک ‪ balance‬داشته‪ .‬و به طریقی نمایش داده شوند‪ .‬به طوری که در‬
‫برنامه نویسی شیء گرا هر شی یک سری عملگر یا ‪ functionality‬توکار دارد‪ .‬هر حساب(‪)account‬‬
‫میداند که چگونه خود را نمایش دهد‪ .‬یک ‪ string‬میتواند به شما بگوید که آیا کاراکتر های یکسانی با یک‬
‫‪ string‬دیگر دارد‪ .‬به عنوان مثال یک ‪ PrintStream‬مانند ‪ System.out‬میداند که چگونه ‪ println‬کند‪.‬‬

‫‪90‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫در برنامه نویسی شیء گرا هر شی متد های خودش را داراست‪ .‬متد ها زیر برنامه های کوچکی هستند‬
‫کهشما میتوانید آن ها را برای انجام کارهای مورد نظرتان فراخوانی کنید‪.‬‬

‫حال یک جدول تسهیل شده را تصور کنید‪ ،‬در جدول جدید هر شیء یک سری ‪ functionality‬توکار ( ‪built‬‬
‫‪ )in‬دارد‪ ..‬هر ‪ account‬میداند که چگونه خود را روی مانیتور ‪ ،‬نمایش دهد‪ .‬هر سطر از جدول یک کپی از‬
‫متد ‪ display‬را برای خود دارد‪.‬‬

‫یک ‪ Account‬که خودش را نمایش میدهد‬

‫در جدول ‪ 7-2‬هر شیء چهار چیز دارد‪name , address , balance , , -- :‬روشی برای نمایش خودش—‬
‫وقتی شما از برنامه نوبسی سنتی به برنامه نویسی شیء گرا کوچ میکنید دیگر هیچ وقت به گذشته و‬
‫برنامه نویسی سنتی بر نخواهید گشت ( چون نیازی به این کار نخواهید داشت) ‪ :‬به مثال ‪ 7-3‬دقت کنید ‪:‬‬

‫;‪import static java.lang.System.out‬‬


‫{ ‪public class Account‬‬
‫;‪String name‬‬
‫;‪String address‬‬
‫;‪double balance‬‬
‫{ )(‪public void display‬‬
‫;)‪out.print(name‬‬
‫;)"( "(‪out.print‬‬
‫;)‪out.print(address‬‬
‫;)"‪out.print(") has $‬‬
‫;)‪out.print(balance‬‬
‫}‬
‫‪91‬‬
‫}‬
www.SourceSara.com ‫ آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬- ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا‬

: ‫ در زیر‬7-4 ‫در مثال‬: ‫ بهبود یافته‬Account ‫استفاده از کالس‬

public class UseAccount {


public static void main(String args[]) {
Account myAccount = new Account();
Account yourAccount = new Account();
myAccount.name = " HadiKhodapanah";
myAccount.address = "222 Cyberspace Lane";
myAccount.balance = 24.02;
yourAccount.name = "Ali Alizadeh ";
yourAccount.address = "111 Consumer Street";
yourAccount.balance = 55.63;
myAccount.display();
System.out.println();
yourAccount.display();
}
}

‫ هر‬-- display ‫ متد‬، name , address , balance , —‫ چهار چیز دارد‬Account ‫ کالس‬7-3 ‫در مثال‬
.‫ و یک روش برای نمایش خود دارد‬balance ‫ یک‬address ‫ یک‬name ‫ یک‬Account ‫مثالی از کالس‬
‫ برای‬. ‫راهی که شما برای صدا زدن و فراخوانی این چیز ها استفاده میکنید بسیار زیبا و منحصر به فرد است‬
‫ میتوانید چنین بنویسید‬myAccount ‫ذخیره شده در‬name ‫رجوع به‬

myAccount.name

:‫ خودش را روی صفحه ی نمایش چاپ کند میتوانید بنویسید‬myAccount ‫یا برای آنکه‬

myAccount.display()

.‫ بعد از نام متد یک جفت پارانتز قرار می دهید‬،‫ را فراخوانی میکنید‬method ‫ زمانی که شما یک‬: ‫توجه‬

92
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫فرستادن و گرفتن مقدار به ‪ Method‬ها ‪:‬‬

‫هنگامی که شما هنگام فراخوانی متد ها‪ ،‬مقادیری را داخل پارنتز قرار میدهید و با این کار آن مقادیر را به‬
‫متد مورد نظر ارسال می کنید‪ .‬و به این مقادیری هنگام فراخوانی متد داخل پارانتز های متد قرار می‬
‫دهید پارامتر (‪ ) parameters‬نامیده می شوند‪.‬‬

‫و به مقادیر که به شما برگشت داده میشوند مقادیر برگشتی یا ‪ return value‬نامیده میشوند‪ ،‬و عموما‬
‫به انواعی که توسط متد برگردانده میشوند انواع برگشتی یا ‪ return type‬گفته میشود‪ .‬مثال ‪: 7-5‬‬

‫;‪import static java.lang.System.out‬‬


‫{ ‪public class Account‬‬
‫;‪String name‬‬
‫;‪String address‬‬
‫;‪double balance‬‬
‫{ )(‪public void display‬‬
‫;)‪out.print(name‬‬
‫;)"( "(‪out.print‬‬
‫;)‪out.print(address‬‬
‫;)"‪out.print(") has $‬‬
‫;)‪out.print(balance‬‬
‫}‬
‫{ )‪public double getInterest(double percentageRate‬‬
‫;‪return balance * percentageRate / 100.00‬‬
‫}‬
‫}‬

‫در ادامه همین مبحث ‪ ،،‬به مثال ‪ 7-6‬توجه نمایید‪.‬‬

‫‪93‬‬
www.SourceSara.com ‫ آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬- ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا‬

: 7-6 ‫مثال‬

import static java.lang.System.out;


public class UseAccount {
public static void main(String args[]) {
Account myAccount = new Account();
Account yourAccount = new Account();
myAccount.name = " HadiKhodapanah";
myAccount.address = "222 Cyberspace Lane";
myAccount.balance = 24.02;
yourAccount.name = " AliAlizadeh";
yourAccount.address = "111 Consumer Street";
yourAccount.balance = 55.63;
myAccount.display();

out.print(" plus $");


out.print(myAccount.getInterest(5.00));
out.println(" interest ");
yourAccount.display();

doubleyourInterestRate = 7.00;
out.print(" plus $");
doubleyourInterestAmount =
yourAccount.getInterest(yourInterestRate);
out.print(yourInterestAmount);
out.println(" interest ");
}
}

94
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫در مثال ‪ ، 7-5‬کالس ‪ Account‬دارای متد ‪ getInterest‬است‪ .‬این متد ‪ getInterest‬دو بار از داخل‬
‫متد اصلی(‪ )main‬در مثال ‪ 7-6‬فراخوانی شده است‪ .‬که اولین فراخوانی لیترال ‪ 5.00‬را بعنوان پارامتر‬
‫داراست‪ ،‬و دومین فراخوانی نیز متغیر ‪ yourInterestRate‬را به عنوان پارامتر داراست‪ .‬خروجی حاصل از‬
‫اجرای مثالهای ‪ 7-5‬و ‪: 7-6‬‬

‫در اولین فراخوانی ‪ ،‬نرخ ‪ balance‬برابر با ‪ 24.02‬و نرخ ‪ interest‬برابر با ‪ 5.00‬میباشد‪ .‬و در دومین‬
‫فراخوانی نرخ ‪ balance‬برابر ‪ 55.63‬و نرخ ‪ interest‬برابر با ‪ 7.00‬میباشد‪.‬‬

‫شکل زیر مطالب گفته شده را به صورت گرافیکی نشان می دهد ‪.‬‬

‫کلمه ی ‪ getInterest‬نام یک متد بوده و پارانتز های آن شامل تمام چیزهایی میشود که شما هنگام‬
‫فراخوانی متد قصد دارید به آ« ارسال کنید‪ .‬و توجه کنید که ‪ ،‬کلمه ی ‪ double‬به کامپیوتر می گوید که‬

‫‪95‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫زمانی که متد ‪ getInterest‬فراخوانی شد ‪ .‬متد ‪ getInterest‬یک مقدار ‪ double‬به محلی که فراخوانی‬


‫شده است ‪ ،‬بر میگرداند‪.‬‬

‫در فرستادن یک مقدار به یک متد به شکل ‪ 7-6‬که در زیر آورده شده دقت کنید‪.‬‬

‫زمانی که شما مثال های ‪ 7-5‬و ‪ 7-6‬را اجرا می کنید‪ ،‬جریان اجزا شدن برنامه از باال به طرف پایین نیست‪،‬‬
‫بلکه به این صورت است که برنامه ابتدا از ‪ main‬به ‪ getInterest‬میرود و سپس به ‪ main‬برگشته و باز‬
‫به ‪ getInterest‬میرود و در نهایت به ‪ main‬برمیگردد‪ . .‬شکل ‪ 7-7‬این موضوع را بهتر نشان میدهد‪.‬‬

‫و اما در مورد برگشت یک مقدار از یک متد‪ :‬کل کاری که انجام میشود پایین شکل ‪ 7-8‬توضیح داده شده ‪:‬‬

‫‪96‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫مثال وقتی متد ‪ getInterest‬فراخوانی میشود ‪ ،‬متد دستور ‪ return‬که داخل بدنه ی متد هست را اجرا‬
‫میکند‪ .‬ابتدا مقدار عبارت ‪ balance * percentageRate / 100.00‬را محاسبه شده و سپس دستور‬
‫‪ return‬اجرا میشود‪ ،‬کاری که دستور ‪ return‬انجام میدهد این است که مقدار محاسبه شده را به جایی‬
‫از ‪ main‬که در آنجا ‪ getInterest‬فراخوانی شده بود بر میگرداند‪ .‬دوباره به شکل باال دقت کنید‪.‬‬

‫‪97‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫‪98‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫خطا‬

‫دوباره به خروجی حاصل از اجرای مثال های ‪ 7-5‬و ‪ 7-6‬نگاه کنید‪ :‬مقدار ‪ interest‬حساب من فقط‬
‫‪ $1.2009999999999998‬میباشد‪ .‬در حالی که این مقدار میبایست ‪ 1.201‬میشد‪ ،‬واضح است که خطایی‬
‫رخ داده است ‪ .‬این خطا به این خاطر ایجاد شده است که کامپیوتر از صفر و یک استفاده میکند و فضای‬
‫بینهایت برای انجام محاسبات در اختیار ندارد‪ .‬سریع ترین راحل برای به دست آوردن اعدادی بدون این‬
‫گونه خطا ها استفاده از روش و طریقه ی حساس تری است‪.‬شما می توانید اعداد را گرد کنید و فقط دو‬
‫رقم بعد از ممیز را نشان دهید‪ ،‬یا اینکه از برخی ابزار های موجود در ‪Application Programming (API‬‬
‫‪ )Interface‬می توانید استفاده کنید مثال ‪ 7-7‬موضوع گفته شده را روشن تر می سازد ‪:‬‬

‫‪99‬‬
www.SourceSara.com ‫ آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬- ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا‬

import static java.lang.System.out;


public class UseAccount {
public static void main(String args[]) {
Account myAccount = new Account();
Account yourAccount = new Account();
myAccount.balance = 24.02;
yourAccount.balance = 55.63;
doublemyInterest = myAccount.getInterest(5.00);
doubleyourInterest = yourAccount.getInterest(7.00);
out.printf("$%4.2f\n", myInterest);
out.printf("$%5.2f\n", myInterest);
out.printf("$%.2f\n", myInterest);
out.printf("$%3.2f\n", myInterest);
out.printf("$%.2f $%.2f",myInterest, yourInterest);
}
}

: ‫خروجی‬

‫ همیشه باید‬،‫ را فراخوانی میکنید‬printf ‫ وقتی که شما‬،‫ استفاده کردید‬printf ‫در مثال بال شما از متد‬
‫ فرمت‬.‫) است‬format string( ‫ پارامتر اول فرمت رشته‬.‫حداقل دو پارامتر داخل پارانتزهای آن قرار دهید‬
)‫ همه ی پارامتر های دیگر(بعد از اولین پارامتر‬.‫رشته دقیقا چگونگی نمایش پارامتر های دیگر را تعیین میکند‬
.‫مقادیری هستند که نمایش داده میشوند‬

100
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫به آخرین فراخوانی ‪ printf‬دا مثال ‪ 7-7‬دقت کنید‪ ،‬اولین پارامتر دارای دو مکان نگه دارنده‬
‫(‪ )placeholder‬است‪ .‬اولین )‪ placeholder(%.2f‬نمایش دادن ‪ myInterest‬را توصیف میکند‪ .‬و دومین‬
‫)‪ placeholder (%.2f‬نیز نمایش دادن ‪ yourInterest‬دا توصیف میکند‪ .‬برای اینکه بفهمید این فرمت رشته‬
‫ها دقیقا چگونه کار میکنند به شکل ‪ 7-10‬تا ‪ 7-14‬دقت کنید‪:‬‬

‫استفاده از ‪: format string‬‬

‫اضافه کردن فضای اضافی برای نمایش مقدار ‪:‬‬

‫‪101‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫نمایش دادن یک مقدار‪ ،‬بدون مشخص کردن مقدار دقیق مکان های تخصیص داده شده به آن ‪:‬‬

‫اختصاص دادن دو مکان کمتر ‪ ،‬برای نمایش یک مقدار ‪:‬‬

‫‪102‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫نمایش دادن بیش از یک مقدار ‪:‬‬

‫‪103‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫توجه داشته باشید که یک فراخوانی ‪ printf‬شیوه ای که اعداد برای محاسبات ذخیره شده اند را تغییر‬
‫نمیدهد‪ ،‬کاری که در تصاویر باال آمده است‪ ،‬این است که دسته ای از کاراکتر ها عددی را را زیبا تر(‪nice-‬‬
‫‪ )looking‬کنیم‪ ،.‬تا بتوانند رو مانیتور نمایش داده شوند‪.‬‬

‫برنامه نویسی خوب (‪:)Good programming‬‬

‫فرض کنید شما در حال نوشتن کد برای کالس ‪ UseAccount‬هستید‪.‬آیا شما بدون نوشتن‬
‫‪ myAccount.name‬یا ‪ ، yourAccount.balance‬آیا میتوانید کاری را انجام دهید؟؟ جواب استفاده از‬
‫چیزی به نام متدهای دسترسی دارنده (‪ )accessor methods‬میباشد ‪ .‬مثال های ‪ 7-8‬و ‪ 7-9‬این متد ها را‬
‫شرح میدهند ‪:‬‬

‫مخفی کردن فیلد ها ‪:‬‬

‫{ ‪public class Account‬‬


‫;‪private String name‬‬
‫;‪private String address‬‬
‫;‪private double balance‬‬
‫{ )‪public void setName(String n‬‬
‫;‪name = n‬‬
‫}‬
‫{ )(‪public String getName‬‬
‫;‪return name‬‬
‫}‬
‫{ )‪public void setAddress(String a‬‬
‫;‪address = a‬‬
‫}‬
‫{ )(‪public String getAddress‬‬
‫;‪return address‬‬
‫}‬
‫{ )‪public void setBalance(double b‬‬
‫;‪balance = b‬‬
‫}‬
‫{ )(‪public double getBalance‬‬
‫;‪return balance‬‬
‫}‬
‫}‬

‫‪104‬‬
www.SourceSara.com ‫ آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬- ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا‬

: Accessor Methods ‫فراخوانی‬

.‫ ندارد‬7-2 ‫ و‬7-1 ‫ که هیچ تفاوتی با اجرای مثال های‬7-9 ‫ و‬7-8 ‫به نظر میرسد حاصل اجرای مثال های‬
‫ به دقت‬Account ‫ کالس‬7-8 ‫حاصل اجرای هر دو برنامه یکی ستوتفوات بزرگ این است که در مثال‬
.‫ را کنترل می کند‬balance ‫ و‬address ‫ و‬name ‫اجرای فیلدهای‬

‫ تصور کنید که عبارت تخصیص‬.‫ نگاهی بیاندازید‬setName ‫ رجوع کرده و به متد‬7-8 ‫دوباره به مثال‬
: ‫ قرار دهیم‬if ‫داخل متد را درون یک‬

‫ را‬myAccount.setName("") ‫ کدی مانند‬UseAccount ‫حال برنامه نویس متصدی نوشتن کالس‬


‫ یک فیلد‬name ‫ چون فیلد‬،‫ از این گذشته‬..‫ هیچ تاثیر با نتیجه ای ندارد ندارد‬setName ‫ فراخوانی‬،‫مینویسد‬
::‫ مجاز نیست‬UseAccount ‫ عبارت زیر در کالس‬، ‫) است‬private( ‫خصوصی‬

import static java.lang.System.out;


public class UseAccount {
public static void main(String args[]) {
Account myAccount = new Account();
Account yourAccount = new Account();
myAccount.setName("HadiKhodapanah");
myAccount.setAddress("222 Cyberspace Lane");
myAccount.setBalance(24.02);
yourAccount.setName("Ali Alizadeh");
yourAccount.setAddress("111 Consumer Street");
yourAccount.setBalance(55.63);
out.print(myAccount.getName());
out.print(" (");
out.print(myAccount.getAddress());
out.print(") has $");
out.print(myAccount.getBalance());
out.println();
out.print(yourAccount.getName());
out.print(" (");
out.print(yourAccount.getAddress());
out.print(") has $");
out.print(yourAccount.getBalance());
} 105
}
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫البته فراخوانی هایی همچون )"‪ myAccount.setName("Joe Schmoe‬هنوز کار میکنند زیرا‬

‫"‪ "Joe Schmoe‬برابر با رشته ی خالی "" نیست‪.‬با استفاده از فیلد های خصوصی(‪ )private‬و متدهای‬
‫‪ accessor‬شما قادر خواهید بود از اینکه کسی یک رشته ی خالی برای فیلد ‪name‬تخصیص دهد جلوگیری‬
‫کنید‪ .‬یا حتی میتوانید با استفاده از دستورات ‪ if‬بیشتر ‪ ،‬قواعد بیشتری را روی آنچه کاربر وارد میکند‬
‫اعمال کنید‪.‬‬

‫‪106‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫فصل ‪6‬‬

‫‪107‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫با فکر کردن درباره ی داده ها(‪ ، )data‬شما شروع به نوشتن برنامه ای شیءگرا میکنید‪ .‬وقتی درباره ی‬
‫حساب ها(‪ )accounts‬کدی مینویسید‪ ،‬سوالی مطرح میشود که‪ :‬اساسا یک ‪ account‬چیست؟؟ شما کدی‬
‫برای مدیریت کلیک روی دکمه ها(‪ )button‬مینویسید‪ ،‬سوال این است که ‪ :‬دکمه چیست؟؟ زمانی که شما‬
‫برنامه ای در مورد فرستادن لیست حقوق و دستمزد به کارکنان(‪ )employees‬مینویسید‪ ،‬کارمند در‬
‫برنامه چیست؟؟‬

‫در مثال ‪ 8-1‬یک کارمند کسی هست با یک نام و یک عنوان شغلی‪ .‬یقینا یک کارمند مشخصات و خصوصیات‬
‫دیگری هم دارد‪ ،‬ولی ما برای ساده شدن کار از آنها صرف نظر میکنیم‪ ،‬مثال ‪ 8-1‬معین میکند که یک کارمند‬
‫بودن چه معنی ای میدهد‪:‬‬

‫;‪import static java.lang.System.out‬‬


‫{ ‪public class Employee‬‬
‫;‪private String name‬‬
‫;‪private String jobTitle‬‬
‫{ )‪public void setName(String nameIn‬‬
‫;‪name = nameIn‬‬
‫}‬
‫{ )(‪public String getName‬‬
‫;‪return name‬‬
‫}‬
‫{ )‪public void setJobTitle(String jobTitleIn‬‬
‫;‪jobTitle = jobTitleIn‬‬
‫}‬
‫{ )(‪public String getJobTitle‬‬
‫;‪returnjobTitle‬‬
‫}‬
‫{ )‪public void cutCheck(double amountPaid‬‬
‫;)‪out.printf("Pay to the order of %s ", name‬‬
‫;)‪out.printf("(%s) ***$", jobTitle‬‬
‫;)‪out.printf("%,.2f\n", amountPaid‬‬
‫}‬
‫}‬

‫‪108‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫هر کارمند(‪ )employee‬خصیصیه هایی دارد‪ ،‬که دوتا از این خصیصه ها بدون تردید بسیار ساده اند‪ .‬هر‬
‫کارمند یک نام(‪ )name‬و یک عنوان شغلی(‪ )jobTitle‬دارد‪ (.‬در مثال ‪ 8-1‬کالس ‪ Employee‬یک فیلد ‪name‬‬
‫و یک فیلد ‪ jobTitle‬دارد)‪.‬‬

‫یک کارمند (‪ )employee‬چهار متد برای مدیریت مقادیر نام کارمند و عنوان شغلی دارد‪ ،‬که این متد ها‬
‫عبارت اند از ‪ setName :‬و ‪ getName‬و ‪ setJobTitle‬و ‪. getJobTitle‬‬

‫بعالوه هر کارمند (‪ )employee‬یک متد ‪ cutCheck‬دارد‪ .‬مقصود این است که متدی که حقوق و دستمزد‬
‫کارمندان را مینویسد بایستی به یک کالس تعلق داشته باشد‪ .‬دلیل این امر آن است که ‪ ،‬بیشتر اطالعاتی که‬
‫داخل لیست حقوق و دستمزد نوشته میشود‪ ،‬برای هر کارمند متفاوت است‪ .‬جزئیات این مثال در ادامه‬
‫توضیح داده خواهد شد‪.‬‬

‫کالس ‪ Employee‬در مثال ‪ 8-1‬هیچ متد ‪ main‬ای نداشت‪ .‬پس هیچ نقطه ی شروعی برای اجرای کد‬
‫وجود ندارد‪ .‬برای برطرف کردن این نقص برنامه نویس یک برنامه ی جداگانه با یک متد ‪ main‬مینویسد‪،‬‬
‫و از آن برنامه برای ایجاد یک شی ء نمونه از ‪ Employee‬استفاده میکند‪ .‬مثال ‪ 8-2‬یک کالس دارای متد‬
‫‪ main‬را نشان میدهد‪.‬‬

‫;‪importjava.util.Scanner‬‬
‫;‪importjava.io.File‬‬
‫;‪importjava.io.IOException‬‬
‫{ ‪public class DoPayroll‬‬
‫)][‪public static void main(String args‬‬
‫{ ‪throwsIOException‬‬
‫= ‪Scanner diskScanner‬‬
‫;))"‪new Scanner(new File("EmployeeInfo.txt‬‬
‫{ )‪for (intempNum = 1; empNum<= 3; empNum++‬‬
‫;)‪payOneEmployee(diskScanner‬‬
‫}‬
‫;)(‪diskScanner.close‬‬
‫}‬
‫{ )‪static void payOneEmployee(Scanner aScanner‬‬
‫;)(‪Employee anEmployee = new Employee‬‬
‫;))(‪anEmployee.setName(aScanner.nextLine‬‬
‫;))(‪anEmployee.setJobTitle(aScanner.nextLine‬‬
‫;))(‪anEmployee.cutCheck(aScanner.nextDouble‬‬
‫;)(‪aScanner.nextLine‬‬
‫}‬ ‫‪109‬‬
‫}‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫برای اجرا کردن مثال ‪ 8-2‬هارد دیسک شما بایستی دارای فایلی به نام ‪ EmployeeInfo.txt‬داشته باشد‪.‬‬

‫دارای دو متد میباشد‪ .‬یکی از متد ها(‪ )main‬متد‬ ‫کالس ‪ DoPayroll‬در مثال ‪8-2‬‬
‫دیگر(‪ )payOneEmployee‬را سه بار فراخوانی میکند‪ .‬در هر بار متد ‪ payOneEmployee‬یک سری‬
‫داده ی اولیه از ‪ EmployeeInfo.txt‬دریافت کرده و آن ها را به متد های کالس ‪ Employee‬میفرستد‪.‬‬

‫در زمان اولین فراخوانی ‪ payOneEmployee‬عبارت )(‪ anEmployee = new Employee‬باعث میشود‬
‫که ‪ anEmployee‬به شی جدیدی منسوب شده و به آن اشاره کند‪ .‬زمانی که ‪ payOneEmployee‬برای‬
‫دومین بار فراخوانی میشود‪ ،‬کامپیوتر همان عبارت را دوباره اجرا میکند ‪.‬این اجرای دوباره باعث ایجاد یک‬
‫تجسم خارجی جدیدی از متغیر ‪anEmployee‬شده ‪ ،‬که به شیء کامال جدید ی منسوب و به آن شیء‬
‫اشاره میکند‪ .‬در اجرای سوم همه چیز مثل قبل دوباره تکرار میشود‪ .‬یک متغیر ‪ anEmployee‬جدید به‬
‫شی سوم منسوب شده و به آن رجوع میکند‪ .‬ممکن است ‪ .‬این موضوع ممکن است کمی گیج کننده به نظر‬
‫برسد ولی شکل ‪ 8-1‬همه چیز به خوبی روشن میسازد‪:‬‬

‫مثال ‪ 8-1‬سه فراخوانی ‪ printf‬دارد‪ .‬هر ‪ printf‬فرمت رشته ای (‪ )format string‬خود را صدا میزند (‬
‫مانند ( "(‪ ) "$*** )s%‬و یک متغیر (مانند ‪ . ) jobTitle‬هر فرمت رشته ای یک نگه دارنده مکان‬
‫(‪ )placeholder‬مانند ‪ %s‬دارد که مشخص میکند که کجا و چگونه مقادی ر متغیر ها نمایش داده شوند‪.‬‬

‫‪110‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫میباشد‪ .‬این ‪%s‬‬ ‫برای مثال دومین فراخوانی ‪ ، printf‬فرمت رشته دارای یک نگه دارنده ی جاء ‪%s‬‬

‫مکانی را برای مقدار متغیر ‪ jobTitle‬نگه میدارد‪.‬در مثال ‪ 8-1‬بر اساس قواعد جاوا ‪ ،‬نماد ‪ %s‬همیشه‬
‫مکان ای را برای رشته نگه میدارد و میتوان بقین کرد که متقیر ‪ jobTitle‬از نوع ‪ String‬اعالن شده است‪.‬‬
‫پارانتز ها در اطراف هر عنوان شغلی در خروجی برنامه وجود دارد ‪ .‬شکل ‪: 8-2‬‬

‫در مثال ‪ 8-1‬به ویرگول داخل نگه دارنده ی مکان ‪ %..2f‬توجه کنید‪ .‬ویرگول یه برنامه می گوید که از‬
‫جداکننده های گروه بند(‪ )grouping separators‬استفاده کند‪ .‬به همین دلیل است که شما در شکل ‪، 8-2‬‬
‫‪ $5،000.00‬و ‪ 7،000$‬و ‪ 10،000.00$‬را به جای ‪ 5000.00$‬و ‪ 7000.00$‬و ‪10000.00$‬میبینید‪.‬‬

‫جداکننده های گروه بند در کشور های مختلف متفاوت اند‪ .‬برای مثال در فرانسه برای نوشتن یک هزار‬
‫(مایل) شما ‪ 1000.00‬را مینویسید‪ .‬جاوا میتوانید به طور اتوماتیک اعداد شما را فرانسوی کند البته با کمک‬
‫عباراتی همچون ‪:‬‬

‫(( ‪out.print(new.))java.util.Formatter().format(java.util.Locale.FRANCE,"%,.2f", 1000.00‬‬

‫به (‪InterfaceAPI (Application Programming‬بخش مربوط به کالس های‬ ‫برای جزئیات بیشتر‬
‫‪ Formatter‬و ‪ Locale‬رجوع کنید‪.‬‬

‫ذخیره کردن داده ها در فایل‬

‫کد های در مثال ‪ 8 -2‬اجرا نمیشوند مگر آنکه شما بعضی اطالعات کارمند(‪ )employee‬را داخل یک فایل‬
‫داشته باشید‪ .‬مثال ‪ 8-2‬میگوید این فایل ‪ EmployeeInfo.txt‬نام دارد‪ .‬پس قبل از اجرای مثال ‪ 8-2‬یک فایل‬
‫کوچک ‪ EmployeeInfo.txt‬ایجاد کنید‪ .‬شکل ‪: 8-3‬‬

‫در مثال ‪ ، 8-2‬من بر این نکته تکیه کرده ام که‪ ،‬زمانی‬


‫که شما کاراکتر ها را در(مانند) شگل ‪ 8-3‬تایپ میکنید‪،‬‬
‫شما فایل را با تایپ کردن ‪ 10000.00‬به پایان میبرید‪.‬‬

‫‪111‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫و سپس ‪ Enter‬را فشار میدهید( دوباره به شکل ‪ 8-3‬نگاه کنید چگونه مکان نما در ابتدای خط جدید قرار‬
‫دارد)‪ .‬اگر شما فشار دادن ‪ Enter‬را فراموش کنید‪ ،‬آنگاه زمانی که تالش کنید مثال ‪ 8-2‬را اجرا کنید با‬
‫مشکالتی مواجه خواهید شد‪.‬‬

‫گروه بندی جدا کننده ها ‪ ،‬در کشور های مختلف‪ ،‬متفاوت است‪ .‬فایل نشان داده شده در شکل ‪ 8-3‬روی‬
‫یک کامپیوتری که در کشور ایاالت متحده پیکره بندی شده است‪ ،‬کار میکند‪ .‬جایی که ‪ 5000.00‬به معنی‬
‫‪ 5000،00‬به معنی پنج هزار است‪ ،‬به درستی کار نخواهد‬ ‫پنج هزار است‪ .‬ولی در بعضی کشورها که‬
‫کرد‪ (.‬دقت کتید که در عدد اول نقطه ‪ .‬ما بین صفر ها قرار گرفته درحالی که در عدد دوم ویرگول)‪.‬‬

‫اگر شما در چنین کشوری زندگی میکنید‪ .‬و از فایلی که در شکل ‪ 8-3‬نشان داده شده است استفاده میکنید‪،‬‬
‫زمانی که سعی در اجرای مثال این بخش داشته باشید احتماال یک پیام خطا دریافت خواهید کرد( یک‬
‫‪ .) InputMismatchException‬برای حل این مشکل اعداد موجود در فایل داده را ‪ ،‬به فرمتی رایج در‬
‫کشور خود تغییر دهید ‪ ،‬تا خطا مورد بحث را رفع نمایید‪.‬‬

‫‪ Copy‬و ‪ Past‬کردن کد ‪:‬‬

‫تقریبا در بیشتر زبان های برنامه نویسی نوشتن و خواندن داده ها رو ی فایل می تواند دشوار و نیازمند‬
‫مهارت باشد‪ .‬شما خطوط کد اضافی را به برنامه اضافه میکنید تا به کامپیوتر بگویید چه کاری را انجام دهد‪.‬‬
‫کد ها را از کدهای برنامه های دیگر مردم کپی کنید‪ .‬برای مثال‬ ‫در برخی مواقه شما میتوانید این‬
‫میتوانید از الگوی ارائه شده در مثال ‪ 8-2‬پیروی کنید ‪:‬‬

‫شما میخواهید از روی فایل اطالعاتی را بخوانبد‪ .‬با تصور اینکه دارید از روی کیبورد اطالعاتی را میخوانید‬
‫شروع کنید‪ .‬کد دستورات ‪ Scanner‬ها و نیز کد دستورات ‪ next‬معمول را داخل برنامه ی خود قرار‬
‫دهید‪ .‬سپس آیتم های اضافی را به الگوی مثال ‪ 8-2‬اضافه کنید‪:‬‬

‫دو اعالن ‪ import‬جدید اضافه کنید‪ .‬یکی برای ‪ java.io.File‬و دیگری برای ‪. java.io.IOException‬‬

‫در هدر(‪ )header‬متد خود ‪ throws IOException ،‬را تایپ کنید‪.‬‬

‫‪112‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫*‪/‬‬
‫الگوی استفاده شده در مثال ‪* 8-2‬‬
‫‪*/‬‬
‫;‪importjava.util.Scanner‬‬
‫;‪importjava.io.File‬‬
‫;‪importjava.io.IOException‬‬
‫{ ‪classSomeClassName‬‬
‫)][‪public static void main(String args‬‬
‫{ ‪throwsIOException‬‬
‫= ‪Scanner scannerName‬‬
‫;))"‪new Scanner(new File("SomeFileName‬‬
‫محل قرار دادن قسمتی ار کد ها ‪//‬‬
‫;)(‪scannerName.nextInt‬‬
‫;)(‪scannerName.nextDouble‬‬
‫;)(‪scannerName.next‬‬
‫;)(‪scannerName.nextLine‬‬
‫محل قرار دادن قسمت دیگری از کدها‪//‬‬
‫;)(‪scannerName.close‬‬
‫}‬
‫}‬

‫در فراخوانی ‪ new Scanner‬عبارت )""(‪ new File‬را تایپ کنید‪.‬‬

‫فایلی که هم اکنون داخل کامپیوتر شما وجود دارد را در نظر بگیرید و نام آن را داخل عالمت های کوتیشن‬
‫بنویسید‪.‬‬

‫کلمه ای که شما برای اسم اسکنر(‪ ) scanner‬تان به کار بردید را به خاطر داشته باشید‪ .‬از همان کلمه برای‬
‫فراخوانی ‪ next‬و ‪ nextInt‬و ‪ nextDouble‬و غیره استفاده کنید‪..‬در ضمن از همان کلمه برای فراخوانی‬
‫‪ close‬استفاده کنید‪.‬‬

‫البته بعضی اوقات‪ ،‬کپی کردن کدها و جاگذاری آن ها در برنامه ی خودتان میتواند شما را به دردسر‬
‫بیاندازد‪.‬شاید شما دارید برنامه ای میتویسید که با الگوی مثال ‪ 2-8‬مطابقت ندارد و شما نیاز دارید که‬
‫کمی در الگوی برنانه را دستکاری کرده و تغییر دهید‪.‬اما برای تغییر الگو شما باید ایده ی پشت الگو را دقیقا‬
‫درک کرده باشید‪.‬‬

‫‪113‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫خواندن یک خط در هر دفعه‬

‫در مثال ‪ 8-2‬متد ‪ payOneEmployee‬بعضی فنون مفید خواندن داده ها را توضیح میدهد‪ .‬در عمل‪ ،‬هر‬
‫اسکنری که شما ایجاد کرده اید یک متد ‪ nextLine‬دارد‪ (.‬شما ممکن است از این متد ‪ nextLine‬استفاده‬
‫نکنید‪ ،‬ولی به هر حال این متد در دسترس است‪ .).‬زمانی که شما متد ‪ nextLine‬اسکنر را فراخوانی میکنید‪،‬‬
‫این متد تا تمام شدن خط کنونی ‪ ،‬هر چیزی را گرفته و نگه میدارد‪ .‬در مثال ‪ 8-2‬یه فراخوانی به ‪nextLine‬‬
‫میتواند کل یک خط را‪ ،‬از فایل ‪ EmployeeInfo.txt‬بخواند‪(.‬در برنامه ی دیگر‪ ،‬فراخوانی ‪ nextLine‬اسکنر‪،‬‬
‫امکان دارد که هر هر چیزی که کاریر روی کیبورد تایپ میکند را تا فشار دادن دکمه ی ‪ Enter‬بخواند)‪.‬‬
‫دوباره به کلمه ی ‪ nextLine‬دقت کنید‪ nextLine :‬هر چبزی را تا انتهای خط کنونی میخواند‪ .‬متاسفانه آن‬
‫چیزی که خواندن تا انتهای خط کنونی همیشه آن چیزی که شما فکر میکنید‪ ،‬معنی نمی دهد‬

‫با آمیختن فراخوانی های ‪ nextInt‬و ‪ nextDouble‬و ‪ nextLine‬ممکن است برنامه کمی شلوغ و آشفته به‬
‫نظر آید‪ ،‬پس شما بایدآن چیزی که در برنامه انجام میدهید را زیر نظر داشته باشید‪ .‬و خروجی برنامه را‬
‫به دقت چک کنید‪.‬‬

‫برای فهمیدن همه ی اینها‪،‬شما باید از چگونگی جدا شدن خطوط فایل داده آگاهی داشته باشید‪ .‬جدا کننده‬
‫ی یک خط از یک خط دیگر را به عنوان یک کاراتر اضافی در نظر بگیرید که بین دو خط جدا قرار میگیرد‪ .‬در‬
‫این صورت فراخوانی ‪ nextLine‬به معنی خواندن هر چیزی در خط کنونی فایل داده‪ ،‬تا انتهای خط ( یعنی تا‬
‫رسیدن به کاراکتر جداکننده است) میباشد‪.‬‬

‫‪114‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫حال به شکل ‪ 8-4‬نگاه کنید‪:‬‬

‫بعدی‬ ‫‪ Hadi Khodapanah[LineBreak] ، nextLine‬را بخواند فراخوانی ‪nextLine‬‬ ‫اگر فراخوانی‬


‫]‪ CEO[LineBreak‬را خواهد خواند‪.‬‬

‫را‬ ‫اگر فراخوانی ‪ nextDouble‬عدد ‪ 5000.00‬را بخواند ‪ ،‬فراخوانی بعدی ‪]LineBreak[ ، nextLine‬‬
‫خواهد خواند‪.‬‬

‫اگر فراخوانی ‪ ]LineBreak[ ، nextLine‬را بخواند‪ .‬بعد از عدد ‪ 5000.00‬فراخوانی بعدی ‪، nextLine‬‬

‫]‪ Ali Alizadeh[LineBreak‬را خواهد خواند‪.‬‬

‫‪115‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫پس بعد از خواندن عدد ‪ 5000.00‬شما به دو فراخوانی ‪ ، nextLine‬به منظور جمع کردن نام ‪Ali‬‬
‫‪ Alizadeh‬نیاز دارید‪ ،‬اشتباهی که معموال دانشجویان مرتکب میشوند این است که اولین فراخوانی از این‬
‫دو فراخوانی ر ا فراموش میکنند‪.‬‬

‫دوباره به شکل ‪ 8-3‬نگاهی بیاندازید‪ ،‬برای مثال به درستی کار کند شما نیاز دارید که بعد از آخرین‬
‫‪ 10000.00‬یک جدا کننده ی خطوط (‪ )line break‬داشته باشید‪ .‬از آخرین فراخوانی ‪ nextLine‬را انجام‬
‫ندهید ممکن است برنامه ی شما خراب شده و پیام خطایی به مضمون ‪NoSuchElementException: No‬‬
‫‪ .line found‬دریافت نمایید‬

‫توجه به این نکته الزامی است که ‪ ،‬اولین ‪ nextLine‬که از فایل شکل ‪Hadi Khodapanah[LineBreak] ، 8-3‬‬
‫را خوانده ‪ ،‬اما همین فراخوانی ‪ Hadi Khodapanah‬را بدون هیچگونه ‪ line break‬به کد اجرایی تحویل‬
‫میدهد‪ .‬بنابراین ‪ nextLine‬در جستجوی یک ‪ line break‬بوده و پس از پیدا کردن ‪ ، line break‬آن از‬
‫دست میدهد‪ .‬توجه نکردن به این نکته‬
‫میتواند برنامه شما را با مشکالت جدی‬
‫مواجه کند‪.‬‬

‫‪116‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫ایجاد یک زیر کالس‬

‫در مثال ‪ 8-1‬یک کالس ‪ Employee‬تعریف شده است‪ .‬شما میتوانید از آنچه که در مثال ‪ 8-1‬تعریف شده‬
‫استفاده کرده و یا آن را گسترش دهید‪ .‬با این کار میتوانیدکالس های جدیدتر و مخصوص تری را ایجاد‬
‫کنید‪.‬بر این اساس در مثال ‪ 8-3‬تصمیم گرفتن یک کالس جدید به اسم ‪ FullTimeEmployee‬تعریف کنم ‪:‬‬

‫{ ‪public class FullTimeEmployee extends Employee‬‬


‫;‪private double weeklySalary‬‬
‫;‪private double benefitDeduction‬‬
‫{ )‪public void setWeeklySalary(double weeklySalaryIn‬‬
‫;‪weeklySalary = weeklySalaryIn‬‬
‫}‬
‫{ )(‪public double getWeeklySalary‬‬
‫;‪returnweeklySalary‬‬
‫}‬
‫{ )‪public void setBenefitDeduction(double benefitDedIn‬‬
‫;‪benefitDeduction = benefitDedIn‬‬
‫}‬
‫{ )(‪public double getBenefitDeduction‬‬
‫;‪returnbenefitDeduction‬‬
‫}‬
‫{ )(‪public double findPaymentAmount‬‬
‫;‪returnweeklySalary - benefitDeduction‬‬
‫}‬
‫}‬

‫به مثال ‪ 8-3‬نگاه کنید‪ .‬شما میتوانید ببینید که هر نمونه از کالس ‪ FullTimeEmployee‬دارای دو فیلد‬
‫‪ weeklySalary‬و ‪ benefitDeduction‬میباشد‪ .‬اما آیا آن ها تنها فیلد هایی هستند که هر نمونه از کالس‬
‫‪ FullTimeEmployee‬دارد؟؟ نه ‪...‬خط اول از برنامه ‪ 8-3‬میگوید که کالس ‪ FullTimeEmployee‬توسعه‬
‫یافته ی کالس ‪ Employee‬میباشد‪ .‬این بدین معنی است که عالوه بر داشتن دو فیلد ‪ weeklySalary‬و‬
‫‪ benefitDeduction‬هر نمونه از کالس ‪ FullTimeEmployee‬دارای دو فیلد دیگر ‪ name‬و ‪jobTitle‬‬
‫میباشد‪ .‬این دو فیلد از تعریف کالس ‪ Employee‬حاصل میشوند‪.‬‬

‫زمانی که یک کالس بر اساس گسترش دادن یک کالسی که از قبل موجود است ایجاد میکنید‪ ،‬کالس‬
‫گسترش یافته به طور اتوماتیک (وظایف اساسی کارکردی) ‪ functionality‬ای در کالس موجود قبلی‬

‫‪117‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫تعریف شده را به ارث میبرد‪ .‬بنابراین کالس ‪ FullTimeEmployee‬فیلد های ‪ name‬و ‪ jobTitle‬را به‬
‫ارث میبرد‪ .‬کالس ‪ FullTimeEmployee‬همچنین تمام متد های در کالس ‪ Employee‬اعالن گردیده اند را‬
‫نیز به ارث می برد‪....)setJobTitle, getJobTitle, and cutCheck.setName, getName(.‬در واقع‬
‫‪ FullTimeEmployee‬بک زیر کالس از کالس ‪ Employee‬میباشد این بدان معنی است که کالس‬
‫‪ Employee‬یک سوپر کالس(‪ )superclass‬برای کالس ‪ FullTimeEmployee‬میباشد‪ .‬شما همچنین‬
‫میتوانید بگویید که کالس ‪ FullTimeEmployee‬فرزند کالس ‪ Employee‬میباشد و کالس ‪Employee‬‬
‫والد کالس ‪ FullTimeEmployee‬است‪ .‬مثال ‪ 8-4‬تقلبی و جعلی است اما میتواند آموزتده باشد‪.‬‬

‫ولی چرا کد مثال ‪ 8-4‬تقلبی ومعرفی شد‪ .‬در واقع تفاوت اصلی مابین مثال ‪ 8-4‬و وضعیت ‪.‬اراثت در مثال‬
‫های ‪ 8-1‬و ‪ 8-3‬این است که ‪ :‬کالس فرزند نمیتواند مستقیم به فیلد های خصوصی کالس والد رجوع داشته‬
‫باشد‪ .‬ب رای اینکه کالس فرزند به فیلد های خصوصی کالس والد دسترسی داشته باشد‪ ،‬کالس فرزند بایستی‬
‫ابتدا متد های دسترسی دارنده(‪ )accessor‬ی کالس والد را فراخوانی کند‪ .‬به مثال ‪ 8-3‬برگردید فراخوانی‬
‫)"‪ setName("Rufus‬مجاز و قانونی است ولی دستور "‪ name="Rufus‬مجاز نخواهد بود‪.‬‬

‫نکته ‪ :‬شما به فایل ‪ Employee.java‬روی هارد خود برای نوشتن کالسی که توسعه یافته ی ‪Employee‬‬
‫باشد نیاز ندارید‪ .‬تمام نیاز شما فایل ‪ Employee.class‬می باشد‪.‬‬

‫‪118‬‬
www.SourceSara.com ‫ آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬- ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا‬

: 8-4 ‫مثال‬

import static java.lang.System.out;


public class FullTimeEmployee {
private String name;
private String jobTitle;
private double weeklySalary;
private double benefitDeduction;
public void setName(String nameIn) {
name = nameIn;
}
public String getName() {
return name;
}
public void setJobTitle(String jobTitleIn) {
jobTitle = jobTitleIn;
}
public String getJobTitle() {
returnjobTitle;
}
public void setWeeklySalary(double weeklySalaryIn) {
weeklySalary = weeklySalaryIn;
}
public double getWeeklySalary() {
returnweeklySalary;
}
public void setBenefitDeduction(double benefitDedIn) {
benefitDeduction = benefitDedIn;
}
public double getBenefitDeduction() {
returnbenefitDeduction;
}
public double findPaymentAmount() {
returnweeklySalary - benefitDeduction;
}
public void cutCheck(double amountPaid) {
out.printf("Pay to the order of %s ", name);
out.printf("(%s) ***$", jobTitle);
out.printf("%,.2f\n", amountPaid);
}
}

119
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫ایجاد زیر کالس ها شکل گیری عادت هاست‬

‫زمانی که شما با ایجاد زیر کالس ها(کالس های توسعه یافته) خوگرفتید‪ .‬خلق زیر کالس باعث ایجاد راحتی‬
‫در برنامه هایی که می نویسید خواهد شد‪ .‬اگر شما کالس ‪ FullTimeEmployee‬را ایجاد کرده اید‪ .‬پس‬
‫میتوانید کالس دیگری به اسم ‪ PartTimeEmployee‬را نیز ایجاد کنید که در شکل ‪ 8-5‬ایجاد شده است‪.‬‬

‫{ ‪public class PartTimeEmployee extends Employee‬‬


‫;‪private double hourlyRate‬‬
‫{ )‪public void setHourlyRate(double rateIn‬‬
‫;‪hourlyRate = rateIn‬‬
‫}‬
‫{ )(‪public double getHourlyRate‬‬
‫;‪returnhourlyRate‬‬
‫}‬
‫{ )‪public double findPaymentAmount(int hours‬‬
‫;‪returnhourlyRate * hours‬‬
‫}‬
‫}‬

‫بر خالف کالس ‪ ، FullTimeEmployee‬کالس ‪ PartTimeEmployee‬هیچ حقوق و دستمزد(‪ )salary‬و یا‬

‫کسر (‪)deduction‬ندارد‪ .‬در عوض ‪ PartTimeEmployee‬یک فیلد ‪ hourlyRate‬دارد‪ (.‬بعالوه ی یک‬

‫که ممکن است در برنامه قرار داده شود‪..‬البته توجه داشته باشید که‬ ‫فیلد ‪numberOfHoursWorked‬‬
‫تعداد ساعات کاری یک کارمند پاره وقت از یک هفته به هفته ی دیگر ( بسته به زیادی کار موجود) ممکن‬
‫است متفاوت باشد‪.‬‬

‫‪120‬‬
www.SourceSara.com ‫ آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬- ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا‬

‫استفاده از زیر کالس ها‬

‫ ایجاد زیر‬: ‫ البته ی نکته ی مهم این است‬،‫بخش های قبلی نحوه ی ایجاد زیر کالس ها را توضیح می دهد‬
‫ در این بخش کدی‬.‫کالس ها به خودی خود مزیتی ندارد مگر آنکه شما کدی برای استفاده از آنها بنویسید‬
.‫) را توضیح خواهیم داد‬subclasses(‫که از این زیرکالس ها‬

PartTimeEmployee ‫ و‬FullTimeEmployee ‫ که از زیر کالس های‬، ‫ شما یه برنامه ی ساده‬8-6 ‫مثال‬


.‫ نیز خروجی این برنامه را نشان میدهد‬8-6 ‫ و شکل‬.‫ را نشان میدهد‬،‫استفاده میکند‬

public class DoPayrollTypeF {


public static void main(String args[]) {
FullTimeEmployeeftEmployee = new FullTimeEmployee();
ftEmployee.setName("HadiKhodapanah");
ftEmployee.setJobTitle("CEO");
ftEmployee.setWeeklySalary(5000.00);
ftEmployee.setBenefitDeduction(500.00);
ftEmployee.cutCheck(ftEmployee.findPaymentAmount());
System.out.println();
PartTimeEmployeeptEmployee = new PartTimeEmployee();
ptEmployee.setName("Ali Alizadeh");
ptEmployee.setJobTitle("Driver");
ptEmployee.setHourlyRate(7.53);
ptEmployee.cutCheck (ptEmployee.findPaymentAmount(10));
}
}

121
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫‪ Employee‬و‬ ‫برای اینکه کامال مثال ‪ 8-6‬را متوجه شوید بایستی دوباره به زیرکالس های‬
‫‪ FullTimeEmployee‬و ‪ PartTimeEmployee‬نگاهی بیاندازید‪.‬‬

‫نیمه ی نخست مثال ‪ 8-6‬به یک کارمند تمام وقت می پردازد‪ .‬توجه کنید که چگونه متد های زیادی با‬
‫میتوانید‬ ‫شما‬ ‫مثال‬ ‫برای‬ ‫هستند‪.‬‬ ‫دسترس‬ ‫در‬ ‫استفاده‬ ‫برای‬ ‫‪ftEmployee‬‬ ‫متغیر‬
‫نوع ‪ FullTimeEmployee‬را‬ ‫‪ ftEmployee.setWeeklySalary‬را فراخوانی کنیدزیرا که ‪ftEmployee‬‬
‫کالس‬ ‫را فراخوانی کنید‪ ،‬چونکه‬ ‫داراست‪ .‬شما همچنین میتوانید ‪ftEmployee.setName‬‬
‫‪ FullTimeEmployee‬کالس ‪ Employee‬را گسترش میدهد‪.‬‬

‫برای اینکه ‪ cutCheck‬داخل کالس ‪ Employee‬اعالن شده است شما میتوانید ‪ftEmployee.cutCheck‬‬
‫را فراخوانی کنید‪ .‬شما همچنینی میتوانید ‪ ftEmployee.findPaymentAmount‬را نیز فراخوانی کنید‬
‫زیراکه متد‪ findPaymentAmount‬داخل کالس ‪ FullTimeEmployee‬میباشد‪.‬‬

‫تطابق انواع(‪)types match‬‬

‫دوباره به نیمه ی نخست مثال ‪ 8-6‬نگاه ی انداخته و به آخرین عبارت توجه توجه کنید‪:‬‬

‫متد ‪ ftEmployee.findPaymentAmount‬با لیست پارامتر خالی فراخوانی میشود‪ .‬برای اینکه متد‬
‫‪ findPaymentAmount‬هیچ پارامتری را نمیپذیرد‪(.‬مثال ‪. )8-3‬‬

‫متد ‪ findPaymentAmount‬نوع داده ای ‪ double‬را برمیگرداند‪.‬‬

‫متد‬ ‫به‬ ‫برمیگرداند‬ ‫‪ftEmployee.findPaymentAmount‬‬ ‫که‬ ‫ای‬ ‫‪double‬‬ ‫مقدار‬


‫‪ ftEmployee.cutCheck‬پاس داده میشود‪ .‬الیته متد ‪ cutCheck‬یک پارامتر از نوع ‪ double‬میگیرد‪(.‬‬
‫مثال ‪.)8-1‬‬

‫به شکل زیر دقت کنید‪:‬‬

‫‪122‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫تغییر دادن متد های قبلی‬

‫خوب ‪ ،‬شما میتوانید کدهای کالس ‪ PartTimeEmployee‬را کند و کاو کرده ‪ ،‬و روی آنها کمی تغییرات‬
‫اعمال کنید‪ (.‬به نظر من ایده ی خوبی نیست)‪.‬‬

‫موجود‬ ‫‪ ،‬از کالس‬ ‫میتوانید از آموزش های بخش قبلی استفاده کرده و یک زیر کالس‬ ‫شما‬
‫‪ PartTimeEmployee‬ایجاد نمایید‪ .‬اما کالس ‪ PartTimeEmployee‬قبال متد ‪findPaymentAmount‬‬
‫را داشت‪ .‬آیا ما به راهی برای دور زدن و نادیده گرفتن متد ‪ findPaymentAmount‬نیاز داریم ؟؟‬

‫در اینجا شما خوش شانس هستید که از زبان شیءگرای جاوا استفاده میکنید‪ .‬با برنامه نویسی شیء گرا شما‬
‫میتوانید زیرکالس هایی خلق نمایید که در کارکرد اساسی کالس والد خود را دارا نیستند‪ .‬مثال ‪ 8-7‬چنین‬
‫زیر کالسی را نشان میدهد‪:‬‬

‫{ ‪public class PartTimeWithOver extends PartTimeEmployee‬‬


‫‪@Override‬‬
‫{ )‪public double findPaymentAmount(int hours‬‬
‫{ )‪if(hours <= 40‬‬
‫;‪returngetHourlyRate() * hours‬‬
‫{ ‪} else‬‬
‫‪returngetHourlyRate() * 40 +‬‬
‫;)‪getHourlyRate() * 2 * (hours - 40‬‬ ‫‪123‬‬
‫}‬
‫}‬
‫}‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫شکل ‪ 8-8‬رابطه ی مابین مثال ‪ 8-7‬و سایر تکه کدهای موجود در این فصل را نشان میدهد‪ .‬اگر دقیق‬
‫شویم ‪ PartTimeWithOver‬یک زیرکالس از یک زیرکالس است‪ .‬در برنامه نویسی شیءگرا زنجیره هایی‬
‫اینچنین غیر معمول نیست‪ .‬بلکه حتی شاهد زنجیره هایی طوالنی تر از این هم هستیم‪.‬‬

‫کالس ‪ PartTimeWithOver‬کالس ‪ PartTimeEmployee‬را گسترش میدهد‪ ،‬اما ‪PartTimeWithOver‬‬


‫هر آنچه که میخواهد از کالس از کالس ‪ PartTimeEmployee‬به ارث ببرد را انتخاب میکند‪ .‬زیراکه‬
‫کالس‬ ‫بوده‪ ،‬و‬ ‫دارای اعالن خودش برای متد ‪findPaymentAmount‬‬ ‫‪PartTimeWithOver‬‬
‫‪ PartTimeWithOver‬متد ‪ findPaymentAmount‬از والد خود به ارث نمیبرد‪ .‬به شکل ‪ 8-9‬که در زیر‬
‫آمده دقت کنید‪:‬‬

‫‪124‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫اگر شما یک شیء از کالس ‪ PartTimeWithOver‬ایجاد کنید‪ .‬شیء ایجاد شده دارای ‪ name‬و ‪ jobTitle‬و‬
‫مند‬ ‫میباشد‪ ..‬اما شیء دارای‬ ‫از کالس ‪PartTimeEmployee‬‬ ‫‪ hourlyRate‬و ‪cutCheck‬‬
‫‪ findPaymentAmount‬که در مثال ‪ 8-7‬تعریف شده نیز میباشد‪.‬‬

‫‪125‬‬
www.SourceSara.com ‫ آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬- ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا‬

‫استفاده از متد ها از درون زیرکالس ها و کالس ها‬

public class DoPayrollTypeF {


public static void main(String args[]) {
FullTimeEmployeeftEmployee = new FullTimeEmployee();
ftEmployee.setName("HadiKhodapanah");
ftEmployee.setJobTitle("CEO");
ftEmployee.setWeeklySalary(5000.00);
ftEmployee.setBenefitDeduction(500.00);
ftEmployee.cutCheck(ftEmployee.findPaymentAmount());
PartTimeEmployeeptEmployee = new PartTimeEmployee();
ptEmployee.setName("Ali Alizadeh");
ptEmployee.setJobTitle("Computer Book Author");
ptEmployee.setHourlyRate(7.53);
ptEmployee.cutCheck (ptEmployee.findPaymentAmount(50));
PartTimeWithOverptoEmployee = new PartTimeWithOver();
ptoEmployee.setName("Kouroshkhashayari");
ptoEmployee.setJobTitle("Driver");
ptoEmployee.setHourlyRate(7.53);
ptoEmployee.cutCheck (ptoEmployee.findPaymentAmount(50));
}
}

‫ مبحث توضیح داده خواهد شد‬، ‫ دقت کرده سپس از روی این مثال‬8-8 ‫ابتدا به مثال‬

: ‫خروجی‬

‫ از کالس‬، ‫ مطمئنا یک زیرکالس‬.‫ باهم وجود دارند‬8-8 ‫ در مثال‬،‫ هر سه تای این کارمندان‬،‫با زیرکالس ها‬
‫ اما این بدین معنی نیست که شما نمیتوانید شیء ای از کالس‬.‫ می آید‬PartTimeEmployee ‫قدیمی‬
‫ سه فراخوانی به‬8-8 ‫ مثال‬،‫ جاوا خیلی هوشمندانه عمل میکند‬،‫ در واقع‬.‫ ایجاد کنید‬PartTimeEmployee
.‫ دارد و هر فراخوانی به ورژن متفاوتی از متد میرسد‬findPaymentAmount ‫متد‬
126
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫در اولین فراخوانی‪ ftEmployee.findPaymentAmount ،‬متغیر ‪ ftEmployee‬یک نمونه از کالس‬


‫‪ FullTimeEmployee‬میباشد‪.‬پس متدی که فراخوانی شده مربوط به مثال ‪ 8-3‬میباشد‪.‬‬

‫در دومین فراخوانی‪ ptEmployee.findPaymentAmount ،‬متغیر ‪ ptEmployee‬یک نمونه ای از کالس‬


‫‪ PartTimeEmployee‬میباشد‪ .‬پس متدی که فراخوانی شده مربوط به مثال ‪ 8-5‬میباشد‪.‬‬

‫در سومین فراخوانی ‪ ptoEmployee.findPaymentAmount‬متغیر ‪ ptoEmployee‬نمونه ای از کالس‬


‫‪ PartTimeWithOver‬میباشد‪ .‬پس متد فراخوانی شده مربوط به مثال ‪ 8-7‬میباشد‪.‬‬

‫‪127‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫‪128‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫مقیاس دما (‪ )temperature scale‬چیست؟‬

‫( انواع ‪enum‬جاوا)‬

‫جاوا راه های گوناگونی را‪ ،‬به منظور گروه بندی چیز های(‪ ،)things‬برای شما فراهم می آورد‪ .‬در این فصل‬
‫شما چیز هایی را داخل یک نوع ‪ enum‬گروه بندی خواهید نمود‪.‬‬

‫ایجاد یک ‪ enum‬پیچیده ‪ ،‬آسان نیست ولی برای ایجاد یک ‪ enum‬ساده ‪،‬کافی ست یک گروه از کلمات‬
‫داخل یک جفت آکوالد بنویسید‪ .‬مثال ‪ 9-1‬یک نوع ‪ enum‬تعریف میکند که نوع ‪ enum‬در این مثال‬
‫‪ TempScale‬نام دارد‪.‬‬

‫{ ‪publicenumTempScale‬‬

‫‪CELSIUS, FAHRENHEIT, KELVIN, RANKINE,‬‬

‫‪NEWTON, DELISLE, RÉAUMUR, RØMER, LEIDEN‬‬

‫;}‬

‫وقتی شما نوع ‪ enum‬را تعریف میکنید دو اتفاق مهم می افتد‪:‬‬

‫* شما مقادیری را ایجاد میکنید‪ ،،‬همانطور که ‪ 13‬و ‪ 15‬مقادیر ‪ int‬هستند‪ CELSIUS .‬و ‪FAHRENHEIT‬‬
‫نیز مقادیری ‪ TempScale‬هستند‪.‬‬

‫*شما میتوانیدمتغیر هایی را برای ارجاع به آن مقادیر ایجاد کنید‪ ،،‬در مثال ‪ 9-2‬من فیلد های ‪ number‬و‬
‫‪ scale‬را اعالن نموده ام‪ .‬همانگونه که ‪ doublenumber‬متغیر ‪ number‬را از نوع ‪ double‬اعالن میکند‪.‬‬

‫‪ TempScalescale‬نیز متغیر ‪ scale‬از نوع ‪ TempScale‬اعالن میکند‬

‫از نوع ‪ TempScale‬بودن به این معناست که شما مقادیر ……‪ CELSIUS,FAHRENHEIT, KELVIN,‬را دارا‬
‫میباشید‪.‬‬

‫یک نوع ‪ ، enum‬یک کالس جاوا در استتار هست‪ .‬به همین دلیلی است که مثال ‪ 9-1‬شامل تمام فایلی که‬
‫یک ‪ ،‬به یک چیز اختصاص داده شده‪ ،‬میشود‪ ،‬یعنی اعالن نوع ‪ . TempScale enum‬همانند اعالن یک‬

‫‪129‬‬
www.SourceSara.com ‫ آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬- ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا‬

‫ به فایلی به نام‬9-1 ‫ در مثال‬.‫ به فایل مخصوص خودش متعلق است‬enum ‫ در اعالن نوع‬، ‫کالس‬
.‫ متعلق است‬TempScale.java

‫ چیست؟‬Temperature

-2 ‫ مثال‬.‫ یک عدد و یک مقیاس حرارت‬:‫ ( درجه حرارت) دو چیز در نظر گرفته میشود‬temperature ‫هر‬
.‫ در زیر این حقیقت را روشن میسازد‬9

public class Temperature {


private double number;
privateTempScale scale;
public Temperature() {
number = 0.0;
scale = TempScale.FAHRENHEIT;
}
public Temperature(double number) {
this.number = number;
scale = TempScale.FAHRENHEIT;
}
public Temperature(TempScale scale) {
number = 0.0;
this.scale = scale;
}
public Temperature(double number, TempScale scale) {
this.number = number;
this.scale = scale;
}
public void setNumber(double number) {
this.number = number;
}
public double getNumber() {
return number;
}
public void setScale(TempScale scale) {
this.scale = scale;
}
publicTempScalegetScale() {
return scale;
}
}
130
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫مثال ‪ 9-2‬متد های قرار دهنده (‪ )setter‬و دریافت کننده(‪ )getter‬معمول را داراست‪(.‬متد های دسترسی‬
‫دارنده به فیلد های ‪ number‬و ‪. scale‬‬

‫نکته ای که باید متوجه آن شده باشید این است که‪ ،‬مثال ‪ ، 9-2‬چهار قسمت ‪ ،‬شبیه به متد وجود دارد‪..‬هر‬
‫یک از این بخش های شبیه به متد‪ Temperature ،‬نام دارند‪.‬مشابه با نام کالس را داشت باشد‪.‬هیچ یک از‬
‫این چیزهای ‪ Temperature‬شبیه به متد‪ ،‬یک نوع ‪ return‬از هیچ نوعی را دارا نمیباشند‪ .‬نه حتی ‪ void‬که‬
‫نوع ‪ returnhcop-out‬میباشد‪ .‬هر یک از این چیزهای شبیه به متد سازنده (‪ )constructor‬نام دارند‪.‬‬

‫یک سازنده شبیه یک متد است ‪ ،‬به استثنای اینکه یک سازنده‪ ،‬هدف بسیار مخصوصی دارد‪-‬ایجاد اشیاء جدید‪.‬‬

‫هرزمانی که اشیاء جدیدی ایجاد می کند‪ ،‬کامپیوتر دستورات درون سازنده ر ا اجرا میکند‪.‬‬

‫با سازنده(‪ )statements‬چه کاری میتوان انجام داد‬

‫در مثال ‪ 9-3‬شما سازنده ای که در مثال ‪ 9-2‬اعالن شده را فراخوانی میکنید‪ .‬تصویر شماره ‪ 9-1‬نشان‬
‫میدهد که وقتی شما تمام این کد را اجرا کردید چه اتفاقی خواهد افتاد‪.‬‬

‫;‪import static java.lang.System.out‬‬


‫{ ‪public class UseTemperature‬‬
‫{ )][‪public static void main(String args‬‬
‫;"‪final String format = "%5.2f degrees %s\n‬‬
‫;)(‪Temperature temp = new Temperature‬‬
‫;)‪temp.setNumber(70.0‬‬
‫;)‪temp.setScale(TempScale.FAHRENHEIT‬‬
‫‪out.printf(format, temp.getNumber(),‬‬
‫;))(‪temp.getScale‬‬
‫;)‪temp = new Temperature(32.0‬‬
‫‪out.printf(format, temp.getNumber(),‬‬
‫;))(‪temp.getScale‬‬
‫;)‪temp = new Temperature(TempScale.CELSIUS‬‬
‫‪out.printf(format, temp.getNumber(),‬‬
‫;))(‪temp.getScale‬‬
‫;)‪temp = new Temperature(2.73, TempScale.KELVIN‬‬
‫‪out.printf(format, temp.getNumber(),‬‬
‫;))(‪temp.getScale‬‬
‫}‬
‫}‬ ‫‪131‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫در مثال ‪ 9-3‬هر دستور مانند ‪:‬‬

‫;)‪temp = new Temperature(blah,blah,blah‬‬

‫یک سازنده را از مثال ‪ 9-2‬فراخوانی میکند‪ .‬پس همانطور که مثال ‪ 9-3‬را اجرا میشود‪ ،‬آن چهار شیء از‬
‫کالس ‪ Temperature‬ایجاد میکند‪ .‬هر شیء با فراخوانی یک سازنده ی متفاوت از مثال ‪ 9-2‬ایجادمیشود‪.‬‬

‫در مثال ‪ 9-3‬آخرین سازنده دارای دو پارامتر ‪ 2.73‬و ‪ TempScale.KELVIN‬بود‪ .‬این مخصوص فراخوانی‬
‫سازنده ها نیست‪.‬فراخوانی یک متد ی فراخوانی یک سازنده هم نیز میتواند یک لیست از پارامتر ها را داشته‬
‫باشد‪.‬شما پارامتر ها را با کاما از یکدیگر جدا میکنید‪.‬‬

‫تنها قاعده ای که بایستی بدان توجه کنید این است که‪ :‬پارامتر های فراخوانی با پارامترهایی که اعالن شده اند‬
‫تطابق داشته باشند‪ .‬برای مثال در مثال ‪ 9-3‬هنگام فراخوانی چهامین و آخرین سازنده ‪:‬‬

‫(‪new Temperature(2.73, TempScale.KELVIN‬‬

‫دو پارامتر دارد‪.‬اولی از نوع ‪ double‬و دومی از نوع ‪ . TempScale‬جاوا با این فراخوانی موافقت خواهذ‬
‫نمود زیراکه که آن با هدر(‪ )header‬تعریف شده در مثال ‪ 9-2‬تطابق دارد ‪:‬‬

‫(‪public Temperature(double number, TempScale scale‬‬

‫دو پارامتر دارد اولی از نوع ‪ double‬و دومی از نوع ‪ TempScale‬میباشد‪ .‬که اگر این تطابق را رعایت‬
‫نکنید با مشکل مواجه خواهید شد‪.‬‬

‫‪132‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫دو راه برای انجام یک کار‬

‫مثال ‪ 9-4‬دارای دو سازنده درون خود میباشد‪ .‬من از دو نام متفاوت استفاده میکنم ‪ number :‬و‬
‫‪ . whatever‬در دومین سازنده ‪ ،‬من به دو نام احتیاج ندارم‪.‬به جای ایجاد یک نام جدید برای پارامتر سازنده‪،‬‬
‫من تصمیم گرفتم از نام موجود با نوشتن ‪ this.number‬دوباره استفاده کنم‪.‬‬

‫‪//Use this constructor . . .‬‬


‫{ )‪public Temperature(double whatever‬‬
‫;‪number = whatever‬‬
‫;‪scale = TempScale.FAHRENHEIT‬‬
‫}‬
‫‪//. . . or use this constructor . . .‬‬
‫{ )‪public Temperature(double number‬‬
‫;‪this.number = number‬‬
‫;‪scale = TempScale.FAHRENHEIT‬‬
‫}‬
‫‪//. . . but don't put both constructors in your code.‬‬

‫در دستور ‪ this.number = number‬اسم ‪ this.number‬به فیلد ‪ number‬شیء جدید ارجاع میکند‪-.‬‬
‫فیلدی که در باالی مثال ‪ 9-2‬تعالن شده است‪.‬‬

‫در دستور ‪ this.number = number‬اسم ‪ number‬سمت چپ‪ ،‬به پارامتر سازنده ارجاع دارد‪.‬‬

‫‪133‬‬
www.SourceSara.com ‫ آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬- ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا‬

‫ به‬someName ‫به عبارت ساده‬..‫ به فیلدی که که حاوی کد ارجاع میکند‬this.someName ،‫در حالت کلی‬
‫که‬ this.number=number ‫ در دستور‬.‫رجاع میکند‬،‫ اعالن شده‬someName ‫نزدیکترین مکان که‬
.‫ میباشد‬Temperature ‫نزدیکترین مکان لیست پارامتر سازنده ی‬

‫ بهتر‬temperatures ‫ساخت‬

9-5 ‫مثال‬

import static java.lang.System.out;


public class TemperatureNice extends Temperature {
publicTemperatureNice() {
super();
}
publicTemperatureNice(double number) {
super(number);
}
publicTemperatureNice(TempScale scale) {
super(scale);
}
publicTemperatureNice(double number, TempScale scale)
{
super(number, scale);
}
public void display() {
out.printf("%5.2f degrees %s\n",
getNumber(), getScale());
}
}

‫ توجه‬getScale ‫ و‬getNumber ‫ متد های‬Temperature ‫ به فراخوانی کالس‬،، 9-5 ‫ مثال‬display‫در متد‬


‫ هیج ارجاع‬TemperatureNice ‫چرا چنین کاری را انجام دادیم؟؟؟ خوب در واقع درون کد کالس‬.‫کنید‬
‫ هر شیء‬، ‫ درست است‬.‫ پیام خطایی تولید خواهد نمود‬number ‫ و‬number ‫مستقیمی به فیلدهای‬
‫(در کنار این همه‬.‫ مخصوص خود را دارد‬scale ‫ و‬number ‫فیدهای‬ TemperatureNice
‫ فیلد های‬Temperature ‫ میباشد و کد کالس‬Temperature ‫ یک زیر کالس از کالس‬TemperatureNice

134
www.SourceSara.com ‫ آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬- ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا‬

‫ به صورت خصوصی درون کالس‬scale ‫ و‬number ‫ اما چون‬.).‫ را تعریف میکند‬scale ‫ و‬number
‫ باشد میتواند از این‬Temperature ‫تنها کدی که درست درون کالس‬.‫ اعالن گردیده اند‬Temperature
.‫فیلد ها استفاده کند‬

‫ که‬.‫ فراخوانی میکند‬9-2 ‫() را در مثال‬Temperature ‫پارامتر های سازنده ی‬9-5 ‫() در مثال‬super ‫دستور‬
‫ به فیلد‬FAHRENHEIT .‫ اختصاص میدهد‬TempScale ‫ و‬number ‫ را به فیلد‬0.0 ‫سازنده ی بدون پارامتر‬
..field

‫ سازنده ی‬9-5 ‫ در مثال‬super(number, scale)‫دستور‬

.‫ آورده شده فراخوانی میکند‬9-2 ‫ را که در مثال‬Temperature(double number, TempScale scale)

9-2 ‫ سازنده ها از مثال‬9-5 ‫ در مثال‬super(scale) ‫ و‬super(number) ‫ دستورات‬،‫به صورتی مشابه‬


.‫فراخوانی میکند‬

Using all this stuff

public class UseTemperatureNice {


public static void main(String args[]) {
TemperatureNice temp = new TemperatureNice();
temp.setNumber(70.0);
temp.setScale(TempScale.FAHRENHEIT);
temp.display();
temp = new TemperatureNice(32.0);
temp.display();
temp = new TemperatureNice(TempScale.CELSIUS);
temp.display();
temp = new TemperatureNice(2.73,
TempScale.KELVIN);
temp.display();
}
}

135
www.SourceSara.com ‫ آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬- ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا‬

: ‫تنها تفاوت آنها عبارت اند از‬.‫ میباشد‬9-3 ‫ در مثال باال خیلی شبیه به کد‬9-6 ‫کد مثال‬

‫ سازنده ها‬9-6 ‫ به همین دلیل است مثال‬. .‫ ایجادمیشود‬TemperatureNice‫ نمونه ای از کالس‬9-6 ‫درمثال‬
.Temperature ‫ فراخوانی میکند نه از کالس‬TemperatureNice ‫را از کالس‬

9-6 ‫ بنابراین کد مثال‬.‫ بهره میگیرد‬TemperatureNice ‫ در کالس‬display ‫ از امتیاز متد‬9-6 ‫در مثال‬
.‫ است‬9-3 ‫منظم و آراسته تر از همتایش در مثال‬

‫یک سازنده ی پیش فرض‬

publicFullTimeEmployee() {

super();}

،‫و تنها دستور موجود در آن‬.‫ در باال استفاده کردیم هیچ پارامتری نمیگیرید‬9-7 ‫سازنده ای که در مثال‬
‫(در صورتی که کالسی که شما توسعه داده‬.‫سازنده ی هرکالسی که شما توسعه داده اید را فراخوانی میکند‬
.)‫ اشتباه رخ خواهد داد‬، ‫اید سازنده ی بدون پارامتر نداشته باشد‬

:‫ در زیر توجه نمایید‬9-8 ‫به مثال‬


public class FullTimeEmployee extends Employee {
private double weeklySalary;
private double benefitDeduction;
publicFullTimeEmployee(double weeklySalary) {
this.weeklySalary = weeklySalary;
}
public void setWeeklySalary(double weeklySalaryIn) {
weeklySalary = weeklySalaryIn;
}
public double getWeeklySalary() {
returnweeklySalary;
}
public void setBenefitDeduction(double benefitDedIn) {
benefitDeduction = benefitDedIn;
}
public double getBenefitDeduction() {
returnbenefitDeduction;
}
public double findPaymentAmount() {
returnweeklySalary - benefitDeduction; 136
}
}
www.SourceSara.com ‫ آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬- ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا‬

: ‫ برنامه ی شما کار نخواهد کرد‬،‫ استفاده کنید‬9-8 ‫ در مثال‬FullTimeEmployee ‫اگر شما مانند زیر از کد‬

FullTimeEmployeeftEmployee = new FullTimeEmployee;)(

double ‫ اعالن شده که یک پارامتر‬FullTimeEmployee ‫این برنامه کار نخواهد کرد زیراکه سازنده ی‬
.)‫ (یک سازنده ی بدون پارامتر پیش فرض را قبول نمیکند‬،‫بگیرد‬

‫سازنده ای که کارهای بیشتری انجام میدهد‬

‫در این بخش میخواهیم مثالی از یک سازنده بزنم که کاری بیشتر از اختصاص مقادیری به چند فیلد انجام‬
.‫ نشان داده شده است‬9-3 ‫ و نتیجه ی خروجی نیز در مثال‬9-10 ‫ و‬9-9 ‫مثال های‬.‫میدهد‬

Frame ‫تعریف‬

importjava.awt.FlowLayout;
importjavax.swing.JFrame;
importjavax.swing.JButton;
@SuppressWarnings("serial")
public class SimpleFrame extends JFrame {
publicSimpleFrame() {
setTitle("Don't click the button!");
setLayout(new FlowLayout());
setDefaultCloseOperation(EXIT_ON_CLOSE);
add(new JButton("Panic"));
setSize(300, 100);
setVisible(true);
}
}

public class ShowAFrame {


public static void main(String args[]) { Frame ‫نشان دادن‬
newSimpleFrame();
}
} 137
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫شکل ‪9-3‬‬

‫کد مثال ‪ 9-9‬عمدتا از متدهای ‪ API‬های جاوا شکل گرفته است‪ (.‬قصد ما از این مثال توضیح دادن تمام ایم‬
‫متد ها نیست)‪ .‬به هر حال متد اصلی مثال ‪ 9-10‬فقط یک دستور دارد‪ :‬یک فراخوانی به سازنده در کالس‬
‫‪ .SimpleFrame‬توجه کنید که چگونه شیء ای که این فراخوانی ایجاد میکند‪ ،‬حتی به یک متغیر هم تخصیص‬
‫داده نشده است‪ .‬همه چیز درست است زیرا که ما در این کد نیازی به ارجاع به شیء مورد نظر در هیچ‬
‫جای دیگری نداریم‪.‬‬

‫در باال‪ ،‬کالس ‪ SimpleFrame‬فقط تنها یک اعالن سازنده(‪ )constructor‬موجود است‪ .‬این سازنده متدی‬
‫بعد از متد دیگر را از ‪ API‬جاوا فراخوانی میکند‪.‬‬

‫تمام متد های فراخوانی شده در کالس سازنده ی ‪ ، SimpleFrame‬از کالس والد ‪ JFrame‬میآیند‪ .‬کالس‬
‫‪ JFrame‬در داخل پکیج ‪ javax.swing‬موجود است‪ .‬این پکیج ‪ .‬دیگر پکیج های موجود در ‪ java.awt‬به شما‬
‫کمک میکنند که تصاویر‪ ،‬پنجره ‪ ،‬نقاشی ‪...،‬و دیگر اسباب و ابزار را روی صفحه ی نمایش کامپیوتر قرار‬
‫دهید‪.‬‬

‫‪: setTitle‬فراخوانی ‪ setTitle‬کلمات را در نوار عنوان فریم قرار میدهد‪(.‬شیء جدید ‪ ، SimpleFrame‬متد‬
‫‪ setTitle‬خودش را فراخوانی کیکند)‪.‬‬

‫‪ : FlowLayout‬یک نمونه از کالس ‪ ، FlowLayout‬اشیاء روی فریم رابه سبک ماشین تحریر درمرکزیت‬
‫قرار میدهد‪ .‬زیرا که فریم تصویر ‪ 9-3‬تنها یک دکمه در خود دارد‪.‬آن دکمه در مرکزیت و نزدیک باالی‬
‫فریم قرار داده شده است‪.‬اگر فریم هشت دکمه می داشت‪ .‬پنج تای آن ها ممکن بود در خط باالیی فریم‬
‫قرار گرفته و سه تای باقی مانده در مرکزیت خط پایین فریم قرار بگیرند‪.‬‬

‫‪ : setLayout‬فراخوانی ‪ setLayout‬شیء ‪ FlowLayout‬جدید را متصدی مرتب ساختن اجزاء میکند‪ .‬مانند‬


‫دکمه ها یا فریم‪ (.‬شیء جدید ‪ SimpleFrame‬متد ‪ setLayout‬خودش را فراخوانی میکند)‪.‬‬

‫‪138‬‬
‫‪www.SourceSara.com‬‬ ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا ‪ -‬آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬

‫‪: setDefaultCloseOperation‬فراخوانی ‪ setDefaultCloseOperation‬به جاوا میگوید که وقتی شما‬


‫روی × در گوشه باال‪-‬راست کلیک میکنید‪ ،‬چه انجام دهد‪ .‬بدون فراخوانی این متد‪ ،.‬فریم خودش ناپدید‬
‫میشود‪ .‬اما ماشین مجازی جاوا )‪ Java Virtual Machine (JVM‬به فعالیت ادامه میدهد‪ .‬اگر شما از ‪Eclipse‬‬
‫استفاده میکنید شما بایستی ‪JVM‬را با کلیک روی مربع چهر گوش باالی کنسول ‪ ،‬متوقف کنید‪(.‬شکل ‪ 9-4‬را‬
‫ببینید)‪.‬‬

‫فراخوانی )‪ setDefaultCloseOperation(EXIT_ON_CLOSE‬به جاوا میگوید که هنگامی که شما روی × در‬


‫گوشه باال‪-‬سمت راست کلیک میکنید‪ ،‬خودش را ببندد‪.‬‬

‫شکل ‪9-4‬‬

‫‪ : JButton‬کالس ‪ JButton‬در پکیج ‪ javax.swing‬موجود است‪ .‬یکی از سازنده های کالس‪ ،‬برای پارامتر‬
‫هایش نمونه ای از ‪ String‬را میگیرد‪(.‬مانند "‪..)"Panic‬فراخوانی این سازنده باعث میشود که‬
‫نمونه(‪ )instance‬ی ‪ String‬روی دکمه ی جدید برچسب زده شود‪.‬‬

‫‪ :Add‬شیء ‪ SimpleFrame‬جدید متد ‪ add‬خودش را فراخوانی میکند‪ .‬فراخوانی متد ‪ ، add‬دکمه را را‬
‫روی سطح ظاهری شیء قرار میدهد‪(.‬در این مثال سطح ظاهری فریم)‪.‬‬

‫‪ : setSize‬فریم ‪ 300‬پیکسل عرض ‪ 100‬پیکسل ارتفاع دارد‪ (.‬در پکیج ‪ javax.swing‬هنگامی که شما ابعاد دو‬
‫بعد را مشخص کنید‪ ،‬عدد مشخص کننده ی عرض(پهنا) قبل از عدد مشخص کننده ی ارتفاع میآید‪.‬‬

‫‪ : setVisible‬زمانی نخست که آن ایجاد میشود‪.‬یک فریم جدید ناپدید میشود‪.‬اما زمانی که فریم جدید‬
‫)‪ setVisible(true‬را فراخوانی میکند‪ .‬روی صفحه ی نمایش کامپیوتر شما ظاهر میشود‪.‬‬

‫‪139‬‬
www.SourceSara.com ‫ آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده‬- ‫ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا‬

: ‫منابع و ماخذ‬

Java How to Program (9th Edition) ,By Paul Deitel , Harvey Deitel, Publisher : Prentice
Hall

Java 8: The Fundamentals, By Dane Cameron, Publisher: Cisdal Publishing

Head First Java, By Kathy Sierra , Bert Bates, Publisher: O'Reilly Media

Java The Complete Reference, 8th Edition,By Herbert Schildt, Publisher: McGraw-Hill
Osborne

Java 8 Pocket Guide, By Robert Liguori , Patricia Liguori, Publisher: O'Reilly Media

Learn Java for Android Development: Java 8 and Android 5 Edition,By Jeff Friesen,
Publisher: Apress

Pro Java 8 Programming, By Terrill Brett Spell, Publisher: Apress

Java 8: The Fundamentals, By Dane Cameron, Publisher: Cisdal Publishing

Java SE8 for the Really Impatient: A Short Course on the Basics 1st Edition,By Cay S.
Horstmann, Publisher: Addison-Wesley Professional

Beginning Java, Author : Ivor Horton,Publication : Wrox

140

You might also like