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

From version 1.1
edited by chrisby
on 2024/03/03 14:40
Change comment: There is no comment for this version
To version 3.6
edited by chrisby
on 2024/03/03 15:17
Change comment: There is no comment for this version

Summary

Details

Page properties
Content
... ... @@ -1,1 +1,59 @@
1 -```
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 +### Data Structure Style
9 +
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 + }
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 +#### Object-Oriented Style
32 +
33 + interface GeometricObject {
34 + Circumference() float
35 + }
36 +
37 + class Square implements GeometricObject {
38 + length float
39 +
40 + constructor(length float) {
41 + this.length = length
42 + }
43 +
44 + func Circumference() float {
45 + return 4 * this.length
46 + }
47 + }
48 +
49 + class Circle implements GeometricObject {
50 + radius float
51 +
52 + constructor(radius float) {
53 + this.radius = radius
54 + }
55 +
56 + func Circumference() float {
57 + return 2 * PI * this.radius
58 + }
59 + }