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.2
edited by chrisby
on 2024/03/03 14:42
Change comment: There is no comment for this version

Summary

Details

Page properties
Content
... ... @@ -1,59 +1,61 @@
1 -### Use Cases
1 +asd
2 2  
3 -This example is intended to demonstrate the extensibility differences between data structures and objects by extending them with
3 +```
4 +type Square struct {
5 + length float
6 +}
4 4  
5 -1. an Area() function (extending behavior)
6 -1. a rectangle type (extending data type)
8 +type Circle struct {
9 + length float
10 +}
7 7  
8 -### Data Structure Style
12 +func Area(g GeometricObject) float {
13 + switch (g.type()):
14 + case Circle:
15 + return
16 + case Square:
17 + return ...
18 +}
9 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 - }
20 +func Circumference(g GeometricObject) float {
21 + ...
22 +}
23 +```
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.
25 +asd
28 28  
29 -####
27 +```
28 +# Object-Oriented Style
30 30  
31 -#### Object-Oriented Style
30 +class Square {
31 + length float
32 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 - }
33 + constructor(length float) {
34 + this.length = length
35 + }
36 +
37 + func Area() float {
38 + return this.length * this.length # Formula for square area: side^2
39 + }
40 +
41 + func Circumference() float {
42 + return 4 * this.length # Formula for square circumference: 4 * side
43 + }
44 +}
45 +
46 +class Circle {
47 + radius float
48 +
49 + constructor(radius float) {
50 + this.radius = radius
51 + }
52 +
53 + func Area() float {
54 + return 3.14159 * this.radius * this.radius # Formula for circle area: πr^2
55 + }
56 +
57 + func Circumference() float {
58 + return 2 * 3.14159 * this.radius # Formula for circle circumference: 2πr
59 + }
60 +}
61 +```