|
|
|
1 | (6) |
|
|
|
1 | (1) |
|
|
|
1 | (1) |
|
|
|
2 | (1) |
|
1.4 Java to Scala Quick Comparison |
|
|
3 | (2) |
|
|
|
5 | (1) |
|
1.6 Is This Book for You? |
|
|
5 | (1) |
|
1.7 Approach Taken by This Book |
|
|
5 | (2) |
|
2 Elements of Object Orientation |
|
|
7 | (8) |
|
|
|
7 | (1) |
|
|
|
7 | (2) |
|
|
|
9 | (3) |
|
2.4 The Move to Object Technology |
|
|
12 | (1) |
|
|
|
12 | (1) |
|
|
|
13 | (1) |
|
|
|
13 | (2) |
|
3 Why Object Orientation? |
|
|
15 | (6) |
|
|
|
15 | (1) |
|
3.2 The Procedural Approach |
|
|
15 | (2) |
|
3.2.1 A Naked Data Structure |
|
|
16 | (1) |
|
3.2.2 Procedures for the Data Structure |
|
|
16 | (1) |
|
|
|
17 | (1) |
|
3.3 Does Object Orientation Do Better? |
|
|
17 | (3) |
|
3.3.1 Packages Versus Classes |
|
|
17 | (2) |
|
|
|
19 | (1) |
|
|
|
20 | (1) |
|
4 Constructing an Object-Oriented System |
|
|
21 | (14) |
|
|
|
21 | (1) |
|
4.2 The Application: Windscreen Wipe Simulation |
|
|
21 | (1) |
|
|
|
22 | (1) |
|
4.4 Identifying the Objects |
|
|
23 | (1) |
|
4.5 Identifying the Services or Methods |
|
|
24 | (2) |
|
|
|
26 | (1) |
|
4.7 Bringing It All Together |
|
|
26 | (3) |
|
4.8 Where Is the Structure? |
|
|
29 | (2) |
|
|
|
31 | (1) |
|
|
|
31 | (1) |
|
|
|
32 | (3) |
|
|
|
33 | (2) |
|
|
|
35 | (6) |
|
|
|
35 | (1) |
|
5.2 What Is Functional Programming? |
|
|
35 | (2) |
|
5.3 Advantages to Functional Programming |
|
|
37 | (2) |
|
5.4 Disadvantages of Functional Programming |
|
|
39 | (1) |
|
5.5 Scala and Functional Programming |
|
|
40 | (1) |
|
|
|
41 | (6) |
|
|
|
41 | (1) |
|
|
|
41 | (2) |
|
6.3 Functional Programming |
|
|
43 | (1) |
|
|
|
44 | (3) |
|
|
|
47 | (18) |
|
|
|
47 | (1) |
|
7.2 The Scala Environment |
|
|
47 | (1) |
|
|
|
48 | (1) |
|
|
|
49 | (7) |
|
7.4.1 Creating an IntelliJ Project |
|
|
52 | (1) |
|
|
|
53 | (1) |
|
|
|
53 | (3) |
|
7.5 Implementing the Object |
|
|
56 | (1) |
|
7.6 Running the Application |
|
|
56 | (2) |
|
7.6.1 Scala Interpreter Console |
|
|
57 | (1) |
|
|
|
58 | (1) |
|
7.8 Compiling and Executing Scala |
|
|
58 | (2) |
|
|
|
60 | (5) |
|
7.9.1 Why Have Automatic Memory Management? |
|
|
60 | (1) |
|
7.9.2 Memory Management in Scala |
|
|
61 | (1) |
|
7.9.3 When Is Garbage Collection Performed? |
|
|
61 | (1) |
|
7.9.4 Checking the Available Memory |
|
|
61 | (4) |
|
|
|
65 | (4) |
|
|
|
65 | (1) |
|
8.2 Apps and Applications |
|
|
65 | (2) |
|
8.3 The Basics of the Language |
|
|
67 | (2) |
|
|
|
67 | (1) |
|
8.3.2 The Message Passing Mechanism |
|
|
68 | (1) |
|
8.3.3 The Statement Terminator |
|
|
68 | (1) |
|
|
|
69 | (18) |
|
|
|
69 | (1) |
|
|
|
69 | (13) |
|
|
|
69 | (1) |
|
9.2.2 Developing a Class Definition |
|
|
70 | (2) |
|
9.2.3 Classes and Messages |
|
|
72 | (1) |
|
9.2.4 Instances and Instance Variables |
|
|
72 | (1) |
|
9.2.5 Classes and Inheritance |
|
|
73 | (3) |
|
|
|
76 | (1) |
|
|
|
77 | (2) |
|
9.2.8 Auxiliary Constructors |
|
|
79 | (1) |
|
9.2.9 Class Initialisation Behaviour |
|
|
80 | (1) |
|
9.2.10 Review of Classes and Constructors |
|
|
81 | (1) |
|
|
|
82 | (5) |
|
|
|
83 | (4) |
|
|
|
87 | (16) |
|
|
|
87 | (1) |
|
|
|
87 | (13) |
|
|
|
89 | (2) |
|
|
|
91 | (2) |
|
10.2.3 The Local Variables Section |
|
|
93 | (1) |
|
10.2.4 The Statements Section |
|
|
94 | (1) |
|
10.2.5 The Return Operator |
|
|
94 | (1) |
|
|
|
95 | (1) |
|
10.2.7 Overriding toString |
|
|
96 | (2) |
|
10.2.8 Defining Property Methods |
|
|
98 | (2) |
|
|
|
100 | (3) |
|
11 Packages and Encapsulation |
|
|
103 | (18) |
|
|
|
103 | (1) |
|
|
|
103 | (9) |
|
11.2.1 Declaring a Package |
|
|
104 | (1) |
|
11.2.2 Additional Package Definitions Options |
|
|
104 | (5) |
|
11.2.3 An Example Package |
|
|
109 | (1) |
|
11.2.4 Accessing Package Elements |
|
|
110 | (1) |
|
11.2.5 An Example of Using a Package |
|
|
111 | (1) |
|
|
|
112 | (1) |
|
11.4 Additional Import Features |
|
|
113 | (1) |
|
|
|
114 | (1) |
|
|
|
115 | (1) |
|
|
|
115 | (1) |
|
|
|
116 | (5) |
|
11.8.1 Scala Visibility Modifiers |
|
|
116 | (1) |
|
|
|
117 | (1) |
|
11.8.3 Protected Modifier |
|
|
118 | (3) |
|
|
|
121 | (10) |
|
|
|
121 | (1) |
|
|
|
121 | (2) |
|
12.3 Create a New Package |
|
|
123 | (1) |
|
|
|
124 | (1) |
|
|
|
125 | (1) |
|
|
|
126 | (1) |
|
|
|
126 | (2) |
|
|
|
128 | (2) |
|
|
|
130 | (1) |
|
13 Classes, Inheritance and Abstraction |
|
|
131 | (16) |
|
|
|
131 | (1) |
|
13.1.1 What Are Classes for? |
|
|
131 | (1) |
|
13.2 Inheritance Between Types |
|
|
132 | (1) |
|
13.3 Inheritance Between Classes |
|
|
133 | (5) |
|
13.3.1 The Role of a Subclass |
|
|
134 | (1) |
|
13.3.2 Capabilities of Classes |
|
|
135 | (1) |
|
13.3.3 Overriding Behaviour |
|
|
136 | (1) |
|
|
|
137 | (1) |
|
13.4 Restricting a Subclass |
|
|
138 | (1) |
|
|
|
139 | (3) |
|
|
|
142 | (1) |
|
13.7 Scala Type Hierarchy |
|
|
143 | (1) |
|
|
|
144 | (3) |
|
|
|
147 | (8) |
|
|
|
147 | (1) |
|
|
|
147 | (2) |
|
|
|
149 | (6) |
|
14.3.1 Companion Object Behaviour |
|
|
151 | (1) |
|
14.3.2 A Object or an Instance |
|
|
152 | (3) |
|
|
|
155 | (4) |
|
|
|
155 | (1) |
|
|
|
155 | (1) |
|
15.3 Simple Value Type Example |
|
|
156 | (1) |
|
15.4 Additional Value Class Concepts |
|
|
157 | (1) |
|
15.5 Negating Value Classes |
|
|
158 | (1) |
|
|
|
159 | (12) |
|
|
|
159 | (1) |
|
16.2 Numbers and Numeric Operators |
|
|
159 | (2) |
|
|
|
159 | (1) |
|
16.2.2 Arithmetic Operators |
|
|
160 | (1) |
|
16.3 Characters and Strings |
|
|
161 | (1) |
|
|
|
161 | (1) |
|
|
|
161 | (1) |
|
|
|
162 | (2) |
|
|
|
164 | (4) |
|
16.5.1 Temporary Variables |
|
|
164 | (1) |
|
|
|
165 | (1) |
|
|
|
165 | (1) |
|
16.5.4 Option, Some and None |
|
|
165 | (2) |
|
|
|
167 | (1) |
|
|
|
167 | (1) |
|
16.6 Messages and Message Selectors |
|
|
168 | (1) |
|
|
|
168 | (1) |
|
|
|
168 | (1) |
|
|
|
169 | (2) |
|
|
|
171 | (16) |
|
|
|
171 | (1) |
|
|
|
171 | (3) |
|
|
|
171 | (2) |
|
17.2.2 If Returns a Value |
|
|
173 | (1) |
|
|
|
174 | (6) |
|
|
|
174 | (1) |
|
|
|
175 | (1) |
|
17.3.3 For Loop with a Filter |
|
|
175 | (1) |
|
|
|
176 | (1) |
|
|
|
176 | (1) |
|
|
|
177 | (1) |
|
|
|
178 | (1) |
|
17.3.8 An Example of Loops |
|
|
179 | (1) |
|
|
|
180 | (1) |
|
|
|
180 | (7) |
|
17.5.1 The Match Expression |
|
|
183 | (4) |
|
|
|
187 | (12) |
|
|
|
187 | (1) |
|
|
|
187 | (2) |
|
|
|
189 | (1) |
|
|
|
190 | (3) |
|
18.5 Abstract Trait Members |
|
|
193 | (1) |
|
18.6 Dynamic Binding of Traits |
|
|
193 | (2) |
|
|
|
195 | (1) |
|
|
|
195 | (1) |
|
|
|
196 | (2) |
|
18.10 To Trait or not to Trait |
|
|
198 | (1) |
|
|
|
199 | (12) |
|
|
|
199 | (1) |
|
19.2 Stackable Modifications |
|
|
199 | (5) |
|
19.3 Fat Versus Thin Traits |
|
|
204 | (1) |
|
|
|
205 | (2) |
|
19.5 Traits for a Data Type |
|
|
207 | (1) |
|
19.6 Single Abstract Method (SAM) Traits |
|
|
208 | (3) |
|
|
|
211 | (12) |
|
|
|
211 | (1) |
|
|
|
211 | (6) |
|
|
|
213 | (2) |
|
|
|
215 | (2) |
|
20.3 Creating Square Arrays |
|
|
217 | (1) |
|
20.4 Looping Through Arrays |
|
|
218 | (1) |
|
20.5 The Main Method Revisited |
|
|
219 | (4) |
|
|
|
223 | (6) |
|
|
|
223 | (1) |
|
|
|
223 | (1) |
|
21.3 Tuple Characteristics |
|
|
224 | (1) |
|
|
|
224 | (1) |
|
|
|
224 | (1) |
|
|
|
225 | (1) |
|
21.7 Iterating Over a Tuple |
|
|
226 | (1) |
|
|
|
227 | (2) |
|
22 Functional Programming in Scala |
|
|
229 | (12) |
|
|
|
229 | (1) |
|
22.2 Scala as a Functional Language |
|
|
229 | (1) |
|
22.3 Defining Scala Functions |
|
|
230 | (3) |
|
22.4 Class, Objects, Methods and Functions |
|
|
233 | (2) |
|
|
|
235 | (1) |
|
22.6 Single Abstract Method Traits |
|
|
235 | (2) |
|
|
|
237 | (2) |
|
22.8 Referential Transparency |
|
|
239 | (2) |
|
23 Higher-Order Functions |
|
|
241 | (6) |
|
|
|
241 | (1) |
|
23.2 Higher-Order Function Concepts |
|
|
241 | (1) |
|
23.3 Scala Higher-Order Functions |
|
|
242 | (2) |
|
23.4 Using Higher-Order Functions |
|
|
244 | (1) |
|
23.5 Higher-Order Functions in Scala Collections |
|
|
245 | (2) |
|
24 Partially Applied Functions and Currying |
|
|
247 | (8) |
|
|
|
247 | (1) |
|
24.2 Partially Applied Functions |
|
|
248 | (2) |
|
|
|
250 | (5) |
|
24.3.1 Introduction to Currying |
|
|
250 | (1) |
|
24.3.2 Defining Multiple Parameter List Functions |
|
|
250 | (1) |
|
24.3.3 Using Curried Functions |
|
|
251 | (1) |
|
24.3.4 Building Domain-Specific Languages |
|
|
252 | (3) |
|
25 Scala Collections Framework |
|
|
255 | (6) |
|
|
|
255 | (1) |
|
25.2 What Are Collections? |
|
|
255 | (1) |
|
|
|
256 | (5) |
|
25.3.1 Package Scala Collection |
|
|
258 | (1) |
|
25.3.2 Common Seq Behaviour |
|
|
259 | (1) |
|
25.3.3 Common Set Behaviour |
|
|
260 | (1) |
|
25.3.4 Common Map Behaviour |
|
|
260 | (1) |
|
26 Immutable Lists and Maps |
|
|
261 | (14) |
|
|
|
261 | (1) |
|
26.2 The Immutable List Collection |
|
|
261 | (11) |
|
|
|
261 | (1) |
|
26.2.2 List Concatenation |
|
|
262 | (2) |
|
|
|
264 | (1) |
|
|
|
265 | (1) |
|
26.2.5 Further List Processing |
|
|
265 | (4) |
|
|
|
269 | (1) |
|
26.2.7 Converting to a List |
|
|
270 | (1) |
|
26.2.8 Lists of User Defined Types |
|
|
270 | (2) |
|
26.3 The Immutable Map Type |
|
|
272 | (3) |
|
27 Immutable and Mutable Collection Packages |
|
|
275 | (12) |
|
|
|
275 | (1) |
|
27.2 Package Scala Collection Immutable |
|
|
275 | (4) |
|
|
|
275 | (3) |
|
|
|
278 | (1) |
|
|
|
279 | (1) |
|
27.3 Package Scala Collection Mutable |
|
|
279 | (5) |
|
|
|
280 | (1) |
|
|
|
281 | (1) |
|
|
|
282 | (1) |
|
|
|
282 | (1) |
|
|
|
283 | (1) |
|
|
|
284 | (1) |
|
|
|
285 | (2) |
|
|
|
287 | (8) |
|
|
|
287 | (1) |
|
|
|
287 | (1) |
|
28.3 Adding Type Parameterisation |
|
|
288 | (4) |
|
28.3.1 The MyQueue Mutable Class |
|
|
288 | (2) |
|
28.3.2 The Immutable Queue Class |
|
|
290 | (2) |
|
|
|
292 | (1) |
|
28.5 Lower and Upper Bounds |
|
|
293 | (1) |
|
28.6 Combining Variance and Bounds |
|
|
293 | (2) |
|
29 Further Language Constructs |
|
|
295 | (18) |
|
|
|
295 | (1) |
|
29.2 Implicit Conversions |
|
|
295 | (2) |
|
|
|
297 | (2) |
|
|
|
299 | (2) |
|
|
|
301 | (2) |
|
|
|
303 | (2) |
|
|
|
305 | (1) |
|
|
|
306 | (5) |
|
|
|
311 | (2) |
|
|
|
313 | (14) |
|
|
|
313 | (1) |
|
30.2 What Is an Exception? |
|
|
313 | (2) |
|
30.3 What Is Exception Handling? |
|
|
315 | (1) |
|
30.4 Throwing an Exception |
|
|
316 | (1) |
|
30.5 Catching an Exception |
|
|
317 | (3) |
|
30.6 Try Block Returns a Value |
|
|
320 | (1) |
|
30.7 Defining an Exception |
|
|
321 | (1) |
|
30.8 A More Functional Approach |
|
|
322 | (3) |
|
|
|
325 | (2) |
|
|
|
327 | (18) |
|
|
|
327 | (1) |
|
|
|
327 | (1) |
|
|
|
328 | (1) |
|
|
|
329 | (1) |
|
31.5 Akka Scala Actor Library |
|
|
330 | (2) |
|
31.6 Concurrent Hello World |
|
|
332 | (3) |
|
|
|
335 | (1) |
|
|
|
336 | (1) |
|
|
|
337 | (2) |
|
|
|
339 | (4) |
|
|
|
343 | (2) |
|
|
|
345 | (16) |
|
|
|
345 | (1) |
|
32.2 Generating a Result from an Actor |
|
|
345 | (3) |
|
|
|
348 | (3) |
|
|
|
351 | (3) |
|
|
|
354 | (1) |
|
|
|
355 | (5) |
|
|
|
360 | (1) |
|
33 Scala and JDBC Database Access |
|
|
361 | (28) |
|
|
|
361 | (1) |
|
|
|
361 | (1) |
|
|
|
362 | (2) |
|
|
|
364 | (1) |
|
|
|
365 | (1) |
|
|
|
366 | (1) |
|
|
|
367 | (1) |
|
33.8 Setting Up the Database |
|
|
368 | (1) |
|
33.8.1 Starting/Stopping/Connecting to MySQL |
|
|
368 | (1) |
|
|
|
369 | (3) |
|
|
|
369 | (1) |
|
33.9.2 Selecting to Work with a Database |
|
|
370 | (1) |
|
|
|
370 | (1) |
|
33.9.4 Adding Data to a Table |
|
|
371 | (1) |
|
33.10 Opening a Connection |
|
|
372 | (2) |
|
33.11 Inserting into a Table |
|
|
374 | (2) |
|
33.12 Obtaining Data from a Database |
|
|
376 | (2) |
|
33.13 Update an Existing Row |
|
|
378 | (1) |
|
33.14 Deleting from a Table |
|
|
379 | (1) |
|
|
|
379 | (2) |
|
|
|
381 | (1) |
|
|
|
381 | (3) |
|
|
|
384 | (2) |
|
|
|
386 | (3) |
|
|
|
387 | (1) |
|
33.19.2 ResultSetMetaData |
|
|
388 | (1) |
|
34 Scala Style Database Access |
|
|
389 | (6) |
|
|
|
389 | (1) |
|
|
|
389 | (1) |
|
|
|
390 | (1) |
|
|
|
391 | (1) |
|
|
|
392 | (3) |
|
35 Slick: Functional Relational Mapping for Scala |
|
|
395 | (14) |
|
|
|
395 | (1) |
|
|
|
395 | (2) |
|
35.3 Connecting to a Database |
|
|
397 | (1) |
|
35.4 Mapping Tables to Scala Types |
|
|
398 | (2) |
|
35.5 Table Query Interface |
|
|
400 | (1) |
|
|
|
401 | (1) |
|
|
|
401 | (1) |
|
35.8 Composing Database I/O Actions |
|
|
402 | (1) |
|
35.9 Example Setting Up a Database |
|
|
402 | (2) |
|
|
|
404 | (3) |
|
35.11 Updating, Upserting and Deleting Data |
|
|
407 | (2) |
|
|
|
409 | (6) |
|
|
|
409 | (1) |
|
|
|
409 | (1) |
|
36.3 What Should Be Tested? |
|
|
410 | (1) |
|
|
|
411 | (3) |
|
|
|
412 | (1) |
|
36.4.2 Integration Testing |
|
|
413 | (1) |
|
|
|
413 | (1) |
|
36.4.4 Installation Testing |
|
|
413 | (1) |
|
|
|
414 | (1) |
|
|
|
414 | (1) |
|
|
|
415 | (16) |
|
|
|
415 | (1) |
|
37.2 Scala Runtime Test Facilities |
|
|
415 | (2) |
|
|
|
415 | (1) |
|
37.2.2 Using Require and Assert |
|
|
416 | (1) |
|
37.3 Test Libraries in Scala |
|
|
417 | (1) |
|
|
|
417 | (1) |
|
|
|
417 | (1) |
|
|
|
418 | (1) |
|
37.4 Scalatest Testing Framework |
|
|
418 | (7) |
|
37.4.1 Setting up Your Scala Project |
|
|
418 | (1) |
|
37.4.2 ScalaTest and JUnit |
|
|
419 | (5) |
|
37.4.3 Scala Test and Functional Test Suites |
|
|
424 | (1) |
|
37.5 Scalatest and Feature Tests |
|
|
425 | (2) |
|
37.6 Test-Driven Development |
|
|
427 | (4) |
|
|
|
427 | (1) |
|
|
|
428 | (1) |
|
|
|
429 | (2) |
|
|
|
431 | (16) |
|
|
|
431 | (1) |
|
38.2 Introduction to Play |
|
|
431 | (3) |
|
38.2.1 Working with a Web Application |
|
|
432 | (1) |
|
38.2.2 How Play Changes the Stack |
|
|
432 | (2) |
|
|
|
434 | (4) |
|
38.3.1 Download and Install Play |
|
|
434 | (1) |
|
38.3.2 Using a Play Starter Project |
|
|
434 | (2) |
|
38.3.3 Starting the Application |
|
|
436 | (2) |
|
38.4 Examining the Structure of the Application |
|
|
438 | (1) |
|
38.5 Editing the Application |
|
|
439 | (3) |
|
38.5.1 Working with Your IDE |
|
|
439 | (1) |
|
38.5.2 Importing into IntelliJ |
|
|
439 | (2) |
|
38.5.3 Working with the Application |
|
|
441 | (1) |
|
38.6 Model-View-Controller |
|
|
442 | (2) |
|
38.7 Exploring the Play Application |
|
|
444 | (3) |
|
|
|
447 | (16) |
|
|
|
447 | (1) |
|
|
|
447 | (1) |
|
|
|
448 | (1) |
|
39.4 Creating the RESTful Web Application |
|
|
449 | (5) |
|
39.5 JavaScript and jQuery |
|
|
454 | (1) |
|
|
|
455 | (8) |
|
|
|
455 | (1) |
|
39.6.2 Adding jQuery to the Application |
|
|
456 | (7) |
|
|
|
463 | (12) |
|
|
|
463 | (1) |
|
|
|
463 | (1) |
|
|
|
464 | (1) |
|
40.4 Some Useful Typeclasses |
|
|
465 | (1) |
|
|
|
465 | (1) |
|
|
|
465 | (1) |
|
40.5 Standard Class Extensions |
|
|
466 | (5) |
|
40.5.1 Extensions to Option |
|
|
466 | (2) |
|
40.5.2 Boolean Extensions |
|
|
468 | (1) |
|
40.5.3 Extensions to List |
|
|
469 | (1) |
|
40.5.4 Extensions for Map |
|
|
470 | (1) |
|
40.5.5 Extensions to String |
|
|
471 | (1) |
|
|
|
471 | (1) |
|
|
|
472 | (3) |
|
|
|
475 | (14) |
|
|
|
475 | (1) |
|
|
|
475 | (1) |
|
|
|
476 | (1) |
|
|
|
477 | (1) |
|
41.5 Scala Swing Packages |
|
|
478 | (2) |
|
41.6 Swing Scala Worked Examples |
|
|
480 | (9) |
|
41.6.1 Simple Hello World UI |
|
|
480 | (1) |
|
41.6.2 Panels and UI Layout |
|
|
481 | (1) |
|
41.6.3 Working with a BorderPanel |
|
|
482 | (2) |
|
41.6.4 Working with a BoxPanel |
|
|
484 | (1) |
|
41.6.5 Displaying a Table |
|
|
485 | (4) |
|
42 User Input in Scala Swing |
|
|
489 | (12) |
|
|
|
489 | (1) |
|
|
|
489 | (7) |
|
42.2.1 Scala Swing Actions |
|
|
492 | (2) |
|
42.2.2 Working with Menus |
|
|
494 | (2) |
|
42.3 A Simple GUI Example |
|
|
496 | (5) |
|
|
|
501 | (14) |
|
|
|
501 | (1) |
|
43.2 Why We Need a Build Tool |
|
|
501 | (1) |
|
|
|
502 | (6) |
|
43.3.1 Maven Repositories |
|
|
504 | (1) |
|
|
|
504 | (2) |
|
|
|
506 | (2) |
|
43.3.4 Maven Lifecycle Commands |
|
|
508 | (1) |
|
|
|
508 | (7) |
|
43.4.1 Creating an SBT Project |
|
|
510 | (2) |
|
43.4.2 SBT Lifecycle Commands |
|
|
512 | (3) |
|
44 Scala & Java Interoperability |
|
|
515 | |
|
|
|
515 | (1) |
|
|
|
515 | (2) |
|
|
|
517 | (1) |
|
|
|
517 | (7) |
|
|
|
518 | (1) |
|
|
|
519 | (2) |
|
|
|
521 | (3) |
|
|
|
524 | (4) |
|
|
|
528 | (2) |
|
44.7 Implementing a Java Interface |
|
|
530 | |