Implementieren durch Komposition oder Aggregation

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Kusja
User
Beiträge: 18
Registriert: Mittwoch 18. Dezember 2019, 20:54

Ich grüße Euch. Ich komme am besten direkt zum Punkt ohne langes hin und her.

Wir haben heute eine Aufgabe erhalten in der es darum geht ein UML Diagramm zu implementieren.

Hier die Aufgabe:
Implementieren Sie das untenstehende UML Diagramma.
Die Klasse Rechnung definiert die Attribute Rnummer und Knummer
b.Die Klasse Anschriftdefiniert die Attribute Plz, Ort und Strasse
c.Implementieren Sie eine Methode print_Anschrift()in der Klasse Rechnung.
d.Erstellen Sie eine Rechnung und geben Sie die Anschriftauf der Konsole aus.
e.Überlegen Sie, wie die Daten ohne Rnummer und Knummer noch ausgegeben werden können. f.Erzeugen Sie eine Instanz vom Typ Anschrift und geben die Anschrift auf der Konsole aus.

Mein Code dazu:

class Rechnung:
def __init__(self, Rnummer, Knummer, Anschrift):
self.Rnummer = Rnummer
self.Knummer = Knummer
self.anschrift = Anschrift

class Anschrift:
def __init__(self, Plz, Ort, Strasse):
self.Plz = Plz
self.Ort = Ort
self.Strasse = Strasse

def print_Anschrift(self):
print('Die folgende Rechnung geht an diese Adresse : \n',
self.Plz,self.Ort, '\n', self.Strasse)


Meine_Anschrift = Anschrift('123456','Musterstadt', 'Seitenstraße 10')
Meine_Rechnung = Rechnung('123', '234', Meine_Anschrift)
Meine_Rechnung.anschrift.print_Anschrift()[/color]


Jetzt habe ich die Methode print_Anschriftl im Objekt Anschrift und nicht in der Rechnung und weiß leider auch nicht wie ich dies in das Objekt Rechnung schreibe und aufrufe. Hab diesen Code mit Hilfe eines Beispiels geschrieben bei dem die Methode in der zweiten Objekt entahlten war. Außerdem würde ich noch gerne die Knummer und Rnummer in der Methode aufrufen können. Ich hoffe ihr könnt mir dabei helfen und bedanke mich jetzt schon für eure Hilfe :).

Die print Methode sollte ungefähr so lauten
print('Die Rechnung mit der Rechnungsnummer ,self.Knummer, 'und mit der Rechnungsnummer', self.Rnummer' 'lautet:' self.Plz, self.Ort, self.Strasse)


Mit lieben Grüßen
Kusja
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Variablennamen sollten keine Abkürzungen enthalten. Warum Rnummer statt rechungsnummer und Knummer statt kundennummer oder kontonummer?
Variablennamen und Funktionen schreibt man nach Konvention in Python komplett klein.
Um Strings formatiert auszugeben, benutzt man Formatstrings.

Code: Alles auswählen

class Rechnung: 
    def __init__(self, rechnungsnummer, kundennummer, anschrift):
        self.rechnungsnummer = rechnungsnummer
        self.kundennummer = kundennummer
        self.anschrift = anschrift

class Anschrift:
    def __init__(self, plz, ort, strasse):
        self.plz = plz
        self.ort = ort
        self.strasse = strasse

    def print_anschrift(self):
        print('Die folgende Rechnung geht an diese Adresse :')
        print(f'{self.plz} {self.ort}')
        print(self.strasse)

meine_Anschrift = Anschrift('123456', 'Musterstadt', 'Seitenstraße 10')
meine_Rechnung = Rechnung('123', '234', meine_Anschrift)
meine_Rechnung.anschrift.print_anschrift()
Du kannst auch in Rechnung eine Methode `print` definieren, die wiederum die print-Methode aus anschrift aufruft.
Kusja
User
Beiträge: 18
Registriert: Mittwoch 18. Dezember 2019, 20:54

Bezüglich der Abkürzung kann ich leider nicht viel sagen uns wurde gesagt dass wir egal welche benutzen dürfen. Aber ich werde den Tipp beachten.
Ich werde später die Methode Print versuchen abzurufen, weiß aber jetzt nicht do genau wie du das meinst. Hab erst vor kurzem mit Python angefangen und bin noch nich ganz fit. Also wenn blöde Fragen kommen seid mir bitte nicht böse
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Ich weiß nicht, an welcher Stelle Du gerade noch hängst. Wie man Methoden definiert und wie man sie aufruft, ist Dir ja bekannt. Du mußt das nur richtig kombinieren.
Kusja
User
Beiträge: 18
Registriert: Mittwoch 18. Dezember 2019, 20:54

class Rechnung:
def __init__(self, rechnungsnummer, kundennummer, anschrift):
self.rechnungsnummer = rechnungsnummer
self.kundennummer = kundennummer
self.anschrift = anschrift

def print_anschrift(self):
print('Die folgende Rechnung geht an:')
print(f'{self.plz} {self.ort}')
print(self.strasse)


class anschrift:
def __init__(self, plz, ort, strasse):
self.plz = plz
self.ort = ort
self.strasse = strasse


Ich weiß nicht genau wie ich hier die Methode print_anschrift aufrufe. Egal wie ich es versuche irgendwie scheitere ich immer und es kommt eine Error Meldung. Wie gesagt ich bin bei diesen Methoden aurufen noch nicht ganz fit und es verwirrt mich etwas. Bzw allgemein Vererbung ist etwas kompliziert am Anfang und ich blicke nicht ganz durch.
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Deine print_anschrift-Methode steht jetzt auch in der falschen Klasse. Es sollte in der Rechnungsklasse eine print-Methode geben, die wiederum self.anschrift.print_anschrift aufruft.
Antworten