Kursliteratur och övriga resurser
The links to the resources on this page were verified on September 20, 2016. Let Alex know if you find any of them broken!
Kursboken
Kursen använder ingen officiell kurslitteratur. Huvuddelen av materialet i kursen kommer att vara det som gås igenom på övningar och föreläsningspass.
Den bok som ligger närmast det vi kommer gå igenom i kursen är denna:
Object-Oriented Design Using Java av Dale Skrien (2008).
Boken trycks inte längre, men finns att ladda ner gratis som PDF från sidan länkad ovan. Läsanvisningar till kursboken finner du på föreläsningar tabellen.
Extra lektioner om Objektorientering
Länkar till diverse information om Java
- Dokumentation av Java API
- Allmän dokumentation
- Oracles sida med länkar till gratis implementeringar av Java för olika plattformar
- Java language specification
- Google’s Java style guide
- Beskrivning av olika design patterns
- En online Javabok: Introduction to Programming using Java
Software tools
Det finns många tools för Java utveckling. I den här kursen använder vi IntelliJ. Den finns installerat på labbdatorerna.
Tutorials
Javadoc
Enhetstester
Git
Exempel generiska klasser
Either
public class Either<A, B> {
private final A right;
private final B left;
private Either(A right, B left) {
this.right = right;
this.left = left;
}
public static <A, B> Either<A, B> left(B left) {
return new Either<A, B>(null, left);
}
public static <A, B> Either<A, B> right(A right) {
return new Either<A, B>(right, null);
}
public boolean isLeft() {
return left != null;
}
public boolean isRight() {
return right != null;
}
public A fromRight(A def) {
if (isRight())
return right;
else
return def;
}
@Override
public String toString() {
if (isRight())
return "Right: " + right;
else
return "Left: " + left;
}
}
Map
public class Map<K, V> {
private List<Tuple<K, V>> map;
Map() {
map = new ArrayList<>();
}
public Either<V, String> lookupSafe(K key) {
for (Tuple<K, V> t : map)
if (t.fst().equals(key))
return Either.right(t.snd());
return Either.left("Key not found!");
}
public V lookup(K key) {
return lookupSafe(key).fromRight(null);
}
public void insert(K key, V value) {
if (lookupSafe(key).isLeft())
map.add(new Tuple(key, value));
}
public void remove(K key) {
map = Lists.filter((x) -> !x.fst().equals(key), map);
}
@Override
public Iterator<Tuple<K, V>> iterator() {
return new MapIterator<>(map);
}
}