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,1 +1,59 @@ 1 -``` 1 +### Use Cases 2 + 3 +This example is intended to demonstrate the extensibility differences between data structures and objects by extending them with 4 + 5 +1. an Area() function (extending behavior) 6 +1. a rectangle type (extending data type) 7 + 8 +### Data Structure Style 9 + 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 + } 25 + 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. 28 + 29 +#### 30 + 31 +#### Object-Oriented Style 32 + 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 + }