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

From version 3.1
edited by chrisby
on 2024/03/03 14:45
Change comment: There is no comment for this version
To version 3.5
edited by chrisby
on 2024/03/03 15:17
Change comment: There is no comment for this version

Summary

Details

Page properties
Content
... ... @@ -1,28 +1,40 @@
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 + struct Square {
4 4   length float
5 5   }
6 6  
7 - type Circle struct {
8 - length float
14 + struct Circle {
15 + radius float
9 9   }
10 10  
11 - func Area(g GeometricObject) float {
12 - switch (g.type()):
13 - case Circle:
14 - return
18 + function Circumference(g Object) float {
19 + switch type(g):
15 15   case Square:
16 - return ...
21 + return 4 * g.length
22 + case Circle:
23 + return 2 * PI * g.radius
17 17   }
18 -
19 - func Circumference(g GeometricObject) float {
20 - ...
21 - }
22 22  
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.
28 +
29 +####
30 +
23 23  #### Object-Oriented Style
24 24  
25 - class Square {
33 + interface GeometricObject {
34 + Circumference() float
35 + }
36 +
37 + class Square implements GeometricObject {
26 26   length float
27 27  
28 28   constructor(length float) {
... ... @@ -29,16 +29,12 @@
29 29   this.length = length
30 30   }
31 31  
32 - func Area() float {
33 - return this.length * this.length
34 - }
35 -
36 36   func Circumference() float {
37 37   return 4 * this.length
38 38   }
39 39   }
40 40  
41 - class Circle {
49 + class Circle implements GeometricObject {
42 42   radius float
43 43  
44 44   constructor(radius float) {
... ... @@ -45,10 +45,6 @@
45 45   this.radius = radius
46 46   }
47 47  
48 - func Area() float {
49 - return PI * this.radius * this.radius
50 - }
51 -
52 52   func Circumference() float {
53 53   return 2 * PI * this.radius
54 54   }