Programmēšana

Demetrificēt Demetera likuma principu

Demeter likums (vai Vismazāko zināšanu princips) ir dizaina vadlīnijas programmatūras lietojumprogrammu izstrādei. Pirmo reizi 1987. gadā Ziemeļaustrumu universitātē apspriestais princips nosaka, ka objektam nekad nevajadzētu zināt citu objektu iekšējās detaļas. Tas tika izstrādāts, lai veicinātu vaļīgu sasaisti programmatūras dizainā.

Ņemiet vērā, ka savienošanu var definēt kā programmatūras moduļu savstarpējās atkarības pakāpi un to, cik cieši šie moduļi ir savstarpēji saistīti. Jo vairāk savienojums starp komponentiem tiek lietots, jo grūtāk to pārveidot un uzturēt laika gaitā. Vienmēr ir laba prakse izstrādāt tādas sistēmas, kuras ir vieglāk pārbaudīt un uzturēt, nodrošinot, ka lietojumprogrammas komponenti ir brīvi savienoti. Jūs varat uzzināt vairāk par kohēziju un saistīšanu no mana raksta šeit.

Demetera likuma principa izpratne

Demetera likuma princips nosaka, ka modulim nevajadzētu būt zināšanām par to objektu iekšējām detaļām, ar kuriem tas manipulē. Citiem vārdiem sakot, programmatūras komponentam vai objektam nevajadzētu būt zināšanām par citu objektu vai komponentu iekšējo darbību. Sapratīsim Demetera likumu ar piemēru.

Apsveriet trīs klases, proti - A, B un C - un šo klašu objektus - attiecīgi objA, objB un objC. Tagad pieņemsim, ka objA ir atkarīgs no objB, kas savukārt veido objC. Šajā scenārijā objA var atsaukties uz objB metodēm un īpašībām, bet ne uz objC.

Demeter likuma princips izmanto iekapsulēšanas priekšrocības, lai panāktu šo izolāciju un samazinātu savienojumu starp jūsu lietojumprogrammas sastāvdaļām. Tas palīdz uzlabot koda kvalitāti un veicina elastību un vieglāku koda uzturēšanu. Demeter likuma ievērošanas priekšrocība ir tā, ka jūs varat izveidot programmatūru, kas ir viegli uzturama un pielāgojama nākotnes izmaiņām.

Apsveriet C klasi, kurai ir metode M. Tagad pieņemsim, ka esat izveidojis C klases eksemplāru ar nosaukumu O. Demeter likums nosaka, ka metode M var izsaukt šādus. Vai klases īpašībai vajadzētu izsaukt šādu tipu. tikai dalībniekiem:

  • Tas pats objekts, t.i., pats objekts “O”
  • Objekti, kas nodoti kā arguments metodei “M”
  • Vietējie objekti, t.i., objekti, kas izveidoti metodē “M”
  • Globālie objekti, kuriem var piekļūt ar objektu “O”
  • Objekta “O” tiešie komponenti

Šeit ir saraksts ar kodu, kas ilustrē klasi un tās dalībniekus, kuri ievēro Demetera likuma principu. Es skaidrības labad pieminēju komentārus visur, kur tas ir piemērojams.

publiskā klase LawOfDemeterExample

    {

// Šis ir gadījums klases darbības jomā

// un līdz ar to šim gadījumam var piekļūt visi šīs klases dalībnieki

AnotherClass instance = new AnotherClass ();

public void SampleMethodFollowingLoD (testa objekts)

        {         

Neko nedarīt(); // Šis ir derīgs izsaukums, jo jūs izsaucat vienas klases metodi

objekta dati = obj.GetData (); // Tas ir derīgi arī tāpēc, ka jūs izsaucat metodi

// instancē, kas ir nodota kā parametrs

int rezultāts = instance.GetResult (); // Šis ir arī derīgs zvans, kad jūs zvanāt

// lokāli izveidota instance instancē

        }

privāts anulējums DoNothing ()

        {

// Uzrakstiet šeit kodu

        }

    }

Šeit ir divas citas klases, kas jums būtu nepieciešamas, lai apkopotu iepriekš minēto kodu.

sabiedrības klase AnotherClass

    {

public int GetResult ()

        {

atgriešanās -1;

        }

    }

sabiedrības klases ieskaite

    {

publisks objekts GetData ()

        {

return null;

        }

    }

Tagad skatiet iepriekš parādīto LawOfDemeterExample klasi. Kods ir pats par sevi saprotams. Tagad jūs varētu domāt, vai Demetera likums attiecas tikai uz metodēm. Atbilde ir "nē". Demetera likuma princips attiecas arī uz īpašumiem.

Demetera likuma principa pārkāpumi

Pirmajā iepriekš izskaidrotajā koda piemērā mēs sākām diskusiju par šo tēmu, ievērojot Demetera likuma principu. Sapratīsim, kas notiek, ja mēs neievērojam šo principu. Apsveriet šo koda piemēru.

var dati = jauns A (). GetObjectB (). GetObjectC (). GetData ();

Šajā piemērā klientam būs jābūt atkarīgam no A, B un C klases. Citiem vārdiem sakot, tas ir savienots ar A, B un C klases gadījumiem. Ja nākotnē šīs klases mainītos, jums rastos problēmas, jo jūs pakļaujat sevi izmaiņām, kas nākotnē varētu notikt kādā no šīm nodarbībām.

$config[zx-auto] not found$config[zx-overlay] not found