۱۳۸۹ دی ۲۴, جمعه

ارث بری در جاوا ۱

ارث بری در جاوا

English

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


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


چه واکنشی خواهید داشت اگر بگویم که می‌توانید یک شی حیوان درست کنید که این کار را برای شما انجام دهد. یعنی مانع کد های تکراری شود..... اینجا است که ارث بری در جاوا وارد می شود!!


Superclass یا کلاس بالاتر



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



public class Animal {


}


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


Subclass یا زیر کلاس



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



public class Dog extends Animal{



}

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



مثال حیوان Animal Example

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

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



public class Animal {

public boolean isAPet = true;

public String owner = “Fred”;



public void sleep() {

System.out.println(“Sleeping”);

}

public void eat() {

System.out.println(“Eating”);

}

}



ما متغیر ها و متد های اصلی را برای همه حیوانات ساختیم. در این حالت، همه حیوانات ما یک متغیر بولی دارند که isAPet خوانده می‌شود که به صورت true مقدار دهی شده ، و owner به صورت یک رشته تعیین شده که مقدار آن Fred است. همه حیوانات می‌توانند بخوابند و بخورند.



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



public static void main (String[] args) {

Dog d = new Dog();

d.sleep();

}

توجه داشته باشید که چرا برنامه بالا هیچ خطایی نمی‌دهد زیرا سوپر کلاس تمام متغیر ها و متد های public و protected خود را با زیر کلاس به اشتراک گذاشته است.



بنابر این شاید شما در شگفت باشید که دو پیراینده ی public و protected چه کاری انجام می دهند؟ اینها دو تا از سه سطح دسترسی هستند که در جاوا استفاده می شوند. اگر شما تا کنون این درسنامه ها را دنبال کرده باشید حتمآ public را زیاد دیده‌اید ، اما protected برای شما جدید است. من در درسنامه بعدی عمیقآ به این بحث می پردازم ؛ چیزی که برای اکنون مهم است این دو پیراینده هر دو یکی هستند و به زیر کلاس این اجازه را می‌دهند که از متغیر ها و متد های سوپر کلاس استفاده کنند.



اکنون می‌توانیم کد هایی را بنویسیم که اشیاء ویژه یک سگ را بنویسد ، اجازه بدید متدی بنویسیم به نام واق واق bark :



public class Dog extends Animal {



public void bark() {

System.out.println (“Woolf!”):

}
}



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



اجازه بدید یک کلاس گربه بسازیم که آن هم زیر کلاس حیوان است.





public class Cat extends Animal {



}

این کلاس نیز خالیست اما این همان دسترسی به متد ها و متغیر های سوپر کلاس را دارد. اجازه بدید یک متد میو میو meow بسازیم :



public class Cat extends Animal {

public void meow () {

System.out.println(“Meow!”);

}

}



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

Abstract انتزاعی

هیچ نظری موجود نیست: