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

From version 2.3
edited by chrisby
on 2024/03/03 14:44
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,30 +1,40 @@
1 -asd
1 +### Use Cases
2 2  
3 -```
4 -type Square struct {
5 - length float
6 -}
3 +This example is intended to demonstrate the extensibility differences between data structures and objects by extending them with
7 7  
8 -type Circle struct {
9 - length float
10 -}
5 +1. an Area() function (extending behavior)
6 +1. a rectangle type (extending data type)
11 11  
12 -func Area(g GeometricObject) float {
13 - switch (g.type()):
14 - case Circle:
15 - return
16 - case Square:
17 - return ...
18 -}
8 +### Data Structure Style
19 19  
20 -func Circumference(g GeometricObject) float {
21 - ...
22 -}
23 -```
10 + struct Square {
11 + length float
12 + }
13 +
14 + struct Circle {
15 + radius float
16 + }
17 +
18 + function Circumference(g Object) float {
19 + switch type(g):
20 + case Square:
21 + return 4 * g.length
22 + case Circle:
23 + return 2 * PI * g.radius
24 + }
24 24  
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 +
25 25  #### Object-Oriented Style
26 26  
27 - class Square {
33 + interface GeometricObject {
34 + Circumference() float
35 + }
36 +
37 + class Square implements GeometricObject {
28 28   length float
29 29  
30 30   constructor(length float) {
... ... @@ -31,16 +31,12 @@
31 31   this.length = length
32 32   }
33 33  
34 - func Area() float {
35 - return this.length * this.length
36 - }
37 -
38 38   func Circumference() float {
39 39   return 4 * this.length
40 40   }
41 41   }
42 42  
43 - class Circle {
49 + class Circle implements GeometricObject {
44 44   radius float
45 45  
46 46   constructor(radius float) {
... ... @@ -47,10 +47,6 @@
47 47   this.radius = radius
48 48   }
49 49  
50 - func Area() float {
51 - return PI * this.radius * this.radius
52 - }
53 -
54 54   func Circumference() float {
55 55   return 2 * PI * this.radius
56 56   }