Sobes.tech
Middle

Объектке багытталган программалоодо мурас алуу кайсы учурларда пайдалуу жана кайсы учурларда алдануу керек?

sobes.tech AI

AIден жооп

Мурас алуу пайдалуу үчүн:

  • Кодду кайра колдонуу: Жалпы функциялык негизги классга чыгарылат.
  • Түрлердин хиерархиясын түзүү (is-a мамилеси): Кайсы бир класс атайын түрү болуп саналганда.
  • Полиморфизм: Башка түрдөгү объекттерди жалпы интерфейс аркылуу иштетүү мүмкүнчүлүгү.
  • Функционалдуулукту кеңейтүү: Бар класска жаңы методдорду же талааларды кошуу.

Мурас алуудан баш тартуу керек, эгер:

  • Лисковтун ордуна коюу принциби бузулса: Келген класс негизги классты толук алмаштыра албайт, программа туура эмес иштейт.
  • Класстар ортосунда катуу байланышка ээ болуу: Негизги класста жасалган өзгөртүүлөр бардык туундуларына терс таасир этет.
  • Төртүнчү жактан келген функционалдуулукту бириктирүү керек болсо (has-a мамилеси): Композицияны колдонуу жакшы.
  • Иерархиянын ашыкча кыйынчылыгы: Терең мурас цепочкалары кармоо жана түшүнүү кыйын.
  • Кодду кайра колдонуу үчүн мурас, эгер функционалдуулук жалпы "тип" эмес болсо: Кызматтык класс жана делегирлөө колдонуу жакшы.
// Мурас алуу пайдалуу учур
open class Animal {
    open fun makeSound() {
        println("Жалпы жаныбар үнү")
    }
}

class Dog : Animal() { // Dog IS-A Animal
    override fun makeSound() {
        println("Ку-ку")
    }
}

class Cat : Animal() { // Cat IS-A Animal
    override fun makeSound() {
        println("Мяу")
    }
}
// Композиция мурас алуудан артыкчылык берген учур
class Engine {
    fun start() { println("Мотор иштетилди") }
}

// Car классы үчүн Engine мурас катары эмес
// class Car : Engine() // Жаман дизайн, Car - Engine эмес

class Car {
    private val engine = Engine() // Car HAS-A Engine
    fun drive() {
        engine.start()
        println("Машина айдап жатат")
    }
}