Lecture overview -- Keyboard shortcut: 'u'  Previous page: Eksempel: Stakken igen -- Keyboard shortcut: 'p'  Next page: Eksempel: Microbib -- Keyboard shortcut: 'n'  Lecture notes - all slides and notes together  slide -- Keyboard shortcut: 't'  Help page about these notes  Alphabetic index  Course home  Page 8 : 26
Forelæsningsnoter i Objekt-orienteret Programmering
Design af klassehierarkier
Eksempel: Comparable

abstract class Comparable {
  
  /** Return whether I am less than other? */
  abstract boolean lessThan(Comparable other);

  /** Return whether I am less than or equal to other? */
  boolean lessThanOrEqual (Comparable other){
    return (this.lessThan(other) || this.equals(other));
  }

  /** Return whether I am greater than other? */
  boolean greaterThan (Comparable other){
    return (!this.lessThanOrEqual(other));
  }

  /** Return whether I am greater than or equal to other? */
  boolean greaterThanOrEqual(Comparable other){
    return (!this.lessThan(other));
  }
}

Den abstrakte klasse Comparable. Givet at subklasser af Comparable definerer lessThan, som er abstrakt i Comparable, bidrager klassen med konkrete metoder for lessThanOrEqual, greaterThan og greaterThanOrEqual. Denne blanding af abstrakte og konkrete metoder udgør en stærk mulighed, når vi arbejder med abstrakte klasser.

Det giver kun mening at sammenligne objekter som tilhører samme klasse

Dette er svært at udtrykke statisk i Java

I ovenstående klasse giver det kun mening at sammenligne to objekter af samme klasse. Dette sikres ikke i den viste klasse. Statisk set er der intet til hinder for at sammenligne et bankkonto objekt med en cirkulær liste, forudsat at begge er Comparable. Dette er utilfredsstillende, og det giver ikke mening. Det ville have været værdifuldt at kunne udtrykke, at typen af parameteren (af f.eks. lessThan) skal være af samme type som det objekt, hvorpå lessThan aktiveres. Eiffel, som er stærk inden for multipel nedarvning, tilbyder en sådan mulighed (idet typen af en parameter kan angives som 'like Current')

Go to exerciseSammenlignelige bankkonti