Programavimas

Paaiškinta asociacija, agregavimas ir sudėtis OOP

„Unified Modeling Language“ (UML) yra de facto į objektą orientuotų sistemų modeliavimo standartas. UML yra penki skirtingi santykių tipai: susiejimas, sujungimas, sudėtis, priklausomybė ir paveldėjimas. Šiame straipsnyje aptariamos pirmosios trys šios sąvokos, likusios paliekamos kitame tinklaraščio įraše.

Asociacija programuojant objektu

Asociacija yra semantiškai silpnas santykis (semantinė priklausomybė) tarp kitaip nesusijusių objektų. Asociacija yra dviejų ar daugiau objektų „vartojantis“ santykis, kuriame objektai turi savo gyvenimą ir nėra savininko.

Kaip pavyzdį įsivaizduokite santykius tarp gydytojo ir paciento. Gydytojas gali būti susijęs su keliais pacientais. Tuo pačiu metu vienas pacientas gali apsilankyti pas kelis gydytojus gydytis ar konsultuotis. Kiekvienas iš šių objektų turi savo gyvenimo ciklą ir nėra „savininko“ ar tėvų. Objektus, kurie yra asociacijos santykio dalis, galima sukurti ir sunaikinti savarankiškai.

UML susiejimo ryšį vaizduoja viena rodyklė. Asociacijos santykiai gali būti pavaizduoti kaip vienas prie vieno, vienas prie daugelio arba iš daugelio į daugelį (dar vadinamas kardinalumu). Iš esmės asociacijos ryšys tarp dviejų ar daugiau objektų žymi ryšių kelią (dar vadinamą nuoroda) tarp jų, kad vienas objektas galėtų siųsti pranešimą kitam. Šis kodo fragmentas parodo, kaip dvi klasės „BlogAccount“ ir „BlogEntry“ yra susijusios viena su kita.

viešosios klasės „BlogAccount“

   {

privatus „BlogEntry“ [] blogEntries;

// Kiti „BlogAccount“ klasės nariai

   }

viešoji klasė „BlogEntry“

   {

„Int32 blogId“;

eilutės užrašas;

eilutės tekstas;

// Kiti „BlogEntry“ klasės nariai

   }

Agregavimas į objektinį programavimą

Agregavimas yra specializuota dviejų ar daugiau objektų susiejimo forma, kurioje kiekvienas objektas turi savo gyvenimo ciklą, tačiau egzistuoja ir nuosavybės teisė. Apibendrinimas yra tipiškas visumos / dalies arba tėvų / vaiko santykis, tačiau jis gali reikšti fizinį uždarymą, o gal ir ne. Esminė sujungimo santykio savybė yra ta, kad visas asmuo ar tėvai (t. Y. Savininkas) gali egzistuoti be dalies ar vaiko ir atvirkščiai.

Pavyzdžiui, darbuotojas gali priklausyti vienam ar keliems organizacijos padaliniams. Tačiau pašalinus darbuotojo skyrių, darbuotojo objektas nebūtų sunaikintas, bet gyvuotų toliau. Atkreipkite dėmesį, kad santykiai tarp objektų, dalyvaujančių agregavime, negali būti abipusiai, t.y., skyrius gali „turėti“ darbuotoją, tačiau darbuotojas neturi skyriaus. Šiame kodo pavyzdyje agregavimo ryšys yra akivaizdus tarp „BlogAuthor“ ir „BlogAccount“ klasių.

viešosios klasės „BlogAuthor“

   {

privatus Int32 authorId;

privati ​​eilutė firstName;

privati ​​eilutė pavardė;

// Kiti „BlogAuthor“ klasės nariai

   }

viešosios klasės „BlogAccount“

   {

privatus „BlogEntry“ [] blogEntries;

// Kiti „BlogAccount“ klasės nariai

   }

Apibendrinimas paprastai pateikiamas UML, naudojant liniją su tuščiaviduriu deimantu. Kaip ir susiejimas, agregavimas gali apimti dalyvaujančių objektų tarpusavio santykį „vienas su vienu“, „vienas prieš daugelį“ arba „daug su daugeliu“. Santykių „vienas prieš daugelį“ arba „daugeliui į daugelį“ atveju galime pasakyti, kad tai yra nereikalingi santykiai.

Kompozicija programuojant objektą

Kompozicija yra specializuota agregavimo forma. Kompozicijoje, jei pagrindinis objektas yra sunaikintas, tada vaikų objektai taip pat nustoja egzistuoti. Kompozicija iš tikrųjų yra stipri agregacijos rūšis ir kartais vadinama „mirties“ santykiu. Pavyzdžiui, namas gali būti sudarytas iš vieno ar daugiau kambarių. Jei namas sunaikintas, sunaikinami ir visi kambariai, kurie yra namo dalis. Šis kodo fragmentas iliustruoja dviejų klasių - Namo ir Kambario - kompozicijos ryšį.

visuomenės klasės namas

{

privatus kambario kambarys;

viešieji rūmai ()

   {

kambarys = naujas kambarys ();

   }

}

Kaip ir agregavimas, kompozicija taip pat yra visuma / dalis arba tėvų / vaikų santykiai. Vis dėlto sudėties ar dalies gyvenimo ciklą kontroliuoja visas asmuo arba tėvas, kuriam jis priklauso. Reikėtų pažymėti, kad ši kontrolė gali būti tiesioginė arba tranzitinė. Tai yra, tėvai gali būti tiesiogiai atsakingi už vaiko sukūrimą ar sunaikinimą arba tėvai gali naudoti jau sukurtą vaiką. Panašiai tėvų objektas gali perduoti valdymą kitiems tėvams sunaikinti antrinį objektą. Kompozicija vaizduojama UML, naudojant liniją, jungiančią objektus su vientisu deimantu to objekto, kuriam priklauso kitas objektas, gale.

Tikiuosi, kad ši asociacijos, agregavimo ir kompozicijos santykių diskusija padėjo suprasti, kuo skiriasi šios trys sąvokos. Atminkite, kad agregavimas ir sudėtis yra abu asociacijos pogrupiai. Apibendrinant ir sudėjus, vienos klasės objektas gali būti kitos klasės objekto savininkas. Apibendrinant ir sudėjus, vaiko objektai priklauso vienam iš tėvų, t. Y. Jie gali turėti tik vieną savininką.

Pagaliau agregavimo santykyje tėvų ir vaikų objektų gyvenimo ciklai yra nepriklausomi. Kompozicijos santykiuose tėvų objekto mirtis reiškia ir jo vaikų mirtį.