Diferența dintre delegarea și depășirea stivei în limba rusă

Acestea sunt concepte diferite.

Delegația este atunci când o parte din clasa muncitoare "se schimbă" în alte clase.

De exemplu, managerul de dezvoltare, primind o comandă pentru o nouă funcție, deleagă această sarcină unuia dintre subordonații săi.

Un exemplu de delegare în programare este atunci când o clasă care efectuează un algoritm complex își logizează acțiunile nu în mod independent (prin deschiderea unui fișier și adăugarea acestuia), dar utilizând clasa Logger. chemând în locul său corect metodele sale.

De obicei, delegația se opune punerii în aplicare a unei anumite clase. De exemplu, dacă aveți o clasă "atotputernică", atunci este mai bine să o împărțiți în mai multe clase, fiecare având o zonă de responsabilitate proprie. Clasa principală se va ocupa doar de expedierea apelurilor între aceste clase.

O compoziție este atunci când relația "part-integer" (hasa) este trasată în mod clar între obiectele modelate.

De exemplu, atunci când modelăm o mașină, este normal să presupunem că motorul face parte din mașină. Programând acest model, exprimați acest lucru în faptul că obiectul clasei Motorul devine membru al clasei Auto.

Compozițiile se opun, de obicei, agregării și asocierii. Agregarea este similară unei compoziții prin aceea că este și o relație parțială întreagă. dar nu există nici o relație de proprietate între obiecte. De exemplu, un "grup de elevi" este o parte componentă a unui grup, dar un student poate exista în afara grupului. Asta înseamnă că distrugătorul grupului nu ar trebui să "omoare" obiectele studențești. Asociația exprimă orice relație între obiecte care pot invoca metodele reciproce.

Adică, delegația poate fi organizată având ca relație de asociere. și raportul compoziției între obiecte.

Mai multe compoziții contractează moștenirea. Dar în acest caz, compoziția și delegarea sunt sinonime. În cazul moștenirii, luăm metodele comune la baza de bază Base. și diferite implementări în clasa Derived1. Derived2. Creând o instanță a uneia dintre clasele Derived, obținem funcționalitatea necesară a obiectului.

Dar același lucru se poate face într-un mod diferit. În clasa Base, rămânem în continuare metodele generale și adăugăm o referință (pointer) (adică agregați pointerul de implementare) la interfața helper IRealization. Metodele auxiliare sunt implementate diferit în clasele Realizare1. Realization2. care moștenesc * interfața IRealization. Acum, în funcție de ce obiect al clasei Realizare se va baza la obiectul Base. vom avea diferite funcționalități. Baza își deleagă responsabilitățile față de IRealizare.

Compoziția (împreună cu moștenirea) este o modalitate de formare a comportamentului unei anumite clase. Delegația este modalitatea de a determina responsabilitatea pentru un anumit comportament.

În cazul moștenirii, responsabilitatea este delegată la baza și / sau la clasa derivată. În cazul unei compoziții, responsabilitatea este delegată la clasele agregate (incluse în clasa dvs. la etapa instanței). Alte modalități de delegare sunt, de exemplu, aspecte.

Ie un răspuns mai concis la întrebarea dvs. va fi: Compoziția este o modalitate de a asigura delegarea responsabilității pentru comportament (funcționalitate). Alternative la compoziție sunt moștenirea, aspectele și impuritățile.

Un exemplu de delegare printr-o compoziție este modelul de proiectare "Strategie", iar un exemplu de implementare este clasa TreeMap, constructorul căreia acceptă parametrul Comparator, delegând astfel responsabilitatea pentru sortarea elementelor.

Articole similare