Last modified by chrisby on 2024/03/03 17:01

From version 3.8
edited by chrisby
on 2024/03/03 15:34
Change comment: There is no comment for this version
To version 3.6
edited by chrisby
on 2024/03/03 15:17
Change comment: There is no comment for this version

Summary

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 + struct Square {
13 13   length float
14 14   }
15 15  
16 - class Circle implements GeometricObject {
14 + struct Circle {
17 17   radius float
18 18   }
19 19  
20 - function Circumference(g GeometricObject) float {
18 + function Circumference(g Object) float {
21 21   switch type(g):
22 22   case Square:
23 23   return 4 * g.length
... ... @@ -25,8 +25,8 @@
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. 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.
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.