( تعداد نمایش : 2075 )

بنیادهای کلاس java

کلاسهای تولید شده در بحثهای گذشته فقط برای کپسول سازی روش ()main استفاده
می شد ، که برای نشان دادن اصول دستور زبان جاوا مناسب بودند . شاید بهترین
چیزی که باید درباره یک کلاس بدانید این است که کلاس یک نوع جدید داده را تعریف
می کند . هربار که این نوع تعریف شود ، می توان از آن برای ایجاد اشیائی از
همان نوع استفاده نمود . بنابراین ، یک کلاس قالبی (template) برای یک شی ئ است
و یک شی ئ نمونه ای (instance) از یک کلاس است . چون شی ئ یک نمونه از یک کلاس است
غالبا” کلمات شی ئ (object) و نمونه (instance) را بصورت مترادف بکار می بریم .

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

type methodname2(parameter-list ){
// body of method
}
//…
type methodnameN(parameter-list ){
// body of method
}
}

داده یا متغیرهایی که داخل یک کلاس تعریف شده اند را متغیرهای نمونه instance)
(variables می نامند . کدها ، داخل روشها (methods) قرار می گیرند . روشها و
متغیرهای تعریف شده داخل یک کلاس را اعضائ (members) یک کلاس می نامند . در اکثر
کلاسها ، متغیرهای نمونه یا روی روشهای تعریف شده برای آن کلاس عمل کرده یا توسط
این روشها مورد دسترسی قرار می گیرند . بنابراین ، روشها تعیین کننده چگونگی
استفاده از داده های یک کلاس هستند .
متغیرهای تعریف شده داخل یک کلاس ، متغیرهای نمونه خوانده شده زیرا هر نمونه
از کلاس ( یعنی هر شی ئ یک کلاس ) شامل کپی خاص خودش از این متغیرهاست . بنابراین
داده مربوط به یک شی ئ ، جدا و منحصر بفرد از داده مربوط به شی ئ دیگری است . ما
بزودی این نکته را بررسی خواهیم نمود ، اما فعلا” باید این نکته بسیار مهم را
بیاد داشته باشید .
کلیه روشها نظیر()main همان شکل عمومی را دارند که تاکنون استفاده کرده ایم .
اما ، اکثر روشها را بعنوان staticیا publicا توصیف نمی کنند . توجه داشته
باشید که شکل عمومی یک کلاس ، یک روش ()main را توصیف نمی کند . کلاسهای جاوا
لزومی ندارد که یک روش ()main داشته باشند . فقط اگر کلاس ، نقطه شروع برنامه
شما باشد ، باید یک روش ()main را توصیف نمایید . علاوه بر این ، ریز برنامه ها
(applets) اصولا” نیازی به روش ()main ندارند .
نکته : برنامه نویسان C++ آگاه باشند که اعلان کلاس و پیاده سازی روشها در یک
مکان ذخیره شده و بصورت جداگانه تعریف نمی شوند. این حالت گاهی فایلهای
خیلی بزرگ java ایجاد می کند ، زیرا هر کلاس باید کاملا” در یک فایل منبع
تکی تعریف شود . این طرح در جاوا رعایت شد زیرا احساس می شد که در بلند
مدت ، در اختیار داشتن مشخصات ، اعلانها و پیاده سازی در یک مکان ، امکان
دسترسی آسانتر کد را بوجود می آورد .

یک کلاس ساده
بررسی خود را با یک نمونه ساده از کلاسها شروع می کنیم . در اینجا کلاسی تحت
غنوان Box وجود دارد که سه متغیر نمونه را تعریف می کند : width، height، و depth
و فعلا” ، کلاس Box دربرگیرنده روشها نیست .

+ class Box {
+ double width;
+ double height;
+ double depth;
+ }

قبلا” هم گفتیم که یک کلاس نوع جدیدی از داده را توصیف می کند . در این مثال
نوع جدید داده را Box نامیده ایم . از این نام برای اعلان اشیائ از نوع Box
استفاده می کنید . نکته مهم این است که اعلان یک کلاس فقط یک الگو یا قالب را
ایجاد می کند ، اما یک شی ئ واقعی بوجود نمی آورد . بنابراین ، کد قبلی ، شیئی
از نوع Box را بوجود نمی آورد .
برای اینکه واقعا” یک شی ئ Box را بوجود آورید ، باید از دستوری نظیر مورد
زیر استفاده نمایید :

+ Box mybox = new Box)(; // create a Box object called mybox

پس از اجرای این دستور ، mybox نمونه ای از Box خواهد بود. و بدین ترتیب این
شی ئ وجود فیزیکی و واقعی پیدا می کند .
مجددا” بیاد داشته باشید که هر بار یک نمونه از کلاسی ایجاد می کنید ، شیئی
ایجاد کرده اید که دربرگیرنده کپی ( نسخه خاص ) خود از هر متغیر نمونه تعریف
شده توسط کلاس خواهد بود . بدین ترتیب ، هر شی ئ Box دربرگیرنده کپی های خود از
متغیرهای نمونه width، heidht،و depthو می باشد . برای دسترسی به این متغیرها
از عملگر نقطه (.) استفاده می کنید . عملگر نقطه ای ، نام یک شی ئ را با نام یک
متغیر نمونه پیوند می دهد . بعنوان مثال ، برای منتسب کردن مقدار ۱۰۰ به متغیر width
در myboxر ، از دستور زیر استفاده نمایید :

+ mybox.width = 100;

این دستور به کامپایلر می گوید که کپی width که داخل شی ئ mybox قرار گرفته
را معادل عدد ۱۰۰ قرار دهد . بطور کلی ، از عملگر نقطه ای برای دسترسی هم به
متغیرهای نمونه و هم به روشهای موجود در یک شی ئ استفاده می شود .
دراینجا یک برنامه کامل را مشاهده میکنید که از کلاس Box استفاده کرده است :

+ /* A program that uses the Box class.
+
+ Call this file BoxDemo.java
+ /*
+ class Box {
+ double width;
+ double height;
+ double depth;
+ }
+
+ // This class declares an object of type Box.
+ class BoxDemo {
+ public static void main(String args[] ){
+ Box mybox = new Box)(;
+ double vol;
+
+ // assign values to mybox’s instance variables
+ mybox.width = 10;
+ mybox.height = 20;
+ mybox.depth = 15;
+
+ // compute volume of box
+ vol = mybox.width * mybox.height * mybox.depth;
+
+ System.out.println(“Volume is ” + vol);
+ }
+ }

فایلی را که دربرگیرنده این برنامه است باید با نام BoxDemo.java بخوانید
زیرا روش ()main در کلاس BoxDemo و نه در کلاس Box قرار گرفته است . هنگامیکه این
برنامه را کامپایل می کنید ، می بینید که دو فایل class. ایجاد شده اند ، یکی
برای Box و دیگری برای BoxDemo . کامپایلر جاوا بطور خودکار هر کلاس را در فایل class
. مربوط به خودش قرار می دهد . ضرورتی ندارد که کلاس Boxو BoxDemoو هر دو
در یک فایل منبع قرار گیرند . می توانید هر کلاس را در فایل خاص خودش گذاشته و
آنها را بترتیب Box.javaو BoxDemo.javaو بنامید .
برای اجرای این برنامه باید BoxDemo.class را اجرا کنید . پس از اینکار
حاصل زیر را بدست می آورید :

Volume is 3000

قبلا” هم گفتیم که هر شی ئ دارای کپی های خاص خودش از متغیرهای نمونه است .
یعنی اگر دو شی ئ Box داشته باشید، هرکدام بتنهایی کپی ( یا نسخه ای ) از lenght width
و heightو خواهند داشت . مهم است بدانید که تغییرات در متغیرهای نمونه یک
شی ئ تاثیری روی متغیرهای نمونه کلاس دیگر نخواهد داشت . بعنوان مثال ، برنامه
بعدی دو شی ئ Box را اعلان می کند :

+ // This program declares two Box objects.
+
+ class Box {
+ double width;
+ double height;
+ double depth;
+ }
+
+ class BoxDemo2 {
+ public static void main(String args[] ){
+
+ Box mybox1 = new Box)(;
+ Box mybox2 = new Box)(;
+ double vol;
+
+ // assign values to mybox1′s instance variables
+ mybox1.width = 10;
+ mybox1.height = 20;
+ mybox1.depth = 15;
+
+ /* assign different values to mybox2′s
+ instance variables */
+ mybox2.width = 3;
+ mybox2.height = 6;
+ mybox2.depth = 9;
+
+ // compute volume of first box
+ vol = mybox1.width * mybox1.height * mybox1.depth;
+ System.out.println(“Volume is ” + vol);
+
+ // compute volume of second box
+ vol = mybox2.width * mybox2.height * mybox2.depth;
+ System.out.println(“Volume is ” + vol);
+ }
+ }

خروجی تولید شده توسط این برنامه بقرار زیر می باشد :

Volume is 3000
Volume is 162

دیدگاه خود را بیان کنید.

باید وارد سایت شده باشید برای دیدگاه دادن