edisch
21. Februar 2012 um 19:07
21
wo wir grad hier bei ADTs sind kann mir vielleicht jemand bei der Übungsaufgabe helfen?
Wie würde das denn zb bei dem angehängten aussehen?
ich versteh das irgendwie nicht ganz wie man da vorgehen muss.
class Kind {
Geist(Kind){
}
boolean geburt (Kind){
}
usw ?
Attachment:
ADTkomisch.PNG: https://fsi.cs.fau.de/unb-attachments/post_104861/ADTkomisch.PNG
J5mith
21. Februar 2012 um 19:17
22
Ich bin mal so nett und stell hier meine Lösung für Kind rein:
public class Kind {
private boolean artig;
private boolean geist;
Kind() {
geist = true;
}
Kind(boolean artig) {
this.artig = artig;
geist = false;
}
Kind(Kind k) {
if (k.geist) {
geist = true;
} else {
this.artig = true;
geist = false;
}
}
public boolean istArtig() {
if (geist)
return false;
return artig;
}
public boolean istUnartig() {
if (geist)
return false;
return !(artig);
}
}
edisch
21. Februar 2012 um 19:21
23
danke danke danke, das ist sehr sehr nett.
edisch
21. Februar 2012 um 19:41
24
Ich kannes immer noch nicht ganz nachvollziehen (Mist ich muss das noch verstehen bis übermorgen).
Wie kommt man denn zb auf folgendes ?
Kind() {
geist = true;
}
brinky
21. Februar 2012 um 19:44
25
Dazu haben wir uebrigens auch eine “offizielle” Loesung veroeffentlicht.
1 „Gefällt mir“
heftig
21. Februar 2012 um 20:00
26
ich hab auch probleme mit der Aufgabe.
Also IstUnartig und IstArtig versteh ich ja, aber wie man auf den rest bei Kind kommt verstehe ich nicht.
Zum Beispiel wieso wird lediglich geist und artig initialisiert?
EDIT: und wieso wird geburt hier vollkommen weggelassen?
tamin
21. Februar 2012 um 20:22
27
Geburt ist ein Hilfskonstruktor mit dem du eben bei der Initialisierung eines Kindobjekts angibst, ob es artig (true) oder unartig (false) ist.
Wenn du ein Kindobjekt ohne den Hilfskonstruktor “geburt” initialisiert, ist das Kind nun mal nicht geboren, sondern ein geist: deshalb this.geist = true;
tamin
21. Februar 2012 um 21:01
28
Hat jemand zufällig die Lösungen zu den Aufgaben 6a,b,c ?
Ich bin mir immer noch mit der Dijkastra Tabelle unsicher wie man die nun richtig ausfüllt, wenn man gleiche Längen hat. Wäre sehr nett von euch
Wenn du mehrere, gleichwertige Knoten hast, die noch offen und minimale Distanz haben, dann liest du die Aufgabenstellung, ob drinsteht, was als Tie-Breaker verwendet werden soll:
Falls kein Tie-Breaker drinsteht, kannst du irgendeinen nehmen.
1 „Gefällt mir“
asdfg
22. Februar 2012 um 08:40
30
kann mir bitte jemand bei der aufgabe 4b weiterhelfen?!? ich steh da grad voll aufm schlauch
heftig
22. Februar 2012 um 09:10
31
bedeutet es eigentlich irgendwas wenn im UML diagramm zb en Attribut nur in großbuchstaben geschrieben ist?
Wie zb in na alten Klausur: +SCHWARZ
Mich
22. Februar 2012 um 09:41
32
Jein. Also in der offiziellen UML Syntax bedeutet das nichts. Aber in Java werden (nach Konvention) Konstanten (also final Variablen) in Grossbuchstaben geschrieben, demnach legt es nahe das SCHWARZ eine Konstante ist.
Eine Allgemeine Frage zu den Konstanten. Falls im Java Code die Konstante mal nicht in Grobuchstaben geschrieben ist, wie kann ich dann im UML ersichtlich machen dass es sich um eine Konstante handelt? Z.B. so Schwarz: int final = 0; oder darf ich dann einfach trotzdem Großbuchstaben verwenden??
Mich
22. Februar 2012 um 11:07
34
heftig
22. Februar 2012 um 11:10
35
okay danke.
Die frage von ellwoods is auch noch intressant.
Dann hab ich aber noch ne frage zu den multiplizitäten. Wenn da zb sowas ist:
-a
1 *
also auf der einen seite von der assoziation ne 1 und auf der andren seite nen *
wie unterscheidet sich das im Code von dem:
-a
0…1 *
ich hab es bis jetzt so gemacht, dass ich immer wenn da irgendwo ein * stand dass ich dann en array drauß gemacht hab. also zb
private type [] A;
is das so ok?
Ich habs genauso gemacht. 0…* , 1…* (aber auf Aggregation und Komposition aufpassen!) und * sind das selbe. Genauso wie 0…1 und 1.
tamin
22. Februar 2012 um 11:23
37
meisterT:
Wenn du mehrere, gleichwertige Knoten hast, die noch offen und minimale Distanz haben, dann liest du die Aufgabenstellung, ob drinsteht, was als Tie-Breaker verwendet werden soll:
Falls kein Tie-Breaker drinsteht, kannst du irgendeinen nehmen.
Wie sieht das denn dann genau aus ?
Ich habe folgendes:
A B C D E F G H K Z
0 - - - - - - - - -
9 6
9
15 19
9
12
…
also würde man das B dann einfach in die neue Zeile runterholen ? Und das es so lückenhaft aussieht stimmt auch ? Das macht mich nämlich etwas stutzig
tamin
22. Februar 2012 um 11:32
38
heftig:
okay danke.
Die frage von ellwoods is auch noch intressant.
Dann hab ich aber noch ne frage zu den multiplizitäten. Wenn da zb sowas ist:
-a
1 *
also auf der einen seite von der assoziation ne 1 und auf der andren seite nen *
wie unterscheidet sich das im Code von dem:
-a
0…1 *
ich hab es bis jetzt so gemacht, dass ich immer wenn da irgendwo ein * stand dass ich dann en array drauß gemacht hab. also zb
private type A;
is das so ok?
Das sollte vom Code her kein Unterschied machen.
Krankenhaus 1 --------- * Arzt
Ein Arzt ist genau in einem Krankenhaus beschäftigt. Krankenhäuser beschäftigen mehrere Ärzte.
class Arzt {
Krankenhaus krankenhaus;
}
class Krankenhaus {
Arzt[] aerzte;
}
Hier muss dem Arzt ein Krankenhaus explizit zugeordnet werden (krankenhaus != null).
Krankenhaus 0…1 --------- * Arzt
Ein Arzt ist in einem Krankenhaus beschäftigt nicht (er kann auch selbstständig arbeiten). Krankenhäuser beschäftigen mehrere Ärzte.
class Arzt {
Krankenhaus krankenhaus;
}
class Krankenhaus {
Arzt[] aerzte;
}
Bei diesen Arztobjekten könnte man auch krankenhaus = null; angeben, um zu zeigen, dass er selbstständig arbeitet.
heftig
22. Februar 2012 um 15:38
39
und woran erkenne ich im Code komposition und aggregation?
und 0…1 ist das gleiche wie 1 (im Code)?
MalteM
22. Februar 2012 um 15:41
40
Gar nicht. Es gibt in Java kein „not null“ wie in SQL.
Ich tendiere zu „ja“.