MezData-Logo

Lösung 2019-So-FIA-A1

KlassendiagrammEin Schüler hat nach Gewichtung 4:7 bei 90 Minuten Prüfungszeit 51,4 Minuten zur Lösung der Aufgabe.
Ich habe versucht mit IntelliJ IDEA in dieser Zeit eine Lösung zu erstellen. Trotz Autovervollständigung und vorliegendem Lösungsvorschlag werde ich nicht fertig.

 

Fehler gefunden im Klassendiagramm: -absender muss protected sein: #absender

Lehrer im ITG verwenden diese Formelsammlung als Basis: Daher Text statt string und GZ statt integer im Klassendiagramm.

Die Rauten sollten ausgefüllt sein: Komposition statt Aggregation. Gibt die Info, welche Klassen verantwortlich sind abhängige Objekte wieder aus dem Speicher zu räumen, sinnvoll noch bei Sprachen wie Delphi oder C++ usw., die keinen Refernenzzähler und Garbage-Collector haben wie Java.

Die Assoziationen sind gerichtet, daher Pfeile an den Enden.

 

Angepasstes Klassendiagramm rechts:

Gemacht mit UMLet

Dateien: KlassendiagrammVorgabe.uxf KlassendiagrammKommentar.uxf

1.1 SozialesNetzwerk, Person, Nachricht und Textnachricht

Quellcode [S_Netzwerk/src/SozialesNetzwerk.java]
import java.util.ArrayList; // Klasse fuer Objekt-Listen
 
public class SozialesNetzwerk { // 1.1
  private ArrayList<Nachricht> nachrichtenliste = new ArrayList<Nachricht>();
  private ArrayList<Person> mitgliederliste = new ArrayList<Person>();
 
  public void hinzufuegenMitglied(Person person) {
    mitgliederliste.add(person);
  }
 
  public void hinzufuegenNachricht(Nachricht nachricht) {
    nachrichtenliste.add(nachricht);
  }
 
  public String getAlleNachrichten() {
    String rueckgabe = "";
    for (Nachricht n : nachrichtenliste) { // mit allen Elementen
      rueckgabe += n.getNachricht();
    }
    return rueckgabe;
  }
}
Quellcode [S_Netzwerk/src/Person.java]
public class Person { // 1.1
  private String nachname;
  private String vorname;
 
  public Person() {
    nachname = "";
    vorname = "";
  }
 
  public Person(String nn, String vn) {
    nachname = nn;
    vorname = vn;
  }
 
  public String getNachname() {
    return nachname;
  }
 
  public String getVorname() {
    return vorname;
  }
}
Quellcode [S_Netzwerk/src/Nachricht.java]
public abstract class Nachricht { // 1.1
  protected Person absender; // im Klassendiagramm falsch als private
  protected int likes;
 
  public Nachricht(){}
  public Nachricht(Person absender){
    this.absender=absender;
    likes=0; // eigentlich unnötig
  }
  public void hinzufuegenLike(){
    likes++;
  }
  public abstract String getNachricht();
}
Quellcode [S_Netzwerk/src/Textnachricht.java]
public class Textnachricht extends Nachricht{ // 1.1
  private String nachricht;
 
  public Textnachricht(){}
  public Textnachricht(String nachricht,Person absender){
    super(absender);
    this.nachricht=nachricht;
  }
  public String getNachricht(){
    return absender.getNachname()+": "+nachricht+" ("+likes+" Likes)\n";
  }
}

1.2 Hauptprogramm

Quellcode [S_Netzwerk/src/Main.java]
public class Main { // 1.2
 
  public static void main(String[] args) {
    SozialesNetzwerk mySozial = new SozialesNetzwerk();
    Person p1=new Person("Meier","Levin");
    Person p2=new Person("Milan","Alex");
    mySozial.hinzufuegenMitglied(p1);
    mySozial.hinzufuegenMitglied(p2);
    Textnachricht tn1 = new Textnachricht("Morgen ist Schulfrei!",p1);
    Textnachricht tn2 = new Textnachricht("Hurra",p2);
    mySozial.hinzufuegenNachricht(tn1);
    mySozial.hinzufuegenNachricht(tn2);
    tn1.hinzufuegenLike();
    tn1.hinzufuegenLike();
    System.out.println(mySozial.getAlleNachrichten());
    Passwort.test(); // Zum Test von 1.4
  }
}

1.3 Klassendiagramm erweitern

Klassendiagramm

1.4 Start-Passwort generieren

Quellcode [S_Netzwerk/src/Passwort.java]
public class Passwort { // 1.4
  public static String getPasswort(String satz){
    String [] teile = satz.split(" "); // in Woerter teilen
    String passwort = "";
    char c;
    boolean gross = true;
    for (int i=0;i<teile.length;i++){
      c=teile[i].charAt(0); // erstes Zeichen
      if(Character.isLetter(c)){ // wenn Buchstabe
        if(gross){
          c=Character.toUpperCase(c);
        } else {
          c=Character.toLowerCase(c);
        }
        gross=!gross;
        passwort+=c;
      }
    }
    return passwort;
  }
  public static void test(){
    String beispiel="Ich generiere mir ein neues Passwort";
    System.out.println(beispiel);
    System.out.println(getPasswort(beispiel));
  }
}