window.pipedriveLeadboosterConfig = { base: pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster on jo olemassa') } 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 }) }, } } })() SAADA VAI OLLA? - The Codest
Codest
  • Tietoa meistä
  • Palvelut
    • Ohjelmistokehitys
      • Frontend-kehitys
      • Backend-kehitys
    • Staff Augmentation
      • Frontend-kehittäjät
      • Backend-kehittäjät
      • Tietoinsinöörit
      • Pilvi-insinöörit
      • QA insinöörit
      • Muut
    • Se neuvoa-antava
      • Tilintarkastus & konsultointi
  • Toimialat
    • Fintech & pankkitoiminta
    • E-commerce
    • Adtech
    • Terveysteknologia
    • Valmistus
    • Logistiikka
    • Autoteollisuus
    • IOT
  • Arvo
    • TOIMITUSJOHTAJA
    • CTO
    • Toimituspäällikkö
  • Tiimimme
  • Tapaustutkimukset
  • Tiedä miten
    • Blogi
    • Tapaamiset
    • Webinaarit
    • Resurssit
Työurat Ota yhteyttä
  • Tietoa meistä
  • Palvelut
    • Ohjelmistokehitys
      • Frontend-kehitys
      • Backend-kehitys
    • Staff Augmentation
      • Frontend-kehittäjät
      • Backend-kehittäjät
      • Tietoinsinöörit
      • Pilvi-insinöörit
      • QA insinöörit
      • Muut
    • Se neuvoa-antava
      • Tilintarkastus & konsultointi
  • Arvo
    • TOIMITUSJOHTAJA
    • CTO
    • Toimituspäällikkö
  • Tiimimme
  • Tapaustutkimukset
  • Tiedä miten
    • Blogi
    • Tapaamiset
    • Webinaarit
    • Resurssit
Työurat Ota yhteyttä
Takaisin nuoli PALAA TAAKSE
2016-09-10
Ohjelmistokehitys

SAADA VAI OLLA?

Katarzyna Jaruga

Olio-ohjelmointia opetellessa ja olioiden, kenttien ja metodien perusteiden hallinnan jälkeen suurin osa ajasta kuluu periytymiseen. Perinnöllisyys tarkoittaa sitä, että saamme jonkin osan toteutuksesta perusluokasta. Sinun on vain luotava perusluokan aliluokka periyttääksesi kaikki muut kuin yksityiset kentät ja metodit.

Auto ja lentokone ovat kulkuneuvoja, joten on selvää, että nämä molemmat luokat on laajennettava niiden yhteisestä perusluokasta nimeltä Vehicle. Tämä on tyypillinen akateeminen esimerkki, mutta päättäessämme näiden luokkien sitomisesta periytymissuhteella meidän on tiedostettava tietyt seuraukset.

Kuva 1 Perintösuhteen toteuttaminen.

Tässä tapauksessa luokat ovat tiiviisti sidoksissa toisiinsa - tämä tarkoittaa, että muutokset jokaisen luokan käyttäytymiseen voidaan saavuttaa tekemällä muutoksia perusluokkaan. koodi. Tämä voi olla sekä etu että haitta - se riippuu siitä, millaista käyttäytymistä odotamme. Jos periytymistä sovelletaan väärään aikaan, uuden funktion lisääminen voi kohdata joitakin toteutusvaikeuksia, koska se ei sovi luotuun luokkamalliin. Meidän on valittava koodin monistamisen ja mallin uudelleenjärjestelyn välillä - ja se voi olla todella aikaa vievä prosessi. Voimme kutsua periytymissuhdetta toteuttavaa koodia "avoimeksi-suljetuksi" - tämä tarkoittaa, että se on avoin laajennuksille mutta suljettu muutoksille. Jos oletetaan, että Vehicle-luokassa on määritelty jokaisen ajoneuvon yleinen moottoritoiminto, niin sillä hetkellä, kun haluaisimme lisätä moottorittoman ajoneuvon (esim. polkupyörän) mallin luokkahierarkiaamme, meidän pitäisi tehdä vakavia muutoksia luokkiin.

luokka Ajoneuvo
  def start_engine
  end

  def stop_engine
  end
end

class Lentokone < Ajoneuvo
  def move
    start_engine
    ...
    stop_engine
  end
end

Koostumus

Jos olemme kiinnostuneita vain jostain osasta olemassa olevan luokan käyttäytymistä, hyvä vaihtoehto periytymiselle on käyttää koostumusta. Sen sijaan, että luomme alaluokkia, jotka perivät kaiken käyttäytymisen (ne, joita tarvitsemme, ja ne, joita emme tarvitse lainkaan), voimme eristää tarvitsemamme toiminnot ja varustaa objektimme viittauksilla niihin. Näin luovumme ajatuksesta, että objekti on eräänlainen peruskohde, sen puolesta, että väitetään, että se sisältää vain joitakin osia sen ominaisuuksista.

Kuva 2 Koostumuksen käyttäminen

Tätä lähestymistapaa noudattaen voimme eristää moottorin toiminnasta vastaavan koodin itsenäiseen luokkaan nimeltä Engine ja sijoittaa viittauksen siihen vain luokkiin, jotka edustavat ajoneuvoja, joissa on moottori. Toimintojen eristäminen komposition avulla tekee Vehicle-luokkarakenteesta yksinkertaisemman ja vahvistaa yksittäisten luokkien kapselointia. Nyt ainoa tapa, jolla ajoneuvot voivat vaikuttaa moottoriin, on käyttää sen julkista rajapintaa, koska niillä ei ole enää tietoa sen toteutuksesta. Lisäksi sen avulla voidaan käyttää erityyppisiä moottoreita eri ajoneuvoissa ja jopa vaihtaa niitä keskenään ohjelman ollessa käynnissä. Komposition käyttäminen ei tietenkään ole virheetöntä - luomme löyhästi toisiinsa kytketyn luokkasarjan, jota voidaan helposti laajentaa ja joka on avoin muutoksille. Mutta samaan aikaan jokainen luokka on yhteydessä moniin muihin luokkiin, ja sillä on oltava tietoa niiden rajapinnoista.

luokka Ajoneuvo
end

luokka Moottori
  def start
  end

  def stop
  end
end

class Plane < Ajoneuvo
  def initialize
    @engine = Engine.new
  end

  def move
    @engine.start
    @engine.stop
  end

  def change_engine(uusi_moottori)
    @engine = new_engine
  end
end

Valinta

Molemmilla lähestymistavoilla on hyvät ja huonot puolensa, joten miten valita niiden välillä? Perinnöllisyys on erikoistuminen, joten niitä on parasta soveltaa vain ongelmiin, joissa on "is-a"-tyyppisuhteita - siis käsittelemme todellista tyyppihierarkiaa. Koska periytyminen liittää luokat tiukasti toisiinsa, meidän on ensinnäkin aina harkittava, haluammeko käyttää kompositio vai emme. Kompositio tulisi soveltaa ongelmiin, joissa on "has-a"-tyyppisuhteita - luokassa on siis monia osia, mutta se on jotain muuta kuin joukko luokkia. Lentokone koostuu osista, mutta yksinään se on jotain enemmän - sillä on lisäkykyjä, kuten lentäminen. Jatketaan tämän esimerkin jatkamista, yksittäiset osat voivat esiintyä eri asiantuntijavaihtoehdoissa, ja silloin on hyvä hetki käyttää periytymistä.

Sekä periytyminen että kompositio ovat vain työkaluja, jotka ohjelmoijilla on käytössään, joten oikean työkalun valitseminen tiettyyn ongelmaan vaatii kokemusta. Harjoitellaan siis ja opitaan virheistämme 🙂 .

Aiheeseen liittyvät artikkelit

Ohjelmistokehitys

Tulevaisuuden web-sovellusten rakentaminen: The Codest:n asiantuntijatiimin näkemyksiä

Tutustu siihen, miten The Codest loistaa skaalautuvien, interaktiivisten verkkosovellusten luomisessa huipputeknologian avulla ja tarjoaa saumattomia käyttäjäkokemuksia kaikilla alustoilla. Lue, miten asiantuntemuksemme edistää digitaalista muutosta ja liiketoimintaa...

THECODEST
Ohjelmistokehitys

Top 10 Latviassa toimivaa ohjelmistokehitysyritystä

Tutustu Latvian parhaisiin ohjelmistokehitysyrityksiin ja niiden innovatiivisiin ratkaisuihin uusimmassa artikkelissamme. Tutustu siihen, miten nämä teknologiajohtajat voivat auttaa nostamaan liiketoimintaasi.

thecodest
Yritys- ja skaalausratkaisut

Java-ohjelmistokehityksen perusteet: A Guide to Outsourcing Successfully

Tutustu tähän keskeiseen oppaaseen Java-ohjelmistokehityksen onnistuneesta ulkoistamisesta tehokkuuden parantamiseksi, asiantuntemuksen saamiseksi ja projektin onnistumiseksi The Codestin avulla.

thecodest
Ohjelmistokehitys

Perimmäinen opas ulkoistamiseen Puolassa

Ulkoistamisen lisääntyminen Puolassa johtuu taloudellisesta, koulutuksellisesta ja teknologisesta kehityksestä, joka edistää tietotekniikan kasvua ja yritysystävällistä ilmapiiriä.

TheCodest
Yritys- ja skaalausratkaisut

Täydellinen opas IT-tarkastustyökaluihin ja -tekniikoihin

Tietotekniikan tarkastuksilla varmistetaan turvalliset, tehokkaat ja vaatimustenmukaiset järjestelmät. Lue lisää niiden merkityksestä lukemalla koko artikkeli.

Codest
Jakub Jakubowicz teknologiajohtaja ja toinen perustaja

Tilaa tietopankkimme ja pysy ajan tasalla IT-alan asiantuntemuksesta.

    Tietoa meistä

    The Codest - Kansainvälinen ohjelmistokehitysyritys, jolla on teknologiakeskuksia Puolassa.

    Yhdistynyt kuningaskunta - pääkonttori

    • Toimisto 303B, 182-184 High Street North E6 2JA
      Lontoo, Englanti

    Puola - Paikalliset teknologiakeskukset

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Krakova
    • Brain Embassy, Konstruktorska
      11, 02-673 Varsova, Puola

      Codest

    • Etusivu
    • Tietoa meistä
    • Palvelut
    • Tapaustutkimukset
    • Tiedä miten
    • Työurat
    • Sanakirja

      Palvelut

    • Se neuvoa-antava
    • Ohjelmistokehitys
    • Backend-kehitys
    • Frontend-kehitys
    • Staff Augmentation
    • Backend-kehittäjät
    • Pilvi-insinöörit
    • Tietoinsinöörit
    • Muut
    • QA insinöörit

      Resurssit

    • Faktoja ja myyttejä yhteistyöstä ulkoisen ohjelmistokehityskumppanin kanssa
    • Yhdysvalloista Eurooppaan: Miksi amerikkalaiset startup-yritykset päättävät muuttaa Eurooppaan?
    • Tech Offshore -kehityskeskusten vertailu: Tech Offshore Eurooppa (Puola), ASEAN (Filippiinit), Euraasia (Turkki).
    • Mitkä ovat teknologiajohtajien ja tietohallintojohtajien tärkeimmät haasteet?
    • Codest
    • Codest
    • Codest
    • Privacy policy
    • Verkkosivuston käyttöehdot

    Tekijänoikeus © 2025 by The Codest. Kaikki oikeudet pidätetään.

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