آموزش جامع برنامه نویسی جاوا به زبان ساده — بخش ششم: نخستین کلاس جاوا
در بخش های قبلی از آموزش های جامع برنامهنویسی جاوا با مقدمات این زبان آشنا شدیم. برای مثال در بخش سوم مفاهیم برنامهنویسی شیءگرا را مرور کردیم و در بخش چهارم به مبانی زبان جاوا پرداختیم. اینک زمان آن رسیده است که هر آنچه را در بخشهای قبلی آموختهایم گرد هم بیاوریم و شروع به نوشتن کد بکنیم.
نخستین کلاس جاوا
در این بخش ابتدا اعلان یک کلاس را مینویسیم و متغیرها و متدها را با استفاده از پکیج اکسپلورر ایکلیپس به آن اضافه میکنیم. نحوه استفاده از کلاس Logger برای بررسی رفتار برنامه و همچنین نحوه استفاده از متد ()main به عنوان تست را یاد میگیریم.
ایجاد پکیج
در برنامه ایکلیپس از طریق مسیر Window > Perspective > Open Perspective وارد نمای پکیج اکسپلورر (در چشمانداز جاوا) بشوید. ما در حال ساخت نخستین کلاس جاوا هستیم. گام نخست ایجاد مکانی برای حیات کلاس است. پکیجها سازندههای فضای نام هستند و بهطور مستقیم نیز با ساختار پوشه سیستم ارتباط دارند. بجای استفاده از پکیج پیشفرض (که همواره ایده بدی محسوب میشود) یک پکیج اختصاصی برای کدی که مینویسید ایجاد کنید. بر روی File > New > Package کلیک کنید تا ویزارد پکیج جاوا مانند تصویر زیر آغاز شود:
عبارت را در فیلد نام تایپ کنید و بر روی Finish کلیک کنید. پکیج جدید ایجاد و در پکیج اکسپلورر مشاهده میشود.
اعلان کلاس
به روشهای مختلفی میتوان یک کلاس را در پکیج اکسپلورر ایجاد کرد اما آسانترین راه راست کلیک بر روی پکیج ایجاد شده و انتخاب مسیر New > Class است. بدین ترتیب صفحه ایجاد کلاس جدید باز میشود.
در فیلد نام عبارت Person را تایپ کنید و بر روی Finish کلیک کنید.
کلاس جدید در پنجره ویرایش مشاهده میشود. توصیه میشود که چند نما (problems ،Javadoc و ...) را که بهطور پیشفرض در چشمانداز جاری ایکلیپس باز میشوند ببندید تا مشاهده کد منبع آسانتر شود. در شکل زیر فضای کاری با نماهای ضروری که باز هستند دیده میشود.
ایکلیپس یک کلاس پوسته ایجاد میکند که نام پکیج در بالای آن دیده میشود. کافی است اینک مقادیر کلاس را وارد کنید. میتوانید نحوه ایجاد کلاس را در ایکلیپس از طریق تنظیمات Window > Preferences > Java > Code Style > Code Templates پیکربندی کنید. برای سادگی کار با ایجاد کد پیشفرض ایکلیپس کار را ادامه میدهیم.
در شکل فوق به علامت ستاره (*) در کنار نام فایل کد منبع جدید توجه کنید. این علامت ستاره نشان میدهد که تغییری در کد ایجاد شده است و کد هنوز ذخیره نشده است. همچنین توجه کنید که اشتباهی در اعلان خصوصیت نام name رخ داده است و نوع آن Strin اعلان شده است. کامپایلر نمیتواند ارجاعی به این کلاس پیدا کند و آن را به عنوان خطای کامپایلر نشان میدهد (با استفاده از خط موجدار قرمزرنگ زیر عبارت Strin). البته میتوان با اضافه کردن حرف g به انتهای عبارت این خطا را رفع نمود. این امر قدرت IDE در کشف خطا را نشان میدهد و بسیار بهتر از توسعه با خط فرمان (Command Prompt) است.
افزودن متغیرهای کلاس
در قطعه کد 3 در بخش قبلی آموزش، کلاس Person را نوشتهایم ولی توضیح چندانی ندادیم. اینک نشان میدهیم که متغیرهای کلاس چگونه اضافه میشوند.
به یاد داشته باشید که یک متغیر سطح دسترسی، نوع داده، نام متغیر و مقدار اولیه (اختیاری) دارد. قبلاً بهطور مختصر نحوه تعریف سطح دسترسی، و نام متغیر را توضیح دادیم. اینک نوع دادههایی که متغیر میتواند داشته باشد را تعریف میکنیم.
نوع داده یا از نوع ابتدایی است یا ارجاعی به یک شیء دیگر. برای نمونه توجه کنید که سن از نوع int (نوع ابتدایی) است و نام از نوع String (یک شیء) است. JDK همه کلاسهای مفید مانند java.lang.String را در خود دارد و کلاسهای موجود در پکیج java.lang لازم نیست وارد شوند (کامپایلر جاوا این کار را بر عهده میگیرد). اما هر زمان که نوع داده یک کلاس JDK مانند نوع String باشد یا از نوع تعریفشده از سوی کاربر باشد، دستورزبان آن مشابه خواهد بود.
جدول 1، هشت نوع داده ابتدایی را نشان میدهد. مقدار اولیهای که هر نوع داده، در صورت عدم بیان صریح در زمان تعریف، میگیرد نیز ذکر شده است.
جدول 1- انواع داده ابتدایی
نوع | اندازه | مقدار پیشفرض | محدوده مقادیر |
boolean | n/a | false | true یا false |
byte | 8 bits | 0 | -128 تا 127 |
char | 16 bits | (unsigned) | u0000 تا uffff یا 0 تا 65535 |
short | 16 bits | 0 | -32768 تا 32767 |
int | 32 bits | 0 | -2147483648 تا 2147483647 |
long | 64 bits | 0 | -9223372036854775808 تا 9223372036854775807 |
float | 32 bits | 0.0 | 1.17549435e-38 تا 3.4028235e+38 |
double | 64 bits | 0.0 | 4.9e-324 تا 1.7976931348623157e+308 |
گزارشدهی داخلی
پیش از اینکه وارد بحث کدنویسی بشویم باید بدانید که برنامهها کارهایی را که انجام میدهند، گزارش میکنند. پلتفرم جاوا شامل پکیج است که یک سازوکار گزارش دهی درونی برای گرداوری اطلاعات به شکل قابلخواندن است. گزارش دهندهها (Logger) نهادهای عنوان داری هستند که از طریق فراخوانی متد استاتیک به کلاس Logger ایجاد میشوند.
mport java.util.logging.Logger;
//...
Logger l = Logger.getLogger(getClass().getName());
وقتی متد ()GetLogger فراخوانی میشود یک مقدار String به آن ارسال میشود. در حال حاضر، فقط نام کلاسی که کد فعلی در آن قرار دارد را ارسال میکنیم. از هر متد معمولی (یعنی غیر استاتیک)، کد قبلی همواره نام کلاس را ارجاع میدهد و به Logger ارسال میکند.
اگر یک فراخوانی Logger درون متد استاتیک صورت بگیرد ارجاع نام از کلاسی که درون آن هستید صورت میگیرد:
Logger l = Logger.getLogger(Person.class.getName());
در این مثال کدی که درون آن هستیم کلاس Person است. بنابراین حالت ویژهای از نام این کلاس را ارجاع میدهیم که شیء کلاس را بازمیگرداند (در ادامه بیشتر توضیح خواهیم داد) و خصوصیت نام آن را دریافت میکند.
تکمیل کد برنامه
پیش از اینکه وارد تست پروژه بشویم نخست وارد ویرایشگر کد منبع ایکلیپس میشویم و این کد را پس از public class Person (در قطعه کد 3) اضافه میکنیم و کد نهایی به شکل زیر خواهد بود:
package com.makotojava.intro;
public class Person {
private String name;
private int age;
private int height;
private int weight;
private String eyeColor;
private String gender;
}
ایکلیپس یک تولیدکننده کد مفید برای ایجاد بخشهای getter و setter دارد. برای امتحان کردن تولیدکننده کد، ماوس را روی تعریف کلاس person ببرید و بر روی Source > Generate Getters and Setters کلیک کنید. وقتی صفحه باز شد گزینه Select All را همانند شکل زیر انتخاب کنید.
ایکلیپس بخشهای getter و setter را تولید میکند.
در نقطه درج (Insertion point)، گزینه Last Member را انتخاب و روی OK کلیک کنید.
در بخش هفتم، حالت تست در جاوا را بررسی و انواع فراخوانی متدها را معرفی میکنیم.