آشنایی با جاوا

Volume is 162

بنیادهای کلاس 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و می باشد . برای دسترسی به این متغیرها از عملگر نقطه (.) استفاده می کنید . عملگر نقطه ای ، نام یک شی ئ را با نام یک متغیر نمونه پیوند می دهد . بعنوان مثال ، برای منتسب کردن مقدار 100 به متغیر widthدر myboxر ، از دستور زیر استفاده نمایید :

+ mybox.width = 100;

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

دراینجا یک برنامه کامل را مشاهده میکنید که از کلاس 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

ادامه در یادداشت بعدی ...