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