در این تکلیف، یاد میگیرید کلاس ها و ارث بری چگونه در کاتلین کار میکنند. آنها مانند آنچه در سایر زبان ها دیدهاید هستند اما تفاوت هایی دارند.
در کاتلین به صورت پیش فرض کلاس ها نمیتوانند زیر کلاس داشته باشند. به طور مشابه خصوصیات و متغیرهای عضو نمی توانند توسط زیرکلاس ها برتر گرفته شوند (با اینکه قابل دسترسی هستند.)
شما باید کلاس را به عنوان open علامت بزنید تا اجازه زیر کلاس شدن را به آن بدهید. به طور مشابه، باید خصوصیات و متغیرهای عضو را به عنوان open علامت بزنید، تا آنها را در زیر کلاس برتری دهید. کلمه کلیدی open لازم است، تا از نشت جزئیات پیاده سازی به عنوان بخشی از رابط کلاس جلوگیری شود.
گام ۱: کلاس آکواریوم را open کنید
در این گام شما کلاس Aquarium را open می کنید تا بتوانید در قدم بعدی آن را برتری دهید.
۱. کلاس Aquarium و همه خصوصیات آن را با کلمه کلیدی open علامت بزنید.
open class Aquarium (open var length: Int = 100, open var width: Int = 20, open var height: Int = 40) { open var volume: Int get() = width * height * length / 1000 set(value) { height = (value * 1000) / (width * length) }
۲. یک خصوصیت shape که open باشد با مقدار "rectangle" اضافه کنید.
open val shape = "rectangle"
۳. خصوصیت water که open باشد با گیرنده هایی که ۹۰ درصد از حجم Aquarium را برمیگرداند اضافه کنید.
open var water: Double = 0.0 get() = volume * 0.9
۴. کد را به متد ()printSize برای چاپ کردن شکل و مقدار آب به عنوان درصدی از حجم اضافه کنید.
fun printSize() { println(shape) println("Width: $width cm " + "Length: $length cm " + "Height: $height cm ") // 1 l = 1000 cm^3 println("Volume: $volume l Water: $water l (${water/volume*100.0}% full)") }
۵. در ()buildAquarium، کد را برای ساختن یک Aquarium با طول ۲۵ عرض ۲۵ و ارتفاع ۴۰ تغییر دهید.
fun buildAquarium() { val aquarium6 = Aquarium(length = 25, width = 25, height = 40) aquarium6.printSize() }
۶. برنامه را اجرا کنید و خروجی جدید را مشاهده کنید.
⇒ aquarium initializing rectangle Width: 25 cm Length: 25 cm Height: 40 cm Volume: 25 l Water: 22.5 l (90.0% full)
گام ۲: یک زیر کلاس بسازید
۱. یک زیر کلاس از Aquarium با نام TowerTank بسازید، که یک مخزن استوانه ای به جای یک مخزن مستطیلی میسازد. شما می توانید TowerTank را زیر Aquarium اضافه کنید، زیرا می توانید یک کلاس دیگر داخل همان فایل کلاس Aquarium اضافه کنید.
۲. در TowerTank ، خصوصیت ارتفاع که داخل سازنده تعریف شد را برتری بدهید. برای برتری دادن یک خصوصیت از کلمه کلیدی override داخل زیر کلاس استفاده کنید.
کلاس ها باید پارامتر های سازنده شان را صریح تعریف کنند.
۳. یک سازنده برای TowerTank بسازید تا diameter (قطر) را بگیرد. مقدار قطر برای طول و عرض را زمانی استفاده کنید که سازنده را داخل سوپر کلاس Aquarium را صدا میزنید.
class TowerTank (override var height: Int, var diameter: Int): Aquarium(height = height, width = diameter, length = diameter) {
۴. برای محاسبه استوانه خصوصیت حجم را برتری دهید. فرمول استوانه PI ضرب در مربع شعاع در ارتفاع است. شما باید ثابت PI را از java.lang.Math وارد کنید.
override var volume: Int // ellipse area = π * r1 * r2 get() = (width/2 * length/2 * height / 1000 * PI).toInt() set(value) { height = ((value * 1000 / PI) / (width/2 * length/2)).toInt() }
۵. در TowerTank خصوصیت water را برتری دهید تا ۸۰ درصد حجم باشد.
override var water = volume * 0.8
۶. مقدار shape را برتری دهید تا یک "cylinder" (استوانه) باشد.
override val shape = "cylinder"
۷. کلاس TowerTank نهایی شما باید چیزی مثل کد پایین باشد.
فایل Aquarium.kt:
package example.myapp import java.lang.Math.PI ... // existing Aquarium class class TowerTank (override var height: Int, var diameter: Int): Aquarium(height = height, width = diameter, length = diameter) { override var volume: Int // ellipse area = π * r1 * r2 get() = (width/2 * length/2 * height / 1000 * PI).toInt() set(value) { height = ((value * 1000 / PI) / (width/2 * length/2)).toInt() } override var water = volume * 0.8 override val shape = "cylinder" }
۸. در ()buildAquarium، یک TowerTank با قطر ۲۵ سانتیمتر و ارتفاع ۴۵ سانتیمتر بسازید اندازه را چاپ کنید.
فایل main.kt:
package example.myapp fun buildAquarium() { val myAquarium = Aquarium(width = 25, length = 25, height = 40) myAquarium.printSize() val myTower = TowerTank(diameter = 25, height = 40) myTower.printSize() }
۹. برنامه را اجرا کنید و خروجی را مشاهده کنید.
⇒ aquarium initializing rectangle Width: 25 cm Length: 25 cm Height: 40 cm Volume: 25 l Water: 22.5 l (90.0% full) aquarium initializing cylinder Width: 25 cm Length: 25 cm Height: 40 cm Volume: 18 l Water: 14.4 l (80.0% full)