How Immutability Helps in OOP
-
Upload
yegor-bugayenko -
Category
Software
-
view
1.351 -
download
2
Transcript of How Immutability Helps in OOP
/20@yegor256 1
How Immutability Helps in OOP?
Yegor Bugayenko
/20@yegor256 2
what is an object?
/20@yegor256 3
“Each object looks quite a bit like a little computer — it has a state, and it has operations that you can ask it to perform”- page 16
/20@yegor256 4
“An object is some memory that holds a value of some type”- page 40
/20@yegor256 5
“A class is a collection of data fields that hold values and methods that operate on those values”- page 98
/20@yegor256 6
“Objects may contain data, in the form of fields, often known as attributes; and code, in the form of procedures, often known as methods”
/20@yegor256 7
/20@yegor256 8
class Calculator { private int[] array; public void calculate(int a, int b) { this.array = new int[b - a]; for (int i = 0; i < this.array.length; ++i) { this.array[i] = a + i; } } public int[] numbers() { return this.array; } }
/20@yegor256 9
Calculator c = new Calculator(); c.calculate(5, 15); int[] x = c.numbers();
/20@yegor256 10
“who I am?” vs.
“what I do?”
/20@yegor256 11
class Range { private final int a; private final int b; Range(int start, int finish) { this.a = start; this.b = finish; } public int[] numbers() { int[] array = new int[this.b - this.a]; for (int i = 0; i < array.length; ++i) { array[i] = this.a + i; } return array; } }
/20@yegor256 12
Range r = new Range(5, 15); int[] x = r.numbers();
/20@yegor256 13
R range = new Range(5, 15); int[] x = range.numbers();
Calculator c = new Calculator(); c.calculate(5, 15); int[] x = c.numbers();
/20@yegor256 14
R range = new OddOnly( new Range(5, 15) ); int[] x = range.numbers();
Calculator c = new Calculator(); c.setOddOnly(true); c.calculate(5, 15); int[] x = c.numbers();
/20@yegor256 15
R range = new SquareAll( new OddOnly( new Range(5, 15) ) ); int[] x = range.numbers();
Calculator c = new Calculator(); c.setOddOnly(true); c.setSquareAll(true); c.calculate(5, 15); int[] x = c.numbers();
/20@yegor256 16
R range = new Incremented( new Squared( new OddOnly( new Range(5, 15) ) ), 100 ); int[] x = range.numbers();
Calculator c = new Calculator(); c.setOddOnly(true); c.setSquared(true); c.setIncremented(100); c.calculate(5, 15); int[] x = c.numbers();
/20@yegor256 17
R range = new Logged( new Incremented( new Squared( new OddOnly( new Range(5, 15) ) ), 100 ) ); int[] x = range.numbers();
Calculator c = new Calculator(); c.setOddOnly(true); c.setSquared(true); c.setIncremented(100); c.setLogged(true); c.calculate(5, 15); int[] x = c.numbers();
/20@yegor256 18
R range = new Logged( new Incremented( new Squared( new OddOnly( new RangeFromFile( new File(“a.txt”) ) ) ), 100 ) ); int[] x = range.numbers();
Calculator c = new Calculator(); c.setFromFile(“a.txt”); //??? c.setOddOnly(true); c.setSquared(true); c.setIncremented(100); c.setLogged(true); c.calculate(5, 15); int[] x = c.numbers();
/20@yegor256 19
what is an object?
/20@yegor256 20
www.yegor256.com