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

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);
  }
}

MapIterator

class MapIterator<K, V> implements Iterator<Tuple<K, V>> {
  List<Tuple<K, V>> map;
  private int index;

  MapIterator(List<Tuple<K, V>> map) {
    this.map = map;
    index = 0;
  }

  @Override
  public boolean hasNext() {
    return index < map.size();
  }

  @Override
  public Tuple<K, V> next() {
    return map.get(index++);
  }
}
Menu