Övrigt kritiskt Flashcards

1
Q

Försvarsmekanismer (3st metoder)

A

Försvarsmekanismer
Begränsa möjliga tillstånd och tillståndsförändringar.
• Sträva mot immutability, även när du inte vill gå hela vägen.
• Låt varje val av muterbart tillstånd vara ett aktivt val, inte tvärtom.

Gör förväntningar explicita.
• Gör det tydligt vad “din” kod tar ansvar för, och vilket ansvar den förväntar sig att klienter tar. • Design-by-contract = uttryck dessa förväntningar (semi-)formellt, redan vid design-stadiet.

Påtala högt så fort något bryter mot förväntningar.
• Kontrollera att förväntningar upprätthålls så fort du har möjlighet. • Kasta exceptions direkt.
• ger möjlighet att upptäcka buggar, både i egen kod, och för andra klienter
• att försöka “vara snäll”, och försöka hantera oväntad input, är inte det minsta snällt.
• (Använd assertions för att kontrollera förväntningar på egen kod – bakom försvarslinjen.)
Exceptions och assertions

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Defensive Copying

A

Defensive Copying
För att garantera att inga alias till eventuella muterbara objekt finns, behöver vi skapa defensive copies (kopia av objektet returneras, inte referensen till den) om:
* Vi exponerar objekten via getters.
* Vi i instansmetoder skickar objekten som argument till externa metoder (de kan ha sidoeffekter).
* Vi tar in nya värden för attributen via konstruktorer eller setters.
OBS! Detta används inte bara när vi strävar efter immutabily. Vi vill skydda oss mot oväntade förändringar via alias.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Mutate-by-copy

A

Mutate-by-copy
Istället för att ändra objektets tillstånd, skapa en kopia med det nya tillståndet och returnera den istället. Då det ursprungliga objektet inte ändras kan vi inte bli överraskade av alias updates , men det kan leda till att många nya objekt skapas vilket kan bli ineffektivt.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly