File size: 4,792 Bytes
81474dd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
UML (Unified Model Language)
to document object-oriented programs

It can be used to graphically depict the BASIC STRUCTURES of object-oriented programming, such as CLASSES and their INHERITANCE relationships. 
These diagrams are usually referred to as CLASS DIAGRAMS.








Class
In UML, a class is represented by a frame consisting of 3 parts. 
At the top is the class NAME, 
in the middle are the class ATTRIBUTES, and 
at the bottom are the class METHODS.

ATTRIBUTES are presented in the form
name: type


A + or - is written in front of the attribute depending on whether the attribute is 'public' or 'private'. 
The sign for a 'protected' attribute is (usually) #.

So for example a protected, double type attribute balance would be marked:
#balance: double

...and a private Student type attribute tutor:
-tutor: Student





METHODS are represented in a similar form, but also the PARAMS of the methods are announced in the diagram. 
The 'method type' is reported after the parameter list.

So, for example, the set method 'setName' could be marked as follows:
+setName(name: String): void




=================================================


 

Let's look at the class 'Exercise' as an example:

class Exercise {
    // PRIVATE ATTRIBUTES
    private String correctAnswer;
    private String exerciseDescription;
    private double points;

    // CONSTRUCTOR
    public Exercise(String correctAnswer, String exerciseDescription, double points) {
        this.correctAnswer = correctAnswer;
        this.exerciseDescription = exerciseDescription;
        this.points = points;
    }

    public String getExerciseDescription() {
        return exerciseDescription;
    }

    public double getPoints() {
        return points;
    }

    public void setPoints(double points) {
        this.points = points;
    }
    
    public void checkAnswer(String answer) {
        if (answer.equals(correctAnswer)) {
            points = 10;
        }
    }
}
 

The UML diagram drawn from the class would look like this:
https://ville.utu.fi/APP/connector/0/219/source/9c79f234-86e5-43c5-821a-eaee0895bdeb.png


Exercise
-correctAnswer: String
-exercise Description: String
-points: double

+Exercise (correctAnswer: String, exercise Description: String, points: double)
+getExerciseDescription(): String
+getPoints(): String
+setPoints(points: double): void
+checkAnswer(answer: string): void







====================================


Modeling Class Hierarchies

Inheritance is marked with an ARROW that STARTS FROM the INHERITING CLASS. 
The head of the arrow is a triangle. 
If, for example, we have a class 'Teacher' that inherits from the class 'Person', the diagram could look like this:
https://ville.utu.fi/APP/connector/0/227/source/bf884576-16f4-4ef0-a9e5-a4e69cf1faa3.png



Person
+email: String
-name: String
+Person(email: String, name: String)
+getName(): String
+setName(): String

^
-
|
|
|
|
|

Teacher
-teachingSubject: String
+Teacher(email: String, name: String, teachingSubject: String)
+getTeaching Subject(): String








Interface classes are marked by writing the word <interface> above the class name. 
The implementation of the 'interface' is marked with an arrow similar to inheritance.

For example, the 'interface' class 'Priced' and its implementing class 'Product':

 

interface Priced {
    double getPrice();
    void setPrice(double price);
}


class Product implements Priced {
    
    private String name;
    private double price;
    private String code;
    
    public Product(String name, double price, String code) {
        this.name = name;
        this.price = price;
        this.code = code;
    }

    @Override
    public double getPrice() {
        return price;
    }

    @Override
    public void setPrice(double price) {
        this.price = price;
    }
}
 

...could be represented with a diagram like this:
https://ville.utu.fi/APP/connector/0/234/source/9b1af723-9438-4cb5-96bc-d20e586f2239.png



<interface>
Priced
-getPrice(): double
+setPrice(price: double): void


^
-
|
|
|
|
|


Product
-code: String
-name: String
-price: double
+Product(code: String, name: String, price: double)
+getPrice(): double
+setPrice(price: double): void












====================================




More Information on Class Diagrams

There is plenty of additional information about UML and class diagrams on the internet.

Diagrams can be drawn with almost any drawing program. 
A good free environment for drawing diagrams is DIA, for example:
http://dia-installer.de/

The online draw.io is also well suited for drawing UML diagrams:
https://app.diagrams.net/

There are also various plugins for Eclipse and other editors 
that can automatically generate a UML diagram from your code (or even code from a UML diagram).