Tutorial 3
scan the QR code to access the preference form
Preference form only for H11A
An object's ability to decide what method to call, depending on where it is in the inheritance hierarchy
The arrow represents the subclass relationship
Polymorphism also apply with the implements relationship
UML Diagrams
1. Inheritance: "is-a" relationship
2. Realisation: "implements" relationship
3. Aggregation: "part-of" relationship
4. Composition: "has-a" relationship
Types of cardinality
Create an OO domain model for a system with the following requirements.
A Car has one or more engines and a producer. The producer is a manufacturing company who has a brand name. Engines are produced by a manufacturer and have a speed. There are only two types of engines within UNSW's cars:
Cars are able to drive to a particular location x, y.
Since UNSW is a world-leader in technology innovation, they want you to be able to model the behaviour of Time Travelling for any vehicle, and to model a time travelling car. A vehicle that travels in time stays in the same location but travels to a LocalDateTime.
Create an OO domain model for a system with the following requirements.
A Car has one or more engines and a producer. The producer is a manufacturing company who has a brand name. Engines are produced by a manufacturer and have a speed. There are only two types of engines within UNSW's cars:
Cars are able to drive to a particular location x, y.
Since UNSW is a world-leader in technology innovation, they want you to be able to model the behaviour of Time Travelling for any vehicle, and to model a time travelling car. A vehicle that travels in time stays in the same location but travels to a LocalDateTime.
A generally good diagram maker software that is free*
*if you sign up with an .edu account
Wondrous.java
The Wondrous Sequence is generated by the simple rule:
Make sure your VSCode is open in the correct folder, otherwise, these buttons wont appear
Make sure your VSCode is open in the correct folder, otherwise, these buttons won't appear
package wondrous;
import java.util.ArrayList;
import java.util.List;
// If the current term is even, the next term is half the current term.
// If the current term is odd, the next term is three times the current term, plus 1.
public class Wondrous {
public List<Integer> wondrous(int start) {
int current = start;
List<Integer> sequence = new ArrayList<Integer>();
while (true) {
sequence.add(current);
if (current == 1) {
break;
} else if (current % 2 == 0) {
// Even
current /= 2;
} else {
// odd
current = (current * 3) + 1;
}
}
return sequence;
}
}An exception is an undesirable event that can occur during the execution of a program and it can disrupt the normal flow of the program.
What happens when an error occur
Checked vs Unchecked
package wondrous;
import java.util.ArrayList;
import java.util.List;
public class Wondrous {
public List<Integer> wondrous(int start) {
int current = start;
List<Integer> sequence = new ArrayList<Integer>();
if (start < 1) {
throw new IllegalArgumentException("wondrous start must be >= 1");
}
while (true) {
sequence.add(current);
if (current == 1) {
break;
} else if (current % 2 == 0) {
current /= 2;
} else {
current = (current * 3) + 1;
}
}
return sequence;
}
}A non-positive starting value cannot produce a valid
wondrous sequence
Let's throw an exception!
More tests
package wondrous.test;
import static org.junit.Assert.assertThrows;
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.junit.jupiter.api.Test;
import wondrous.Wondrous;
public class WondrousTest {
@Test
public void testBasic() {
Wondrous w = new Wondrous();
List<Integer> expected = new ArrayList<Integer>(Arrays.asList(3, 10, 5, 16, 8, 4, 2, 1));
assertEquals(expected, w.wondrous(3));
}
@Test
public void testOne() {
Wondrous w = new Wondrous();
List<Integer> expected = new ArrayList<Integer>(Arrays.asList(1));
assertEquals(expected, w.wondrous(1));
}
@Test
public void testInvalid() {
Wondrous w = new Wondrous();
assertThrows(IllegalArgumentException.class, () -> {
w.wondrous(0);
});
}
}