Version 3.7 by chrisby on 2024/03/03 15:23

Hide last authors
chrisby 3.4 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
chrisby 2.4 8 ### Data Structure Style
chrisby 2.1 9
chrisby 3.7 10 interface GeometricObject {}
11
12 class Square implements GeometricObject {
chrisby 2.4 13 length float
14 }
15
chrisby 3.7 16 class Circle implements GeometricObject {
chrisby 3.2 17 radius float
chrisby 2.4 18 }
19
chrisby 3.7 20 function Circumference(g GeometricObject) float {
chrisby 3.2 21 switch type(g):
22 case Square:
23 return 4 * g.length
24 case Circle:
25 return 2 * PI * g.radius
chrisby 2.4 26 }
chrisby 2.1 27
chrisby 3.7 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.
chrisby 3.3 30
chrisby 3.4 31 ####
32
chrisby 2.3 33 #### Object-Oriented Style
chrisby 2.2 34
chrisby 3.3 35 interface GeometricObject {
36 Circumference() float
37 }
38
39 class Square implements GeometricObject {
chrisby 2.3 40 length float
41
42 constructor(length float) {
43 this.length = length
44 }
45
46 func Circumference() float {
47 return 4 * this.length
48 }
49 }
50
chrisby 3.3 51 class Circle implements GeometricObject {
chrisby 2.3 52 radius float
53
54 constructor(radius float) {
55 this.radius = radius
56 }
57
58 func Circumference() float {
59 return 2 * PI * this.radius
60 }
61 }
chrisby 3.7 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