Paveldėjimas prieš sudėtį
Paveldėjimas ir sudėtis yra dvi svarbios OOP (objektinio programavimo) sąvokos. Paprastai tariant, tiek sudėtis, tiek paveldėjimas susijęs su papildomų savybių ar elgesio suteikimu klasei. Paveldėjimas – tai klasės galimybė paveldėti savybes ir elgesį iš pirminės klasės, ją išplečiant. Kita vertus, kompozicija yra klasės galimybė kaip narių duomenis turėti skirtingų klasių objektus.
Kas yra paveldėjimas?
Kaip minėta, paveldėjimas yra klasės galimybė paveldėti savybes ir elgesį iš pirminės klasės, ją išplečiant. Paveldėjimas iš esmės suteikia kodo pakartotinį naudojimą, leidžiant išplėsti esamos klasės savybes ir elgesį naujai apibrėžta klase. Jei A klasė išplečia B, tada B klasė vadinama pagrindine klase (arba super klase), o A klasė vadinama antrine klase (arba išvestine klase / poklase). Šiame scenarijaus pavyzdyje A klasė paveldės visus viešuosius ir saugomus aukščiausios klasės (B) atributus ir metodus. Poklasis gali pasirinktinai nepaisyti (suteikti metodams naują arba išplėstą funkcionalumą) elgesį, paveldėtą iš pirminės klasės.
Paveldėjimas reiškia „yra“ryšį OOP. Tai iš esmės reiškia, kad A taip pat yra B. Kitaip tariant, B gali būti klasė, turinti bendrą tam tikro realaus pasaulio objekto aprašymą, tačiau A nurodo tam tikrą specializaciją. Esant realaus pasaulio programavimo problemai, Asmens klasę galima išplėsti, kad būtų sukurta darbuotojų klasė. Tai vadinama specializacija. Bet jūs taip pat pirmiausia galite sukurti klasę Darbuotojas, o tada apibendrinti ją taip pat į Asmens klasę (t.e. apibendrinimas). Šiame pavyzdyje Darbuotojas turės visas Asmens savybes ir elgesį (t. y. darbuotojas taip pat yra asmuo) ir gali turėti tam tikrų papildomų funkcijų (taigi, asmuo nėra darbuotojas).
Kas yra kompozicija?
Sudėtis yra klasės galimybė kaip narių duomenis turėti skirtingų klasių objektus. Pavyzdžiui, A klasėje gali būti B klasės objektas. Čia visi viešieji metodai (arba funkcijos), apibrėžti B, gali būti vykdomi A klasėje. A klasė tampa konteineriu, o B klasė – esančia klase. Kompozicija taip pat vadinama konteineriu. Šiame pavyzdyje galima sakyti, kad A klasę sudaro B klasė. OOP sudėtis reiškia „has-a“ryšį. Svarbu pažymėti, kad nors konteineris turi prieigą vykdyti visus viešuosius įtrauktos klasės metodus, jis negali pakeisti ar suteikti papildomų funkcijų. Kalbant apie realaus pasaulio programavimo problemą, klasėje „Form“gali būti „TextBox“klasės objektas, taigi galima sakyti, kad formoje yra „TextBox“(arba formą sudaro „TextBox“).
Kuo skiriasi paveldėjimas ir sudėtis?
Nors paveldėjimas ir sudėtis yra dvi OOP sąvokos, jos labai skiriasi tuo, ką leidžia programuotojui pasiekti. Paveldėjimas – tai klasės galimybė paveldėti ypatybes ir elgesį iš pirminės klasės ją išplečiant, o kompozicija – tai klasės gebėjimas turėti skirtingų klasių objektus kaip narių duomenis. Jei klasė išplečiama, ji paveldi visas viešąsias ir saugomas savybes / elgseną, o poklasis gali nepaisyti šių veiksmų. Bet jei klasė yra kitoje, konteineris negauna galimybės keisti ar pridėti esančios klasės elgesio. Paveldėjimas reiškia santykį „yra-a“OOP, o sudėtis reiškia „has-a“ryšį.