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

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

Summary

Details

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