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

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

Summary

Details

Page properties
Content
... ... @@ -1,70 +1,25 @@
1 -### Use Cases
1 +asd
2 2  
3 -This example is intended to demonstrate the extensibility differences between data structures and objects by extending them with
3 +```
4 +type Square struct {
5 + length float
6 +}
4 4  
5 -1. an Area() function (extending behavior)
6 -1. a rectangle type (extending data type)
8 +type Circle struct {
9 + length float
10 +}
7 7  
8 -### Data Structure Style
12 +func Area(g GeometricObject) float {
13 + switch (g.type()):
14 + case Circle:
15 + return
16 + case Square:
17 + return ...
18 +}
9 9  
10 - interface GeometricObject {}
11 -
12 - class Square implements GeometricObject {
13 - length float
14 - }
15 -
16 - class Circle implements GeometricObject {
17 - radius float
18 - }
19 -
20 - function Circumference(g GeometricObject) float {
21 - switch type(g):
22 - case Square:
23 - return 4 * g.length
24 - case Circle:
25 - return 2 * PI * g.radius
26 - }
20 +func Circumference(g GeometricObject) float {
21 + ...
22 +}
23 +```
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.
30 -
31 -####
32 -
33 -#### Object-Oriented Style
34 -
35 - interface GeometricObject {
36 - Circumference() float
37 - }
38 -
39 - class Square implements GeometricObject {
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 -
51 - class Circle implements GeometricObject {
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 - }
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 68  asd
69 -
70 -