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

From version 3.3
edited by chrisby
on 2024/03/03 14:57
Change comment: There is no comment for this version
To version 3.7
edited by chrisby
on 2024/03/03 15:23
Change comment: There is no comment for this version

Summary

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 - type Circle 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 +