Sobes.tech
Junior

Swift тилинде мурасымчылык кантип иштейт?

sobes.tech AI

AIден жооп

Swiftте мурас берүү класстар аркылуу ишке ашырылат. Бир класс башка класстын мүлктөрүн жана ыкмаларын мурас катары алат.

  • Негизги класс: Башка класстар мурас алган класс. Башка класстан мурас албайт.
  • Өндүрүүчү класс (мурас алгыч): Негизги классынан мурас алган класс. Жаңы мүнөздөмөлөр жана ыкмаларды кошо алат, мурас алгандарын кайра аныктай алат.

Негизги учурлар:

  • Swift гана бирдиктүү мурасти колдойт (класс бир гана классынан мурас алат).
  • Ключ сөзү class колдонулат класс аныктоо үчүн.
  • Класс атынан кийин эки нук : колдонулат, андан кийин негизги класс аты жазылат.
  • ыкмалар жана мүнөздөмөлөр override клуч сөзү менен кайра аныкталат.
  • final клуч сөзү менен класс, ыкма же мүнөздөмө алдын ала тыюу салынат.
// Негизги класс
class Vehicle {
    var currentSpeed = 0.0

    func accelerate() {
        currentSpeed += 10
    }

    func description() -> String {
        return "traveling at \(currentSpeed) mph"
    }
}

// Өндүрүүчү класс
class Car: Vehicle {
    var gear = 1

    // ыкманы кайра аныктоо
    override func accelerate() {
        super.accelerate() // Негизги класс ыкмасын чакыруу
        gear += 1
    }

    // Жаңы ыкма кошуу
    func changeGear(to newGear: Int) {
        gear = newGear
    }

    // Мүлктү кайра аныктоо (есептелүүчү)
    override func description() -> String {
        return super.description() + " in gear \(gear)"
    }
}

// Тыйым салынган класс
final class Motorcycle: Vehicle {
    // Өзүнүн мүнөздөмөлөрү жана ыкмалары болушу мүмкүн, бирок мурас алууга болбойт
}

Мурус берүү артыкчылыктары:

  • Кодду кайра колдонуу: Мурус алгандар негизги класс функцияларын колдонушат.
  • Полиморфизм: Башка класстардагы объекттер менен иштөө мүмкүнчүлүгү, негизги класс аркылуу.
  • Кеңейтүү мүмкүнчүлүгү: Мурус алгандарда жаңы функционалдуулук кошуу, негизги классты өзгөртпөстөн.

Мурус берүү кемчиликтери:

  • Катуу байланыш: Негизги класста жасалган өзгөртүүлөр мурас алгандарга таасир этиши мүмкүн.
  • Ромб маселеси (көп мурас алуу тилдеринде): Swiftте жок, бирдиктүү мураска байланыштуу.
  • Иерархиянын кыйынчылыгы: Терең иерархиялар түшүнүү жана колдоо үчүн кыйын болушу мүмкүн.

Swift мурас алууну композицияга караганда артык көрөт, ал ийкемдүүлүк жана кодду кайра колдонуу үчүн. Бирок, мурас берүү иерархиялык түзүмдөрдү түзүү жана ООП принциптерин ишке ашыруу үчүн маанилүү инструмент бойдон калууда.