Objektorientierte Programmierung

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Scheme</language>
Die folgenden Aufgaben beziehen sich direkt auf die in der Vorlesung verwendete Linienfuührung und die vorgestellten Beispiele. Es empiehlt sich also das Sktipt durchzuarbeiten,die Beispiele zu erproben und die folgenden Aufgaben an den passenden Stellen
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 OOP.


==Student==
Ergänzen Sie in der Definition der Klasse student% eine Methode für die Nachricht
hi, sodass Dicky bzw. Deborah nach dem Empfang des Grußes mit "Hi guys,
I'm Dick!" bzw. "Hi guys, I'm Deborah!" antwortet.
<popup name="Interaktions Abschnitt">
'''Hinweis:''' Vergessen Sie vor der Kommunikation nicht, die Objekte zu reinstanziieren.
<code>;student%</code>
<eval>;Testbereich</eval>
 </popup>

===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
take-id, noch eine Methode, wie beispielsweise set-id!, um die entsprechende
ID (natürliche Zahl) der Instanzvariablen id zuzuweisen. Erweitern Sie die
Klassendefinition student% dementsprechend.

<popup name="Interaktions Abschnitt">
'''Hinweis:''' Vergessen Sie nicht, die Objekte zu reinstanziieren, bevor Sie mit ihnen
kommunizieren.

<code>;student% mit ID</code>
<eval>;Tesbereich für Student mit ID</eval>
</popup>

===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 case-lambda und ergänzen Sie den
Fall der Nichtanwendbarkeit der jeweiligen Methode.
<popup name="Interaktions Abschnitt">
<code>;student% mit Grußformel</code>
<eval>;Testbereich für Grußformel</eval>
</popup>

==Economist==
Fügen Sie der Klasse 
 economist% 
die öffentlichen Methoden
tell-favourite-subject 
zur Beantwortung der Frage nach dem Lieblingsfach und 
 I-like! 
zur Entgegennahme des Lieblingsfaches zu. I-like! soll sich der privaten Methode subject-changer!, die den Wert der Instanzvariablen favourite-subject modifiziert, bedienen. Prüfen Sie für je eine Instanz der Klasse economist% und eine der Klasse student%, dass sie die Frage nach dem Lieblingsfach beantwortet bzw. abweist.

<popup name="Interaktions Abschnitt">
'''Hinweis''' Stellen sie sicher das die Studentenklasse von Ihnen Funktioniert und gespeichert wurde
<code>;economist% Klasse</code>
<eval>;Testbereich für den econiomist%</eval>
</popup>

===Veränderung===
Verändern Sie die Klassendefinition von economist% so, dass
economist% eine eigenstänndige, d.h. nicht von student% abgeleitete Klasse ist
und erklären Sie die Antwort von pawel.

<popup name="Interaktions Abschnitt">
<code>;Test von Veränderter economist% Klasse</code>
<eval>(pawel 'tell-favourite-subject 'subject)</eval>
</popup>

==Chemist==
Definieren Sie eine Klasse chemist% nach Ihren Vorstellungen. Folgen Sie dem im
Skript angegebenen Vererbungsgraph.

<popup name="Interaktions Abschnitt">
<code>;chemist%</code>
<eval>;Testbereich chemist%</eval>
</popup>

==Klassenvariable==
Was würde geschehen, wenn die Variable enrolled? ebenso wie total eine
Klassenvariable wäre? Überprüfen Sie Ihre Vermutung durch Modifikation der
Klassendedinition.

<popup name="Interaktions Abschnitt">
<code>;enrolled</code>
<eval>;Testbereich</eval>
</poppup>