Klassendiagramm: unique

jono

Top Contributor
1. Wie setze ich die Person "unique"?
2. Ich verstehe jetzt auch nicht ganz, wie ich das mit compareTo zu machen habe, das Interface Comparable muss ich ja nicht implementieren, sondern nur die Klasse "Person" muss das das interface implementieren, oder? Und wie vergleiche ich das denn jetzt? Ich wüsste jetzt z.B. nur
Java:
 int result = firstname.compareTo(...);
Was muss in die Klammern, wie schreibe ich compareTo(); so, sodass firstname, lastname und email auf Einmaligkeit überprüft werden...
Die grün gefärbten UML-Elemente, die als Interfaces deklariert sind, habe ich implementiert, also die Methoden dieser Interfaces habe ich jetzt mit "@Override" in die jeweils neue Klasse geladen.
 

Anhänge

  • teams.png
    teams.png
    54,1 KB · Aufrufe: 45
Java:
private int id;
    private HashSet<String> firstname = new HashSet<String>();
    private HashSet<String> lastname = new HashSet<String>();
    private HashSet<String >email = new HashSet<String>();
    private TeamImpl team;
Habe das jetzt mit unique mal so gedacht zu machen...
 
1. Wie setze ich die Person "unique"?
Die Klasse Person kann das nicht selbst sicherstellen, dass muss immer der umgebende Kontext machen.

2. Ich verstehe jetzt auch nicht ganz, wie ich das mit compareTo zu machen habe, das Interface Comparable muss ich ja nicht implementieren, sondern nur die Klasse "Person" muss das das interface implementieren, oder?
Wenn die Klasse das Interface implementiert, implementierst du doch das Interface Comparable?!

Was muss in die Klammern, wie schreibe ich compareTo(); so, sodass firstname, lastname und email auf Einmaligkeit überprüft werden...
compareTo soll nicht auf "Einmaligkeit" prüfen (ergibt bei firstname & lastname auch wenig Sinn), sondern auf größer/gleich/kleiner vergleichen.

Ihr habt doch bestimmt irgendeine Erklärung zu compareTo bekommen?

Ansonsten, wie machst du es denn "per Hand" wenn du Namen vergleichen sollst?


Java:
private int id;
    private HashSet<String> firstname = new HashSet<String>();
    private HashSet<String> lastname = new HashSet<String>();
    private HashSet<String >email = new HashSet<String>();
    private TeamImpl team;
Habe das jetzt mit unique mal so gedacht zu machen...
Damit drückst du aus:
Person hat beliebig viele, ungeordnete Vornamen, Nachname und Mail-Adressen und "besitzt" ein "TeamImpl".

Das hat nicht mehr viel mit dem Diagramm zu tun.
 
Die Klasse Person kann das nicht selbst sicherstellen, dass muss immer der umgebende Kontext machen.
Also am besten in der Klasse, die das Interface "Team" implementiert, oder?
Wenn die Klasse das Interface implementiert, implementierst du doch das Interface Comparable?!
Ja, ich weiß, habe es umständlich formuliert. Damit war gemeint, dass ich das Interface Comparable nicht an sich als Code schreiben (implementieren) muss, da das ja eine vorgeschriebene Klasse ist, die man mit "implements" implementiert.
compareTo soll nicht auf "Einmaligkeit" prüfen (ergibt bei firstname & lastname auch wenig Sinn), sondern auf größer/gleich/kleiner vergleichen.

Ihr habt doch bestimmt irgendeine Erklärung zu compareTo bekommen?

Ansonsten, wie machst du es denn "per Hand" wenn du Namen vergleichen sollst?
Ja, das meinte ich so. Einmaligkeit im Sinne von vollständiger Gleichheit von Vor- und Nachnamen. Tatsächlich haben wir keine Beschreibung dazu, die Einzige ist die im angehängten UML-Diagramm. Ich würde, wie du schon sagst, darauf untersuchen, ob jeweils Vorname und Nachname gleich sind , wenn beide gleich sind, dann soll irgendeine Fehlermeldung geworfen werden.
Ich schicke mal die Interfaces, das beschreibt eigentlich schon alles mit JavaDoc:
Java:
/**
* Represents a person with 5 attributes. Each person belongs to exactly one
* {@link Team}. Person IDs and email addresses have to be unique.
*
*
*/
public interface Person extends Comparable<Person> {
    /**
     * @return the ID of this Person
     */
    public int getId();

    /**
     * @return the firstname of this Person
     */
    public String getFirstname();

    /**
     * @return the lastname of this Person
     */
    public String getLastname();

    /**
     * @return the email address of this Person, guaranteed to be not null and not
     *         empty
     */
    public String getEmail();

    /**
     * @return the {@link Team} of this Person, guaranteed to be not null
     */
    public Team getTeam();
}

Java:
import java.util.Collection;

/**
* Represents a Team with a member list. The team name identifies a team and
* hence has to be uniqe. The members are {@link Person}s.
*
*
*/
public interface Team {
    /**
     * @return the name of this Team, guaranteed to be not null and not empty
     */
    public String getName();

    /**
     * @return the members of this team as a {@link Collection} of {@link Person}s
     */
    public Collection<Person> getMembers();
}

Java:
import java.io.IOException;
import java.util.Collection;

public interface TeamReader {
    /**
     * Reads the CSV file {@code csvFilename} and returns a {@link Collection} of
     * {@link Team}s. The CSV file is TAB-delimited and contains a headline. Each
     * line corresponds to a {@link Person} and has 5 fields: person ID, team name,
     * lastname, firstname, email address.
     *
     * @param csvFilename
     *            the name of the CSV file
     * @return a {@link Collection} of {@link Team}s as defined in the CSV file
     * @throws IOException
     *             if there's a problem reading the CSV file
     * @throws DuplicateKeyException
     *             if there is a duplicate person ID or a duplicate email address
     */
    public Collection<Team> readCsvFile(String csvFilename) throws IOException, DuplicateKeyException;
}
 
Also am besten in der Klasse, die das Interface "Team" implementiert, oder?
Du musst dann nur sicherstellen, dass eine Person nur innerhalb eines Teams erzeugt werden kann, und das nicht in einem anderen Team eine Person mit gleicher ID/mail existieren kann.

Ja, das meinte ich so. Einmaligkeit im Sinne von vollständiger Gleichheit von Vor- und Nachnamen. Tatsächlich haben wir keine Beschreibung dazu, die Einzige ist die im angehängten UML-Diagramm. Ich würde, wie du schon sagst, darauf untersuchen, ob jeweils Vorname und Nachname gleich sind , wenn beide gleich sind, dann soll irgendeine Fehlermeldung geworfen werden.
compareTo hat nichts mit Einmaligkeit zu tun. Es soll nur geprüft werden, ob (lastname, firstname, email) einer Person kleiner/gleich/größer als (lastname, firstname, email) einer anderen Person sind. Gleichheit ist dabei gültig und darf nicht zu einer Fehlermeldung führen. (Gleichheit ist nur implizit durch die Einzigartigkeit der email ausgeschlossen, für compareTo ist das allerdings irrelevant.)
 

Neue Themen


Zurück
Oben