زبان برنامه نویسی جاوا (Java) به طور کامل از مفاهیم شی‌گرایی پشتیبانی می‌کند و در زمره زبان‌های برنامه نویسی شی‌گرا قرار دارد. با توجه به همین مورد آشنایی با مفهوم کلاس در جاوا به عنوان یکی از بنیادی‌ترین مباحث شی‌گرایی از اهمیت بسیار بالایی برخوردار است. برنامه‌نویسان با استفاده از کلاس می‌توانند شی‌های مورد نیاز برنامه را ایجاد کنند. در واقع، کلاس‌ها طرح و نقشه ساخت شی را مشخص می‌کنند. در مطلب پیش رو از مجله فرادرس به این سوال مهم پاسخ داده خواهد شد که کلاس در جاوا چیست و چه کاربردهایی دارد. علاوه بر این، با مطالعه این مطلب مباحث مهمی همچون نحوه ساخت کلاس در جاوا، فراخوانی کلاس در جاوا، توابع سازنده کلاس، متدها و فیلدهای کلاس را همراه با مثال عملی فرا خواهید گرفت. در انتها نیز به متداول‌ترین و پرتکرارترین سوالات این حوزه پاسخ داده شده است.

فهرست مطالب این نوشته

منظور از کلاس در جاوا چیست؟

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

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

دلیل استفاده از کلاس در جاوا چیست؟

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

برنامه نویس در دفتر کار مرتب و منظم

ساخت کلاس در جاوا

کلاس‌ها طرح و نقشه ساخت شی را مشخص می‌کنند که تعریف کلاس و ویژگی‌های اصلی آن نیز توسط برنامه‌نویس صورت می‌گیرد. بر همین اساس بعد از آشنایی با مفهوم شی و کلاس در جاوا در این بخش از نوشته نحوه ساخت کلاس در جاوا توضیح داده شده است. تعریف کلاس در جاوا با استفاده از کلمه کلیدی class صورت می‌گیرد. سینتکس تعریف کلاس در زبان جاوا به صورت زیر است.

1class <class-name>
2
3{
4
5         [data members]
6
7         [method];
8
9}

با توجه به قطعه کد ارائه شده در بالا برای تعریف کلاس در زبان جاوا ابتدا کلمه کلیدی class و بعد از آن نام کلاس قرار می‌گیرد. سپس، درون بدنه کلاس اعضای داده و متدهای مربوط به آن تعریف می‌شوند. در ادامه مثالی از پیاده‌سازی کلاس در زبان جاوا آورده شده است.

1class MyClass
2{
3       int x = 5;         //data member;
4       void fun()  //
5       {
6              System.out.println("This is method");
7       }
8}

در مثال بالا کلاس MyClass

 پیاده‌سازی شده است که متغیر x

 به عنوان عضو داده و تابع fun()

 به عنوان متد مربوط به این کلاس مشخص شده‌اند.

منظور از شی در ساختار کلاس چیست؟

شی نیز همانند کلاس یک از مفاهیم اساسی موجود در برنامه نویسی شی‌گرا است. در واقع، اشیا نمونه‌هایی پیاده‌سازی شده از کلاس هستند که این موجودیت‌ها هر کدام ویژگی و رفتار مشخصی نیز دارند.

برای درک بهتر مفهوم شی در کلاس نمونه‌هایی همچون ماشین، گوشی موبایل، گربه و سایر موارد را در دنیای واقعی در نظر بگیرید. به عنوان مثال، ماشین به عنوان یک شی دارای ویژگی‌هایی همچون رنگ، مدل، حداکثر سرعت، نام و سایر موارد دیگر است. همچنین، امکان تعریف رفتارهایی همچون در حال حرکت بودن، ترمز گرفتن و سایر موارد برای این شی وجود دارد.

چگونه می‌توان یک شی از کلاس جاوا ساخت؟

با استفاده از کلمه کلیدی new می‌توان یک شی از کلاس جاوا پیاده‌سازی کرد. سینتکس ایجاد شی از کلاس جاوا به صورت زیر است.

1<class-name> [object-name] = new <class-default-conetructor>
2

با توجه به سینتکس ارائه شده در بالا برای ساخت شی از کلاس در جاوا ابتدا باید نام کلاس و سپس نام شی را قرار داد. در ادامه نیز بعد از علامت تساوی کلمه کلیدی new و نام تابع سازنده کلاس قرار می‌گیرد.

منظور از اعضای داده‌ کلاس در جاوا چیست؟

اعضای داده کلاس نشان دهنده ویژگی‌ها و صفات شی ساخته شده از کلاس هستند و در اصطلاح به آن‌ها فیلدهای کلاس می‌گویند. در واقع، اعضای داده کلاس با هر مرتبه ایجاد شی از کلاس ایجاد می‌شوند و فضایی از حافظه به آن‌ها تخصیص داده می‌شود. اعضای داده یا فیلدهای کلاس به منظور ذخیره‌سازی مقادیر مرتبط با شی ساخته شده از کلاس مورد استفاده قرار می‌گیرند. سینتکس تعریف عضو داده برای کلاس در جاوا به صورت زیر است.

1class DataMember
2{
3   int v1,v2,v3;
4   float f1,f2;
5}

در مثال بالا متغیرهای v1

 ، v2

 و v3

 به عنوان عضو داده کلاس از نوع عدد صحیح تعیین شده‌اند. همچنین، متغیرهای f1

 و f2

 از نوع عدد اعشاری به عنوان عضوهای داده‌ دیگر کلاس تعریف شده‌اند.

یادگیری کلاس در جاوا با فرادرس

تصویر فیلم آموزش جاوا فرادرس
برای دسترسی به فیلم آموزش جاوا، روی تصویر کلیک کنید.

برای شروع، ابتدا باید مفهوم کلاس در زبان برنامه‌نویسی جاوا را درک کنید. کلاس در جاوا یک الگوی قابل استفاده است که به شما اجازه می‌دهد تا شیء‌ ایجاد کنید و ویژگی‌ها و عملکردهای آن‌ها را تعریف کنید. پس از درک مفهوم، می‌توانید با مطالعه پایه و اساس برنامه‌نویسی شیء‌گرا در جاوا آشنا شوید که شامل مفاهیمی مانند انتزاع، وراثت، پلی‌مورفیسم و یکپارچگی است. بعد از آشنایی با مفاهیم اولیه، می‌توانید به ایجاد کلاس‌های ساده در جاوا بپردازید و ویژگی‌ها و عملکردهای آن‌ها را تعریف کنید. این شامل ایجاد فیلدها، متدها، و سازنده‌ها در کلاس‌ها می‌شود. سپس، می‌توانید با مفاهیم پیشرفته‌تری مانند کلاس‌های abstract و interface آشنا شوید و از این امکانات برای طراحی ساختارهای پیچیده‌تر استفاده کنید. برای شروع، می‌توانید از فیلم آموزش رایگان جاوا فرادرس استفاده کنید که لینک آن در زیر آورده شده است:

همچنین، اگر می‌خواهید برنامه‌نویسی جاوا را به طور کامل یاد بگیرید و مثال‌ها و تمرینات مختلف آن را بررسی کنید، پیشنهاد می‌کنید از فیلم آموزش برنامه نویسی جاوا کمک بگیرید که لینک آن نیز در پایین آورده شده است.

فراخوانی کلاس در جاوا

یکی از سوالات پرتکرار برای افراد تازه کار این است که نحوه فراخوانی کلاس در جاوا چیست و چگونه می‌توان بعد از تعریف کلاس آن را در برنامه فراخوانی کرد. در پاسخ به این سوال باید عنوان کرد که کلاس در جاوا فراخوانی نمی‌شود.

به زبان ساده کلاس تنها طرح و نقشه ساخت شی از کلاس را مشخص می‌کند. در حقیقت بعد از تعریف کلاس باید اعضای داده و متدهای کلاس را فراخوانی کرد. بعد از ایجاد شی از کلاس می‌توان با استفاده از عملگر نقطه .

 به اعضای داده و متدهای موجود در کلاس دسترسی داشت. قطعه کد زیر این مسئله را به خوبی نشان می‌دهد.

1class Car
2
3{
4
5    public int speed;
6
7    public int currentGear;
8
9    public int calculateDistance(int time){
10
11           return speed * time;
12
13     }
14
15}

در مثال بالا کلاس Car

 به همراه متدها و اعضای داده تعریف شده است. در ادامه با ایجاد شی نمونه از این کلاس می‌توان متدها و اعضای داده موجود در آن را فراخوانی کرد.

1Car myCar = new Car(); //car object created
2
3myCar.speed = 75; //accessing the speed using the myCar object
4
5int distanceTravelled = myCar.calculateDistance (2); // accessing the calculateSpeed method using the mycar object.

در مثال بالا شی myCar

 با استفاده از کلمه کلیدی new از کلاس Car

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

۳ مفهوم اساسی ساخت کلاس در جاوا چیست؟

کلاس‌ها در جاوا با ارائه طرحی اولیه از ساخت شی کمک بسیاری به حل مسائل و مشکلات پیچیده موجود در برنامه می‌کنند. دست برنامه‌نویسان نیز در تعیین مشخصات کلاس و متدهای موجود در آن کاملاً باز است.

بعد از آشنایی با نحوه ساخت کلاس در این بخش به این سوال پاسخ داده خواهد شد که مفاهیم اساسی ساخت کلاس در جاوا چیست. ۳ مفهوم اساسی موجود در کلاس به شرح زیر است.

  • متغیرهای کلاس در جاوا
  • تابع سازنده کلاس در جاوا
  • متدهای کلاس در جاوا

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

منظور از متغیرهای کلاس در جاوا چیست؟

متغیرها مکانی نام‌گذاری شده در حافظه کامپیوتر هستند که به منظور ذخیره‌سازی مقادیر مورد نیاز برنامه مورد استفاده قرار می‌گیرند. به زبان ساده‌تر در زمان ذخیره‌سازی مقداری با نام مشخص فضایی را در حافظه کامپیوتر رزرو می‌کند که متغیر نامیده می‌شود. متغیر در برنامه می‌تواند دارای هر مقداری باشد. سینتکس تعریف متغیر در جاوا به صورت زیر است.

1<access specifier > < data type > < variable name > = < value > ;

با توجه به سینتکس ارائه شده در بالا برای تعریف متغیر در جاوا به ترتیب سطح دسترسی متغیر، نوع داده‌ای و نام متغیر باید تعیین شود. البته در تعریف بالا قرار دادن سطح دسترسی برای متغیر اختیاری است. قطعه کد زیر چند مثال از تعریف متغیر در جاوا را نشان می‌دهد.

1int x ;     (int is a data type and x is a variable name).
2int y;
3int x , y;
4int x = 4 , y = 5;
5byte p = 65;
6double pi = 3.1415;
7char q = ‘s’ ;

در مثال بالا چندین متغیر با نوع‌های داده‌ای مختلف تعریف شده‌اند. به طور کلی در زبان جاوا امکان استفاده از ۳ نوع متغیر وجود دارد.

  • «متغیر محلی» (Local Variable)
  • «متغیر نمونه» (Instance Variable)
  • «متغیر ایستا» (Static Variable)

در ادامه این بخش هر کدام از متغیرهای ارائه شده در بالا توضیح داده شده است.

منظور از متغیر محلی در جاوا چیست؟

در زبان جاوا متغیرهای تعریف شده درون بدنه متدها، توابع سازنده و بلوک‌های کد به عنوان متغیر محلی شناخته می‌شوند. متغیرهای محلی در جاوا بعد از ایجاد متد، تابع سازنده و بلوک‌های کد ساخته می‌شوند. در نتیجه، متغیر محلی برای کلاس‌ قابل مشاهده نیست و کلاس به این نوع متغیر دسترسی ندارد. در ادامه، مهم‌ترین نکات در خصوص متغیرهای محلی در جاوا آورده شده است.

  • متغیرهای محلی بعد از اعلان درون بدنه متد، تابع سازنده و بلوک کد ساخته می‌شوند و با اتمام اجرای ساختار مورد نظر نیز حذف می‌شوند.
  • امکان تعیین سطح دسترسی برای متغیرهای محلی وجود ندارد.
  • محدوده استفاده از متغیرهای محلی درون ساختار یا بلوک کد تعریف شده است.
  • امکان تعیین مقدار پیش‌فرض برای متغیرهای محلی وجود ندارد و این متغیرها قبل از اولین استفاده باید مقداردهی شوند.

قطعه کد زیر نحوه استفاده از متغیرهای محلی در جاوا را نشان می‌دهد.

1public class LocalVariableExm {
2    void message() {     //it is a method.
3        int p;                     // declaration of Local Variable.
4        int x = 10;      // declaration and initialization of Local Variable.
5    }
6}

در مثال بالا دو متغیر محلی p

 و x

 درون متد message()

 از کلاس LocalVariableExm

 تعریف شده‌اند.

منظور از متغیر نمونه در جاوا چیست؟

متغیر نمونه در جاوا باید در داخل کلاس ولی خارج از متد، تابع سازنده و بلوک کد تعریف شود. این نوع متغیر توسط تمام متدهای موجود در کلاس قابل دسترسی است. متغیر نمونه در زمان ساخت شی از کلاس ایجاد می‌شود. در زمان ساخت شی از کلاس متغیر نمونه در «حافظه پشته» (Heap Memory) قرار می‌گیرد. فراخوانی این متغیر توسط شی ساخته شده از کلاس انجام می‌شود. همچنین، مقدار پیش‌فرض این متغیر 0 خواهد بود. قطعه کد زیر نحوه تعریف متغیر نمونه در جاوا را نشان می‌دهد.

1public class InstanceVariableExm {
2    int a;      // Declaration of instance variable.
3    int b = 10;  // Declaration and initialization of instance variable.
4    void message() {
5    }
6}

در مثال بالا متغیرهای a

 و b

 درون بدنه کلاس و خارج از متدهای آن تعریف شده‌اند. بنابراین، این متغیرها به عنوان متغیر نمونه در نظر گرفته می‌شوند.

منظور از متغیر ایستا در جاوا چیست؟

متغیرهای ایستا یکی از مهم‌ترین و پرکاربردترین نوع‌های متغیر هستند. برای پیاده‌سازی این نوع متغیر باید از کلمه کلیدی static استفاده کرد. متغیر ایستا درون بدنه کلاس و خارج از متدها، تابع سازنده و بلوک‌های کد موجود در کلاس تعریف می‌شود. متغیر ایستا متعلق به کلاس است و ارتباطی با شی ساخته شده از کلاس ندارد. به زبان ساده بدون ایجاد شی یا نمونه از کلاس می‌توان به متغیرهای ایستا دسترسی داشت. این متغیر درون «حافظه ایستا» (Static Memory) ذخیره می‌شود. مقدار پیش‌فرض در نظر گرفته شده برای این متغیر نیز عدد 0 است. قطعه کد زیر نحوه تعریف متغیر ایستا در جاوا را نشان می‌دهد.

1public class StaticVariableExm {
2    int p;
3    static int q = 10;     // Static Variable with initialization
4    static int r;              // Static Variable declaration
5    void message() {
6    }
7}

در مثال بالا متغیرهای q

 و r

 با استفاده از کلمه کلیدی static از نوع ایستا تعریف شده‌اند.

تابع سازنده کلاس در جاوا چیست؟

تابع سازنده در نقش یک متد ویژه برای کلاس در جاوا است. این تابع به منظور مقداردهی اولیه شی ساخته شده از کلاس مورد استفاده قرار می‌گیرد. تابع سازنده یکی از عناصر ضروری برای هر کلاس جاوا محسوب می‌شود. در صورت عدم تعریف تابع سازنده برای کلاس توسط برنامه‌نویس کامپایلر جاوا به صورت خودکار یک تابع سازنده پیش‌فرض را برای کلاس ایجاد می‌کند. در ادامه مهم‌ترین نکات در خصوص پیاده‌سازی تابع سازنده کلاس در جاوا آورده شده است.

  • تابع سازنده باید هم‌نام با کلاس جاوا باشد.
  • تابع سازنده مقداری را برگشت نمی‌دهد.
  • نوع برگشتی برای تابع سازنده نباید تعیین شود.
  • تابع سازنده در زمان ساخت شی اجرا می‌شود.

توابع سازنده در زبان جاوا به ۳ دسته اصلی تقسیم می‌شوند. در ادامه این ۳ دسته اصلی آورده شده است.

در ادامه این بخش از نوشته سعی شده است تا انواع توابع سازنده موجود در جاوا به طور کامل همراه با مثال توضیح داده شود.

سازنده پیش‌فرض در جاوا

سازنده پیش‌فرض در جاوا پارامتر ورودی ندارد و در صورت عدم تعریف توسط برنامه‌نویس کامپایلر جاوا به صورت خودکار سازنده پیش‌فرض را ایجاد می‌کند. سینتکس پیاده‌سازی سازنده پیش‌فرض در جاوا به صورت زیر است.

برای تعریف سازنده پیش‌فرض باید تابعی هم‌نام با کلاس و بدون پارامتر ورودی و مقدار بازگشتی ایجاد کرد. قطعه کد زیر نحوه پیاده‌سازی سازنده پیش‌فرض کلاس در جاوا را نشان می‌دهد.

1public class DefaultConstructor{
2    DefaultConstructor() {
3        System.out.println("This is default constructor example");
4    }
5    public static void main(String args[]) {
6        DefaultConstructor d = new DefaultConstructor();
7    }
8}

در مثال بالا با توجه به تعریف تابع سازنده همزمان با ایجاد شی جدید از کلاس تابع سازنده کلاس اجرا می‌شود. با توجه به دستورات موجود در بدنه تابع سازنده خروجی برنامه به صورت زیر خواهد بود.

This is default constructor example

آیا سازنده پیش‌فرض مقادیری را برای اشیا کلاس در نظر می‌گیرد؟

در صورت عدم تعریف تابع سازنده کامپایلر جاوا به صورت خودکار سازنده پیش‌فرض را برای کلاس ایجاد می‌کند. همچنین، این تابع سازنده مقداردهی اشیا پیاده‌سازی شده از کلاس را نیز انجام می‌دهد. به صورت پیش‌فرض سازنده مقادیر 0 یا «تهی» (Null) را برای شی ساخته شده از کلاس در نظر می‌گیرد. برای درک بهتر این موضوع قطعه کد زیر آورده شده است.

1public class DefaultConstructor2 {
2    String name;
3    String number;
4    void display() {
5        System.out.println(name + "," + number);
6    }
7    public static void main(String args[]) {
8        DefaultConstructor2 t = new DefaultConstructor2();
9        t.display();
10    }
11}

در مثال بالا با توجه به عدم تعریف تابع سازنده برای کلاس، کامپایلر جاوا به صورت خودکار در زمان ایجاد شی سازنده پیش‌فرض را ایجاد می‌کند. در نتیجه، مقادیر پیش‌فرض برای مشخصه‌های شی ایجاد شده از کلاس در نظر گرفته می‎‌شود. خروجی حاصل از اجرای قطعه کد بالا به صورت زیر خواهد بود.

null,null

سازنده پارامتری در جاوا

تابع سازنده کلاس در صورت داشتن پارامتر ورودی سازنده پارامتری نامیده می‌شود. از سازنده پارامتری در جاوا برای تخصیص مقادیر مختلف به اشیا ساخته شده از کلاس می‌توان استفاده کرد. قطعه کد زیر مثال بسیار خوبی در خصوص پیاده‌سازی سازنده پارامتری در جاوا است.

1public class ParameterizedConstructor {
2    String name;
3    int salary;
4    ParameterizedConstructor(String n, int s) {
5        name = n;
6        salary = s;
7    }
8    void display() {
9        System.out.println("Employee name is: " + name + "," + "and salary is : " + salary);
10    }
11    public static void main(String args[]) {
12        ParameterizedConstructor e = new ParameterizedConstructor("Rohan", 25000);
13        e.display();
14    }
15}

در مثال بالا تابع سازنده دارای ۲ پارامتر ورودی است که این پارامترها به منظور تخصیص مقدار به مشخصه‌های شی ساخته شده از کلاس مورد استفاده قرار می‌گیرند. خروجی حاصل از اجرای قطعه کد بالا به صورت زیر خواهد بود.

Employee name is: Rohan,and salary is : 25000

سازنده Copy در جاوا

سازنده Copy در جاوا نوعی خاص از توابع سازنده است که شی از همان کلاس را به عنوان پارامتر ورودی دریافت می‌کند. این سازنده به منظور ایجاد یک کپی از شی مورد استفاده قرار می‌گیرد. در حقیقت، سازنده Copy در جاوا یک شی را با استفاده از شی دیگری از همان کلاس ایجاد می‌کند. این تابع سازنده برای ساخت اشیا پیچیده کاربرد دارد که دارای چندین فیلد هستند. قطعه کد زیر نحوه پیاده‌سازی سازنده Copy در جاوا را نشان می‌دهد.

1public class Employee {
2  private int id;
3  private String name;
4  private Date startDate;
5
6public Employee(Employee employee) {
7  this.id = employee.id;
8  this.name = employee.name;
9  this.startDate = new Date(employee.startDate.getTime());
10  }
11}

در مثال بالا تابع سازنده Employee

 از نوع سازنده Copy در جاوا تعریف شده است که یک شی از کلاس را به عنوان پارامتر ورودی دریافت می‌کند. پیش‌تر در مطلب زیر از مجله فرادرس سازنده Copy در جاوا به همراه مثال به طور کامل مورد بررسی قرار گرفته است.

منظور از متدهای کلاس در جاوا چیست؟

در پاسخ به این سوال که منظور از متدهای کلاس در جاوا چیست باید عنوان کرد که متدها عملکردی مشابه با توابع دارند. از متدها به منظور انجام عملیاتی خاص استفاده می‌شود. در واقع، یک متد بلوکی از کد است که تنها در صورت فراخوانی اجرا خواهد شد. امکان ارسال داده‌های مختلف تحت عنوان پارامتر به متدها وجود دارد.

برنامه‌نویس نشسته پشت لپ تاپش و در حال تعریف متد در برنامه است

متدهای کلاس یک مرتبه پیاده‌سازی می‌شوند و چندین مرتبه قابلیت استفاده دارند. بنابراین، این مورد باعث کاهش کدهای برنامه استفاده می‌شود. متدها باید درون بدنه کلاس تعریف شوند. در ادامه سینتکس تعریف متد در جاوا آورده شده است.

1 class <class-name> {
2
3    modifier dataType methodName () {
4
5         //block of code to be executed     }
6 
7}

با توجه به کد ارائه شده در بالا برای تعریف متد درون بدنه کلاس باید به ترتیب سطح دسترسی متد، نوع بازگشتی و نام متد تعیین شوند. قطعه کد زیر مثالی از پیاده‌سازی متد در جاوا را نشان می‌دهد.

1public class MethodExample {
2    static void myMethod() {
3        System.out.println("Hello World!");
4    }
5    public static void main(String[] args) {
6        myMethod();
7    }
8}

در مثال بالا دو متد myMethod()

 و main()

 درون بدنه کلاس MethodExample

 تعریف شده‌اند. خروجی حاصل از اجرای قطعه کد بالا نیز به صورت زیر خواهد بود.

Hello World!

متدهای با پارامتر در جاوا

پارامترها مقادیری هستند که امکان ارسال آن‌ها به متدهای جاوا وجود دارد. ارسال پارامترها به متدهای جاوا در زمان فراخوانی متد صورت می‌گیرد و متد نیز از این پارامترها همانند یک متغیر محلی استفاده می‌کند. برای دسته‌بندی مقادیر ارسالی به متد در جاوا دو مفهوم زیر تعریف شده است.

  • پارامتر: پارامترها در زمان تعریف متد به همراه نوع داده‌ای مشخص می‌شوند.
  • آرگومان: مقادیر واقعی هستند که در زمان فراخوانی به متد ارسال می‌شوند.

قطعه کد زیر نحوه تعریف پارامتر و ارسال آرگومان به متدهای کلاس در جاوا را نشان می‌دهد.

1public class ParameterizedMethodExample {
2    static void myMethod(String name) {
3        System.out.println(name);
4    }
5    public static void main(String[] args) {
6        myMethod("CsharpCorner");
7    }
8}

خروجی حاصل از اجرای قطعه کد بالا به صورت زیر خواهد بود.

CsharpCorner

منظور از سطوح دسترسی به اعضای کلاس در جاوا چیست؟

کلاس‌ در جاوا طرح یا نقشه ساخت شی را مشخص می‌کند. شی ساخته شده به کمک کلاس نیز از ۲ بخش اصلی تحت عنوان فیلد و متد تشکیل می‌شود. فیلدها یا اعضای داده ویژگی‌ها و صفات شی را مشخص می‌کنند و متدها نیز رفتار شی را تعیین می‌کنند.

تعیین «سطوح دسترسی» (Access Modifiers) مفهوم مهم دیگری است که در کار با کلاس‌ها باید با آن آشنایی داشت. سطوح دسترسی محدوده دسترسی به کلاس جاوا، اعضای داده، متدها و سازنده کلاس را مشخص می‌کنند. امکان تعریف ۴ سطح دسترسی برای کلاس‌های جاوا وجود دارد. سطوح دسترسی موجود در جاوا به شرح زیر هستند.

  • public
  • private
  • protected
  • default

در ادامه این بخش به این سوال پاسخ داده خواهد شد که کاربرد هر کدام از سطوح دسترسی کلاس در جاوا چیست و هر کدام چگونه تعریف می‌شوند.

سطح دسترسی public

سطح دسترسی public امکان دسترسی به عناصر مورد نظر کلاس را در تمام برنامه فراهم می‌کند. این سطح دسترسی جامع‌ترین محدوده دسترسی را در بین تمام سطوح دسترسی دارد. متغیرها، متدها و توابع سازنده تعریف شده از نوع public در کلاس جاوا برای تمام کلاس‌های موجود در برنامه قابل مشاهده هستند، حتی کلاس‌هایی که در یک بسته قرار ندارند.

برنامه‌نویس خوشحال پشت کامپیوتر شخصی خود نشسته و در حال کدنویسی است - کلاس در جاوا چیست

قطعه کد زیر نحوه تعیین سطح دسترسی public در برنامه جاوا را نشان می‌دهد.

1public class PublicExample {
2    public void show() {
3        System.out.println("Public access modifier example");
4    }
5}

در مثال بالا کلاس PublicExample

 با سطح دسترسی public در برنامه تعریف شده است. درون این کلاس متد show()

 نیز با سطح دسترسی public قرار داده شده است. قطعه کد زیر نحوه دسترسی به متد این کلاس را نشان می‌دهد.

1public class PublicAccess {
2        public static void main(String args[])
3        {
4            PublicExample obj = new PublicExample();
5            obj.show();
6        }
7    }

در مثال بالا درون کلاس دیگری از برنامه با نام PublicAccess

 همزمان یک شی از کلاس PublicExample

 با سطح دسترسی public ایجاد شده است که متد موجود در این کلاس نیز توسط این شی فراخوانی شده است. خروجی حاصل از اجرای قطعه کد بالا به صورت زیر خواهد بود.

Public access modifier example

سطح دسترسی private

سطح دسترسی private امکان دسترسی به عناصر موجود در کلاس را تنها از داخل کلاس فراهم می‌کند. با تعیین این سطح دسترسی امکان دسترسی به عناصر خارج از کلاس وجود ندارد. اعضای داده، متدها و توابع سازنده کلاس‌های private به شدت کنترل می‌شوند. امکان دسترسی به عناصر تعیین شده از نوع private به هیچ عنوان خارج از کلاس وجود ندارد.

نکته مهم دیگر در خصوص سطح دسترسی private این است که تنها کلاس‌های «تودرتو» (Nested) جاوا می‌توانند از نوع private تعریف شوند. قطعه کد زیر نحوه استفاده از سطح دسترسی private در کلاس‌های جاوا را نشان می‌دهد.

1public class PrivateExample{
2    private void run() {
3        System.out.println("Scooter is running");
4    }
5}

در مثال بالا متد run()

 از کلاس PrivateExample

 از نوع private تعریف شده است. بنابراین، امکان دسترسی به این متد تنها از درون این کلاس وجود دارد. قطعه کد زیر نحوه دسترسی به این متد را نشان می‌دهد.

1public class PrivateAccess{
2        public static void main(String args[]) {
3            PrivateExample s = new PrivateExample();
4            s.run();  //compile time error
5        }
6    }

در مثال بالا شی s

 از کلاس PrivateExample

 ایجاد شده است. در ادامه این شی متد run()

 از این کلاس را فراخوانی کرده است که با توجه private بودن این متد برنامه با خطا مواجه خواهد شد. خروجی حاصل از اجرای قطعه کد بالا به صورت زیر است.

Error: (5,10) java:run() has private access in ObjectCreationExample

سطح دسترسی protected

با تعیین سطح دسترسی protected امکان دسترسی به عناصر از داخل و خارج بدنه کلاس وجود دارد اما این عناصر تنها از طریق وراثت قابل دسترسی هستند. سطح دسترسی protected را می‌توان بر روی متغیرها، متدها و توابع سازنده کلاس اعمال کرد، اما امکان پیاده‌سازی این سطح دسترسی بر روی کلاس‌های جاوا وجود ندارد. متغیرها، متدها و توابع سازنده درون کلاس والد مشخص می‌شوند و توسط کلاس فرزند قابل دسترسی هستند.

قطعه کد زیر پیاده‌سازی سطح دسترسی protected در کلاس جاوا را نشان می‌دهد.

1package pack1;
2public class ProtectedExample{
3    protected void display() {
4        System.out.println("Protected access modifier example");
5    }
6}

در مثال بالا متد display()

 از کلاس ProtectedExample

 با سطح دسترسی protected مشخص شده است. در ادامه درون بسته‌ای دیگر از برنامه کلاس ProtectedAcces

 از کلاس ProtectedExample

 مشتق شده است. قطعه کد زیر این مسئله را نشان می‌دهد.

1package pack2;
2import pack1.*;
3public class ProtectedAcces extends ProtectedExample{
4    public static void main(String args[]) {
5        ProtectedAccess p = new ProtectedAccess();
6        p.display();
7    }
8}

در مثال بالا شی p

 از کلاس ProtectedAccess

 ایجاد شده است و متد display()

 توسط این شی فراخوانی شده است. با توجه به توضیحات ارائه شده در بالا با توجه به مشتق شدن کلاس ProtectedAccess

 از کلاس ProtectedExample

 امکان دسترسی به متدهای این کلاس توسط کلاس فرزند وجود دارد. خروجی حاصل از اجرای قطعه کد بالا به صورت زیر خواهد بود.

Protected access modifier example

سطح دسترسی Default

در صورت عدم تعیین سطح دسترسی کلاس در جاوا به طور پیش‌فرض سطح دسترسی Default برای کلاس در نظر گرفته می‌شود. با تعیین این سطح دسترسی امکان دسترسی به کلاس تنها از طریق کلاس‌های موجود در همان پکیج وجود دارد. بنابراین، با تعیین سطح دسترسی Default کلاس‌ها، متغیرها، متدها و توابع سازنده تنها از طریق کلاس‌های موجود در همان پکیج قابل دسترسی هستند.

ذکر این نکته نیز ضروری است که سطح دسترسی Default برای متغیرها و متدهای موجود درون اینترفیس‌های جاوا قابل استفاده نیست. قطعه کد زیر مثالی در خصوص تعیین سطح دسترسی Default در جاوا را نشان می‌دهد.

1package pack1;
2 class DefaultExample {
3    void msg() {
4        System.out.println("Default access modifier example");
5    }
6}

در مثال بالا کلاس DefaultExample

 درون پکیج pack1

 تعریف شده است. با توجه به عدم تعیین سطح دسترسی برای این کلاس سطح دسترسی Default برای آن در نظر گرفته می‌شود. در ادامه از طریق کلاس DefaultAccess

 در پکیج pack2

 قصد دسترسی به این کلاس را داریم. قطعه کد زیر این مسئله را نشان می‌دهد.

1package pack2;
2import pack1.*;
3 class DefaultAccess{
4        public static void main(String args[]) {
5            DefaultClass d = new DefaultClass();// compile time error
6            r.msg(); // compile time error
7        }
8    }

با توجه به عدم امکان دسترسی به کلاس‌های Default از طریق کلاس‌های موجود در سایر پکیج‌های برنامه در نتیجه اجرای برنامه فوق با خطا مواجه خواهد شد. خروجی حاصل از اجرای برنامه بالا به صورت زیر خواهد بود.

Error:(9,10) java: msg() is not public in pack1.DefaultExample; cannot be accessed from outside package

انواع کلاس های داخلی در جاوا

بعد از آشنایی با مفاهیم پایه تعریف و فراخوانی کلاس در جاوا در این بخش از نوشته به این سوال پاسخ داده خواهد شد که انواع کلاس در جاوا چیست و هر کدام چه کاربردی دارند.

در یک دسته‌بندی اولیه کلاس‌های جاوا را می‌توان به ۴ دسته اصلی تقسیم کرد. ۴ دسته اصلی کلاس‌های جاوا به شرح زیر است.

  • کلاس Abstract در جاوا
  • کلاس Nested در جاوا
  • کلاس Final در جاوا
  • کلاس Singleton در جاوا

در ادامه این بخش هر کدام از کلاس‌های جاوا اشاره شده در بالا مورد بررسی قرار خواهد گرفت.

کلاس Abstract در جاوا

برای درک بهتر «کلاس‌ انتزاعی» (Abstract Class) در جاوا ابتدا باید با مفهوم انتزاع آشنایی کامل پیدا کرد. در زبان برنامه نویسی جاوا «انتزاع» (Abstraction) به فرایندی اشاره دارد که در طی آن جزئیات پیاده‌سازی از کاربر مخفی می‌ماند و تنها عملکرد مورد نیاز در اختیار او قرار می‌گیرد. به عنوان مثال، از کنترل تلویزیون برای تغییر کانال‌ها، افزایش یا کاهش صدا و موارد دیگر استفاده می‌کنیم، ولی از نحوه عملکرد کلیدها و فرایند داخلی آن هیچ‌گونه اطلاعی نداریم. در این مثال می‌توان انتزاع را مشاهده کرد، زیرا جزئیات پیاده‌سازی از کاربر مخفی شده است.

فردی نشسته بر روی مبل و در حال تغییر کانال‌های تلویزیون با کنترل است - کلاس در جاوا چیست

منظور از کلاس Abstract در جاوا چیست؟

با توجه به مفهوم انتزاع کلاس‌های Abstract در جاوا آن دسته کلاس‌هایی هستند که شی از آن‌ها ساخته نمی‌شود. هدف اصلی از ایجاد کلاس‌های انتزاعی در جاوا فراهم کردن سازوکاری برای اشتراک‌گذاری ویژگی‌های کلی بین چندین زیر کلاس است. بنابراین، کلاس‌های انتزاعی در جاوا به کاهش پیچیدگی کد کمک می‌کنند.

نحوه تعریف کلاس Abstract در جاوا چیست؟

برای تعریف کلاس Abstract در جاوا کافی است تا از کلمه کلیدی abstract قبل از نام کلاس استفاده شود. کلاس Abstract تنها موارد ضروری را به کاربر نشان می‌دهد و سایر فرایندهای داخلی را از کاربر مخفی می‌کند. در ادامه فهرستی از مهم‌ترین مشخصات کلاس Abstract در جاوا آورده شده است.

  • کلاس Abstract در جاوا می‌تواند دارای متدهای انتزاعی و غیرانتزاعی باشد.
  • اگر کلاسی دارای متد انتزاعی باشد، آنگاه این کلاس حتماً از نوع Abstract خواهد بود.
  • برای استفاده از کلاس انتزاعی در جاوا باید آن را گسترش داد و متدهای موجود در آن را پیاده‌سازی کرد.
  • در صورت گسترش کلاس انتزاعی در جاوا باید برای تمام متدهای موجود در آن پیاده‌سازی لازم را ارائه کرد.

قطعه کد زیر نحوه پیاده‌سازی کلاس Abstract در جاوا را نشان می‌دهد.

1abstract class Employee {
2    abstract void work();
3}

در مثال بالا کلاس Employee

 از نوع انتزاعی با استفاده از کلمه کلیدی abstract تعریف شده است. همچنین، درون بدنه این کلاس متد work()

 از نوع انتزاعی پیاده‌سازی شده است. با توجه به موارد ذکر شده در بالا کلاس‌های انتزاعی برای ساخت شی مورد استفاده قرار نمی‌گیرند. بنابراین، باید کلاس‌های دیگر را از این کلاس مشتق کرد. در قطعه کد زیر کلاس WomanEmployee

 از کلاس Employee

 مشتق شده است.

1public class WomanEmployee extends Employee {
2    void work() {
3            System.out.println("Abstract class Example");
4        }
5        public static void main(String args[]) {
6            WomanEmployee p = new WomanEmployee();
7            p.work();
8        }
9    }

با توجه به مشتق شدن کلاس WomanEmployee

 از کلاس Employee

 امکان دسترسی به متدهای موجود در کلاس والد برای اشیا ساخته شده از کلاس WomanEmployee

 وجود دارد. خروجی حاصل از اجرای قطعه کد بالا به صورت زیر خواهد بود.

Abstract class Example

کلاس های تو در تو در جاوا

در زبان برنامه نویسی جاوا امکان تعریف یک کلاس درون کلاسی دیگر وجود دارد که به این نوع کلاس‌ها در اصطلاح «تو در تو» (Nested) گفته می‌شود. از کلاس‌های تو در تو در جاوا برای گروه‌بندی کلاس و «اینترفیس» (Interface) می‌توان استفاده کرد.

برنامه‌نویس در حال تحقیق در مورد کلاس‌های تو در تو در جاوا است

استفاده از کلاس‌های تو در تو خوانایی و قابلیت نگهداری کد را افزایش می‌دهد. همچنین، این کلاس‌ها امکان دسترسی به تمام اعضای کلاس بیرونی را نیز فراهم می‌کنند. سینتکس پیاده‌سازی کلاس تو در تو در جاوا به صورت زیر است.

1class OuterClass{
2
3   ...... 
4
5   class InnerClass{ 
6
7         //Nested Java class
8
9    }  
10
11} 

مزایای استفاده از کلاس Nested در جاوا چیست؟

امکان تعریف کلاس به صورت تو در تو در جاوا مزایای زیادی به همراه دارد. در ادامه فهرستی از مهم‌ترین مزایای تعریف کلاس تو در تو در جاوا ارائه شده است.

  • کلاس‌های تو در تو نوعی خاصی از رابطه بین کلاس‌ها را نشان می‌دهند که در این رابطه کلاس‌های تو در تو می‌توانند به تمام اعضای کلاس بیرونی حتی اعضای خصوصی آن نیز دسترسی داشته باشند.
  • استفاده از کلاس‌های تو در تو در جاوا خوانایی و قابلیت نگهداری کد را افزایش می‌دهد، زیرا این کلاس‌ها به گروه‌بندی منطقی کلاس‌های موجود در برنامه کمک می‌کنند.
  • کلاس‌های تو در تو به میزان کد بسیاری کمتری برای پیاده‌سازی نیاز دارند. در نتیجه، حجم کدهای مورد استفاده در برنامه نیز کاهش خواهد یافت.

انواع کلاس Nested در جاوا

یکی از سوالات رایج در خصوص کلاس‌های Nested در جاوا این است که انواع این کلاس در جاوا چیست و هر کدام چه کاربردی دارند. کلاس‌های Nested در جاوا به ۲ دسته اصلی تقسیم می‌شوند.

  • «کلاس‌های تو در تو استاتیک» (Static Nested Classes)
  • «کلاس‌های تو در تو غیر استاتیک» (Non-Static Nested Classes)

۲ دسته‌بندی ارائه شده در بالا برای کلاس‌های Nested خود به دسته‌های دیگری تقسیم می‌شود. در تصویر زیر تمام دسته‌ها و زیر مجموعه‌های کلاس‌ Nested در جاوا نشان داده شده است.

زیر مجموعه‌های کلاس Nested در زبان جاوا

برای مشاهده در ابعاد بزرگ‌تر روی تصویر کلیک کنید.

در ادامه این بخش از نوشته چند مورد از مهم‌ترین انواع کلاس Nested در جاوا مورد بررسی قرار خواهد گرفت.

منظور از کلاس Member inner در جاوا چیست؟

کلاس Member inner درون بدنه کلاسی دیگر و خارج از متدهای آن تعریف می‌شود. این کلاس در دسته کلاس‌های غیر استاتیک قرار می‌گیرد. پیاده‌سازی کلاس Member inner در جاوا بسیار آسان است. برای این منظور تنها کافی است تا کلاس مورد نظر در بدنه کلاسی دیگر تعریف شود. کلاس Member inner می‌تواند از نوع private تعیین شود که در این صورت امکان دسترسی به اشیا نمونه‌سازی شده از این کلاس از خارج کلاس وجود ندارد. سینتکس پیاده‌سازی این کلاس به صورت زیر است.

1class Outer{
2
3     class Inner
4
5      {
6
7           // Member inner class 
8
9      } 
10
11} 

در مثال بالا کلاس Inner

 به عنوان کلاس Member inner درون بدنه کلاس Outer

 تعریف شده است. مثال زیر نیز نمونه کاملی از پیاده‌سازی این کلاس در جاوا را نشان می‌دهد.

1public class MemberClassExample {
2    private int data = 30;
3    class MemberClassInner {
4        void msg() {
5            System.out.println("data is " + data);
6        }
7    }
8    public static void main(String args[]) {
9        MemberClassExample obj = new MemberClassExample();
10        MemberClassExample.MemberClassInner in = obj.new MemberClassInner();
11        in.msg();
12    }
13}

خروجی حاصل از اجرای نمونه کد بالا به صورت زیر خواهد بود.

data is 30

در مثال ارائه شده در بالا متد msg()

 از کلاس MemberClassInner

 به عضو داده خصوصی کلاس خارجی یعنی کلاس MemberClassExample

 دسترسی دارد و مقدار این عضو داده را در خروجی برنامه چاپ می‌کند.

منظور از کلاس Anonymous در جاوا چیست؟

کلاس «بدون نام» (Anonymous) در جاوا درون بدنه سایر کلاس‌ها تعریف می‌شود. کلاس Anonymous در جاوا به منظور «بازنویسی» (Override) متدهای کلاس اصلی یا کلاس والد مورد استفاده قرار می‌گیرد. علاوه بر این، از این نوع کلاس برای بازنویسی متدهای موجود در اینترفیس نیز استفاده می‌شود.

قطعه کد زیر نحوه پیاده‌سازی کلاس Anonymous در جاوا را نشان می‌دهد.

1public class AnonoymousClassExample {
2    public static void main(String[] args) {
3        AnonoymousDemo a = new AnonoymousDemo() {
4            public void message() {
5                System.out.println("Anonymous Inner Class Example");
6            }
7        }; // anonymous class body closes here
8        //a contains an object of anonymous subclass of AnonoymousClassExample.
9        a.message();
10    }
11}
12class AnonoymousDemo {
13    public void message() {
14        System.out.println("Message");
15    }
16}

در مثال ارائه شده در بالا کلاس AnonoymousDemo

 متد message()

 از کلاس اصلی یعنی AnonoymousClassExample

 را پیاده‌سازی کرده است. خروجی حاصل از اجرای قطعه کد بالا به صورت زیر خواهد بود.

Anonymous Inner Class Example

منظور از کلاس Local inner در جاوا چیست؟

کلاس Local inner در جاوا به کلاسی گفته می‌شود که درون یکی از متدهای کلاسی اصلی پیاده‌سازی می‌شود. این کلاس تنها در محدوده همان متد قابل استفاده است. قطعه کد زیر نحوه پیاده‌سازی کلاس Local inner در جاوا را نشان می‌دهد.

1public class LocalInnerClassExample {
2    private int data = 30;
3    void display() {
4        class Local {
5            void msg() {
6                System.out.println(data);
7            }
8        }
9        Local l = new Local();
10        l.msg();
11    }
12    public static void main(String args[]) {
13        LocalInnerClassExample obj = new LocalInnerClassExample();
14        obj.display();
15    }
16}

در قطعه کد بالا کلاس Local

 از نوع Local inner درون بدنه متد display()

 از کلاس اصلی تعریف شده است. خروجی حاصل پس از اجرای قطعه کد بالا به صورت زیر خواهد بود.

30

کلاس Static Nested در جاوا چه کاربردی دارد؟

برای ساخت کلاس «استاتیک تو در تو» (Static Nested) در جاوا کافی است تا یک کلاس از نوع استاتیک را درون بدنه کلاسی دیگر تعریف کرد. کلاس Static Nested به متدهای و اعضای داده غیر استاتیک کلاس اصلی دسترسی ندارد. این کلاس تنها می‌تواند به متدها و اعضای داده استاتیک کلاس اصلی دسترسی داشته باشد. برای فراخوانی این کلاس در جاوا باید ابتدا نام کلاس اصلی یا والد قرار داده شود. قطعه کد زیر نحوه پیاده‌سازی کلاس Static Nested در جاوا را نشان می‌دهد.

1public class StaticNestedClassExample {
2    static int age = 30;
3    static class StaticClassAccess {
4        void display() {
5            System.out.println("Employee age is " + age);
6        }
7    }
8    public static void main(String args[]) {
9        StaticNestedClassExample.StaticClassAccess a = new StaticNestedClassExample.StaticClassAccess();
10        a.display();
11    }
12}

در مثال بالا کلاس StaticClassAccess

 از نوع Static Nested درون بدنه کلاس StaticNestedClassExample

 تعریف شده است. در ادامه خروجی قطعه کد بالا آورده شده است.

Employee age is 30

کلاس Final در جاوا

یکی دیگر از انواع کلاس‌های قابل تعریف در جاوا کلاس Final است. بر همین اساس، در این بخش به این سوال پاسخ داده خواهد شد که منظور از این کلاس در جاوا چیست و استفاده از این نوع کلاس چه مزایایی را به همراه خواهد داشت.

برنامه‌نویس در حال توضیح مفهوم کلاس final در جاوا به همکارانش است - کلاس در جاوا چیست

برای تعریف کلاس Final در جاوا باید از کلمه کلیدی final استفاده کرد. نکته‌ مهم در خصوص کلاس‌های Final در جاوا این است که امکان ارث‌بری یا گسترش این کلاس‌ها توسط هیچ کلاس دیگری وجود ندارد. همچنین، در صورت تعریف یک کلاس از نوع Final تمام متدهای موجود در آن نیز به صورت ضمنی از نوع Final اعلام می‌شوند. سینتکس تعریف کلاس Final در جاوا به صورت زیر است.

1final class <class-name>{
2
3       // code 
4
5} 

با توجه به سینتکس ارائه شده در بالا برای تعریف کلاس از نوع Final در جاوا تنها کافی است تا از کلمه کلیدی final در ابتدای تعریف کلاس استفاده کرد. قطعه کد زیر مثالی از تعریف کلاس Final در جاوا را نشان می‌دهد.

1final  class FinalClassExample {
2}
3class Manager extends FinalClassExample {  // Compile time error
4    void work() {
5        System.out.println("working hard");
6    }
7    public static void main(String args[]) {
8        Manager m1 = new Manager();
9        m1.work();
10    }
11}

در مثال بالا کلاس FinalClassExample

 از نوع Final تعریف شده است. در ادامه کلاس Manager

 از این کلاس مشتق شده است. بنابراین، با توجه به عدم امکان گسترش‌ کلاس‌های Final در جاوا برنامه با خطا مواجه خواهد شد. خروجی حاصل از اجرای قطعه کد بالا به صورت زیر خواهد بود.

Error:(5,23) java: cannot inherit from final FinalClassExample

کلاس Singleton در جاوا

Singleton یک دیزاین پترن در جاوا است که زمره الگوهای طراحی سازنده قرار می‌گیرد. این الگوی طراحی با ارائه کلاس Singleton در جاوا نمونه‌سازی از کلاس را در برنامه محدود می‌کند.

در برنامه نویسی شی‌گرا کلاس Singleton در هر زمان تنها ساخت یک شی از کلاس را امکان پذیر می‌کند. کلاس‌های Singleton دسترسی به منابع برنامه همچون اتصالات «پایگاه داده» (Database) و سوکت‌ها (Socket) را کنترل می‌کنند. هدف اصلی کلاس Singleton در جاوا ایجاد نمونه‌ای واحد از کلاس است که ایجاد آن در زمان اجرا هزینه‌ بسیار زیادی دارد. در نتیجه، با استراتژی Singleton می‌توان از یک شی چندین مرتبه استفاده کرد. اشیا پیاده‌سازی شده از کلاس Singleton عمدتاً «تغییرناپذیر» (immutable) هستند.

قوانین ساخت کلاس Singleton در جاوا چیست؟

برای پیاده‌سازی کلاس Singleton در جاوا باید برخی نکات را رعایت کرد. موارد مهم در ساخت کلاس Singleton به شرح زیر است.

  • تابع سازنده کلاس باید از نوع private باشد.
  • متغیری از نوع static در کلاس باید تعریف کرد.
  • متدی از نوع static برای برگرندان نمونه ساخته شده از کلاس باید تعریف کرد.

برای درک بهتر عملکرد کلاس Singleton در جاوا مثال زیر ارائه شده است.

1public class SingletonClassExample {
2    private static SingletonClassExample singleton = new SingletonClassExample();
3
4    public static SingletonClassExample getInstance() {
5        return singleton;
6    }
7
8    protected static void demoMethod() {
9        System.out.println("demoMethod for singleton");
10    }
11}

در مثال بالا کلاس SingletonClassExample

 از نوع Singleton پیاده‌سازی شده است. برای دسترسی به کلاس ساخته شده در بالا کلاس دیگری تحت عنوان SingleTonDemo

 پیاده‌سازی شده است.

1public class SingletonDemo {
2    public static void main(String[] args) {
3        SingletonClassExample tmp = SingletonClassExample.getInstance();
4        tmp.demoMethod();
5    }
6}

خروجی حاصل از اجرای قطعه کد بالا نیز به صورت زیر خواهد بود.

demoMethod for singleton

منظور از مدیریت استثنا کلاس در جاوا چیست؟

آشنایی با فرایند «مدیریت استثنا» (Exception Handling) در زبان برنامه نویسی جاوا برای مدیریت خطاهای زمان اجرا ضروری است. با مدیریت استثناها در برنامه می‌توان از بروز اتفاقات پیش‌بینی نشده جلوگیری کرد. علاوه بر این، عملکرد صحیح برنامه نیز تضمین می‌شود.

برای مدیریت استثنا در جاوا دو روش کلی وجود دارد که در ادامه هر کدام از این روش‌ها مورد بررسی قرار خواهد گرفت.

بلوک Try catch در جاوا

استفاده از بلوک‌های Try-catch یکی از بهترین روش‌ها برای مدیریت استثناهای موجود در برنامه است. به طور کلی درون بخش Try کدهایی قرار می‌گیرند که امکان ایجاد استثنا یا بروز خطا در برنامه را دارند. در نقطه مقابل، درون بخش catch نیز کدهای مورد نیاز برای رسیدگی به استثناها یا خطاهای برنامه قرار می‌گیرند.

مدیریت استثنا به صورت سفارشی

برنامه‌نویس جاوا نیز به صورت سفارشی سیستم جهت مدیریت استثناهای برنامه پیاده‌سازی کند. همچنین، با استفاده از کلمه کلیدی throw می‌توان در هر بخشی از برنامه یک استثنا تولید کرد. تنها نکته‌ای که در این خصوص باید مد نظر داشت این است که در صورت استفاده جداگانه از کلمه throw بدون تعریف بلوک try برنامه متوقف خواهد شد.

مهم‌ترین نکات در خصوص تعریف کلاس در جاوا

بعد از پاسخ به این پرسش که کلاس در جاوا چیست و بررسی مهم‌ترین مفاهیم پایه‌ای موجود در آن در این بخش از نوشته برخی از مهم‌ترین نکات در خصوص تعریف کلاس در جاوا آورده شده است. توجه به این موارد می‌تواند نقش به سزایی در بهبود خوانایی و قابلیت نگهداری کد ایفا کند.

در ادامه مهم‌ترین نکاتی آورده شده است که در زمان تعریف کلاس در جاوا باید رعایت کرد.

قواعد نام گذاری کلاس در جاوا

برای نام گذاری کلاس‌ها در زبان جاوا بهتر است از قاعده CamelCase استفاده کرد. بر اساس این قاعده در نام گذاری عبارت‌های مرکب به جای استفاده از فاصله یا سایر علائم نگارشی می‌توان حرف اول هر کدام از واژه‌های تشکیل دهنده را با حروف بزرگ نوشت. علاوه بر این، استفاده از نام‌های توصیفی برای کلاس‌ها نیز توصیه می‌شود، زیرا این مورد به افزایش خوانایی برنامه کمک می‌کند. به عنوان مثال، نام‌های نظیر Employee ،HttpConnection و سایر موارد برای کلاس‌ها توصیه می‌شود.

برنامه‌نویس در حال آموزش قواعد نام‌گذاری کلاس به همکارانش در شرکت است - کلاس در جاوا چیست

انسجام بالا و وابستگی پایین

اصل «انسجام و وابستگی» (Cohesion and Coupling) یکی از اصول بسیار مهم در طراحی نرم‌افزار است. بر اساس این اصل عناصر داخلی کلاس باید با یکدیگر ارتباط معنادار و عمیقی داشته باشند تا مرزبندی وظایف نیز مشخص شود. به زبان ساده انسجام بالا بین اعضای کلاس مورد انتظار است. در نقطه مقابل، کلاس طراحی شده در جاوا باید اتصالی سست با کلاس‌های زیر مجموعه یا زیر سیستم‌ها مرتبط داشته باشد. به زبان ساده وابستگی پایین در ارتباط کلاس با سایر کلاس‌ها مورد انتظار خواهد بود.

استفاده از الگوهای طراحی

استفاده از الگوهای طراحی معروف و شناخته شده کمک شایانی به کاهش پیچیدگی‌های کد و افزایش انعطاف‌پذیری برنامه می‌کند. با استفاده از الگوهای طراحی می‌توان کدی خواناتر و قابل درک‌تر نوشت. به عنوان مثال، استفاده از اصول ۵ گانه SOLID در طراحی شی‌گرا بسیار توصیه می‌شود. علاوه بر این، می‌توان از اصل «خودت را تکرار نکن» (Dont Repeat Yourself | DRY) به منظور جلوگیری از نوشتن مکرر داده‌های یکسان در برنامه نیز استفاده کرد.

سوالات متداول

از ابتدای نوشته تاکنون مفهوم کلاس در جاوا، نحوه پیاده‌سازی و فراخوانی آن، بخش‌های اصلی آن به همراه بسیاری از موارد کاربردی مورد بررسی قرار گرفت. در ادامه، در این بخش از نوشته کلاس در جاوا چیست سعی شده است تا به متداول‌ترین و پرتکرارترین سوالاتی پاسخ داده شود که در متن کمتر به آن‌ها پرداخته شده است.

کلاس‌ها در جاوا چگونه کار می‌کنند؟

به زبان ساده کلاس را می‌توان همانند نقشه ساختمان در نظر گرفت. نقشه ساختمان مدل ساده شده برای طراحی ساختمان است و با استفاده از آن می‌توان به تعداد نامحدود ساختمان‌ ساخت. کلاس در جاوا نیز مدلی برای ساخت شی در برنامه را ارائه می‌دهد که با استفاده از آن می‌توان اشیا بسیاری را ایجاد کرد. ویژگی‌ها و رفتار شی‌ ساخته شده نیز با استفاده از عضوهای داده‌ای و متدهای موجود در کلاس مشخص می‌شود.

نقشه و ماکت اولیه از چندین ساختمان بر روی میز زیر نور چراغ نشان داده می‌شود

کاربرد متدهای کلاس در جاوا چیست؟

متدهای کلاس در جاوا مشخص کننده رفتار و ویژگی‌های شی ساخته شده از کلاس هستند و ساختار مشابهی با توابع دارند. امکان تعریف چندین متد برای کلاس به منظور پیاده‌سازی عملکردهای مختلف وجود دارد. این متدها تنها یک مرتبه پیاده‌سازی می‌شوند و می‌توان چندین مرتبه آن‌ها را فراخوانی کرد. پیش‌تر در مطلب زیر از مجله فرادرس ساختار متدهای جاوا به طور کامل مورد بررسی قرار گرفته است.

راه برقراری ارتباط بین دو کلاس در جاوا چیست؟

ساده‌ترین راه برای برقراری ارتباط بین دو کلاس در جاوا این است که با ایجاد شی از یک کلاس درون کلاس دیگر اعضای کلاس را فراخوانی کنیم. ایجاد ارتباط بین دو کلاس به استفاده مجدد از کدها منجر می‌شود که در نتیجه، خوانایی کد رو افزایش می‌دهد. البته روش‌های مختلفی برای ارتباط بین دو کلاس وجود دارد.

آیا وجود متد main در تمام کلاس‌های جاوا الزامی است؟

وجود متد ()main در برنامه جاوا اجباری است، اما قرار دادن آن در تمام کلاس‌های جاوا لزومی ندارد. در حقیقت، متد ()main نقطه شروع برنامه را مشخص می‌کند. در زمان اجرای برنامه مفسر جاوا ابتدا متد ()main را در برنامه تشخیص می‌دهد و اجرا را از آن نقطه شروع می‌کند.

جمع‌بندی

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

علاوه بر این، مفاهیم اساسی ساخت کلاس در جاوا نظیر فیلدها، متدها و توابع سازنده کلاس در جاوا به صورت کامل توضیح داده شد. همچنین، مباحث مهمی همچون انواع کلاس‌های داخلی جاوا، سطوح دسترسی کلاس و توابع سازنده کلاس مورد بررسی قرار گرفت. در انتها نیز به تعدادی از پرتکرارترین سوالات این حوزه پاسخ داده شد.

 

source

توسط expressjs.ir