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("Машина айдап жатат")
}
}