Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
talit:tutorial_oop [2019-12-08 10:49] – [Vererbung] scatalit:tutorial_oop [2020-11-30 13:57] (aktuell) – [Vererbung] sps
Zeile 25: Zeile 25:
 1. Du kannst gerne bereits mit den Schritten beschrieben in [In Lektion](#In_Lektion) und in [Auftrag nach erster Lektion](#Auftrag_nach_erster_Lektion). 1. Du kannst gerne bereits mit den Schritten beschrieben in [In Lektion](#In_Lektion) und in [Auftrag nach erster Lektion](#Auftrag_nach_erster_Lektion).
  
-### In Lektion {#In_Lektion}+### In Lektion
  
 1. Erstelle auf GitHub ein neues Repository: 1. Erstelle auf GitHub ein neues Repository:
Zeile 44: Zeile 44:
 7. Füge *anschae* als Collaborator dieses Repos hinzu. 7. Füge *anschae* als Collaborator dieses Repos hinzu.
  
-### Auftrag nach erster Lektion {#Auftrag_nach_erster_Lektion}+### Auftrag nach erster Lektion
  
 Studiere im Tutorial **Python Setup** die folgenden Kapitel. Die Schritte, die du explizit machen sollst, werden explizit genannt: Studiere im Tutorial **Python Setup** die folgenden Kapitel. Die Schritte, die du explizit machen sollst, werden explizit genannt:
Zeile 193: Zeile 193:
   * CSV   * CSV
   * JSON   * JSON
-  * XML +  * (XML) 
-Bildet Gruppen (ca. 3 SuS) und arbeitet euch in eines dieser drei Datenformate ein.+Bildet Gruppen (je 2 SuS) und arbeitet euch in eines der beiden Datenformate (CSV oder JSON) ein.
  
 **Auftrag:** **Auftrag:**
Zeile 201: Zeile 201:
   - Erstellt ein Tutorial für eure Kollegen über euer Datenformat. Dieses soll einerseits eine allgemeine Einführung und Übersicht über euer Datenformat beinhalten. Andererseits soll genau erklärt werden, wie man mit Python mit diesem Format arbeiten kann.   - Erstellt ein Tutorial für eure Kollegen über euer Datenformat. Dieses soll einerseits eine allgemeine Einführung und Übersicht über euer Datenformat beinhalten. Andererseits soll genau erklärt werden, wie man mit Python mit diesem Format arbeiten kann.
   - Euer Tutorial soll ein repräsentatives Beispiel einer Datei von Eurem Format beinhalten. Stellt dieses in eurem Eintrag den Anderen zur Verfügung (siehe Beispiel unten).   - Euer Tutorial soll ein repräsentatives Beispiel einer Datei von Eurem Format beinhalten. Stellt dieses in eurem Eintrag den Anderen zur Verfügung (siehe Beispiel unten).
-  - Ebenso soll euer Tutorial ein Python-File beinhalten, mit dem dieses File gelesen und in dieses geschrieben werden kann (siehe ebenfall Beispiel unten).+  - Ebenso soll euer Tutorial ein Python-File beinhalten, mit dem dieses File gelesen und in dieses geschrieben werden kann (siehe ebenfalls Beispiel unten)
 +  - Findet eine Website, auf der man Dateien eures Formats auf Gültigkeit prüfen kann.
   - Ladet euer Tutorial auf dieses DokuWiki in eurem [[talit_2018_2022:start|SuS Arbeitsbereich]]   - Ladet euer Tutorial auf dieses DokuWiki in eurem [[talit_2018_2022:start|SuS Arbeitsbereich]]
-  - **Erste (aber trotzdem gute) Version: Sonntag 24.11.2019** +  - **Erste (aber trotzdem gute) Version: Sonntag 20.09.2019** 
-  - **Deadline: Montag 25.11.2019**+  - **Deadline: Montag 21.09.2019**
  
-Einen Codeblock im DokuWiki Editor wird wie folgt geschrieben:+Ein Codeblock im DokuWiki Editor wird wie folgt geschrieben:
 ``` ```
 <code python filename.py> <code python filename.py>
Zeile 219: Zeile 220:
 </code> </code>
  
-Mit einem Klick auf den Filenamen kann das File dann direkt hinuntergeladen werden. Wird kein Filenamen angegeben, so wird einfach der Code angezeigt, ohne dass man diesen hinunterladen kann.+Mit einem Klick auf den Filenamen kann das File dann direkt heruntergeladen werden. Wird kein Filenamen angegeben, so wird einfach der Code angezeigt, ohne dass man diesen hinunterladen kann.
  
-Für andere Programmiersprachen oder Datenformate, passe die Definition entsprechend an+Für andere Programmiersprachen oder Datenformate muss man die Definition entsprechend anpassen
  
 Beispiel JSON: Beispiel JSON:
Zeile 227: Zeile 228:
 <code json filename.json> <code json filename.json>
 // füge hier die Daten im JSON Format ein // füge hier die Daten im JSON Format ein
 +</code>`
 +```
 +
 +Beispiel C#:
 +```
 +<code csharp filename.cs>
 +// C#:
 +Console.WriteLine("Hallo Welt.");
 </code>` </code>`
 ``` ```
Zeile 234: Zeile 243:
    * Erstelle im Ordner `tutorial_oop_voci` einen Unterordner `dicts`. \\ \\    * Erstelle im Ordner `tutorial_oop_voci` einen Unterordner `dicts`. \\ \\
  
-   * Erstelle darin mindestens drei Files, je ein CSVJSON und XML. Jedes File soll eine Wörtliliste zu einem Thema beinhalten, z.B. `animals_en_de.csv`, `sport_fr_de.json`, ... Jeder Eintrag soll beihalten:+   * Erstelle darin mindestens vier Files, je zwei im CSV- und zwei im JSON-Format. Jedes File soll eine Wörtliliste zu einem Thema beinhalten, z.B. `animals_en_de.csv`, `sport_fr_de.json`, ... Jeder Eintrag soll beihalten:
        
          - Wort in Sprache 1 \\           - Wort in Sprache 1 \\ 
Zeile 240: Zeile 249:
          - Progress (z.B. Zahlen von 0 bis 3, wobei 0 für 'noch gar nicht gelernt' und 3 für 'komplett gelernt' stehen) \\ \\          - Progress (z.B. Zahlen von 0 bis 3, wobei 0 für 'noch gar nicht gelernt' und 3 für 'komplett gelernt' stehen) \\ \\
  
-   * *Tipp:* Mache eine Sicherheitskopie dieser Files, falls du sie ausversehen überschreibst.  \\ \\+   * *Tipp:* Mache eine Sicherheitskopie dieser Files, falls du sie aus Versehen überschreibst.  \\ \\
  
    * Mache eine Kopie von deinem aktuellsten Voci Trainer und speichere diesen unter dem Namen `voci_trainer_v04.py` und bearbeite nun diese Datei. \\ \\    * Mache eine Kopie von deinem aktuellsten Voci Trainer und speichere diesen unter dem Namen `voci_trainer_v04.py` und bearbeite nun diese Datei. \\ \\
Zeile 265: Zeile 274:
    * *Tipps:*    * *Tipps:*
      * Das Programm soll funktionieren, egal wie viele Files du zum einlesen hast. Wie kannst du eine unbekannte Anzahl an Objekten der Klasse Voci kreieren?      * Das Programm soll funktionieren, egal wie viele Files du zum einlesen hast. Wie kannst du eine unbekannte Anzahl an Objekten der Klasse Voci kreieren?
-     * Das Programm wird almählich lange und kompliziert. Definiere sinnvolle Funktionen, damit nicht aller Code im Hauptteil definiert ist.+     * Das Programm wird allmählich lange und kompliziert. Definiere sinnvolle Funktionen, damit nicht aller Code im Hauptteil definiert ist.
  
 ## Aufgabe 6 (voci_trainer_v04) ## Aufgabe 6 (voci_trainer_v04)
Zeile 275: Zeile 284:
 *Tipp:* Mache Kopien von deinen Voci-Listen, falls diese falsch oder leer überschrieben werden. *Tipp:* Mache Kopien von deinen Voci-Listen, falls diese falsch oder leer überschrieben werden.
  
-**Auftrag:** Als kleine Abschlussarbeit für dieses Semester sollt ihr ein Konsolen Game alleine oder in 2er Gruppen programmieren. Überlege dir auf nächste Woche (a) mit wem du arbeiten möchtest (oder alleine) und (b) was für ein Game es sein soll.+## Vorbereitung Console Game 
 + 
 +**Auftrag:** Als kleine Abschlussarbeit für dieses Semester (nach dem Voci-Programm) sollt ihr ein Konsolen Game alleine oder in 2er Gruppen programmieren. Überlege dir auf nächste Woche (a) mit wem du arbeiten möchtest (oder alleine) und (b) was für ein Game es sein soll.
  
 Die Bedingungen an das Game sind: Die Bedingungen an das Game sind:
  
    * Spielt in Konsole.    * Spielt in Konsole.
-   * Ihr dürft ein bereits bekanntes Spiel implementieren. Ihr könnt aber auch ein eigenes erfinden oder ein bestehende abändern/erweitern.+   * Ihr dürft ein bereits bekanntes Spiel implementieren. Ihr könnt aber auch ein eigenes erfinden oder ein bestehendes abändern/erweitern.
    * Gibt nach erfolgreichem Spielen einen Score zurück: absolviertes Level und Anzahl Punkte (z.B. gesammelte Punkte, Spieldauer in Sekunden, Anzahl Versuche, ...)    * Gibt nach erfolgreichem Spielen einen Score zurück: absolviertes Level und Anzahl Punkte (z.B. gesammelte Punkte, Spieldauer in Sekunden, Anzahl Versuche, ...)
    * Es ist auch möglich (und sogar wünschenswert), verschiedene Levels zu haben. Das Ziel wäre dann, ein möglichst hohes Level mit einem möglichst guten Score zu erzielen.    * Es ist auch möglich (und sogar wünschenswert), verschiedene Levels zu haben. Das Ziel wäre dann, ein möglichst hohes Level mit einem möglichst guten Score zu erzielen.
Zeile 353: Zeile 364:
 Ein wichtiges Konzept der OOP ist die **Vererbung**. Ein wichtiges Konzept der OOP ist die **Vererbung**.
  
-Machen wir ein Beispiel: In unserem Code haben wir eine Klasse //Voci//. Für jeder Datenfile, welches eine Wörtliliste enthält, erstellen wir ein //Voci//-Objekt. Nachdem wir die Wörtli gelern haben, wollen wir den Inhalt des //Voci//-Objekts zurück in die Datei schreiben. Es macht also Sinn, wenn die //Voci//-Klasse zwei Methoden //read\_file// und //save\_file// hat. Die Klasse könnte dann so aussehen:+Machen wir ein Beispiel: In unserem Code haben wir eine Klasse //Voci//. Für jedes Datenfile, welches eine Wörtliliste enthält, erstellen wir ein //Voci//-Objekt. Nachdem wir die Wörtli gelernt haben, wollen wir den Inhalt des //Voci//-Objekts zurück in die Datei schreiben. Es macht also Sinn, wenn die //Voci//-Klasse zwei Methoden //read\_file// und //save\_file// hat. Die Klasse könnte dann so aussehen:
  
 <code python> <code python>
Zeile 391: Zeile 402:
    * In der ersten Zeile geben wir eben an, dass //CSV\_Voci// von //Voci// erben soll. //Voci// wird dann die **parent class** und CSV\_Voci die **child class** genannt.\\ \\    * In der ersten Zeile geben wir eben an, dass //CSV\_Voci// von //Voci// erben soll. //Voci// wird dann die **parent class** und CSV\_Voci die **child class** genannt.\\ \\
    * Mit `super()` ist jeweils die **parent class** einer Klasse gemeint. Mit `super().__init__(file_path,max_progress)` sagen wir deshalb, dass die `__init__()`-Metode aus //Voci// verwendet werden soll.\\ \\    * Mit `super()` ist jeweils die **parent class** einer Klasse gemeint. Mit `super().__init__(file_path,max_progress)` sagen wir deshalb, dass die `__init__()`-Metode aus //Voci// verwendet werden soll.\\ \\
-   * Instanziieren wir ein neues CSV_Voci Objekt, müssen wir den Pfad zum File und den max. Progress angeben: `voci = CSV_Voci('my_super_voci.csv',3)`.\\ \\+   * Instanziieren wir ein neues //CSV\_Voci// Objekt, müssen wir den Pfad zum File und den max. Progress angeben: `voci = CSV_Voci('my_super_voci.csv',3)`.\\ \\
    * Mit `self.read_file()` lesen wir dann automatisch die Daten aus dem File ein. \\ \\    * Mit `self.read_file()` lesen wir dann automatisch die Daten aus dem File ein. \\ \\
-   * **Speichern** können wir dann einfach mit `voci.save_file()`.+   * **Speichern** können wir dann einfach mit `voci.save_file()`.\\ \\ 
 +   * Betrachten wir nun die //read_file//-Methode. Beachte, dass diese sowohl in der parent class //Voci// wie auch in der child class //CSV\_Voci// vorkommt: 
 + 
 +<code python> 
 +    def read_file(self): 
 +        pass 
 +</code> 
 + 
 +   * In der //Voci//-Klasse lassen wir diesen Code unverändert. Damit zeigen wir an, dass alle Klassen, die von //Voci// erben, eine solche Methode haben sollen. Da diese Methode für jede dieser child Klassen sehr unterschiedlich ist, kann diese Methode in der parent class noch nicht implementiert werden, wir schreiben einfach `pass`. Hingegen muss diese Methode in jeder child class wie //CSV\_Voci// explizit implementiert werden.\\ \\ 
 +   * Analog für //save\_file// 
 + 
 + 
 + 
 + 
 + 
 +## Aufgabe 7
  
 +Nun wollen wir uns an die finale Version unseres Codes machen. Bisher wurde der gesamte Code in ein einzelnes File hinein geschrieben. Damit der Code übersichtlich bleibt, macht es aber Sinn, diesen auf mehrere Files aufzuteilen. Erstelle dazu im Repo einen neuen Ordner, z.B. //final//, in dem wir die finale Version ablegen.
  
 +Erstelle darin einen Unterordner //source// und einen Unterordner //dicts// für alle Files mit Wörtlilisten. Erstelle dann folgende Files in der folgenden Struktur:
  
 +   * app.py
 +   * source/voci.py
 +   * source/wordpair.py
 +   * source/view.py
  
 +Schreibe deinen Code möglichst objektorientiert um.
  
 +//Tipp:// Kopiere deinen bestehenden Code nur in kleinen Päckchen in die neue Struktur. Stelle immer sicher, dass der Code keine Fehler beinhaltet, bevor du dich um weiteren Code kümmerst.
  
-## Weitere Features+## Aufgabe 8
  
 Finalisiere deinen Code. Finalisiere deinen Code.
  
-   * Struktur vom Code (verschiedene Files) 
    * soll auswählen können, in welche Richtung man übersetzen möchte: wordL1 -> wordL2 oder wordL2 -> wordL1    * soll auswählen können, in welche Richtung man übersetzen möchte: wordL1 -> wordL2 oder wordL2 -> wordL1
    * soll im Menu //Editieren//-Option haben, in der man jeweils für die WordPairs eines Vocis ...:    * soll im Menu //Editieren//-Option haben, in der man jeweils für die WordPairs eines Vocis ...:
Zeile 412: Zeile 445:
      * den Progress aller WordPairs auf 0 zurücksetzen kann      * den Progress aller WordPairs auf 0 zurücksetzen kann
    * Soll eine neue Voci-Liste erstellen können. Diese wird dann im gewünschten Dateiformat gespeichert    * Soll eine neue Voci-Liste erstellen können. Diese wird dann im gewünschten Dateiformat gespeichert
 +   * Überlege dir selbst, wie du dein Programm sinnvoll erweitern kannst.
  
  
  • talit/tutorial_oop.1575802165.txt.gz
  • Zuletzt geändert: 2019-12-08 10:49
  • von sca