امروز میخوام کلاس ها در جاوا رو توضیح بدم خدمتتون. در ابتدا یک تعریف کلی از کلاس رو به نقل از وبسایت برنامهنویس میدم خدمتتون:
کلاس چیست؟
کلاس به مجموعه کدی گویند که برای یک هدف نوشته شده اند و در کنار یکدیگر قرار گرفته اند. در دنیای واقعی شما می توانید فرضاً اتومبیل رو یک کلاس در نظر بگیرید. تمام اجزای این اتومبیل برای یک هدف در کنار یکدیگر قرار گرفته اند. حالا شما فرض کنید کلاسی به نام Car ایجاد نمودید. این کلاس می تونه مشخصاتی داشته باشه. مثلاً مشخصه هایی از قبیل تعداد سیلندر – نوع سوخت – رنگ ماشین – تعداد دنده و … اینها همه مشخصاتی هست که می تونید برای کلاس Car مشخص نمایید. که در برنامه نویسی به این مشخصات Property گویند.
ویژگی که برنامهنویسی به صورت شی گرا دارد این است که کار را بسیار راحت تر میکنه. مثلاً شما در برنامتان می خواهید کلاسی به نام Student داشته باشید. و مشخصات هر دانش آموز را در آن نگه دارید و از همه مهتر اینکه برای هر دانش آموز دوباره کد نویسی نشود. حالا بهتر است در اینجا شما از یک کلاس به همراه Property های مد نظرتان درست نمایید و برای هر دانش آموز از آن کلاس استفاده نمایید.
شکل کلی کلاس
خب تقریبا هر فایلی که توی جاوا ساخته میشه یا داخلش کلاس داره و یا از کلاسی استفاده میکنه. به همین دلیل اهمیت یادگیری کلاس و ساختار اون بسیار مهم هستش. به طور کلی هر فایل جاوا دارای یک کلاس، همنام با فایل هستش. ساختار کلی کلاس به صورت زیر میباشد:
public class Classname { }
به صورت قراردادی اسامی کلاسها رو با حروف بزرگ شروع میکنیم.
تعریف متغیر در کلاس
هر کلاس میتونه به دلخواه تابع و متغیر داشته باشه. متغیرهای داخلی کلاس را در ابتدای آن تعریف میکنیم:
public class Classname { protected int id; public String text; private double spt; }
اینکه اون public و private و protected چی هستش رو بعدا توضیح میدم.
مقادیر متغیرهای کلاس در تمامی توابع آن کلاس قابل دسترس میباشد.
تعریف تابع در کلاس
حالا میرسیم سراغ تابع کلاس. تا الان یک تابع رو باهاش کار کردیم و ازش استفاده کردیم، اسمش main بود که کدهامون رو توش مینوشتیم. تابعها ۴ حالت دارن:
- مقداری نمیگیرد و مقداری برنمیگرداند
- مقداری نمیگیرد و یک مقدار برمیگرداند
- مقداری میگیرد و مقداری برنمیگرداند
- مقداری میگیرد و یک مقدار بر میگرداند.
نحوهی تعریف تابع کلاس در حالت اول به صورت زیر هستش:
public void functionName(){ }
داخلی آکولاداش حالا دستوراتی هستند که ما میخوایم.
نحوهی تعریف تابع کلاس در حالت دوم:
public int functionName(){ int a = 2; return a; }
که در این مثال، این تابع کلاس مقداری از نوع int برمیگرداند و این مقدار برابر است با ۲.
نحوهی تعریف کلاس در حالت سوم:
public void functionName(int a, int b, double c, String data){ }
که در این مثال، ۴ مقدار را به صورت پارامتر ورودی دریافت میکند.
نحوهی تعریف کلاس در حالت چهارم:
public String functionName(int a, int b, double c, String data){ return data; }
نحوهی استفاده از کلاس
برای استفاده از کلاس ها باید از اونها شی ساخته بشه.
فرض کنید توی تابع main میخوایم از این کلاس استفاده کنیم:
public class Classname { protected int id; public String text; private double spt; public String functionName(){ String data = "Class Function"; return data; } }
باید به این صورت عمل کنیم:
Classname dd = new Classname(); dd.functionName();
به این صورت تابع functionName ما اجرا میشود.
دسترسی گرفتن به متغیرها هم به همین صورت هستش. ما به متغیرها و توابع public دسترسی داریم، متغیرها و توابع private در یک کلاس، تنها قابل استفاده در همان کلاس میباشد و متغیرها و توابع protected هم پایینتر در همین پست توضیح میدم. در صورتی که چیزی پشت توابع و متغیرها نوشته نشه، اصطلاحا Package Protected میشن. به این معنی که تنها در کلاس های همون پکیجی که کلاس ما وجود دارد قابل استفاده است.
تعریف setter و getter برای کلاس
به طور کلی، در طول برنامهنویسی تلاش ما بر این هستش که متغیرهای کلاس رو private تعریف کنیم. خب زمانی که اینجوری کار میکنیم، در طول برنامه شاید نیاز به اون متغیرها و توابع داشته باشیم یا اینکه بخوایم اونها رو مقدار بدیم. برای این کار، از setter و getter استفاده میکنیم.
نحوهی تعریف setter و getter کاملا قراردادی هستش. برای تعریف اینها شما میتونید از ۲ روش استفاده کنید.
- خودتون بنویسین (توصیه نمیشه)
- از ide کمک بگیرید.
خب روش اول که کلا هیچی. برای روش دوم در intellij idea توی کلاس راست کلیک کرده و generate رو میزنیم. حالا Getter And Setter رو انتخاب میکنیم:
حالا متغیرهای کلاس رو که میخوایم براشون setter و getter بنویسیم رو انتخاب میکنیم. به همین راحتی.
این کار یه دلیل دیگهای هم داره. فرض کنید شما میخواین کد ملی بگیرین از کاربر. با استفاده از setter این کار رو بکنید، میتونید توی تابع setter بیاین چک کنید درست باشه و بعد ثبت کنید در متغیر کلاس مقدار رو.
تابع سازنده کلاس (Constructor)
خب یک تابع داریم در کلاس که بهش میگن constructor . این تابع به این صورت عمل میکنه که در هنگام ساختن شی از کلاس، به صورت اتوماتیک اجرا میشه. این تابع مقادیری رو هم میتونه به صورت ورودی بگیره. نحوهی تعریف این تابع به صورتی هستش که اسم تابع، هم اسم کلاس ما هستش:
public class Classname { protected int id; public String text; private double spt; public Classname(int id) { this.id = id; } public String functionName(){ String data = "Class Function"; return data; } }
در اینجا در هنگام ساختن شی از کلاس باید مقدار id به صورت int رو به کلاس بدیم و تابع سازنده این رو در متغیر id کلاس ذخیره میکنه:
Classname dd = new Classname(12); dd.functionName();
در constructor ها میتونیم از setter و getter های کلاس استفاده کنیم. البته معمولا از setter استفاده میشه.
کلمه کلیدی this در کلاس
مثال بالا رو که دقت کرده باشید، یه جاش نوشته this.id . کلا داخل هر کلاس، بخوایم به اجزای اون کلاس اشاره کنیم، میتونیم از این کلمه کلیدی استفاده کنیم. به طول مثال در صورتی که بخوایم متغیر text رو تغییر بدیم میتونیم بنویسیم this.text . این کار ضروری نیست ولی به نظر من خوانایی کدتون رو افزایش میده اگه همیشه ازش استفاده کنید. در مثال قبل چون نام مقداری که به تابع داده بودیم id بود، برای همین باید برای اینکه سیستم متوجه بشه که تفاوت این id با متغیر id کلاس در چیست، باید از this استفاده کنیم.
برای مشاهده این آموزش به صورت ویدیویی به این لینک مراجعه فرمایید.
سلام جناب طیبی از اینکه در علم برنامه نویسی از نشر اطلاعات مفید دریغ نمیکنید متشکرم
سلام
ممنون،
پیروز باشید
چند بار خوندم و زنگ ذهنم باز شد دمتان گرم
سلام
پیروز باشید
عالی بود
پیروز باشید