window.pipedriveLeadboosterConfig = { base: leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster on juba olemas') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() OMADA VÕI OLLA? - The Codest
The Codest
  • Meie kohta
  • Teenused
    • Tarkvaraarendus
      • Frontend arendus
      • Backend arendus
    • Staff Augmentation
      • Frontend arendajad
      • Backend arendajad
      • Andmeinsenerid
      • Pilveinsenerid
      • QA insenerid
      • Muud
    • See nõuandev
      • Audit ja nõustamine
  • Tööstusharud
    • Fintech & pangandus
    • E-commerce
    • Adtech
    • Healthtech
    • Tootmine
    • Logistika
    • Autotööstus
    • IOT
  • Väärtus
    • CEO
    • CTO
    • Tarnejuht
  • Meie meeskond
  • Case Studies
  • Tea kuidas
    • Blogi
    • Kohtumised
    • Veebiseminarid
    • Ressursid
Karjäärivõimalused Võtke ühendust
  • Meie kohta
  • Teenused
    • Tarkvaraarendus
      • Frontend arendus
      • Backend arendus
    • Staff Augmentation
      • Frontend arendajad
      • Backend arendajad
      • Andmeinsenerid
      • Pilveinsenerid
      • QA insenerid
      • Muud
    • See nõuandev
      • Audit ja nõustamine
  • Väärtus
    • CEO
    • CTO
    • Tarnejuht
  • Meie meeskond
  • Case Studies
  • Tea kuidas
    • Blogi
    • Kohtumised
    • Veebiseminarid
    • Ressursid
Karjäärivõimalused Võtke ühendust
Tagasi nool TAGASI
2016-09-10
Tarkvaraarendus

OMADA VÕI OLLA?

Katarzyna Jaruga

Objektipõhise programmeerimise õppimise ajal ja pärast objektide, väljade ja meetodite põhitõdede omandamist kulub suurem osa ajast pärimisele. Pärimine tähendab, et me omandame mingi osa implementatsioonist baasklassist. Tuleb lihtsalt luua baasklassi alamklass i, et pärida iga mitte-privaatne väli ja meetod.

Auto ja lennuk on sõidukid, seega on ilmselge, et mõlemad klassid tuleks laiendada nende ühisest baasklassist nimega Sõiduk. See on tüüpiline akadeemiline näide, kuid otsustades nende klasside sidumise üle pärimisrelatsiooniga, peaksime olema teadlikud mõningatest tagajärgedest.

Joonis 1 Pärimussuhte rakendamine.

Sellisel juhul on klassid omavahel tihedalt seotud - see tähendab, et iga klassi käitumise muutmine on võimalik saavutada baasklassi muutmise teel. kood. See võib olla nii eelis kui ka puudus - see sõltub sellest, millist käitumist me ootame. Kui pärimist rakendatakse valel ajal, võib uue funktsiooni lisamisel tekkida rakendamisraskusi, sest see ei sobi loodud klassimudeliga. Me peame valima koodi dubleerimise ja mudeli ümberkorraldamise vahel - ja see võib olla tõesti aeganõudev protsess. Me võime nimetada koodi, mis täidab pärimisrelatsiooni, "avatud-suletud" - see tähendab, et see on avatud laiendustele, kuid suletud muudatuste jaoks. Eeldades, et sõidukiklassis on iga sõiduki üldine, defineeritud mootori operatsioon, siis hetkel, kui me tahaksime lisada meie klassihierarhiasse mootorita sõiduki (nt jalgratta) mudeli, peaksime tegema tõsiseid muudatusi oma klassides.

klass Sõiduk
  def start_mootor
  end

  def stop_mootor
  end
end

class Lennuk < Sõiduk
  def move
    start_mootor
    ...
    stop_gine
  end
end

Koostis

Kui meid huvitab ainult mingi osa olemasoleva klassi käitumisest, on hea alternatiiv pärimisele kompositsiooni kasutamine. Selle asemel, et luua alamklassi, mis pärivad kõik käitumised (need, mida me vajame, ja need, mida me üldse ei vaja), saame isoleerida meile vajalikud funktsioonid ja varustada oma objektid viidetega neile. Sellisel viisil loobume mõttest, et objekt on tüüpi baasobjekt, kasuks väide, et see sisaldab ainult mõned osad selle omadustest.

Joonis 2 Koostise kasutamine

Seda lähenemisviisi järgides saame eraldada mootori töö eest vastutava koodi autonoomsesse klassi nimega Engine ja paigutada viited sellele ainult mootoritega sõidukeid esindavates klassides. Funktsioonide isoleerimine kompositsiooni abil muudab sõidukiklassi struktuuri lihtsamaks ja tugevdab üksikute klasside kapseldamist. Nüüd saavad sõidukid mõjutada mootorit ainult selle avaliku liidese abil, sest neil ei ole enam teavet selle rakendamise kohta. Veelgi enam, see võimaldab kasutada eri tüüpi mootoreid erinevates sõidukites ja isegi võimaldada nende vahetamist programmi töötamise ajal. Loomulikult ei ole kompositsiooni kasutamine veatu - me loome lõdvalt seotud klassikomplekti, mida saab kergesti laiendada ja mis on avatud muutmiseks. Kuid samal ajal on iga klass seotud paljude teiste klassidega ja peab omama teavet nende liideste kohta.

klass Sõiduk
end

klass Mootor
  def start
  end

  def stop
  end
end

class Lennuk < Sõiduk
  def initialize
    @engine = Engine.new
  end

  def move
    @engine.start
    @engine.stop
  end

  def change_engine(new_engine)
    @engine = new_engine
  end
end

Valik

Mõlemal kirjeldatud lähenemisviisil on nii eelised kui ka puudused, nii et kuidas nende vahel valida? Pärimine on spetsialiseerumine, seega on kõige parem neid rakendada ainult probleemide puhul, kus on olemas "is-a" tüüpsuhted - nii et me tegeleme tõelise tüübihierarhiaga. Kuna pärimine seob klassid omavahel tihedalt, siis esiteks peaksime alati kaaluma, kas kasutada kompositsiooni või mitte. Kompositsiooni tuleks rakendada probleemide puhul, kus on olemas "on-a" tüübisuhted - seega klassil on palju osi, kuid see on midagi enamat kui klasside kogum. Lennuk koosneb osadest, kuid üksi on ta midagi enamat - tal on lisavõimeid, näiteks lendamine. Selle näitega edasi minnes võivad üksikud osad esineda erinevates erialavariantides ja siis on hea hetk kasutada pärimist.

Nii pärandamine kui ka kompositsioon on vaid vahendid, mis on programmeerijate käsutuses, seega nõuab õige vahendi valimine konkreetse probleemi jaoks kogemust. Nii et harjutame ja õpime oma vigadest 🙂 .

Seotud artiklid

Tarkvaraarendus

Tulevikukindlate veebirakenduste loomine: The Codest ekspertide meeskonna ülevaade

Avastage, kuidas The Codest paistab skaleeritavate, interaktiivsete veebirakenduste loomisel silma tipptehnoloogiatega, mis pakuvad sujuvat kasutajakogemust kõigil platvormidel. Saate teada, kuidas meie eksperditeadmised aitavad kaasa digitaalsele ümberkujundamisele ja äritegevusele...

THECODEST
Tarkvaraarendus

Top 10 Lätis asuvat tarkvaraarendusettevõtet

Tutvu Läti parimate tarkvaraarendusettevõtete ja nende innovaatiliste lahendustega meie viimases artiklis. Avastage, kuidas need tehnoloogiajuhid saavad aidata teie äri edendada.

thecodest
Enterprise & Scaleups lahendused

Java tarkvaraarenduse põhitõed: A Guide to Outsourcing Successfully

Tutvuge selle olulise juhendiga, kuidas edukalt outsourcing Java tarkvara arendada, et suurendada tõhusust, pääseda ligi eksperditeadmistele ja edendada projekti edu The Codest abil.

thecodest
Tarkvaraarendus

Ülim juhend Poola allhanke kohta

outsourcing kasv Poolas on tingitud majanduslikust, hariduslikust ja tehnoloogilisest arengust, mis soodustab IT kasvu ja ettevõtlussõbralikku kliimat.

TheCodest
Enterprise & Scaleups lahendused

Täielik juhend IT-auditi vahendite ja tehnikate kohta

IT-auditid tagavad turvalised, tõhusad ja nõuetele vastavad süsteemid. Lisateavet nende tähtsuse kohta leiate kogu artiklist.

The Codest
Jakub Jakubowicz CTO & kaasasutajad

Tellige meie teadmistebaas ja jääge kursis IT-sektori eksperditeadmistega.

    Meie kohta

    The Codest - rahvusvaheline tarkvaraarendusettevõte, mille tehnoloogiakeskused asuvad Poolas.

    Ühendkuningriik - peakorter

    • Büroo 303B, 182-184 High Street North E6 2JA
      London, Inglismaa

    Poola - kohalikud tehnoloogiakeskused

    • Fabryczna büroopark, Aleja
      Pokoju 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Varssavi, Poola

      The Codest

    • Kodu
    • Meie kohta
    • Teenused
    • Case Studies
    • Tea kuidas
    • Karjäärivõimalused
    • Sõnastik

      Teenused

    • See nõuandev
    • Tarkvaraarendus
    • Backend arendus
    • Frontend arendus
    • Staff Augmentation
    • Backend arendajad
    • Pilveinsenerid
    • Andmeinsenerid
    • Muud
    • QA insenerid

      Ressursid

    • Faktid ja müüdid koostööst välise tarkvaraarenduspartneriga
    • USAst Euroopasse: Miks otsustavad Ameerika idufirmad Euroopasse ümber asuda?
    • Tech Offshore arenduskeskuste võrdlus: Euroopa (Poola), ASEAN (Filipiinid), Euraasia (Türgi).
    • Millised on CTO ja CIOde peamised väljakutsed?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Copyright © 2025 by The Codest. Kõik õigused kaitstud.

    etEstonian
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch elGreek etEstonian