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
-
... ... @@ -7,17 +7,15 @@ 7 7 8 8 ### Data Structure Style 9 9 10 - interface GeometricObject {} 11 - 12 - class Square implements GeometricObject { 10 + type Square struct { 13 13 length float 14 14 } 15 15 16 - classCircleimplementsGeometricObject {14 + type Circle struct { 17 17 radius float 18 18 } 19 19 20 - func tionCircumference(gGeometricObject) float {18 + func Circumference(g Object) float { 21 21 switch type(g): 22 22 case Square: 23 23 return 4 * g.length ... ... @@ -25,8 +25,7 @@ 25 25 return 2 * PI * g.radius 26 26 } 27 27 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. 26 +1. 30 30 31 31 #### 32 32 ... ... @@ -59,11 +59,3 @@ 59 59 return 2 * PI * this.radius 60 60 } 61 61 } 62 - 63 -1. Adding a function Area() to the GeometricObject interface is hard because it requires touching existing code, namely extending all Square and Circle classes with the new function. 64 -1. Adding a new datatype, Rectangle, is easy because only new code is added, namely a Rectangle class. 65 - 66 -### Conclusion 67 - 68 -* The lesson learned here is that data structures are easy to extend with functions, and objects are easy to extend with data types. 69 -* Although the difference between the two styles may seem insignificant in this simplified example, it has serious implications in complex production codebases with multiple data types and behaviors.