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

From version 3.4
edited by chrisby
on 2024/03/03 15:06
Change comment: There is no comment for this version
To version 3.2
edited by chrisby
on 2024/03/03 14:50
Change comment: There is no comment for this version

Summary

Details

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