Amozesh Java Sadee
Amozesh Java Sadee
com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
1
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
بسم تعالی
زبان برنامه نویسی جاوا در دنیا روز به روز با اقبال بیشتری مواجه می شود و عده ی زیادی به برنامه نویسی با این زباان روی مای
آورد .دلیل این هم روشن است :امن بودن و در عین حال قدرت زبان جاوا باعث گردیده ،تعداد برنامه نویس هایی که با جاوا کار می
کنند از تعداد برنامه نویس هایی که با سایر زبان های برنامه نویسی کار می کنند به مراتب بیشتر باشد .در کنار این موضوع شاهد
رواج گسترده ی گوشی های هوشمند بین تمام مردم دنیا هستیم ،که اکثرا از سیستم عامل اندروید استفاده میکنند و حاال آنکاه
ما برای ایجاد و نوشتن اپلیکیشن ها و برنامه های جانبی روی اندروید بایستی از جاوا استفاده کنیم .باید توجه داشت کاه بشا
رابط کابری اندروید با زبان جاوا نوشته شده است و برنامه های اندرویدی میتوانند برای ارتباط با الیه های زیرین سیساتم عامال
اندروید از کتابشانه های جاوایی اندروید بهره ببرند .همچنین برای کار با پایگاه داده هایی همچون اوراکل ،بدون دانستن زبان جااوا
امری غیر ممکن است .زیرا که برای کاربا پایگاه داده ی اوراکل می بایستی حتما ،با جاوا آشنایی داشته باشیم .ماا باا اساتفاده از
جاوا قدر خواهیم بود تا برنامه های کاربردی ،برای لینوکس ،اندروید و ویندوز بنویسیم.
هدف بنده از نگارش این کتاب ارتقای سطح علمی جاوا در ایران بوده و معیار اصلی من هنگام تالیف کتاب مورد توجه قارار دادن
خوانندگان مبتدی و کاربرانی که اصال برنامه نویسی نکرده اند بوده است .در عین حال از کابران حرفه ای نیز غافل نشده ام ،و ایان
کتاب شامل نکات ارزنده ای برای متشصصین حرفه ای کامپیوتر است.
میرود .سعی من در تالیف این کتااب باه صاورت رویه آموزشی کتاب هم از مطالب مقدماتی شروع شده و تا سطح پیشرفته پی
خود آموز بوده به صورتی که شما دیگر نیازی به کالس آموزشی یا استاد ندارید.
و اما وجه تسمیه این کتاب با سایر کتاب های فارسی جاوا موجود در ایران ،در این است که بنده تمام مطالب فصل های کتاب را از
های کتاب های معتبر انگلیسی اخذ کرده و به جرات می توانم بگویم حتی از یک منبع فارسی (که معماوال پار از آخرین ویرای
اشتباه اند) استفاده نکرده ام.
فرض من در هنگام نوشتن کتاب این بوده است ،که خوانندگان این کتاب در سطح مقدماتی و پایین قرار دارند و قدم به قادم پی
توسط مطالعه ی این کتاب به سطح خوبی در جاوا خواهند رسید.
.خواننده گان عزیز میتوانند نظرات و پیشنهادات خود را از طریق زیر به مولف کتاب ،هادی خداپناه ارسال کنند:
[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
ایجاد مقادیر جدید با اعمال عملگرها (41.........)Creating New Values by Applying Operators
عملگر های افزایش ( )incrementو کاهش (43.............................................. )decrement
عملگر های تخصیص (45...................................................................... )Assignment Operators
فصل 3
)49.................................................................................Making Decisions (Java if Statements
فصل 4
اجرا تا زمانی که آنچه میخواهید را به دست آورید ( حلقه ی doدر جاوا) 78................
فصل 5
خطا 98................................................................................................................................................................
4
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
فصل 6
فصل 7
Temperatureچیست؟ 128..............................................................................................................
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 ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
9
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
در اینجا بعد از مشخص کردن پوشه ی مقصد برای نصب جاوا روی Nextکلیک کنید.
10
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
در کادر پایین اظهار میکند که جاوا با موفقیت نصب شد...روی Closeکلیک کنید...
11
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
System حال که ما جاوا را نصب کردیم.بایستی جاوا رو به سیستم عامل خود معرفی کنیم .برای اینکار وارد کنترل پنل شوید و روی
کلیک کنید
کلیک کنید آنگه پنجره ای ظاهر خواهد گشت که روی Advanced system settings
12
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
دوباره پنجره ی جدیدی ظاهر خواهد گشت که در قسمت system variablesروی دکمه ی New
کلیک کنید
13
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
14
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
بعد از قرار دادن سمی کالن ،نشانگر ماوس خود را بعد از سمی کالن قرار دهید و بعد مسیر دایرکتوری binرا در این
کنید. قسمت paste
15
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
نصب eclipse
در آخر نوبت به نصب برنامه ی eclipseمیرسه که میتونید اون رو از سایت زیر دانلود و نصب کنید .آموزش
دانلود از سایت را در زیر قرار دادم.
https://eclipse.org/downloads/
16
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
17
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
18
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
در تصویر شماره ی سه در باال ،باید با توجه به سیستم عامل خود یک گزینه رو انتخاب کنید.
ما با استفاده از این برنامه ی ایکلیپس برنامه های نوشته شده ی جاوا را اجرا و تست خواهیم کرد
19
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
در کادر باال مسیری که پروژه های جاوا ذخیره خواهند شد رو مشخص کنید.
همچنین اگر گزینه ی پایینی را تیک بزنید آنگاه دیگر این کادر نمایش داده نخواهد شد و مسیری که برای ذخیره ی برنامه
ها مشخص کرده اید به عنوان پیش فرض تعببن میگردد.
زمانی که فایل eclipseرو اجرا کردید صفحه خوشامد گویی مانند باال ظاهر خواهد گشت .رو دکمه ی Worckbench
که با فلش سبز مشخص شده است کلیک کنید.
20
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
حال نوبت آن است که اولین پروژه جاوای خودمان را ایجاد کنیم .برای این من مانند تصویر زیر عمل کنید.
21
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
بعد از انتخاب Java Projectپنجره ی زیر نمایش داده خواهد شد .در کادر باال نام
پروژه ی خود را بنویسید که من FirstJavaProgrmرا برای نام برنامه نوشتم
22
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
حال باید یک کالس برای پروژه ی خود ایجاد کنیم .برای اینکار روی پروژه ی خود یعنی
FirstJavaProgrmراست کلیک کنید و مانند تصویر زیر عمل کنید
23
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
توجه :قسمتی که با فلش قرمز مشخص شده را Package Explorerنامیده میشود .تمام پروژه هایی
که ما ایجاد می کنیم در این قسمت قرار خواهد گرفت.
در بیضی سبز رنگ Packageپکیج مشخص میشود .که بعدا در این مورد توضیح خواهم داد.
در قسمت Nameکه ب بیضی قرمز مشخص شده نام کالس خود را می نویسیم.
در قسمت آخر که با مستطیل قرمز مشخص شده است اگر تیک دار باشد Eclipseبه ظور خودکار متد mainرا در
کالس های ما پیاده سازی میکند.
24
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
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دقت نمایید:
در تخصیص ،شما یک مقدار را به چیزی که در بیشتر مواقع متغیر است اختصاص میدهید در موقع تخصیص
شما باید از عملگر = استفاده نمایید .بشکل -2نشان دهنده ی همین موضوع است :
31
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
شکل 4-3چگونگی افزایش مقدار متغیر amountInAccountرا توضیح میدهد ،که مقدار قبلی متغیر را به
اندازه ی 1000000واحد افزایش می دهد.
(با توجه به شکل 4-2مقدار اولیه متغیر amountInAccountمقدار 50.22بوده است) .
32
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
نوع داده ای که در جاوا برای ذخیره سازی کاراکتر ها استفاده میشود charنام دارد.
مثال 4 -4یک برنامه ساده که از نوع داده ی charاستفاده میکند را نشان میدهد:
;'charmyLittleChar = 'b
;)charmyBigChar = Character.toUpperCase(myLittleChar
;)System.out.println(myBigChar
}
}
: خروجی حاصل از اجرای مثال 4-4
(حروف-بزرگ) آن را باز میگرداند.که در اینجا متغییر myLittleCharرا که حاوی لیترال bمیباشد را
گرفته ،و معدل حرف بزرگ()UpperCaseآن را که Bمیباشد باز میگرداند .این Bبازگزدانده شده در
myBigCharذخیره میگردد.
33
www.SourceSara.com آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده- ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا
:توجه
در یک زمان بیش از یک، با خطا روبرو خواهید شد شما نمیتوانید، اگر سعی کنید کدی مانند باال بنویسید
اگر میخواهید کلمه یا جمله ای را در جاوا ذخیره کنید به. ذخیره کنیدchar حرف در در متغیری از نوع
.) در فصل های بعدی توضیح داده شده استstring (در مورد. نیاز خواهید داشتString چیزی به نام
: boolean نوع
System.out.println("True or False?");
System.out.println("Brickenchickerdectuplets");
System.out.println();
intweightOfAPerson = 150;
intelevatorWeightLimit = 1400;
intnumberOfPeople =
elevatorWeightLimit / weightOfAPerson;
System.out.println(allTenOkay); 34
}
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
در مثال باال در خط یازدهم ،متغیر allTenOkayاز نوع boolenمی باشد.برای یافتن ارزش (مقدار)
شده در numberOfPeople >= 10یک عبارت است .ارزش این عبارت به مقدار ذخیره
بستگی دارد .اما شما با نگاه کردن به کد برنامه میتوانید بفهمید مه مقدار numberOfPeople
numberOfPeopleبزرگتر مساوی ده نیست .بنابراین ارزش عبارت numberOfPeople >= 10برابر با
falseخواهد بود.
نکته :هر قسمت از برنامه های جاوا که ارزش ( )valueداشته باشد یک عبارت است.
در خط هفتم ،از )( System.out.printlnاستفاده شده ،درحالی که هیچ چیزی درون پارانتز های آن وجود
35
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
جاوا داری دو نوع داده اعشاری اصلی می باشد double :و . floatتفاوت اساسی این دونوع این در این است
که doubleدارای دقتی مضاعف نسبت به floatمی باشد و میتوانید اعداد اعشاری بزرگتری را در خود جا
دهد .برای مشاهده ی محدوده ی مقادیر به جدول 4-1رجوع کنید .برای روشن شدن مطلب به مثال 4-2
;doubleamountInAccount
;amountInAccount = 50.22
;)System.out.print(amountInAccount
}
}
در خططط سططوم ،متغیططر amountInAccountاز نططوع doubleتعریططف شططده اسططت .در خطط پططنجم مقطدار قب ططی
36
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
توجه کنید که Fموجود در انتهای لیترال های ،برای مشخص کردن اینکه اینها از نطوع floatهسطتند بطه کطار
جاوا دارای چهار نوع داده ای نوع صحیح اصلی را پشتیبانی میکند .محدوده مقادیر این انواع داده ای را
میتوانید در جدول 4-1مشاهده نمایید .توجه داشته باشید که در مواردی که مقدار متغیر در طول برنامه
به طور مکرر تغییر میکند و یا از مقدار دقیق مقادیر این متغییر ها در طول اطالع ندارید ،بهتر است از نوع
داده ای را استفاده کنید که به اندازه ی کافی بزرگ باشد تا احتمال سریز ( )overflowرا به حداقل
;intweightOfAPerson
;intelevatorWeightLimit
;intnumberOfPeople
;weightOfAPerson = 150
;elevatorWeightLimit = 1400
= numberOfPeople
;elevatorWeightLimit / weightOfAPerson
;)System.out.print(numberOfPeople
}
}
37
www.SourceSara.com آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده- ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا
وelevatorWeightLimit سپس متغیر های.تعریف گردیدهint از نوعweightOfAPerson در خط سوم متغییر
elevatorWeightLimit/PersonWeight یعنی اول عبارت،در خط هشتم ابتدا داخل پارانتز حساب میشود
به طور مشابه چند نوع اصلی در.با ترکیب چیزی های ساده شما عناصر پیچیده تری را به دست می آورید
importjavax.swing.JFrame;
myFrame.setTitle(myTitle);
myFrame.setSize(300, 200);
myFrame.setDefaultCloseOperation
(JFrame.EXIT_ON_CLOSE);
myFrame.setVisible(true);
} 38
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
جاوا را میتوان با یکدیگر ترکیب کرد و انواع مرجع را به دست آورد .برای روشن سازی بهتر مطلب به مثال
در مثال 4-6دو نوع مرجع تعریف گردیده است که هر دوی آنها در APIجاوا تعریف شده اند (.اولی را که
شما در بیشتر اوقات استفاده خواهید کرد) Stringنام دارد .نوع دیگر (که شما از آن در ساخت GUIها
Stringگروهی از کاراکتر هاست ،آن شبیه آن است که چندین مقدار charرا در یک سطر داشته باشد.
Stringاعالن گردیده و " "Blank Frameبه آن تخصیص داده شده است .توجه متغیر myTitleاز نوع
در برنامه های جاوا ،عالمت دابل کوتیشن در ابتدا و انتهای لیترال های Stringباید وجود داشته باشد.
JFrameدر جاوا بسیار شبیه به windowمیباشد (.با این تفاوت که شما JFrameرا بجای windowفراخوانی
میکنید).
سعی نکنید تمام خطوط مثال 4-6تفسیر کنید .تنها چیزی که باید از این مثال یادبگیرید ،اعالن دو متغییر
مرجع ،یعنی myFrameاز نوع JFrameونیز myTitleاز نوع Stringمیباشد (.در فصول بعدی در مورد دیگر
39
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
نکته ی مهم دیگر آن هست که Stringو JFrameنام کالس میباشند و در حالت کلی هر کالس در جاوا
یک نوع مرجع میباشد(.در مورد کالس های جاوا دو فصل های بعدی توضیح داده خواهد شد).
;doubleamountInAccount
;doubleamountInAccount = 50.22
;JFramemyFrame
در شکل 4-10متغیر myframeبه مثال و نمونه ای از کالس JFrameارجاع میکند( .در فصول بعدی در
40
www.SourceSara.com آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده- ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا
در طول برنامه استفادهjavax.swing.JFrame شما اعالن میکنید کف در این برنامه از4-6 در خط اول مثال
، استفاده میکنیدJFrame حذف کنید مجبور هستید هر جا که از4-6 اگر خط یک را از برنامه.خواهید کرد
باید4-6 به درک بهتر برنامه زیر را با حذف خط اول از مثال. را تکرار کنیدjavax.swing.JFrame نام کامل
javax.swing.JFramemyFrame =
newjavax.swing.JFrame();
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
عملیات روی داده ها :مقدار یک متغیر ممکن است نتیجه ی یک عبارت محاسباتی و یا سایر عملیات روی داده
ها باشد .برای انجام عملیات مختلف بر روی داده ها از عملگر ها استفاده میشود.
ابتدا برای توضیح کارکرد عملگرها محاسباتی در جاوا و اینکه از آن ها چگونه در برنامه هایمان استفاده کنیم
به جدول زیر توجه نمایید
عملگر های حسابی در جدول شرح داده شده اند نکته ای که نباید فراموش کرد این است حاصل تقسیم عدد صحیح
بر عدد صحیح دیگری عدد صحیح خواهد بود .البته ابن نکته از جدول باال هم قابل مشاهده واست.حال برای روشن
شدن هر چه بهتر عملگرهای حسابی با مثال 4-7که در زیر آورده شده توجه نمایید:
42
www.SourceSara.com آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده- ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا
whatsLeft = whatsLeft % 5;
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 static java.lang.System.outبه مثال 4-7کد برنامه کمی برای نوشتن آسانتر
شده و حتی خواندن آن را نیز سهل میشود .بدین صطورت کطه شطما بجطای System.out.printlnفقطط از
باید توجه نمود شما میتوانید خط اول برنامه import static java.lang.System.outرا حذف نمطوده و
ولی اما در مثال 4-7کاری که برنامه انجام میدهد :خرد کردن پول 248سنتی به سکه های رایج در ایطاالت
MakeChangeکمترین تعداد سکه های که با آن ها میتوان یک 248سنتی را خرد کرد ارائه میدهد.
جاوا عملگر های بسیار مرتبی دارد که کار را برای ما ساده میکند .عملگر افزایشی یک واحد افزایش و عملگر
کاهشی یک واحد کم میکند.عملگر افزایشی را با دو تا بعالوه ( )++و عملگر کاهش را با دوتا منها ( )--نشان
خواهیم داد .برای آنکه بفهمید آن ها چگونه کار میکنند به چند تا مثال نیاز دارید.
44
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
کارکرد این عملگر ها بستگی دارد که شما آن ها را کجای متغیر به کار برده باشید..اگر آن را قبل از یک
شما ++را قبل از متغیر قرار میدهید و کامپیوتر قبل از اینکه از متغیر مورد نظر در یک عبارت دیگر استفاده
برای مثال در خط هفتم برنامه ابتدا numberOfBunniesیک واحد افزایش یافته و سپس چاپ میگردد.
ولی اگر عملگر افزایش یعد از متغیر قرار گیرد ( ،)postincrementنمایده میشود و ابتدا متغیر با همان
مقدار دز یک عبارت شرکت کرده و سپس افزایش صورت میگیرد .برای درک بهتر به مثال 4-14توجه
نمایید:
45
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
نکته ای که ممکن است بی دقتی به آن موجب فاجعه شود نادیده گرفتن تفاوت مابین preincrementو
جاوا عملگر های تخصیص گوناگونی دارد که شما میتوانید عملیات های جمع و تفریق و ضرب تقسیم و ....را
انجام دهید.برای مثال در مثال پایین توجه کنید چگونه +=5به مقدار متغیر numberOfBunniesپنج واحد
می افزاید .و یا چگونه *=2مقدار numberOfBunniesرا دوبرابر میکند......برای آموزش عملکرد این
46
www.SourceSara.com آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده- ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا
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 دو خط آخر مثال
47
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
numberOfBunniesاز 172به 165کاهش پیدا میکند .و بعد با این مقدار جدید System.out.println
فراخوانی میشود .و در خط چهاردهم نشان میدهد که تخصیص مقدار به یک متغیر میتواند خود بخشی از
48
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
فصل 3
49
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
زمانی که شما در حال نوشتن برنامه های کامپیوتری هستید دائما در معرض انتخاب مسیر برنامه قرار
دارید( -آیا کاربر پسوردش را به درستی واردکرده است؟ اگر بله ،پس اجازه بده کاربر وارد سیستم شده
و با آن کار کند .اگر خیر ،پس به کاربر اجازه ی ورود نده . ).پس شما در برنامه های جاوا به راهی برای
شاخه شاخه کردن برنامه و انتخاب بین شاخه ها احتیاج دارید .خوشبختانه جاوا برای این منظور راه حلی دارد
ابتدا یک مثال زده و سپس از روی مثال زیر عبارات ifو چند مبحث دیگر را توضیح خواهم داد.
50
www.SourceSara.com آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده- ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا
:: 5-1 مثال
importjava.util.Scanner;
importjava.util.Random;
intinputNumber = keyboard.nextInt();
if (inputNumber == randomNumber) {
out.println("**********");
out.println("*You win.*");
out.println("**********");
} else {
out.println("You lose.");
out.println(randomNumber + ".");
keyboard.close();
51
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
برنامه 5-1یک بازی ساده است .یک عدد حدسی را از کاربر گرفته و سپس یک عدد تصادفی مابین 1تا
10تولید میکند..اگر عدد وارد شده توسط کاربر با عدد تصادفی تولید شده توسط برنامه یکسان باشد،
کاربر برنده شده و در غیر این صورت بازنده است و برنامه به کاربر میگوید که عدد تصادفی چه بوده
است.
;importjava.util.Scanner
;)(intinputNumber = keyboard.nextInt
این شبه کد هر عددی که کاربر از طریق کیبورد وارد کند را گرفته و در خط سوم آن را در متغیر
inputNumberقرار میدهد .زمانی که شما میخواهید از کیبورد داده ای را دریافت کنید دو خط اول را
فقط یکبار در برنامه قرار میدهید .بعدا در برنامه تان ،هر زمان که نیاز باشد کاربر داده ی intای را تایپ
52
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
کند باید کدی همانند خط سوم از شبه کد باال که شامل فراخوانی nextIntباشد را بنویسید .تا داده ای
;importjava.util.Scanner
;)(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شما میتوانید چندین مقدار را از طریق کیبورد یکی پی از دیگری دریافت نمایید .برای این کار از
نکته ی :5زمانی که شما از Scannerجاوا استفاده میکنید ،شما باید بعد از آخرین فراخوانی ، nextIntمتد
رسیدن به مقادیر واقعی تصادفی به طور شگفت آوری مشکل است.یک کامپیوتر در تولید مقادیر تصادفی
ممکن است به نظر رسد که واقعا دارد مقادیر تصادفی تولید میکند.و لی در انتها تنها چیزی که به آن گفته
;importjava.util.Random
به نظر مقادیر وتصادفی مابین 1تا 10تولید میکند ولی این مقادیر دراصل ،واقعا تصادفی نیستند .کامپیوتر
نگران نباشید که new Random().nextInچه معنی میدهد .هدف از مثال 5-1یادگیری یک سری مباحث
مورد نظر این فصل میباشد .اگر معنی برخی کد ها را در مثال هایی که می آوریم جای نگرانی نیست .چون
برخی از این کدها و مفاهیم و فصول بعدی توضیح داده خواهد شد.
54
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
همان طور که در مثال 5-1مشاهده میکنید عبارت ifیک انشعاب در برنامه را نشان میدهد .کامپیوتر فقط
یکی از دو شاخه را انتخاب خواهد کرد شاخه You winیا شاخه ی You loseرا .کامپیوتر یکی از دو شاخه را با
تست کردن درست یا غلط بودن شرط ،انتخاب خواهد کرد .شرطی که تست خواهد شد :
inputNumber == randomNumber
آیا inputNumberبا randomNumberبرابر است ؟ اگر شرط درست باشد ،برنامه بلوک مابین شرط
و کلمه ی elseرا اجرا خواهد کرد .اما اگر شرط نادرست باشد کامپیوتر بلوک بعد از کلمه ی elseرا اجرا
55
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
خواهد نمود .به هر حال کامپیوتر آخرین فراخوانی printlnرا اجرا خواهد کرد و Thank you for playing
عالمت مساوی = برای تخصیص یک لیترال به یک متغیر یا تخصیص مقدار یک متغیر به یک متغیر دیگر و.....
به کار میرود .در حال که عالمت دو تا مساوی == برای مقایسه ی دو مقدار به کار برده میشود تا بفهمیم که
آیا آنها دارای مقداری یکسان اند یا خیر ؟
56
www.SourceSara.com آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده- ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا
در این صورا باید مثال. شاید نخواهید به کاربر بگویید که او باخته است، دوباره نگاهی بیاندازید5-1 به مثال:
importjava.util.Scanner;
importjava.util.Random;
intinputNumber = keyboard.nextInt();
if (inputNumber == randomNumber) {
out.println("*You win.*");
out.println(randomNumber + ".");
keyboard.close();
57
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
نخواهد کرد.
جاوا عملگر ها و ابزار های بسیار فراوانی برای نیاز های متنوع شما در ایجاد شرط داراست .در این بخش
جدول 5-1به شما نشان میدهد که چگونه ی میتوانید از عملگر های مقایسه ای برای مقایسه یک چیز با
58
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
زمانی که شما کار کردن با اشیاء را شروع کردید ،شما خواهید دانست که میتوانید از == و =! برای مقاسه
ی اشیاء با یکدیگر استفاده کنید .برای مثال یک دکمه که شما روی نمایشگر کامپیوتر می بینید یک شیء است.
شما میتوانید با نوشتن یک برنامه جویا شوید که آیا یک چپ کلیک روی دکمه خاص روی نمایشگر کامپیوتر
اتفاق است یا نه ؟شما میتوانید این کار را با استفاده از عملگر های کیفیت جاوا ()Java's equality operator
انجام دهید.
;))(clipboard.setText(which.getText
اما برای مقایسه دو Stringباید توجه داشته باشید که ،هنگام این مقایسه استفاده از == بدین معنی است
که " آیا این Stringدقیقا در محلی از حافظه که Stringدیگر قرار دارد ،ذخیره شده است" .معموال شما
چنین خواسته اس ندارید . .حال برای پرسیدن اینکه " آیا این Stringدقیقا همان کاراکترهایی را دارد که
Stringدیگر داراء میباشد" یک متد به اسم equalsوجود دارد که در API (Application Programming
) Interfaceتعریف گردیده است equals .دو Stringرا مقایسه می مند که ببیند که آیا آن ها کاراکتر
در مثال keyboard.next() 5-3فراخوانی شده و هر چیزی که کاربر روی کیبورد کامپیوتر تایپ کند را
گردآوری میکند .سپس کلمه ی تایپ شده را در متغیری به نام passwordذخیره میکند.و در نهایت با
در فراخوانی متد equalsمهم نیست که کدام Stringداخل پارانتز و کدام یک قبل از نقطه باشد ،برای
59
www.SourceSara.com آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده- ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا
if ("swordfish".equals(password))
60
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
در اولین خط برنامه 5-3یک راه تنبلی را نشان میدهد شما با نوشتن *import static java.lang.System.
یک راه سهل و آسان را انتخاب کرده اید ،این یک خط تقریبا معادل 30عدد importجداگانه ی دیگر مانند
کاربردن *(ستاره) در برنامه های بزرگ است که باعث کوتاه تر شدن کد برنامه خواهد شد.
جاوا تعدای عملگر برای کار ئ تست مقادیر منطقی دارد که در جدول زیر نشان داده شده اند :
شما میتوانید از این عملگر ها در شرط ها به طور مهرانه ای استفاده کنید .به مثال 5-4دقت نمایید:
61
www.SourceSara.com آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده- ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا
و پسوردbburd زمانی که یوزرنیم، در زیر نشان داده شده است5-4 حاصل اجرای چندین بار مثال
در غیر این صورت پیامی مبنی در،را که نشان می دهد یوزرنیم و پسورد صحییح هستند را دریافت میکند
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دوباز از JOptionPane.showInputDialogاستفاده شده است .یک بار برای گرفتن یوزرنیم
و دیگر بار برای گرفتن پسورد .برای مثال )" JOptionPane.showInputDialog("Usernameیک کادر
محاوره ای (دیالوگ) شامل فیلدی برای وارد کردن متن و نیز دکمه های OKو Cancelبه نمایش در می
63
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
آورد .زمانی که کاربر بروی OKکلیک می نماید .کامپیوتر هر آنچه که در فیلد متن وارد شده را داخل
این خط نیز یک کادر محاوره ای(دیالوگ) نمایش می دهد با این تفاوت که هیچ فیلد متنی برای وترد کردن
اطالعات وجود ندارد .نام JOptionPaneدر APIجاوا درون چیزی که javax.swingنامیده میشود ،تعریف
در مثال باال JOptionPane.showInputDialogبه زیبایی کار میکند زیرا کاربر یوزرنیم و پسورد را به
صورت رشته ای از کاراکتر ها وارد میکند .اگر شما میخواهد کاربر مقدار intرا وارد کند باید چیزی شبیه
تایپ کنید .ویا برای دریافت کردن مقدار doubleاز کار بر باید چیزی شبیه به زیر را تایپ کنید.
توجه داشته باشید که username != nullبه این معنی ست که یوزرنیم تهی نیست ،یااینکه یوزنیم دارای
64
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
توجه :دو عبارات username != nullو نیز password != nullاختیاری نیستند .اگر شما آن ها را از برنامه
حذف کنید و سپس برنامه را اجرا کنید و در کادر ظالهر شده روی Cancelکلیک کنید برنامه مقابل
چشمانتان خطای NullPointerExceptionر امیگیرد .برای تمرین این خطوط را حذف کرده و دوباره رنامه
nullدر خطوط دهم و یازدهم کامال متفاوت است ،فراخوانی کاربرد کلمه ی کلیدی
showMessageDialogبه جاوا میگوید که یک کادر محاوره ای (دیالوگ) جدید ایجاد کند .کلمه nullبر
این موضوع اشاره میکند که کادر محاوره ای جدید بر روی هیچ یک از کادر های محاوره ای قبلی سبز
نشود.
در جاوا می توان از یک ifداخل ifدیگر استفاده کرد .به مثال 5-5دقت کنید :
شما برای وارد شدن باید هر دوی یوزرنیم و پسورد را درست وارد کنید(.
به عبارتی دیگر هر دو شرط ifباید درست باشد) .شرط اول درستی
یوزرنیم را برسی میکند .شرط دوم درستی پسورد را برسی میکند .اگر شما
اولین شرط(یوز نیم ) را درست وارد کنید .شما به سوی ifدیگری که شرط
دوم(پسورد) را برسی میکند پیش روی میکنید .در اولین ifشرط(یوزنیم) را نادرست وارد کنید ،هرگز
66
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
البته این مثال فقط برای یادگیری ifهای تو در تو آورده شده و شاید در کاربرد آن در عمل باید کمی
تغییرات روی آن انجام دهیم -1 :پسورد وارد شده توسط کاربر به صورت ستاره دار نشان داده نمیشود.
این امنیت را پایین می آورد -2هیچ گونه عمل کدگذاری( )encryptingروی پسورد انجام نمیشود -3 .کبه
کابران غیر قانونی که سعی در وارد شدن به سیستم دارند نشان داده میشود که کدام یک از usernameیا
پسورد را اشتباه وارد میکنند......هدف از گفتن این مسائل فقط آشنا کردن شما بود و قصد پیاده کردن این
Switchدر جاوا
وقتی که قصد داریم از تعداد زیادی گزینه فقط یک مورد آنها را انتخاب کنیم دستور switchکاربرد دارد
کامپیوتر تشخیص داد که مقدار متغیر verseعدد 2است .هر یک از caseهای عبارت switchرا برسی
میکند .عدد 2با اولین caseمطابقت ندارد .پس کامپیوتر به caseدوم حرکت میکند ..مقدار متغیر verse
با مقدار caseدوم مطابقت دارد پس کامپیوتر دستوری که بالفاصله بعد از caseدوم میآید را اجرا
میکند.
حال caseدوم دارای 2دستور است که اولی ..That's because he is a painرا نمایش میدهد .و دومی
: 9-5
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 برای که شما با عواقب ناخوشایند این فراموشی آشنا شوید به مثال. رایج در برنامه نویسی است
.دقت کنید
همانطور که مشاهده میکنید .ما 3را وارد کردیم ،که عدد 3با
در مثال های 5-6و ، 5-7متغیر ( verseاز نوع ) intدستور switchرا به یکی از caseها هدایت
میکند ..یک متغیر intداخل داستور switchدر همه ورژن های جاوا کار میکند -در ورژن های قدیمی
جاوا ،فقط انواع charو تعدار کمی از انواع دیگر داخل دستور switchکار میکرند -اما اگر شما از جاوا 7با
نسخه های جدید تر استفاده میکنید ،میتوانید از مقادیر Stringداخل switchبرای انتخاب و اجرای یکی
از caseها استفاده کنید .اگر شما از جاوا برای ایجاد اپلیکیشن های Androidاستفاده میکنید توجه کنید که
در جاوا 6و کلیه ورژن های قدیمی جاوا ،شما نمی توانید برای پرش میان caseها داخل دستور ، switch
70
www.SourceSara.com آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده- ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا
: خروجی
71
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
فصل 4
72
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
در اینجا یک بازی حدس زدن برای شما مثال زده شده است .کامپیوتر اعداد تصادفی از یک تا ده تولید
میکند .و سپس کامپیوتر از شما میخواهد که اعداد را حدس بزنید اگر حدس شما اشتباه بود بازی ادامه می
یابد ،و چنانچه حدس شما درست باشد بازی خاتمه می یابد .سپس با استفاده از ایم مثال به توضیح حلقه ی
73
www.SourceSara.com آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده- ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا
74
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
حدس میزند .و پیام You Win ….را دریافت میکند ،توجه کنید که به ازای هر حدس متغیر numGuesses
به خط شانزدهم دقت کنید کاری که این دستور انجام میدهد این است که تا زمانی که متقغیر
( randomNumberعدد تصادفی تولید شده توسط کامپیوتر) و متغیر ( inputNumberعدد وارد شده
توسط کاربر) نامساوی باشند .دستورات خطوط 17الی 21را تکرار نماید 6-2 .کارکرد این مثال را
روشن
میکند:
75
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
اگر یکبار دیگر کد مثال باال را مرور کنید .خواهید دانست که تنها کاری که حلقه ی whileانجام میدهد این
است که تا زمانی که شرط اش درست باشد ،،دستورات موجود در اولین بلوک بعدی اش را تکرار میکند..
ابتدا به مثال 6-2توجه نمایید ،سپس حلقه forاز روی این مثال توضیح داده خواهد شد.
خروجی :
زمانی که برنامه را اجرا می کنید ،حلقه ی forبا تخصیص دادن یک به متغیر countشروع میشود .سپس
مقدار countبرسی میشود تا اطمینان حاصل شود که کوچکتر مساوی ده میباشد .اگر درست بود برنامه
پیش میرود ،و دستورات مابین دو آکوالد را اجرا میکند ،و در آخر یک واحد به countمی افزاید.
76
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
اجرای حلقه ی forادامه می یابد تا اینکه مقدار countبه 11می رسد .در این هنگام شرط حلقه ( کوچکتر
مساوی بودن مقدار countاز ) 10نادرست می شود .پس اجرای حلقه به پایان میرسد .و برنامه از اولین
77
www.SourceSara.com آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده- ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا
میرسد فقط یکبار اجراfor زمانی که برنامه برای اولین بار به عبارت: )(مقدار دهی اولیهinitialization
.میشود
.) چندین بار اعمال میشود( بعد از هر تکرار: )(به روز رسانی متغیر حلقه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به کار رفته اند.
متغیر verseبه عنوان متغیر حلقه ی forعمل میکند ابتدا مقدار 1و سپس 2و درنهایت مقدار 3را به
خود میگیرد که در هر یک از این حاالت caseهای مناسب درعبارات switchاجرا میشوند .زمانی که شرط
حلقه نادرست میشود ( مقدار countبزرگتر از سه میشود) برنامه بالفاصله از حلقه خارج شده و چهار
اولین سوالی که ممکن از خود بپرسید این است که این حلقه چه تفاوتی با حلقه ی whileدارد .جواب این
است که حلقه ی whileحداقل یکبار اجرا خواهد شد .چون شرط حلقه در انتهای حلقه برسی میشود).
قبل از حذف فایل برنامه از کاربر می پرسد که فایل را خذف کند یا
انتظار دارد پیش میرود .اما اگر کاربر از هرگونه کارکتر دیگر(
مانند اعداد ،حروف بزرگ ،سمبل ها )....................استفاده کند .برنامه از کاربر دوباره سوال خواهد کرد.
حال سوالی که مطرح میشود این است که استفاده از حلقه ی 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
در مثال 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پیدا کنید .عبارت :
درون حافظه ی کامپیوتر یک شی جدید ایجاد می کند .این شی از کالس java.io.Fileشکل گرفته است.
این شی هر چیزی را که برنامه نیا دازد در مورد فایل cookedBooks.txtبداند توصیف میکند .با توجه ب
شی evidenceیک مثال از کالس java.io.Fileاست که دارای متد deleteمی باشد .زمانی که شما
evidence.deleteرا فراخوانی میکنید ،کامپیوتر فایل مربوطه را پاک میکند .البته شما نمی توانید چیزی را
جاوا برسی نمی کند که آیا فایلی به نام 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در جاوا دقت نمایید:
در واقع این تعریف به برنامه میگوید که هر مثال و نمونه ای از کالس ( Accountیعنی اشیا) سه متغیر
خواهند داشت name -و addressو - balanceدر برنامه نویسی جاوا متغیر هایی که داخل کالس ( نه
داخل ( methodتعریف شده اند ،فیلد ( ) fieldنامیده میشوند.
87
www.SourceSara.com آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده- ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا
. سپس از روی این مثال به توضیح مطالب خواهیم پرداخت، دقت کنید7-2 ابتدا به مثال
مثال مثال. وجود دارد که یک برنامه ی باال را شکل میدهدUseAccount وAccount در اینجا دو کالس
.) داردmain method( یک متد اصلیUseAccount را تعریف میکند و کالسUseAccount کالس2-7
.) myAccount وyourAccount متغیر های مخصوص خود را داراست ( یعنی متغیر هایmain متد
( خطوط چهرم و پنجم ) کمی گمراه کننده هستند به معنی این خطوط دقتmain دو خط اول داخل متد
راyourAccount اگر و زمانی که من متغیر: بدین معنی است کهAccount yourAccount خط: کنید
. خواهد بودAccount این متغیر به چیزی رجوع میکند که آن چیز مثال و نمونه ای از کالس،ایجاد میکنم
یک شی به وسیله ی فراخوانی کالس، را اجرا میکندnew Account() از لحاظ فنی زمانی که کامپیوتر کد
.. ساخته میشودAccount سازنده ی
88
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
حال به خروجی حاصل از کمپایل و اجرای برنامه های 7-1و 7-2دقت کنید:
89
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
کالس 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را برای خود دارد.
در جدول 7-2هر شیء چهار چیز داردname , address , balance , , -- :روشی برای نمایش خودش—
وقتی شما از برنامه نوبسی سنتی به برنامه نویسی شیء گرا کوچ میکنید دیگر هیچ وقت به گذشته و
برنامه نویسی سنتی بر نخواهید گشت ( چون نیازی به این کار نخواهید داشت) :به مثال 7-3دقت کنید :
هر-- display متد، name , address , balance , — چهار چیز داردAccount کالس7-3 در مثال
. و یک روش برای نمایش خود داردbalance یکaddress یکname یکAccount مثالی از کالس
برای. راهی که شما برای صدا زدن و فراخوانی این چیز ها استفاده میکنید بسیار زیبا و منحصر به فرد است
میتوانید چنین بنویسیدmyAccount ذخیره شده درname رجوع به
myAccount.name
: خودش را روی صفحه ی نمایش چاپ کند میتوانید بنویسیدmyAccount یا برای آنکه
myAccount.display()
. بعد از نام متد یک جفت پارانتز قرار می دهید، را فراخوانی میکنیدmethod زمانی که شما یک: توجه
92
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
هنگامی که شما هنگام فراخوانی متد ها ،مقادیری را داخل پارنتز قرار میدهید و با این کار آن مقادیر را به
متد مورد نظر ارسال می کنید .و به این مقادیری هنگام فراخوانی متد داخل پارانتز های متد قرار می
دهید پارامتر ( ) parametersنامیده می شوند.
و به مقادیر که به شما برگشت داده میشوند مقادیر برگشتی یا return valueنامیده میشوند ،و عموما
به انواعی که توسط متد برگردانده میشوند انواع برگشتی یا return typeگفته میشود .مثال : 7-5
93
www.SourceSara.com آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده- ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا
: 7-6 مثال
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 ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
در فرستادن یک مقدار به یک متد به شکل 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 آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده- ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا
: خروجی
همیشه باید، را فراخوانی میکنیدprintf وقتی که شما، استفاده کردیدprintf در مثال بال شما از متد
فرمت.) استformat string( پارامتر اول فرمت رشته.حداقل دو پارامتر داخل پارانتزهای آن قرار دهید
) همه ی پارامتر های دیگر(بعد از اولین پارامتر.رشته دقیقا چگونگی نمایش پارامتر های دیگر را تعیین میکند
.مقادیری هستند که نمایش داده میشوند
100
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
به آخرین فراخوانی printfدا مثال 7-7دقت کنید ،اولین پارامتر دارای دو مکان نگه دارنده
( )placeholderاست .اولین ) placeholder(%.2fنمایش دادن myInterestرا توصیف میکند .و دومین
) placeholder (%.2fنیز نمایش دادن yourInterestدا توصیف میکند .برای اینکه بفهمید این فرمت رشته
ها دقیقا چگونه کار میکنند به شکل 7-10تا 7-14دقت کنید:
101
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
نمایش دادن یک مقدار ،بدون مشخص کردن مقدار دقیق مکان های تخصیص داده شده به آن :
102
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
103
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
توجه داشته باشید که یک فراخوانی printfشیوه ای که اعداد برای محاسبات ذخیره شده اند را تغییر
نمیدهد ،کاری که در تصاویر باال آمده است ،این است که دسته ای از کاراکتر ها عددی را را زیبا تر(nice-
)lookingکنیم ،.تا بتوانند رو مانیتور نمایش داده شوند.
فرض کنید شما در حال نوشتن کد برای کالس UseAccountهستید.آیا شما بدون نوشتن
myAccount.nameیا ، yourAccount.balanceآیا میتوانید کاری را انجام دهید؟؟ جواب استفاده از
چیزی به نام متدهای دسترسی دارنده ( )accessor methodsمیباشد .مثال های 7-8و 7-9این متد ها را
شرح میدهند :
104
www.SourceSara.com آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده- ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا
. ندارد7-2 و7-1 که هیچ تفاوتی با اجرای مثال های7-9 و7-8 به نظر میرسد حاصل اجرای مثال های
به دقتAccount کالس7-8 حاصل اجرای هر دو برنامه یکی ستوتفوات بزرگ این است که در مثال
. را کنترل می کندbalance وaddress وname اجرای فیلدهای
تصور کنید که عبارت تخصیص. نگاهی بیاندازیدsetName رجوع کرده و به متد7-8 دوباره به مثال
: قرار دهیمif داخل متد را درون یک
البته فراخوانی هایی همچون )" 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معین میکند که یک کارمند
بودن چه معنی ای میدهد:
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را مینویسید .جاوا میتوانید به طور اتوماتیک اعداد شما را فرانسوی کند البته با کمک
عباراتی همچون :
به (InterfaceAPI (Application Programmingبخش مربوط به کالس های برای جزئیات بیشتر
Formatterو Localeرجوع کنید.
کد های در مثال 8 -2اجرا نمیشوند مگر آنکه شما بعضی اطالعات کارمند( )employeeرا داخل یک فایل
داشته باشید .مثال 8-2میگوید این فایل EmployeeInfo.txtنام دارد .پس قبل از اجرای مثال 8-2یک فایل
کوچک EmployeeInfo.txtایجاد کنید .شکل : 8-3
111
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
و سپس Enterرا فشار میدهید( دوباره به شکل 8-3نگاه کنید چگونه مکان نما در ابتدای خط جدید قرار
دارد) .اگر شما فشار دادن Enterرا فراموش کنید ،آنگاه زمانی که تالش کنید مثال 8-2را اجرا کنید با
مشکالتی مواجه خواهید شد.
گروه بندی جدا کننده ها ،در کشور های مختلف ،متفاوت است .فایل نشان داده شده در شکل 8-3روی
یک کامپیوتری که در کشور ایاالت متحده پیکره بندی شده است ،کار میکند .جایی که 5000.00به معنی
5000،00به معنی پنج هزار است ،به درستی کار نخواهد پنج هزار است .ولی در بعضی کشورها که
کرد (.دقت کتید که در عدد اول نقطه .ما بین صفر ها قرار گرفته درحالی که در عدد دوم ویرگول).
اگر شما در چنین کشوری زندگی میکنید .و از فایلی که در شکل 8-3نشان داده شده است استفاده میکنید،
زمانی که سعی در اجرای مثال این بخش داشته باشید احتماال یک پیام خطا دریافت خواهید کرد( یک
.) InputMismatchExceptionبرای حل این مشکل اعداد موجود در فایل داده را ،به فرمتی رایج در
کشور خود تغییر دهید ،تا خطا مورد بحث را رفع نمایید.
تقریبا در بیشتر زبان های برنامه نویسی نوشتن و خواندن داده ها رو ی فایل می تواند دشوار و نیازمند
مهارت باشد .شما خطوط کد اضافی را به برنامه اضافه میکنید تا به کامپیوتر بگویید چه کاری را انجام دهد.
کد ها را از کدهای برنامه های دیگر مردم کپی کنید .برای مثال در برخی مواقه شما میتوانید این
میتوانید از الگوی ارائه شده در مثال 8-2پیروی کنید :
شما میخواهید از روی فایل اطالعاتی را بخوانبد .با تصور اینکه دارید از روی کیبورد اطالعاتی را میخوانید
شروع کنید .کد دستورات Scannerها و نیز کد دستورات nextمعمول را داخل برنامه ی خود قرار
دهید .سپس آیتم های اضافی را به الگوی مثال 8-2اضافه کنید:
دو اعالن importجدید اضافه کنید .یکی برای java.io.Fileو دیگری برای . java.io.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
}
}
فایلی که هم اکنون داخل کامپیوتر شما وجود دارد را در نظر بگیرید و نام آن را داخل عالمت های کوتیشن
بنویسید.
کلمه ای که شما برای اسم اسکنر( ) 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 ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
را اگر فراخوانی nextDoubleعدد 5000.00را بخواند ،فراخوانی بعدی ]LineBreak[ ، nextLine
خواهد خواند.
اگر فراخوانی ]LineBreak[ ، nextLineرا بخواند .بعد از عدد 5000.00فراخوانی بعدی ، nextLine
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تعریف کنم :
به مثال 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 مثال
119
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
زمانی که شما با ایجاد زیر کالس ها(کالس های توسعه یافته) خوگرفتید .خلق زیر کالس باعث ایجاد راحتی
در برنامه هایی که می نویسید خواهد شد .اگر شما کالس FullTimeEmployeeرا ایجاد کرده اید .پس
میتوانید کالس دیگری به اسم PartTimeEmployeeرا نیز ایجاد کنید که در شکل 8-5ایجاد شده است.
که ممکن است در برنامه قرار داده شود..البته توجه داشته باشید که فیلد numberOfHoursWorked
تعداد ساعات کاری یک کارمند پاره وقت از یک هفته به هفته ی دیگر ( بسته به زیادی کار موجود) ممکن
است متفاوت باشد.
120
www.SourceSara.com آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده- ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا
ایجاد زیر: البته ی نکته ی مهم این است،بخش های قبلی نحوه ی ایجاد زیر کالس ها را توضیح می دهد
در این بخش کدی.کالس ها به خودی خود مزیتی ندارد مگر آنکه شما کدی برای استفاده از آنها بنویسید
.) را توضیح خواهیم دادsubclasses(که از این زیرکالس ها
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میباشد.
دوباره به نیمه ی نخست مثال 8-6نگاه ی انداخته و به آخرین عبارت توجه توجه کنید:
متد ftEmployee.findPaymentAmountبا لیست پارامتر خالی فراخوانی میشود .برای اینکه متد
findPaymentAmountهیچ پارامتری را نمیپذیرد(.مثال . )8-3
122
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
خوب ،شما میتوانید کدهای کالس PartTimeEmployeeرا کند و کاو کرده ،و روی آنها کمی تغییرات
اعمال کنید (.به نظر من ایده ی خوبی نیست).
موجود ،از کالس میتوانید از آموزش های بخش قبلی استفاده کرده و یک زیر کالس شما
PartTimeEmployeeایجاد نمایید .اما کالس PartTimeEmployeeقبال متد findPaymentAmount
را داشت .آیا ما به راهی برای دور زدن و نادیده گرفتن متد findPaymentAmountنیاز داریم ؟؟
در اینجا شما خوش شانس هستید که از زبان شیءگرای جاوا استفاده میکنید .با برنامه نویسی شیء گرا شما
میتوانید زیرکالس هایی خلق نمایید که در کارکرد اساسی کالس والد خود را دارا نیستند .مثال 8-7چنین
زیر کالسی را نشان میدهد:
شکل 8-8رابطه ی مابین مثال 8-7و سایر تکه کدهای موجود در این فصل را نشان میدهد .اگر دقیق
شویم PartTimeWithOverیک زیرکالس از یک زیرکالس است .در برنامه نویسی شیءگرا زنجیره هایی
اینچنین غیر معمول نیست .بلکه حتی شاهد زنجیره هایی طوالنی تر از این هم هستیم.
124
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
اگر شما یک شیء از کالس PartTimeWithOverایجاد کنید .شیء ایجاد شده دارای nameو jobTitleو
مند میباشد ..اما شیء دارای از کالس PartTimeEmployee hourlyRateو cutCheck
findPaymentAmountکه در مثال 8-7تعریف شده نیز میباشد.
125
www.SourceSara.com آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده- ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا
مبحث توضیح داده خواهد شد، دقت کرده سپس از روی این مثال8-8 ابتدا به مثال
: خروجی
از کالس، مطمئنا یک زیرکالس. باهم وجود دارند8-8 در مثال، هر سه تای این کارمندان،با زیرکالس ها
اما این بدین معنی نیست که شما نمیتوانید شیء ای از کالس. می آیدPartTimeEmployee قدیمی
سه فراخوانی به8-8 مثال، جاوا خیلی هوشمندانه عمل میکند، در واقع. ایجاد کنیدPartTimeEmployee
. دارد و هر فراخوانی به ورژن متفاوتی از متد میرسدfindPaymentAmount متد
126
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
127
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
128
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
( انواع enumجاوا)
جاوا راه های گوناگونی را ،به منظور گروه بندی چیز های( ،)thingsبرای شما فراهم می آورد .در این فصل
شما چیز هایی را داخل یک نوع enumگروه بندی خواهید نمود.
ایجاد یک enumپیچیده ،آسان نیست ولی برای ایجاد یک enumساده ،کافی ست یک گروه از کلمات
داخل یک جفت آکوالد بنویسید .مثال 9-1یک نوع enumتعریف میکند که نوع enumدر این مثال
TempScaleنام دارد.
{ publicenumTempScale
;}
* شما مقادیری را ایجاد میکنید ،،همانطور که 13و 15مقادیر intهستند CELSIUS .و FAHRENHEIT
نیز مقادیری TempScaleهستند.
*شما میتوانیدمتغیر هایی را برای ارجاع به آن مقادیر ایجاد کنید ،،در مثال 9-2من فیلد های numberو
scaleرا اعالن نموده ام .همانگونه که doublenumberمتغیر numberرا از نوع doubleاعالن میکند.
از نوع TempScaleبودن به این معناست که شما مقادیر …… CELSIUS,FAHRENHEIT, KELVIN,را دارا
میباشید.
یک نوع ، enumیک کالس جاوا در استتار هست .به همین دلیلی است که مثال 9-1شامل تمام فایلی که
یک ،به یک چیز اختصاص داده شده ،میشود ،یعنی اعالن نوع . TempScale enumهمانند اعالن یک
129
www.SourceSara.com آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده- ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا
به فایلی به نام9-1 در مثال. به فایل مخصوص خودش متعلق استenum در اعالن نوع، کالس
. متعلق استTempScale.java
چیست؟Temperature
-2 مثال. یک عدد و یک مقیاس حرارت: ( درجه حرارت) دو چیز در نظر گرفته میشودtemperature هر
. در زیر این حقیقت را روشن میسازد9
مثال 9-2متد های قرار دهنده ( )setterو دریافت کننده( )getterمعمول را داراست(.متد های دسترسی
دارنده به فیلد های numberو . scale
نکته ای که باید متوجه آن شده باشید این است که ،مثال ، 9-2چهار قسمت ،شبیه به متد وجود دارد..هر
یک از این بخش های شبیه به متد Temperature ،نام دارند.مشابه با نام کالس را داشت باشد.هیچ یک از
این چیزهای Temperatureشبیه به متد ،یک نوع returnاز هیچ نوعی را دارا نمیباشند .نه حتی voidکه
نوع returnhcop-outمیباشد .هر یک از این چیزهای شبیه به متد سازنده ( )constructorنام دارند.
یک سازنده شبیه یک متد است ،به استثنای اینکه یک سازنده ،هدف بسیار مخصوصی دارد-ایجاد اشیاء جدید.
هرزمانی که اشیاء جدیدی ایجاد می کند ،کامپیوتر دستورات درون سازنده ر ا اجرا میکند.
در مثال 9-3شما سازنده ای که در مثال 9-2اعالن شده را فراخوانی میکنید .تصویر شماره 9-1نشان
میدهد که وقتی شما تمام این کد را اجرا کردید چه اتفاقی خواهد افتاد.
یک سازنده را از مثال 9-2فراخوانی میکند .پس همانطور که مثال 9-3را اجرا میشود ،آن چهار شیء از
کالس Temperatureایجاد میکند .هر شیء با فراخوانی یک سازنده ی متفاوت از مثال 9-2ایجادمیشود.
در مثال 9-3آخرین سازنده دارای دو پارامتر 2.73و TempScale.KELVINبود .این مخصوص فراخوانی
سازنده ها نیست.فراخوانی یک متد ی فراخوانی یک سازنده هم نیز میتواند یک لیست از پارامتر ها را داشته
باشد.شما پارامتر ها را با کاما از یکدیگر جدا میکنید.
تنها قاعده ای که بایستی بدان توجه کنید این است که :پارامتر های فراخوانی با پارامترهایی که اعالن شده اند
تطابق داشته باشند .برای مثال در مثال 9-3هنگام فراخوانی چهامین و آخرین سازنده :
دو پارامتر دارد.اولی از نوع doubleو دومی از نوع . TempScaleجاوا با این فراخوانی موافقت خواهذ
نمود زیراکه که آن با هدر( )headerتعریف شده در مثال 9-2تطابق دارد :
دو پارامتر دارد اولی از نوع doubleو دومی از نوع TempScaleمیباشد .که اگر این تطابق را رعایت
نکنید با مشکل مواجه خواهید شد.
132
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
مثال 9-4دارای دو سازنده درون خود میباشد .من از دو نام متفاوت استفاده میکنم number :و
. whateverدر دومین سازنده ،من به دو نام احتیاج ندارم.به جای ایجاد یک نام جدید برای پارامتر سازنده،
من تصمیم گرفتم از نام موجود با نوشتن this.numberدوباره استفاده کنم.
در دستور 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 مثال
134
www.SourceSara.com آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده- ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا
به صورت خصوصی درون کالسscale وnumber اما چون.). را تعریف میکندscale وnumber
باشد میتواند از اینTemperature تنها کدی که درست درون کالس. اعالن گردیده اندTemperature
.فیلد ها استفاده کند
که. فراخوانی میکند9-2 () را در مثالTemperature پارامتر های سازنده ی9-5 () در مثالsuper دستور
به فیلدFAHRENHEIT . اختصاص میدهدTempScale وnumber را به فیلد0.0 سازنده ی بدون پارامتر
..field
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 در مثال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);
}
}
شکل 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تنها یک دکمه در خود دارد.آن دکمه در مرکزیت و نزدیک باالی
فریم قرار داده شده است.اگر فریم هشت دکمه می داشت .پنج تای آن ها ممکن بود در خط باالیی فریم
قرار گرفته و سه تای باقی مانده در مرکزیت خط پایین فریم قرار بگیرند.
138
www.SourceSara.com ﺳﺎﯾﺖ ﺳﻮرس ﺳﺮا -آﻣﻮزش ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ و ﺳﻮرس ﮐﺪﻫﺎي آﻣﺎده
شکل 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
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
Java SE8 for the Really Impatient: A Short Course on the Basics 1st Edition,By Cay S.
Horstmann, Publisher: Addison-Wesley Professional
140