کلاس
کلاس به شما اجازه میدهد یک نوع دادهای که توسط کاربر تعریف میشود و شامل فیلدها و خواص (properties) و متدها است را ایجاد کنید. کلاس در حکم یک نقشه برای یک شیء میباشد.
شیء یک چیز واقعی است که از ساختار، خواص و یا رفتارهای کلاس پیروی میکند. وقتی یک شیء میسازید یعنی اینکه یک نمونه از کلاس ساختهاید (در درس ممکن است از کلمات شیء و نمونه به جای هم استفاده شود).
ابتدا ممکن است فکر کنید که کلاسها و ساختارها شبیه هم هستند. تفاوت مهم بین این دو این است که کلاسها از نوع مرجع و ساختارها از نوع دادهای هستند. در درسهای آینده این موضوع شرح داده خواهد شد.
اگر یادتان باشد در بخشهای اولیه این آموزش کلاسی به نام MyFirstProgram تعریف کردیم که شامل متد main() بود و ذکر شد که این متد نقطه آغاز هر برنامه است. برای تعریف یک کلاس از کلمه کلیدی class به صورت زیر استفاده میشود :
class ClassName { field1; field2; ... fieldN; method1; method2; ... methodN; }
این کلمه کلیدی را قبل از نامی که برای کلاسمان انتخاب میکنیم مینویسیم. در نامگذاری کلاسها هم از روش نامگذاری Pascal استفاده میکنیم. در بدنه کلاس فیلدها و متدهای آن قرار داده میشوند. فیلدها اعضای دادهای خصوصی هستند که کلاس از آنها برای رفتارها و ذخیره مقادیر خاصیتهایش (property) استفاده میکند. متدها رفتارها یا کارهایی هستند که یک کلاس میتواند انجام دهد. در زیر نحوه تعریف و استفاده از یک کلاس ساده به نام person نشان داده شده است.
1: package myfirstprogram; 2: 3: import java.text.MessageFormat; 4: 5: class Person 6: { 7: public String name; 8: public int age; 9: public double height; 10: 11: public void TellInformation() 12: { 13: System.out.println(MessageFormat.format("Name: {0}", name)); 14: System.out.println(MessageFormat.format("Age: {0} years old", age)); 15: System.out.println(MessageFormat.format("Height: {0}cm", height)); 16: } 17: } 18: 19: public class MyFirstProgram 20: { 21: public static void main(String[] args) 22: { 23: Person firstPerson = new Person(); 24: Person secondPerson = new Person(); 25: 26: firstPerson.name = "Jack"; 27: firstPerson.age = 21; 28: firstPerson.height = 160; 29: firstPerson.TellInformation(); 30: 31: System.out.println(); //Separator 32: 33: secondPerson.name = "Mike"; 34: secondPerson.age = 23; 35: secondPerson.height = 158; 36: secondPerson.TellInformation(); 37: } 38: }
Name: Jack Age: 21 years old Height: 160cm Name: Mike Age: 23 years old Height: 158cm
برنامه بالا شامل دو کلاس Person (خطوط 17-5) و MyFirstProgram (خطوط 38-19) میباشد. می دانیم که کلاس MyFirstProgram شامل متد main() است که برنامه برای اجرا به آن احتیاج دارد ولی اجازه دهید که بر روی کلاس Person تمرکز کنیم. در خطوط 17-5 کلاس Person تعریف شده است. در خط 5 یک نام به کلاس اختصاص دادهایم تا به وسیله آن قابل دسترسی باشد. در داخل بدنه کلاس فیلدهای آن تعریف شدهاند (خطوط 7-9).
این سه فیلد تعریف شده خصوصیات واقعی یک فرد در دنیای واقعی را در خود ذخیره میکنند. یک فرد در دنیای واقعی دارای نام، سن، و قد میباشد. در خطوط 16-11 یک متد هم در داخل کلاس به نام TellInformation() تعریف شده است که رفتار کلاسمان است و مثلاً اگر از فرد سوالی بپرسیم در مورد خودش چیزهایی میگوید. در داخل متد کدهایی برای نشان دادن مقادیر موجود در فیلدها نوشته شده است. نکتهای درباره فیلدها وجود دارد و این است که چون فیلدها در داخل کلاس تعریف و به عنوان اعضای کلاس در نظر گرفته شدهاند محدوده آنها یک کلاس است.
این بدین معناست که فیلدها فقط میتوانند در داخل کلاس یعنی جایی که به آن تعلق دارند و یا به وسیله نمونه ایجاد شده از کلاس مورد استفاده قرار بگیرند. در داخل متد main() و در خطوط 23 و 24 دو نمونه یا دو شیء از کلاس Person ایجاد میکنیم. برای ایجاد یک نمونه از یک کلاس باید از کلمه کلیدی new و به دنبال آن نام کلاس و یک جفت پرانتز قرار دهیم. وقتی نمونه کلاس ایجاد شد، سازنده را صدا میزنیم. یک سازنده متد خاصی است که برای مقداردهی اولیه به فیلدهای یک شیء به کار میرود. وقتی هیچ آرگومانی در داخل پرانتزها قرار ندهید، کلاس یک سازنده پیشفرض بدون پارامتر را فراخوانی میکند. درباره سازندهها در درسهای آینده توضیح خواهیم داد.
در خطوط 29-26 مقادیری به فیلدهای اولین شیء ایجاد شده از کلاس Person (first Person) اختصاص داده شده است. برای دسترسی به فیلدها یا متدهای یک شیء از علامت نقطه (دات) استفاده میشود. به عنوان مثال کد firstPerson.name نشان دهنده فیلد name از شیء firstPerson میباشد. برای چاپ مقادیر فیلدها باید متد TellInformation() شیء firstPerson را فراخوانی میکنیم.
در خطوط 36-33 نیز مقادیری به شیء دومی که قبلاً از کلاس ایجاد شده تخصیص میدهیم و سپس متد TellInformation() را فراخوانی میکنیم. به این نکته توجه کنید که firstPerson و secondPerson نسخههای متفاوتی از هر فیلد دارند بنابراین تعیین یک نام برای secondPerson هیچ تاثیری بر نام firstPerson ندارد. در مورد اعضای کلاس در درسهای آینده توضیح خواهیم داد.