The Codest
  • O nás
  • Služby
    • Vývoj softwaru
      • Vývoj frontendů
      • Vývoj backendu
    • Staff Augmentation
      • Vývojáři frontendů
      • Vývojáři backendu
      • Datoví inženýři
      • Cloudoví inženýři
      • Inženýři QA
      • Další
    • To Advisory
      • Audit a poradenství
  • Odvětví
    • Fintech a bankovnictví
    • E-commerce
    • Adtech
    • Healthtech
    • Výroba
    • Logistika
    • Automobilový průmysl
    • IOT
  • Hodnota za
    • CEO
    • CTO
    • Manažer dodávek
  • Náš tým
  • Case Studies
  • Vědět jak
    • Blog
    • Setkání
    • Webové semináře
    • Zdroje
Kariéra Spojte se s námi
  • O nás
  • Služby
    • Vývoj softwaru
      • Vývoj frontendů
      • Vývoj backendu
    • Staff Augmentation
      • Vývojáři frontendů
      • Vývojáři backendu
      • Datoví inženýři
      • Cloudoví inženýři
      • Inženýři QA
      • Další
    • To Advisory
      • Audit a poradenství
  • Hodnota za
    • CEO
    • CTO
    • Manažer dodávek
  • Náš tým
  • Case Studies
  • Vědět jak
    • Blog
    • Setkání
    • Webové semináře
    • Zdroje
Kariéra Spojte se s námi
Šipka zpět ZPĚT
2016-09-10
Vývoj softwaru

MÍT, NEBO BÝT?

Katarzyna Jaruga

Při výuce objektově orientovaného programování a po zvládnutí základů objektů, polí a metod strávíme většinu času dědičností. Dědičnost znamená, že přebíráme určitou část implementace ze základní třídy. Stačí vytvořit podtřídu základní třídy, abyste zdědili každé nesoukromé pole a metodu.

Auto a letadlo jsou dopravní prostředky, takže je zřejmé, že obě tyto třídy by měly být rozšířeny ze společné základní třídy Vehicle. To je typický akademický příklad, ale při rozhodování o provázání těchto tříd vztahem dědičnosti bychom si měli uvědomit některé důsledky.

Obr. 1 Implementace vztahu dědičnosti.

V tomto případě jsou třídy navzájem úzce propojeny - to znamená, že změny chování každé třídy lze dosáhnout provedením změn v základní třídě. kód. To může být výhoda i nevýhoda - záleží na tom, jaké chování očekáváme. Pokud je dědičnost použita v nesprávný okamžik, může se proces přidávání nové funkce setkat s implementačními potížemi, protože nebude odpovídat vytvořenému modelu třídy. Budeme si muset vybrat mezi duplikováním kódu a reorganizací našeho modelu - a to může být opravdu časově náročný proces. Kód, který provádí vztah dědičnosti, můžeme označit jako "otevřený-uzavřený" - to znamená, že je otevřený pro rozšíření, ale uzavřený pro modifikaci. Za předpokladu, že ve třídě Vozidlo existuje obecná, definovaná operace motoru, každého vozidla, v okamžiku, kdy bychom chtěli do hierarchie tříd přidat model bezmotorového vozidla (např. motorky), museli bychom v našich třídách provést závažné změny.

třída Vozidlo
  def start_engine
  end

  def stop_engine
  end
end

třída Plane < Vehicle
  def move
    start_engine
    ...
    stop_engine
  end
konec

Složení

Pokud nás zajímá pouze část chování existující třídy, je dobrou alternativou k dědičnosti použití kompozice. Místo vytváření podtříd, které dědí veškeré chování (ty, které potřebujeme, i ty, které vůbec nepotřebujeme), můžeme izolovat funkce, které potřebujeme, a vybavit naše objekty odkazy na ně. Tímto způsobem se vzdáme myšlenky, že objekt je typ základní objekt, ve prospěch tvrzení, že obsahuje pouze některé části jeho vlastností.

Obr. 2 Použití složení

Tímto přístupem můžeme izolovat kód, který je zodpovědný za provoz motoru, do autonomní třídy s názvem Engine a umístit odkaz na ni pouze do tříd, které představují vozidla s motorem. Izolování funkcí pomocí kompozice zjednoduší strukturu třídy Vozidlo a posílí zapouzdření jednotlivých tříd. Nyní mohou vozidla působit na motor pouze tak, že použijí jeho veřejné rozhraní, protože již nebudou mít informace o jeho implementaci. Navíc to umožní používat různé typy motorů v různých vozidlech, a dokonce umožní jejich výměnu za běhu programu. Použití kompozice samozřejmě není bezchybné - vytváříme volně propojenou množinu tříd, kterou lze snadno rozšiřovat a která je otevřená modifikacím. Zároveň je však každá třída propojena s mnoha dalšími třídami a musí mít informace o jejich rozhraních.

třída Vozidlo
konec

třída Motor
  def start
  end

  def stop
  end
end

class Plane < Vehicle
  def inicializovat
    @engine = Engine.new
  end

  def move
    @engine.start
    @engine.stop
  end

  def change_engine(new_engine)
    @engine = new_engine
  end
end

Volba

Oba popsané přístupy mají své výhody i nevýhody, jak si tedy mezi nimi vybrat? Dědičnost je specializace, takže je nejlepší je použít pouze pro problémy, ve kterých existují typové vztahy "is-a" - máme tedy co do činění se skutečnou hierarchií typů. Protože dědičnost těsně spojuje třídy dohromady, měli bychom v první řadě vždy zvážit, zda použít kompozici, nebo ne. Kompozici bychom měli použít u problémů, v nichž existují typové vztahy "má-a" - třída má tedy mnoho částí, ale je něčím víc než množinou tříd. Letadlo se skládá z částí, ale samo o sobě je něčím víc - má další schopnosti, například let. Půjdeme-li s tímto příkladem dále, mohou se jednotlivé části vyskytovat v různých specializovaných variantách, a pak je vhodný okamžik pro použití dědičnosti.

Dědičnost i kompozice jsou pouze nástroje, které mají programátoři k dispozici, takže výběr správného nástroje pro konkrétní problém vyžaduje zkušenosti. Pojďme tedy trénovat a učit se z vlastních chyb 🙂

Související články

Ilustrace zdravotnické aplikace pro chytré telefony s ikonou srdce a rostoucím zdravotním grafem, označená logem The Codest, která představuje digitální zdraví a řešení HealthTech.
Vývoj softwaru

Softwarové vybavení pro zdravotnictví: a případy použití

Nástroje, na které se dnes zdravotnické organizace spoléhají, se v ničem nepodobají papírovým kartám z doby před desítkami let. zdravotnický software dnes podporuje zdravotnické systémy, péči o pacienty a moderní poskytování zdravotní péče v klinických a...

NEJKRÁSNĚJŠÍ
Abstraktní ilustrace klesajícího sloupcového grafu se stoupající šipkou a zlatou mincí symbolizující efektivitu nákladů nebo úspory. V levém horním rohu se zobrazuje logo The Codest se sloganem "In Code We Trust" na světle šedém pozadí.
Vývoj softwaru

Jak rozšířit tým vývojářů bez ztráty kvality produktu

Zvětšujete svůj vývojový tým? Zjistěte, jak růst, aniž byste museli obětovat kvalitu produktu. Tento průvodce se zabývá příznaky, že je čas na škálování, strukturou týmu, najímáním zaměstnanců, vedením a nástroji - a také tím, jak může The Codest...

NEJKRÁSNĚJŠÍ
Vývoj softwaru

Vytváření webových aplikací odolných vůči budoucnosti: postřehy týmu odborníků The Codest

Zjistěte, jak společnost The Codest vyniká při vytváření škálovatelných, interaktivních webových aplikací pomocí nejmodernějších technologií, které poskytují bezproblémové uživatelské prostředí na všech platformách. Zjistěte, jak naše odborné znalosti podporují digitální transformaci a obchodní...

NEJKRÁSNĚJŠÍ
Vývoj softwaru

10 nejlepších lotyšských společností zabývajících se vývojem softwaru

V našem nejnovějším článku se dozvíte o nejlepších lotyšských společnostech zabývajících se vývojem softwaru a jejich inovativních řešeních. Zjistěte, jak mohou tito technologičtí lídři pomoci pozvednout vaše podnikání.

thecodest
Podniková a škálovací řešení

Základy vývoje softwaru v jazyce Java: A Guide to Outsourcing Successfully

Prozkoumejte tuto základní příručku o úspěšném vývoji softwaru outsourcing Java, abyste zvýšili efektivitu, získali přístup k odborným znalostem a dosáhli úspěchu projektu s The Codest.

thecodest

Přihlaste se k odběru naší znalostní databáze a získejte aktuální informace o odborných znalostech z oblasti IT.

    O nás

    The Codest - Mezinárodní společnost zabývající se vývojem softwaru s technologickými centry v Polsku.

    Spojené království - ústředí

    • Kancelář 303B, 182-184 High Street North E6 2JA
      Londýn, Anglie

    Polsko - Místní technologická centra

    • Kancelářský park Fabryczna, Aleja
      Pokoju 18, 31-564 Krakov
    • Brain Embassy, Konstruktorska
      11, 02-673 Varšava, Polsko

      The Codest

    • Home
    • O nás
    • Služby
    • Case Studies
    • Vědět jak
    • Kariéra
    • Slovník

      Služby

    • To Advisory
    • Vývoj softwaru
    • Vývoj backendu
    • Vývoj frontendů
    • Staff Augmentation
    • Vývojáři backendu
    • Cloudoví inženýři
    • Datoví inženýři
    • Další
    • Inženýři QA

      Zdroje

    • Fakta a mýty o spolupráci s externím partnerem pro vývoj softwaru
    • Z USA do Evropy: Proč se americké startupy rozhodly přesídlit do Evropy?
    • Srovnání technických vývojových center v zahraničí: Tech Offshore Evropa (Polsko), ASEAN (Filipíny), Eurasie (Turecko)
    • Jaké jsou hlavní výzvy CTO a CIO?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Copyright © 2026 by The Codest. Všechna práva vyhrazena.

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