Version 3.4 by chrisby on 2024/03/03 15:06

Hide last authors
chrisby 3.4 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
chrisby 2.4 8 ### Data Structure Style
chrisby 2.1 9
chrisby 2.4 10 type Square struct {
11 length float
12 }
13
14 type Circle struct {
chrisby 3.2 15 radius float
chrisby 2.4 16 }
17
chrisby 3.3 18 func Circumference(g Object) float {
chrisby 3.2 19 switch type(g):
20 case Square:
21 return 4 * g.length
22 case Circle:
23 return 2 * PI * g.radius
chrisby 2.4 24 }
chrisby 2.1 25
chrisby 3.4 26 1.
chrisby 3.3 27
chrisby 3.4 28 ####
29
chrisby 2.3 30 #### Object-Oriented Style
chrisby 2.2 31
chrisby 3.3 32 interface GeometricObject {
33 Circumference() float
34 }
35
36 class Square implements GeometricObject {
chrisby 2.3 37 length float
38
39 constructor(length float) {
40 this.length = length
41 }
42
43 func Circumference() float {
44 return 4 * this.length
45 }
46 }
47
chrisby 3.3 48 class Circle implements GeometricObject {
chrisby 2.3 49 radius float
50
51 constructor(radius float) {
52 this.radius = radius
53 }
54
55 func Circumference() float {
56 return 2 * PI * this.radius
57 }
58 }