تعریف کلاس و شی
در برنامه نویسی اندروید از زبان جاوا استفاده می شود که یک زبان برنامه نویسی شی گرا است و این امکان را فراهم می کند تا اشیای دنیای واقعی دارای ویژگی ها، رفتار و ارتباطات با دیگر اشیاء تقریبا به همان شکلی که وجود دارند در برنامه تعریف و پیاده سازی شوند.
محیط واقعی پیرامون ما پر از اشیاء است مثل افراد، نقش ها، وظایف، مکان ها، اتفاقات و مناسبت ها. به عنوان مثال لامپ یک شیء است که دارای ویژگی ها و رفتارها می باشد.
ویژگی های لامپ عبارتند از:
- میران مصرف در ساعت
- طول عمر
- قیمت
- نام سازنده
رفتارهای لامپ عبارتند از:
- خرید لامپ
- معیوب شدن
- روشن شدن
- خاموش شدن
هر زیرمجموعه از اشیای موجود در یک محیط عملیاتی که دارای ویژگی ها و رفتار مشابه هستند در یک کلاس قرار می گیرند. به عبارت دیگر در هر محیطی کلاس های مختلف از اشیا وجود دارد. کلاس یک طرح کلی یا یک تعریف انتزاعی برای شی است.
به عنوان مثال همه لامپ ها در کلاس لامپ قرار می گیرند. حتی اگر هیچ لامپی بصورت فیزیکی وجود نداشته باشد ولی تعریف لامپ و ویژگی ها و رفتار آن و در نتیجه کلاس لامپ وجود دارد.
اشیا همان نمونه های عینی از کلاس هستند. هر شیء یک نسخه از ویژگی ها و رفتار کلاس خود را داشته، برای ویژگی ها آن مقدار تعیین شده و رفتار را می تواند انجام دهد. به عنوان مثال هر کدام از لامپ های موجود یک نمونه از کلاس لامپ هستند که دارای طول عمر، میزان مصرف، قیمت و سازنده مشخص هستند و می توانند خریداری شده، سوخته یا روشن و خاموش شوند.
به عنوان مثال دیگر می توانیم کلاس را به عنوان یک طرح (نمونه اولیه) یک خانه تصور کنیم. این شامل تمام جزئیات در مورد طبقات ، درب ، پنجره ها و غیره است. بر اساس این توصیفات خانه را می سازیم. خانه شیء است. از آنجا که بسیاری از خانه ها با همان توصیف ساخته می شوند ، می توانیم اشیاء زیادی را از یک کلاس ایجاد کنیم.
یا هم به عنوان مثال در یک سیستم پرسنلی، کلاس شخص داریم و هر کدام از افراد سازمان یک نمونه از کلاس یا به عبارتی اشیا هستند.
تعریف کلاس ها در جاوا
برای تعریف یک کلاس در جاوا مشابه زیر عمل می شود:
class ClassName {
// متغیرها
// متدها
}
هر متغیر برای نگهداری یکی از ویژگی ها استفاده شده و هر متد برای پیاده سازی یکی از رفتارها ایجاد می شود.
مثال: تعریف کلاس شخص
در اینجا یک کلاس برای افراد به نام Person تعریف شده که دارای سه متغیر نمونه name ، age و city بوده و متدهایی برای پیاده سازی رفتار شخص فرض شده است.
class Person {
//متغیرها
private String name;
private int age ;
private String city;
// متدها
public void add() {
//دستورات برای اضافه کردن شخص
}
public void delete() {
//دستورات برای حذف شخص
}
public void edit() {
//دستورات برای ویرایش شخص
}
}
در برنامه فوق به دو کلمه کلیدی ، private و public توجه کنید. این اصطلاحات سطح دسترسی را مشخص می کنند که در آموزش های بعد توضیح خواهیم داد. در حال حاضر ، فقط به یاد داشته باشید:
- کلمه کلیدی private متغیرها و متد ها را خصوصی می کند که فقط در داخل همان کلاس قابل دسترسی هستند.
- کلمه کلیدی public متغیرها و متد ها را عمومی می کند که در خارج از کلاس هم قابل دسترسی هستند.
در برنامه فوق متغیر های name، age و city از نوع private است در حالی که متدهای delete،addو editاز نوع public هستند.
اگر سعی کنید از خارج از کلاس به اعضای خصوصی دسترسی پیدا کنید ، کامپایلر خطا نشان می دهد.
اشیاء در جاوا
وقتی کلاس تعریف می شود ، فقط مشخصات شی تعریف می شود. هیچ حافظه یا محل ذخیره ای اختصاص داده نمی شود.
برای دسترسی به اعضای تعریف شده در کلاس ، باید شی ایجاد کنید. در قطعه کد زیر از کلاس Person شی ایجاد کردیم.
Person p1 = new Person (); //تعریف شیء یک
Person p2 = new Person (); // تعریف شیء دو
این برنامه دو شیء p1 و p2 از کلاس Person ایجاد می کند.
چگونه به اعضا دسترسی پیدا کنیم؟
با استفاده از ( . ) می توانید به اعضا (توابع و متغیرها) دسترسی پیدا کنید. مثلا،
p1.add();
این عبارت متد add() را در کلاس Person برای شی p1 فراخوانی می کند.
هنگامی که با استفاده از عبارت بالا متدی را فراخوانی می کنید، تمام عبارات موجود در بدنه ی add() متد اجرا می شوند. سپس ، کنترل برنامه به دستور بعد از عبارت p1.add(); می پرد.
به طور مشابه این عبارت متد add() را در کلاس Person برای شی p2 فراخوانی می کند.
p2.add();
توجه به این نکته مهم است که ، اعضای private فقط در داخل کلاس قابل دسترسی هستند. اگر کد
p1.age=21;
در خارج از کلاس Person قرار بگیرد ، کامپایلر خطا نشان می دهد.
کلاس های مدل در جاوا
کلاس های مدل نوع خاصی از کلاس های هستند که برای ایجاد اشیا در برنامه استفاده می شود. این کلاس ها دارای متغیرهای خصوصی بازای هر کدام از ویژگی ها بوده ومتدهای عمومی برای مقداردهی تک تک ویژگی ها یا بدست آوردن مقدار آنها می باشد. به طور کلی این کلاس دارای قسمت های زیر است:
- متغیرهای خصوصی برای نگهداری ویژگی ها
- متدهای setter برای مقداردهی هر کدام از متغیرها
- متدهای getter برای گرفتن مقدار هر کدام از متغیرها
- متدهای سازنده دارای پارامترهای ورودی برای هر کدام از متغیرها
در محیط های برنامه نویسی امکاناتی برای کمک و نوشتن خودکار این بخش ها وجود دارد.
در زیر کلاس مدل برای شخص پیاده سازی شده است:
class Person {
private String name;
private int age ;
private String city;
public Person(String name, int age , String city) {
this.name= name;
this.age = age;
this.city=city;
}
public void setName(String name) {
this.name= name;
}
public void setAge(int age) {
this.age= age;
}
public void setCity(String city) {
this.city= city;
}
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
public String getCity() {
return this.city;
}
}
با توجه به اینکه متغیرهای این کلاس بصورت private تعریف شده اند و از محیط خارج از کلاس قابل دسترس نیستند. بلکه در زمان ایجاد شی از نوع این کلاس، تابع سازنده آن اجرا شده و متغیرهای ان را مقداردهی می کند.
Person p1=new Person("ali ", 20 , "tehran");
Person p2=new Person("sara" , 17 , "yazd");
همچنین هر نوع مقداردهی این متغیرها باید با فراخوانی تابع set مربوط به آن و هر نوع خواندن از متغیر باید از تابع get مربوط به انجام شود.
مقداردهی متغیرها:
p1.setName("ali");
p1.setAge(20);
p1.setCity("tehran");
خواندن مقدار متغیرها:
String name= p1.getName();
int age = p1.getage();
String city= p1.getCity();
در مثال زیر یک آرایه از نوع کلاس Person تعریف شده و سه رکورد در آن ذخیره شده است:
Person p1=new Person("ali ", 20 , "tehran");
Person p2=new Person("sara" , 17 , "yazd");
ArrayList<Person> list=new ArrayList<>();
list.add(p1);
list.add(p2);
list.add(new Person("mina", 23 , "birjand") );
همچنین همه متدهای کلاس ArrayList را می توان روی این لیست اجرا کرد به عنوان مثال :
حذف از لیست :
list.remove(p1);
// یا
list.remove(0);
بدست آوردن عنصر از لیست:
Person p = list.get(2);
تغییر مقدار یک عنصر از لیست:
Person p3=new Person("ahmad" ,26 , "mashhad")
list.set( 1, p3 );
جستجو در لیست:
Person p3=new Person("ahmad" ,26 , "mashhad")
int p= list.indexOf(p3 );
در کد زیر شی موجود در خانه 2 آرایه خوانده شده و پس از تغییر شهر و سن فرد ، دوباره در آرایه ذخیره شده است.
Person p=list.get(2);
p.setCity("Isfahan");
p.setAge(28);
list.set( 2 , p );
با استفاده از کلاس ها امکان کنار هم نگهداشتن ویژگی های یک شی و انجام عملیات مختلف از جمله نگهداری آنها در حافظه، یا بانک اطلاعاتی، انتقال به سیستم دیگر فراهم می شود و ایجاد لیستی از نوع کلاس امکانات فوق العاده ای برای مدیریت بهتر و راحت تر رکورد ها در اختبار برنامه نویسی قرار می دهد.