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