Objektorientierte Programmierung
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Scheme</language> [[Programmierparadigmen_-_Computerübungen|Zur Übersicht]] Die folgenden Aufgaben beziehen sich direkt auf die Vorlesung und die dort vorgestellten Beispiele. Es empiehlt sich also das Sktipt durchzuarbeiten, die Beispiele zu erproben und die folgenden Aufgaben anschließend zu bearbeiten. '''Für Interessierte:''' Eine interessante multiparadigmatische Sprache ist Python. Mit Ihrem Scheme-Background wird Ihnen in Python vieles bekannt vorkommen, auch aus dem Gebiet der OOP. Vielleicht haben Sie in den anstehenden Semesterferien einfach etwas Zeit dafür? ==Student== Ergänzen Sie in der Definition der Klasse <tt>student%</tt> eine Methode für die Nachricht <tt>hi</tt>, sodass Dicky bzw. Deborah nach entsprechender Aufforderung mit <tt>"Hi guys, I'm Dick!"</tt> bzw. <tt>"Hi guys, I'm Deborah!"</tt> antwortet. <popup name="Interaktions Abschnitt"> '''Hinweis:''' Vergessen Sie vor der Kommunikation nicht, die Objekte zu reinstanziieren. </popup> <code id="4b5dae2819013">;student%</code> <run id="4b5dae281ca50">;Testbereich</run> ===ID=== Unsere beiden Studierenden benötigen noch eine ID, die während ihres gesamten Studiums Gültigkeit besitzt. Bisher gibt es aber weder eine Botschaft, wie etwa <tt>take-id</tt>, noch eine Methode, wie beispielsweise <tt>set-id!</tt>, um die entsprechende ID (natürliche Zahl) der Instanzvariablen <tt>id</tt> zuzuweisen. <br/> Erweitern Sie die Klassendefinition <tt>student%</tt> dementsprechend. <popup name="Interaktions Abschnitt"> '''Hinweis:''' Vergessen Sie nicht, die Objekte zu reinstanziieren, bevor Sie mit ihnen kommunizieren. </popup> <code id="4b5dae2819bc5">;student% mit ID</code> <run id="4b5dae281d219">;Tesbereich für Student mit ID</run> ===Grußform=== Modifizieren Sie die Klassendefinition student% in der beschriebenen Weise und testen Sie Botschaften wie: > (dolly 'say-your-name) "Lynn, Deborah" > (dolly 'say-your-name 'fnsn) "Deborah Lynn" Definieren Sie alle öffentlichen Methoden mit <tt>case-lambda</tt> und ergänzen Sie den Fall der Nichtanwendbarkeit der jeweiligen Methode. <code id="4b5dae281a399">;student% mit Grußformel</code> <run id="4b5dae281d9ec">;Testbereich für Grußformel</run> ==Economist== Schreiben Sie eine Klasse <tt>economist%</tt> als Kindklasse von <tt>student%</tt> und fügen Sie die öffentlichen Methoden <tt>tell-favourite-subject</tt>, zur Beantwortung der Frage nach dem Lieblingsfach, und die Methode <tt>I-like!</tt>, zur Entgegennahme des Lieblingsfaches, hinzu. <tt>I-like!</tt> soll sich der privaten Methode <tt>subject-changer!</tt>, die den Wert der Instanzvariablen <tt>favourite-subject</tt> modifiziert, bedienen. Prüfen Sie für je eine Instanz der Klasse <tt>economist%</tt> und eine der Klasse <tt>student%</tt>, dass sie die Frage nach dem Lieblingsfach beantwortet bzw. abweist. <popup name="Interaktions Abschnitt"> '''Hinweis''' Stellen sie sicher, dass die Klasse <tt>student%</tt> korrekt ist und gespeichert wurde. </popup> <code id="4b5dae281ab93">;economist% Klasse</code> <run id="4b5dae281e1fb">;Testbereich für den econiomist%</run> ===Veränderung=== Verändern Sie die Klassendefinition von <tt>economist%</tt> kurzzeitig so, dass <tt>economist%</tt> eine eigenständige, d.h. nicht von <tt>student%</tt> abgeleitete Klasse ist und erklären Sie die Antwort von <tt>pawel</tt> bei folgendem Aufruf. <code id="4b5dae281ab93">;neue economist% Klasse</code> <run id="4b5dae281e1fb">(pawel 'tell-favourite-subject 'subject) economist%: tell-favourite-subject is not applicable to (subject) </run> ==Chemist== Definieren Sie eine Klasse <tt>chemist%</tt> nach Ihren Vorstellungen. Folgen Sie dem im Skript angegebenen Vererbungsgraph. <code id="4b5dae281b6c5">;chemist%</code> <run id="4b5dae281ed58">;Testbereich chemist%</run> ==Klassenvariable== Was würde geschehen, wenn die Variable <tt>enrolled?</tt> ebenso wie <tt>total</tt> eine Klassenvariable wäre? Überprüfen Sie Ihre Vermutung durch Modifikation der Klassendedinition. <code id="4b5dae281bec8">;enrolled?</code> <run id="4b5dae281f52b">;Testbereich</run> [[Programmierparadigmen_-_Computerübungen|Zur Übersicht]]