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,28 +1,40 @@ 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 + 1 1 ### Data Structure Style 2 2 3 - t ypeSquarestruct{10 + struct Square { 4 4 length float 5 5 } 6 6 7 - t ypeCirclestruct{8 - lengthfloat14 + struct Circle { 15 + radius float 9 9 } 10 10 11 - func Area(g GeometricObject) float { 12 - switch (g.type()): 13 - case Circle: 14 - return 18 + function Circumference(g Object) float { 19 + switch type(g): 15 15 case Square: 16 - return ... 21 + return 4 * g.length 22 + case Circle: 23 + return 2 * PI * g.radius 17 17 } 18 - 19 - func Circumference(g GeometricObject) float { 20 - ... 21 - } 22 22 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 + 23 23 #### Object-Oriented Style 24 24 25 - class Square { 33 + interface GeometricObject { 34 + Circumference() float 35 + } 36 + 37 + class Square implements GeometricObject { 26 26 length float 27 27 28 28 constructor(length float) { ... ... @@ -29,16 +29,12 @@ 29 29 this.length = length 30 30 } 31 31 32 - func Area() float { 33 - return this.length * this.length 34 - } 35 - 36 36 func Circumference() float { 37 37 return 4 * this.length 38 38 } 39 39 } 40 40 41 - class Circle { 49 + class Circle implements GeometricObject { 42 42 radius float 43 43 44 44 constructor(radius float) { ... ... @@ -45,10 +45,6 @@ 45 45 this.radius = radius 46 46 } 47 47 48 - func Area() float { 49 - return PI * this.radius * this.radius 50 - } 51 - 52 52 func Circumference() float { 53 53 return 2 * PI * this.radius 54 54 }