Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 15843|Atsakyti: 0

[Šaltinis] Statinių metodų ir pavienių modelių analizė

[Kopijuoti nuorodą]
Paskelbta 2019-10-10 18:15:05 | | |
Mes dažnai susiduriame su tokia painiava programuojant, kai kurios funkcijos sprendžiamos naudojant singletonus, o kai kurios funkcijos sprendžiamos naudojant statinius metodus, tad kokie yra statinių metodų ir singletonų principai ir naudojimo scenarijai? Šiandien paaiškinkime šį klausimą.

1. Pirmiausia pažvelkime į skirtumą tarp statinių ir nestatinių metodų?

        Daugelis programuotojų supranta, kad statiniai metodai įkeliami pirmiausia, nestatiniai metodai įkeliami vėliau, statiniai metodai visada egzistuos atmintyje, o nestatiniai metodai nebus. Todėl rekomenduojama naudoti nestatinį metodą. Visų pirma, neteisinga pabrėžti, kad šis supratimas yra klaidingas.

        Visų pirma, išanalizuokime iš atminties, kai programa inicijuojama, CLR (CLR yra Common Language Runtime) taip pat yra vykdymo aplinka, tokia kaip "Java" virtuali mašina, kuri yra atsakinga už išteklių valdymą (atminties paskirstymą ir šiukšlių surinkimą ir kt.) ir užtikrina reikiamą programos ir pagrindinės operacinės sistemos atskyrimą. CLR turi du skirtingus vertimo pavadinimus: Common Language Runtime ir Common Language Runtime. Kiekvienam procesui priskiria adresų sritį laisvoje proceso erdvėje, kuri yra valdoma krūva. Valdoma krūva yra padalinta į kelis regionus, iš kurių svarbiausi yra šiukšlių surinkimo krūva (GC Heap) ir krautuvo krūva (Loader Heap), kuri naudojama objektų egzemplioriams saugoti ir yra valdoma GC. Svarbiausia informacija, kurią "Loader Heap" saugo lentelėje "MethodTable", yra su metaduomenimis susijusi informacija, pvz., baziniai tipai, statiniai laukai, diegimo sąsajos ir visi metodai. Loader Heap nepriima GC valdymo, o jo gyvavimo ciklas yra nuo sukūrimo iki sunaikinimo. Kitaip tariant, įkėlus klasę, tiek statiniai, tiek nestatiniai šios klasės metodai yra saugomi MethodTab lentelėje Load Heap, be GC valdymo, ir jie visi yra atmintyje pirmajai apkrovai.

        Kuo skiriasi statinis metodas nuo nestatinio metodo? Skirtumas tas, kad kuriant objektą statinis metodas turi tik kopiją, o nestatinis metodas nukopijuos informacijos apie šį egzempliorių kopiją GC krūvoje kiekvienam naujam objektui ir tuo pačiu įdės naują objektą į krūvą. Adresas, į kurį nurodo rietuvės žymeklis, yra atminties adresas, kuris ką tik buvo nukopijuotas į GC krūvą. Todėl, kalbant apie metodo iškvietimo greitį, statiniai metodai yra greitesni, nes nestatinius metodus reikia sukurti ir paskirstyti atmintį.

Programavimo istorijos požiūriu, beveik visi ankstyvojo struktūrinio programavimo metodai buvo statiški, o instanciacijos metodų įvedimas buvo objektinio programavimo klausimas, todėl instanciacijos metodas nebuvo skirtas išspręsti veikimo efektyvumo ir atminties problemą. Tai yra padaryti vystymąsi labiau modeliuotą ir orientuotą į objektus.

        Iš aukščiau pateiktos analizės galima padaryti išvadą: 1. Statinis metodas ir nestatinis metodas yra skirtumas tarp sprendimo būdo. 2. Jei paveldėjimas, polimorfizmas arba metodas neturi nieko bendra su savo klasės objektu, turėtumėte pasirinkti statinį metodą, pvz., įrankių klasę.        

2. Kuo skiriasi viengubas režimas ir statinis metodas?

        Kartais reikia išlaikyti inžinerijos informaciją, pvz., kai kuriuos konfigūracijos atributus, kurie įkeliami vykdymo metu, kurie turi egzistuoti visą programos gyvavimo laiką ir yra vieši, todėl reikia tik vienos kopijos. Šiuo metu šiems duomenims išlaikyti apsvarstysime galimybę naudoti viengubą arba statinį metodą, tačiau šiuo metu šie duomenys gaunami į objektą orientuotu būdu, naudosime viengubą.

        Pirma, statiniai metodai yra pagrįsti klasėmis, o pavieniai - objektais. Jei skiriamosios gebos modelis yra pagrįstas objektu, naudokite singletoną, kitu atveju naudokite statinį metodą. Pavyzdžiui, norint naudoti vienetus, reikia paveldėti klases, įdiegti sąsajas, atidėti inicijavimą, perrašyti pirmines klases ir kt., antra, statiniai metodai yra orientuoti į procesą, o viengubai yra orientuoti į objektus. Trečia, statinių atributų kintamieji nebus išvalyti GC, todėl GC neišvalys pavienių objektų, o statiniais metodais sugeneruoti objektai bus išleisti, kai bus vykdomas statinis metodas.




Ankstesnis:Distributed Messaging Middleware praktika (pagal Ni Wei) Visas kinų PDF
Kitą:"Dell Latitude 5501" nešiojamojo kompiuterio išjungimo ir automatinio įjungimo problema išspręsta
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com