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,14 +1,23 @@ 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 - type Square struct { 10 + interface GeometricObject {} 11 + 12 + class Square implements GeometricObject { 4 4 length float 5 5 } 6 6 7 - typeCircle struct {16 + class Circle implements GeometricObject { 8 8 radius float 9 9 } 10 10 11 - func Circumference(g Object) float { 20 + function Circumference(g GeometricObject) float { 12 12 switch type(g): 13 13 case Square: 14 14 return 4 * g.length ... ... @@ -16,8 +16,11 @@ 16 16 return 2 * PI * g.radius 17 17 } 18 18 19 -* 28 +1. Adding an Area() function with a very similar anatomy to Circumference() is easy because it only requires adding new code. 29 +1. Adding a new datatype, Rectangle, is harder because it requires touching existing code, namely any functions like Circumference() or Area() that need to be enabled handle this datatype. 20 20 31 +#### 32 + 21 21 #### Object-Oriented Style 22 22 23 23 interface GeometricObject { ... ... @@ -47,3 +47,12 @@ 47 47 return 2 * PI * this.radius 48 48 } 49 49 } 62 + 63 +1. Adding a function Area() to GeometricObject Interface is hard since all classes implementing 64 +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. 65 + 66 +### Conclusion 67 + 68 +asd 69 + 70 +