100 likes | 226 Vues
Siv Fjellkårstad USIT/SAUS. Nullobjekter. For å hindre NullPointerExceptions (NPE), skriver man ofte null-tester, evt. med alternativ funksjon / oppførsel når et objekt er null. Problemstilling.
E N D
Siv Fjellkårstad USIT/SAUS Nullobjekter
For å hindre NullPointerExceptions (NPE), skriver man ofte null-tester, evt. med alternativ funksjon / oppførsel når et objekt er null. Problemstilling Ofte trenger man å skrive de samme sjekkene flere ganger, noe som resulterer i duplikat kode. Dette ansett som “bad smell” som forhindrer enkel refaktorisering.
Mye null-testing fører til mer kode uoversiktlig kode inkonsistent kode (lett å introdusere små ulikheter i oppførsel når et objekt er null) kode som er vanskeligere å refaktorisere (flere steder der man må endre koden) ingen garanti for at man ikke glemmer å null-sjekke en variabel, og dermed få NPE.
Objekt som brukes når man ikke har noe fornuftig objekt å returnere, men likevel ønsker å fjerne avsvaret for håndtering av nullfra klientkoden. Man skriver kode som returnerer et objektmed defaultverdier eller varianter av “ingenting” i stedet for å returnere null. Hva er et Null-objekt?
Håndterer null på en transparent måte. Nullobjekter oppfører seg som vanlige objekter, og ekstra kode (utover koden til selve nullobjektet) er derfor ikke nødvendig. Hvis nullobjekter fører til vesentlig mer kode, er det “feil” å bruke dem. Egenskaper (1)
Bruk av null-objekter forhindrer NullPointerExceptions (NPE) på en enkel måte. Nullobjekter er konstante; De endrer seg ikke. De kan derfor implementeres som Singletons. Nullobjekter kapsler inn hva som skal gjøres når objekttypen er satt til null, i stedet for at klienten avgjør hva som skal gjøres i hvert enkelt tilfelle. Egenskaper (2)
Introduksjon av nullobjekteri koden • Introduksjon av nullobjekter i eksisterende kode kan føre til introduksjon av feil hvis man ikke er forsiktige. • Bruk av “Introduce Null Object”-refaktorisering under arbeidet forhindrer feil (se kildelisten for referanse til dette).
Eksempel: NullIterator CreateIterator() kan returnere null eller Iterator, evt. NullIterator eller Iterator:
Bøker “Refactoring. Improving the design of existing code” (Martin Fowler m.fl.) Head First Design Patterns (O'Reilly) Artikler “Null Object Design Pattern” (Jeffery Walker) “Null Object Pattern Revisited” (Dung X. Nguyen) “Introduce Null Object” http://today.java.net/today/2004/12/10/refactor.pdf http://citeseer.nj.nec.com/woolf96null.html http://www.mindspring.com/~mgrand/pattern_synopses.htm#Null%20Object The Null Object Pattern (Bobby Woolf)http://www.cs.oberlin.edu/~jwalker/refs/woolf.ps “Something for nothing” (Kevlin Henney) http://javareport.com/java/articleold.asp?id=25&mon=12&yr=1999 Introduce Null Object http://sourcemaking.com/refactoring/introduce-null-object Kilder