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-ը նախընտրում է կոմպոզիցիան ժառանգության փոխարեն՝ ավելի ճկունություն և կոդի վերօգտագործում ապահովելու համար, հատկապես պրոտոկոլների և ընդլայնումների դեպքում: Այնուամենայնիվ, ժառանգությունը կարևոր գործիք է հորիզոնական կառուցվածքներ ստեղծելու և ՕՕՊ սկզբունքները իրականացնելիս: