Changes for page Code Example: Data Structure Style vs. Object Style
Last modified by chrisby on 2024/03/03 17:01
Summary
-
Page properties (1 modified, 0 added, 0 removed)
Details
- Page properties
-
- Content
-
... ... @@ -1,61 +1,59 @@ 1 -as d1 +### Use Cases 2 2 3 -``` 4 -type Square struct { 5 - length float 6 -} 3 +This example is intended to demonstrate the extensibility differences between data structures and objects by extending them with 7 7 8 -type Circle struct { 9 - length float 10 -} 5 +1. an Area() function (extending behavior) 6 +1. a rectangle type (extending data type) 11 11 12 -func Area(g GeometricObject) float { 13 - switch (g.type()): 14 - case Circle: 15 - return 16 - case Square: 17 - return ... 18 -} 8 +### Data Structure Style 19 19 20 -func Circumference(g GeometricObject) float { 21 - ... 22 -} 23 -``` 10 + struct Square { 11 + length float 12 + } 13 + 14 + struct Circle { 15 + radius float 16 + } 17 + 18 + function Circumference(g Object) float { 19 + switch type(g): 20 + case Square: 21 + return 4 * g.length 22 + case Circle: 23 + return 2 * PI * g.radius 24 + } 24 24 25 -asd 26 +1. Adding a function Area() with the same anatomy as Circumference() is easy, since it only requires adding new code. 27 +1. Adding a new datatype, Rectangle, is more difficult because it requires touching existing code, namely any functions like Circumference() or Area() that need to be enabled handle this datatype. 26 26 27 -``` 28 -# Object-Oriented Style 29 +#### 29 29 30 -class Square { 31 - length float 31 +#### Object-Oriented Style 32 32 33 - constructor(length float) { 34 - this.length = length 35 - } 36 - 37 - func Area() float { 38 - return this.length * this.length # Formula for square area: side^2 39 - } 40 - 41 - func Circumference() float { 42 - return 4 * this.length # Formula for square circumference: 4 * side 43 - } 44 -} 45 - 46 -class Circle { 47 - radius float 48 - 49 - constructor(radius float) { 50 - this.radius = radius 51 - } 52 - 53 - func Area() float { 54 - return 3.14159 * this.radius * this.radius # Formula for circle area: πr^2 55 - } 56 - 57 - func Circumference() float { 58 - return 2 * 3.14159 * this.radius # Formula for circle circumference: 2πr 59 - } 60 -} 61 -``` 33 + interface GeometricObject { 34 + Circumference() float 35 + } 36 + 37 + class Square implements GeometricObject { 38 + length float 39 + 40 + constructor(length float) { 41 + this.length = length 42 + } 43 + 44 + func Circumference() float { 45 + return 4 * this.length 46 + } 47 + } 48 + 49 + class Circle implements GeometricObject { 50 + radius float 51 + 52 + constructor(radius float) { 53 + this.radius = radius 54 + } 55 + 56 + func Circumference() float { 57 + return 2 * PI * this.radius 58 + } 59 + }