Size: 6763
Comment:
|
← Revision 715 as of 2010-06-19 23:54:11 ⇥
Size: 2777
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 1: | Line 1: |
== Fragen und Kommentare zur 5. Vorlesung / zum 5. Übungsblatt == | == Fragen und Kommentare zur 8. Vorlesung / zum 8. Übungsblatt == |
Line 3: | Line 3: |
@Roman: Ja, richtig, kann praxisrelevant sein, muss aber nicht. Vielleicht kommen wir ja irgendwann gegen Ende des Semesters dazu. Freut mich auf jeden Fall, dass sie sich für diese weiterführenden Konzepte interessieren und sich da offenbar auch schon sehr gut auskennen. '''Hannah 20Mai10 21:44''' | Auf vielfachen Wunsch haben wir jetzt statt dem Wiki ein ... [trommelwirbel] ... [[http://stromboli.informatik.uni-freiburg.de/teaching/cplusplus-ss2010/forum|Forum]] !!! |
Line 5: | Line 5: |
@Hannah: Ich wollte auf gar keinen Fall dogmatisch rüber kommen, aber als rein theoretisch würde ich gerade das KISS-Prinzip nicht sehen. Klassen die mehr als nur die essentiellen Eigenschaften/Methoden eines Objektes implementieren haben auf lange Sicht praxisrelevante Nachteile die mMn nicht vernachlässigbar sind, da die Klassen riesig werden und unintuitiv. Auch könnte man die getInterleaveOf Methode in der ListHandler Klasse abstrahieren und z.B. unabhängig von dem genauen Typ der Liste machen (z.B. per interface). Derjenige der seine interleaveWith Methode in der Liste selber implementiert kann diese Methode nun für jede andere Form von Listen kopieren (und bei irgendwelchen Änderungen ALLE Methoden ändern..). Dass das über den momentanten Stand in der Vorlesung hinausgeht is mir klar, aber die Praxis Relevanz sehe ich da trotzdem ganz deutlich. '''RomanW 20Mai10 21:32''' | @Dario + Alle: Ich bitte sehr darum, hier nichts mehr reinzuschreiben. Die Mehrheit der TeilnehmerInnen hat sich ein Forum gewünscht (teilweise sehr), und deswegen haben wir jetzt ein Forum. Wiki und Forum zur gleichen Zeit ist nicht praktikabel. Es ist auch keinen Deut schwieriger oder mehr Arbeit eine Frage auf dem Forum zu posten als auf dem Wiki. '''Hannah 20Jun10 00:53''' |
Line 7: | Line 7: |
@Roman: Mit "keine Methode ... sein sollte" und "ausgelagert sein sollte" wäre ich vorsichtig. Es gibt viele schöne Konzepte in der objekt-orientierten Welt, nur was die dann mit der Praxis zu tun haben, ist oft fraglich. Ich mache in der Vorlesung ganz dezidiert Programmieren in C++ aus der Praxis für die Praxis und so soll es sein und so soll es auch bleiben. Weiterführende Konzepte werden wir genau dann lernen und anwenden, wenn wir sie wirklich brauchen, vorher nicht. '''Hannah 20Mai10 21:07''' | @Es funktioniert auch mit leerzeichen.Die sache mit der Menge habe erst heute morgen mit dem Set.h Datei bemerkt, davor habe ich eine andere Implementierung benutzt.. Naja die lange Seite ist effizienter als 200 Topics in einem Forum.Und was ich auch nicht verstehe ist warum weil ein paar Leute das Forum wollen , dann müssen auch die andere sich anpassen. Ich bin dabei bei der Petition gegen das Forum oder zumindest schlage eine demokratische Lösung vor ,beides laufen lassen. |
Line 9: | Line 11: |
@SebastianD: Die Konfusion kommt höchstwahrscheinlich daher, dass interleaveWith (imo!) streng genommen keine Methode der ListOfInteger Klasse sein sollte, sondern (gemäß dem KISS-Prinzip) in einer Art ListHandler Klasse ausgelagert sein sollte. Diese würde dann eine Methode a la ListOfIntegers getInterleaveOf(ListOfIntegers list1, ListOfIntegers list2) bereitstellen und die neue Liste zurückgeben. '''RomanW 20Mai10 20:53''' | '''Dario''' |
Line 11: | Line 13: |
@Ben: ''private'' bedeutet nicht Instanz-, sondern Klassensichtbarkeit. Du kannst also innerhalb deiner Listenklasse auf die (private) Member anderer Instanzen der Listenklasse zugreifen. '''SebastianD 20Mai10 20:19''' | @Dario. Also mich stören erstmal die Leerzeichen zwischen ''array'' und ''_bits''. Das klappt so und ist richtig hier reinkopiert? |
Line 13: | Line 15: |
@Hannah: Es ging mir prinzipiell nur um die Interleave Methode, da habe ich von außen keinerlei Zugriff auf die Listen in den übergebenen Objekten, da _size und _elements private ist. Somit muss man entweder get/set Methoden erstellen um die Werte einzelt auslesen zu können, die Klassenvariablen public machen oder die Methoden vom zweiten Teil nutzen (push_back/pop_back), wobei jedoch direkt bei der leeren Liste ein assert kommt, den ich nicht abfangen kann. Es war von mir weniger eine Frage sondern mehr eine Feststellung :) '''Ben 20Mai10 19:38''' | Zweitens implementieren wir die ''Set''-Klasse. Soll imo heissen, dass wenn ein Element bereits in der Menge ist, dass es dann nicht mehr ein zweites Mal am Ende aufgenommen wird. Ich kenne deine Implementierung hier nicht, aber ''array._bits[2]'' sollte sinngemäß zu einem "ungültigen" Speicherzugriff führen, da für die ''Set<bool>'' Variante zwei Felder ja schon reichen für alle Elemente. |
Line 15: | Line 17: |
@Ben: Auf die Membervariablen ''_size'' und ''_elements'' brauchen Sie für dieses Übungsblatt keinen Zugriff von außerhalb der Klasse. Deswegen können Sie auch ''private'' sein (sollten Sie sowieso) und Sie brauchen auch keine spezielle ''get'' oder ''set'' Methode. Nur die Memberfunktionen brauchen Zugriff auf diese Membervariablen, und den haben Sie ja sowieso, d.h. Sie können z.B. in ''parseListOfIntegers'' einfach schreiben ''_size = listSize'' oder sowas. '''Hannah 20Mai10 19:28''' @Heinke: Ja, genau, siehe mein code snippet in der Antwort an SebastianD. '''Hannah 20Mai10 19:23''' @SebastianD: Berechtigte Frage. Ich würde es so machen: |
Ja, das Forum hat auch Nachteile, aber ich finde es auch besser, als hier auf einer langen Seite zu suchen, ob jemand schon mein Problem in irgendeiner Form vorgetragen hat. '''Dominik 19June 15:38''' Hallo ich möchte mein bool pushBack testen aber irgendwie klappt´s es noch nicht. z.B. wenn ich so teste |
Line 22: | Line 21: |
void ListOfIntegers::getInterleaveOf(const ListOfIntegers& list1, const ListOfIntegers& list2); | Set<bool> array; array.pushBack(true); array.pushBack(false); // array.pushBack(false); // array.pushBack(true); ASSERT_EQ(true, array. _bits[0]); ASSERT_EQ(false, array. _bits[1]); // ASSERT_EQ(true, array. _bits[2]); |
Line 24: | Line 30: |
und dann in der ''main'' Funktion: | läuft es, aber wenn ich die kommentierten Zeilen hinzufüge dann klappt es nicht mehr. |
Line 26: | Line 32: |
{{{ ListOfInteger list1; ListOfInteger list2; list1.parseFromString(list1AsString); list2.parseFromString(list2AsString); list1.print("Input list 1 : "); list2.print("Input list 2 : "); ListOfInteger result; result.getInterleaveOf(list1, list2); result.print("Result list : "); }}} Die Version von Ben ist aber auch eine Variante die man in diesem Kontext öfter sieht. Ich würde die Methode dann allerdings ''interleaveWith'' nennen, man sollte das bei der objekt-orientierten Programmierung immer wie einen (einfachen) Satz lesen könnten. Die Variante hat halt den Nachteil, dass dann die eine Liste überschrieben wird, deswegen gefällt mir die oben besser. '''Hannah 20Mai10 19:14''' |
P.S. Auf dem Forum möchte ich nicht schreiben, da ich es zeitaufwändiger und unoriginell finde und zweitens habe ich es nie gewollt. |
Line 39: | Line 34: |
@Hannah: Ah. Verstehe. Mit anderen Worten, ich muss also für jede Liste eine Instanz des Objektes erstellen. Oder sehe ichs immer noch falsch? '''Heinke 20Mai10 18:23''' | '''Dario 18Jun 21:30''' |
Line 41: | Line 36: |
Für mich klingt es nach Version 1: | Bitte Ihre Fragen in Zukunft dort stellen, unter der Rubrik "Aktuelles Übungsblatt". Das meiste dort sollte selbst erklärend sein. Sie können sich auf dem Forum registrieren (das macht die Benutzung komfortabler), müssen es aber nicht. |
Line 43: | Line 38: |
{{{ ListProcessing list1; [...] ListProcessing list2; [...] list1.interleave(list2); // Danach list1 ausgeben }}} Nur muss man sich dann imho Gedanken über die Sichtbarkeit von _size und _elements machen oder eine set/get Methode implementiern...'''Ben 20Mai10 17:36''' Ich bin mir im Unklaren über die genaue Funktionsweise der neuen Interleave-Methode, da mir selbst spontan mehrere verschiedene Möglichkeiten einfallen:<<BR>> 1. void interleaveWith(ListOfIntegers list); // Die Elemente dieser Liste werden mit der Argumentliste vermischt (oder was auch immer).<<BR>> 2. ListOfIntegers interleaveWith(ListOfIntegers list); // siehe 1., nur dass die Argumente jetzt in einer neuen Liste gespeichert und diese zurück gegeben wird.<<BR>> 3. void interleave(ListOfIntegers list1, ListOfIntegers list2); // Speichert die Elemente der beiden Argumentlisten vermischt in dieser Liste (Liste vorher leeren?).<<BR>> 4. ListOfIntegers interleave(ListOfIntegers list1, ListOfIntegers list2); // Idealerweise sogar static. Speichert die Elemente der beiden Argumentlisten vermischt in einer neuen Liste und gibt diese zurück.<<BR>> 5. void interleaveWith(ListOfIntegers result, ListOfIntegers list); // C-Style. Man übergibt außerdem eine Liste, in der die Elemente dann gespeichert werden sollen.<<BR>> 6. ...<<BR>> Welche davon? '''SebastianD 20Mai10 14:24''' @Heinke: Für Aufgabe 1 vom neuen Übungsblatt soll das Programm exakt dasselbe machen, die Ihr Programm vom 4. Übungsblatt, nur soll das Programm mit Klassen realisiert sein, wie in der Vorlesung vorgemacht, und die Felder (die jetzt Membervariablen sind), sollen keine fixe Größe ''MAX_LIST_SIZE'' mehr haben, sondern genau die Größe, die benötigt wird. Beantwortet das Ihre Frage? '''Hannah 20Mai10 12:46''' Verstehe ich das richtig: Der Benutzer soll ./ListProcessingMain "1,1,1,1" "2,2,2,2,2" aufrufen und anschließend sollen die Listen intern geparsed, interleaved und als array im Objekt gespeichert werden? '''Heinke 20Mai10 9:28 ''' |
'''Hannah 18Jun10 1:17''' |
Fragen und Kommentare zur 8. Vorlesung / zum 8. Übungsblatt
Auf vielfachen Wunsch haben wir jetzt statt dem Wiki ein ... [trommelwirbel] ... Forum !!!
@Dario + Alle: Ich bitte sehr darum, hier nichts mehr reinzuschreiben. Die Mehrheit der TeilnehmerInnen hat sich ein Forum gewünscht (teilweise sehr), und deswegen haben wir jetzt ein Forum. Wiki und Forum zur gleichen Zeit ist nicht praktikabel. Es ist auch keinen Deut schwieriger oder mehr Arbeit eine Frage auf dem Forum zu posten als auf dem Wiki. Hannah 20Jun10 00:53
@Es funktioniert auch mit leerzeichen.Die sache mit der Menge habe erst heute morgen mit dem Set.h Datei bemerkt, davor habe ich eine andere Implementierung benutzt.. Naja die lange Seite ist effizienter als 200 Topics in einem Forum.Und was ich auch nicht verstehe ist warum weil ein paar Leute das Forum wollen , dann müssen auch die andere sich anpassen. Ich bin dabei bei der Petition gegen das Forum oder zumindest schlage eine demokratische Lösung vor ,beides laufen lassen.
Dario
@Dario. Also mich stören erstmal die Leerzeichen zwischen array und _bits. Das klappt so und ist richtig hier reinkopiert?
Zweitens implementieren wir die Set-Klasse. Soll imo heissen, dass wenn ein Element bereits in der Menge ist, dass es dann nicht mehr ein zweites Mal am Ende aufgenommen wird. Ich kenne deine Implementierung hier nicht, aber array._bits[2] sollte sinngemäß zu einem "ungültigen" Speicherzugriff führen, da für die Set<bool> Variante zwei Felder ja schon reichen für alle Elemente.
Ja, das Forum hat auch Nachteile, aber ich finde es auch besser, als hier auf einer langen Seite zu suchen, ob jemand schon mein Problem in irgendeiner Form vorgetragen hat. Dominik 19June 15:38 Hallo ich möchte mein bool pushBack testen aber irgendwie klappt´s es noch nicht. z.B. wenn ich so teste
Set<bool> array; array.pushBack(true); array.pushBack(false); // array.pushBack(false); // array.pushBack(true); ASSERT_EQ(true, array. _bits[0]); ASSERT_EQ(false, array. _bits[1]); // ASSERT_EQ(true, array. _bits[2]);
läuft es, aber wenn ich die kommentierten Zeilen hinzufüge dann klappt es nicht mehr.
P.S. Auf dem Forum möchte ich nicht schreiben, da ich es zeitaufwändiger und unoriginell finde und zweitens habe ich es nie gewollt.
Dario 18Jun 21:30
Bitte Ihre Fragen in Zukunft dort stellen, unter der Rubrik "Aktuelles Übungsblatt". Das meiste dort sollte selbst erklärend sein. Sie können sich auf dem Forum registrieren (das macht die Benutzung komfortabler), müssen es aber nicht.
Hannah 18Jun10 1:17