Pages

Wednesday, May 15, 2013

Software Design: Lazy Initialization - I4SWD Obligatorisk opgave

Gruppenavn: HalfEasyMode
Gruppedeltagere: Khaled Saied 11638, Niclas Skødt Gleesborg 11651
Emne: Lazy Initialization

Beskrivelse: 

Lazy Initialization går ud på kun at initialisere objekter når man får brug for dem. Dvs. hvis objektet ikke skal bruges bliver det ikke initialiseret og man har på denne måde sparet både på memory og performance.

Et eksempel kunne være, at man har et kunde objekt, som har en ordrer property, som indeholder et stort array af ordrer objekter, som ville kræve forbindelse til en database for at blive initialiseret. Hvis brugeren aldrig spørger om, at få vist ordrer eller anvende disse data er der ingen grund til at bruge memory eller tid på at forbinde til databasen og behandle dataen. Ved at bruge Lazy Initalization kan man undgå at spilde dyrebar ressourcer på objekter, som aldrig bliver brugt.

Lazy Initialization kan også medvirke til hurtigere opstart af programmet, da de forskellige ressourcer initialiseres efter behov,istedet for under opstart af programmet. Svagheden her er så, at programmet kan være langsommere under kørsel da objekterne skal initialiseres.

Sammenligning med andre emner:

Singleton kan med fordel benytte Lazy Initialization da det ligger i Singleton's natur, at kun et objekt skal eksistere og med Lazy Initialization kan man undgå at objektet bliver initialiseret før der er brug for det, hvis der overhovedet bliver brug for det.

Det omvendte at Lazy Initialization er Eager Initialization, hvor man initialisere objektet med det samme. Fordelen med dette er, at computere ikke skal bruge ressourcer på at initialisere objekter imens programmet kører, men har sørget for dette under opstart. Generelt kan man sige at Lazy Initialization er godt for memory, dårligt for performance og Eager Initialization er godt for performance, dårligt for memory.

Eksempler:













Det kan ses ud fra consol outputtet at Lazy Initialization gør, at der ikke bliver brugt memory før objektet skal bruges. Hvorimod Eager Initialization bruger alt memory med det samme uden at vi skal bruge objektet.


Konklusion:

Det giver ingen mening at bruge Lazy Initialization på primitive datatyper eller generelt små objekter. Det giver mening i et miljø med få ressourcer mht. memory. Lazy initialization anbefales til kommunikation med databaser eller internettet generelt. Hvis miljøet er begrænset af performance og ikke af memory kan Eager Initialization vær et bedre valg.

No comments:

Post a Comment