Sdílet prostřednictvím


Opětovné použití objektů

Důležitým cílem každého objektového modelu je umožnit autorům objektů opakovaně používat a rozšiřovat objekty poskytované ostatními jako části vlastních implementací. Jedním ze způsobů, jak to udělat v jazyce Microsoft Visual C++ a dalších jazycích, je použití implementační dědičnosti, což umožňuje objektu jako podtřída dědit některé jeho funkce z jiného objektu a zároveň překrýt jiné funkce.

Problém pro interakci objektů pro celou organizaci pomocí tradiční dědičnosti implementace spočívá v tom, že kontrakt (rozhraní) mezi objekty v hierarchii implementace není jasně definován. Ve skutečnosti je implicitní a nejednoznačný. Když nadřazený nebo podřízený objekt změní svou implementaci, chování souvisejících komponent se může stát nedefinovaným nebo nestabilně implementováno. V každé jedné aplikaci, kde je možné implementaci spravovat jediným technickým týmem, který aktualizuje všechny komponenty najednou, to není vždy zásadní problém. V prostředí, kde jsou komponenty jednoho týmu sestaveny jako černá skříňka z opakovaného použití jiných komponent vytvořených jinými týmy, tento typ nestability ohrožuje opětovné použití. Dědičnost implementace navíc obvykle funguje pouze v rámci hranic procesu. Díky tomu je tradiční dědičnost implementace nepraktická pro velké a vyvíjející se systémy složené ze softwarových komponent vytvořených mnoha technickými týmy.

Klíčem k vytváření opakovaně použitelných komponent je schopnost s objektem zacházet jako s neprůhláhlým rámečkem. To znamená, že část kódu, která se pokouší znovu použít jiný objekt, nic nezná a nepotřebuje nic vědět o vnitřní struktuře nebo implementaci použité komponenty. Jinými slovy, kód, který se pokouší znovu použít komponentu, závisí na chování objektu a ne na jeho přesné implementaci.

Aby bylo dosaženo opětovného použití black-box, COM používá jiné osvědčené mechanismy opětovného použití, jako jsou omezení/delegování a agregace.

Poznámka

Pro zjednodušení, objekt, který se znovu používá, se nazývá vnitřní objekt, a objekt, který tento vnitřní objekt využívá, je vnější objekt.

 

Je důležité pamatovat si v obou těchto mechanismech, jak se vnější objekt jeví svým klientům. Pokud jde o klienty, oba objekty implementují všechna rozhraní, na která může klient získat ukazatel. Klient zachází s vnějším objektem jako neprůmyslným rámečkem, a proto se nezajímá, ani nemusí starat o vnitřní strukturu vnějšího objektu"klient se stará pouze o chování.

Další informace najdete v následujících tématech: