Invariants & inversions

19
Invariants and Inversions Naveen Muguda

Transcript of Invariants & inversions

Page 1: Invariants & inversions

Invariants and InversionsNaveen Muguda

Page 2: Invariants & inversions

Invariants

• logical assertions that are true for a certain phase of execution

• no matter whatever changes or whoever uses/transforms it.

Page 3: Invariants & inversions

Singleton

• invariant?

Page 4: Invariants & inversions

example

• final String s = “hello, world”

• assertion: s == “hello, world”

• Duration: as long as s is visible (s’s life time)

Page 5: Invariants & inversions

data invariants

• Date

• day <= 31

• month <= 12

• if month == 2, day < 30

• ….

Page 6: Invariants & inversions

Information hiding

• If date was a structure we can’t have invariants

• Date has to be a class/type

Page 7: Invariants & inversions

void selectionSort(int arr[], int n){

int i, j, min_idx;

// One by one move boundary of sorted subarrayfor (i = 0; i < n-1; i++){

// Find the minimum element in unsorted arraymin_idx = i;for (j = i+1; j < n; j++)if (arr[j] < arr[min_idx])

min_idx = j;

swap(arr, min_idx, i);}

}

Page 8: Invariants & inversions

Loop invariants

• arr[0, i) is sorted

• arr[min_idx] = min(arr[i,j))

• True before the first iteration, after every iteration

Page 9: Invariants & inversions

Loop invariants

• Invariants are generalizations of your goal

• Bubble sort, Selection sort: A[0,i) are in their eventual positions

• Insertion sort: A[0,i) is locally sorted

• Quick sort: A[0, i) < A[mid], A[j + 1, N) > A[mid]

• Merge: A[0, i), B[0, j) are in their eventual positions in C

Page 10: Invariants & inversions

Inversion

Page 11: Invariants & inversions

Responsibility division

• Heavy lifting done by Play

• a narrow and well defined responsibility given to hello world

Page 12: Invariants & inversions
Page 13: Invariants & inversions

Railway Oriented Programming

Page 14: Invariants & inversions

Optional:Invariants and Inversion

• Invariant: What is null, is never invoked

• Inversion: methods which operate on the wrapped value are called

Page 15: Invariants & inversions

t1:T1 t2:T2 t3:T3 t4:T4

null:T1 null:T2 null:T3 null:T4

Page 16: Invariants & inversions
Page 17: Invariants & inversions

t1:T1 t2:T2 t3:T3 t4:T4

v1:V1 v2:V2 v3:V3 v4:V4

Either

Page 18: Invariants & inversions

true true true true

falsefalse false false

Validation

Page 19: Invariants & inversions