Vererbung von Klassen in Python mit super()?

Hallo Community,

ich habe hier jetzt schon oft gefragt, was diese drei Zeilen bedeuten:

class HangmanGame(BoxLayout):
      def __init__(self, **kwargs):
          super().__init__(**kwargs)

Den gesamten Code gibt es hier zum nachlesen:
https://www.gutefrage.net/frage/wozu-das-super-initkwargs

Jetzt habe ich schon viele Antworten bekommen, vor allem von regex9 und KarlRanseierlll denen ich hier auch noch mal danken möchte.

Aber ich habe es immer noch nicht ganz verstanden und ich bin inzwischen echt verzweifelt. Ich habe aber ein Video dazu gefunden, was ich hier eben verlinke:
https://www.youtube.com/watch?v=QUHnJrFouv8&list=PLzMcBGfZo4-kSJVMyYeOQ8CXJ3z1k7gHn

Konkret geht es um Minute 1:10-3:50. Da sagt er ja, man wisse nicht, wie viele Argumente man bekommt.

Dazu habe ich dann auch direkt meine erste Frage. Ich verstehe nämlich nicht, welche Argumente er meint. Die in der __init__() Methode der Klasse, oder die die man beim erstellen einer Instanz in den Klammer übergeben kann, oder ganz andere? Und wen er die beim erstellen der Instanz meint, frage ich mich, warum nur diese übergeben werden und nicht auch die aus der __init__()-Methode.

Meine zweite Frage wäre dann, ob die beiden Zeilen überhaupt zusammenhängen, oder ob in der Zeile mit dem super() andere kwargs gemeint sind.

Und meine dritte und letzte Frage wäre, warum man diese kwargs-Argumente an die Basisklasse BoxLayout übergeben muss. Bei dieser Frage bitte ich um eine ausführliche aber einfache Antwort. Ich bin nämlich erst 14 und echt nicht der beste in Python. Diese Frage aber bitte nur beantworten wenn Sie sich wirklich damit auskennen oder schon Erfahrung mit Kivy haben.

Ich würde mich unfassbar über jede Antwort freuen. Auch wenn ich weiß, dass ich schon öfter gefragt habe😁. Aber ich muss mich halt erst mal da reinarbeiten.

Viele Grüße

Code Snake🙂

programmieren, Programmiersprache, Python, Python 3, Objektorientierte Programmierung
Wozu das super()-__init__(**kwargs)?

Bei dem Code im Anhang, der Hangman als Python App mit dem Kivy Framework erstellt, weiß ich nicht wozu man die Zeile mit dem super() braucht. Also warum muss man die **kwargs Argumente an die Basisklasse weitergeben?

class HangmanGame(BoxLayout):    
    def __init__(self, **kwargs):
            super().__init__(**kwargs)
            self.word_list = ["python", "java", "ruby", "javascript", "php"]
            self.guess_word = []
            self.secret_word = ""
            self.remaining_guesses = 6
        self.img_path = "img/hangman_{}.png"
        self.create_game_layout()
        self.new_game()


    def create_game_layout(self):
        self.orientation = "vertical"
        self.image = Image(source=self.img_path.format(0))
        self.word_label = Label(text=" ".join(self.guess_word),
                                font_size="50sp",
                                halign="center",
                                valign="middle")
        self.remaining_guesses_label = Label(text=f"Remaining guesses: {self.remaining_guesses}")
        self.input_label = Label(text="Enter a letter:")
        self.input = TextInput(multiline=False)
        self.submit_button = Button(text="Submit", 

#Hier fehlt was unwichtiges, weil die Frage zu lang war

    def new_game(self):
        self.secret_word = random.choice(self.word_list)
        self.guess_word = ["_"] * len(self.secret_word)
        self.remaining_guesses = 6
        self.image.source = self.img_path.format(0)
        self.input.text = ""
        self.word_label.text = " ".join(self.guess_word)
        self.remaining_guesses_label.text = f"Remaining guesses: {self.remaining_guesses}"


    def check_letter(self, instance):
        letter = self.input.text
        if letter in self.secret_word:
            for i, c in enumerate(self.secret_word):
                if c == letter:
                    self.guess_word[i] = letter
            if "_" not in self.guess_word:
                self.end_game(True)
        else:
            self.remaining_guesses -= 1
            self.image.source = self.img_path.format(6 - self.remaining_guesses)
            self.remaining_guesses_label.text = f"Remaining guesses: {self.remaining_guesses}"
            if self.remaining_guesses == 0:
                self.end_game(False)
        self.input.text = ""
        self.word_label.text = " ".join(self.guess_word)


    def end_game(self, victory):
        message = "Congratulations, you won!" if victory else f"Sorry, the word was {self.secret_word}."
        self.remaining_guesses_label.text = message
        self.remove_widget(self.input_label)
        self.remove_widget(self.input)
        self.remove_widget(self.submit_button)
        self.add_widget(Button(text="New Game", on_press=self.new_game))



class HangmanApp(App):


    def build(self):
        Window.clearcolor = (0.5, 0.5, 0.5, 1)
        return HangmanGame()


HangmanApp().run()
programmieren, Python, Instanz, Python 3, Objektorientierte Programmierung
Warum werden in diesem Code Klassen verwendet?

Also was für einen Vorteil hat das?:

Der Code ist für ein Tic-Tac-Toe-Spiel

class Board():
    def __init__(self):
        self.state = [0, 0, 0, 0, 0, 0, 0, 0, 0]

    def make_turn(self, cell, player):
        if self.is_valid_turn(cell):
            self.state[cell] = player.symbol
            return True
        return False

    def is_valid_turn(self, cell):
        if self.state[cell] == 0:
            return True
        else:
            return False

    def check_win(self, player):
        s = player.symbol
        if self.state[0] == s and self.state[1] == s and self.state[2] == s:
            return True
        elif self.state[3] == s and self.state[4] == s and self.state[5] == s:
            return True
        elif self.state[6] == s and self.state[7] == s and self.state[8] == s:
            return True

        elif self.state[0] == s and self.state[3] == s and self.state[6] == s:
            return True
        elif self.state[1] == s and self.state[4] == s and self.state[7] == s:
            return True
        elif self.state[2] == s and self.state[5] == s and self.state[8] == s:
            return True

        elif self.state[0] == s and self.state[4] == s and self.state[8] == s:
            return True
        elif self.state[2] == s and self.state[4] == s and self.state[6] == s:
            return True

    def is_full(self):
        for i in self.state:
            if i == 0:
                return False
        return True

    def sign_to_printable(self, sign):
        if sign == 0:
            return " "
        elif sign == 1:
            return "X"
        else:
            return "O"

    def print_board(self):
        print(" " + self.sign_to_printable(self.state[0]) + " | " + self.sign_to_printable(self.state[1]) + " | " + self.sign_to_printable(self.state[2]) + " \n" +
              " " + self.sign_to_printable(self.state[3]) + " | " + self.sign_to_printable(self.state[4]) + " | " + self.sign_to_printable(self.state[5]) + " \n" +
              " " + self.sign_to_printable(self.state[6]) + " | " + self.sign_to_printable(self.state[7]) + " | " + self.sign_to_printable(self.state[8]) + " \n")


class Player:
    def __init__(self, symbol):
        self.symbol = symbol


if __name__ == '__main__':
    player_a = Player(1)
    player_b = Player(-1)
    board = Board()
    active_player = player_a
    while not board.is_full():
        board.print_board()
        try:
            cell = int(input("Where do you want to place your sign? [1-9]"))
        except ValueError:
            continue
        cell = cell - 1
        if cell < 0 or cell > 8:
            print("Please enter a number between 1 and 9")
            continue
        if not board.make_turn(cell, active_player):
            print("Invalid Move")
            continue

        if board.check_win(active_player):
            print("You wonnered! GW.")
            break

        if …
IT, programmieren, Informatik, Programmiersprache, Python, Instanz, Python 3, Objektorientierte Programmierung
Python Referenzen und Objektkopien?

ChatGPT und mein Pythonbuch sagen folgendes:
„In Python werden Objekte durch Referenzen verwaltet, die auf den Speicherbereich zeigen, in dem das Objekt gespeichert ist. Wenn ein Objekt über eine Referenz zugewiesen wird, wird der Speicherplatz für das Objekt reserviert und die Referenz zeigt auf diesen Speicherbereich. Wenn auf denselben Wert bereits von einer anderen Referenz verwiesen wird, zeigt diese Referenz auf dasselbe Objekt/Speicherbereich.“

Aber danach steht in meinem Pythonbuch der Code am Ende dieser Nachricht.
Und über dem Code stand, dass mit diesem y.append(i) eine echte Kopie von x erstellen kann. Aber da ja schon x auf die Liste verweist hätte man nach dem .append() ja zwei Referenzen. Nämlich x und y. Also müsste Python laut der ersten Aussage doch mit beiden Referenzen auf ein und dasselbe Objekt verweisen. Dann wäre es aber keine Kopie mehr, sondern das gleiche Objekt.

Ich hoffe, dass ich mein Problem irgendwie erklären konnte.
LG Code Snake 🙂

import copy

x = [23, "hallo", -7.5]
y = []

for i in x:
    y.append(i)

print("dasselbe Objekt:", x is y)
print("gleicher Inhalt:", x == y)
print()

x = (23, ["Berlin", "Hamburg"], -7.5, 12.67)
y = copy.deepcopy(x)

print("dasselbe Objekt:", x is y)
print("gleicher Inhalt:", x == y)
IT, programmieren, Informatik, Programmiersprache, Python, Referenz, Python 3, Objektorientierte Programmierung
**kwargs in __init__() Methode und "self" in Python?

Hey Leute,

ich habe heute begonnen, Kivy zu lernen. Kivy ist ein Python Framework, für plattformübergreifende Apps. Ich bin allerdings noch ein Anfänger in Python und da man für Kivy OOP beherrschen muss. Habe ich mir eben ein paar Tutorials angeschaut und das Konzept von Klassen auch verstanden und schon etwas geübt. Auch das "self" eine Referenz auf die aktuelle Instanz ist habe ich kapiert. Aber wieso kann man aus einer Methode auf die Instanzvariablen nur zugreifen, wenn vor diesen "self" steht?

Und meine zweite Frage ist, wozu bei der Initialisierung der __init__() Methode manchmal noch so ein **kwargs steht. Also hier mal ein Beispielcode:

class MyGrid(GridLayout):

  def __init__(self, **kwargs):

    super().__init__(**kwargs)

    self.word_list = ["python", "java", "ruby", "javascript"]

    self.guess_word = []

    self.secret_word = ""

    self.remaining_guesses = 6

    self.img_path = "img/hangman_{}.png"

    self.create_game_layout()

    self.new_game()

Das ist jetzt mal nur die __init__() Methode einer MyGrid Klasse die von GridLayout erbt.

Ach ja. Was dieses "super()" bedeutet habe ich auch nicht so ganz verstanden.

Ich wäre sehr sehr dankbar wenn mir jemand helfen könnte. Denn ich will für eine Projektarbeit im Informatikunterricht umbedingt eine Android Kivy App für Hangman programmieren. Aber dafür muss ich diese Themen erst einmal verstehen.

LG Code Snake

Programmiersprache, Python, Instanz, Python 3, Objektorientierte Programmierung, App Programmieren
Wie würdet ihr diese Java Aufgabe lösen?

Angabe:

(Ich habe selber einen Code geschrieben, aber da es hier in Zeichenlimit gibt, kann ich nicht alles einfügen)

  1. Definiere eine Klasse 
  2. Team
  3. , die folgende Eigenschaften einer Sportmannschaft verwaltet. In Klammern stehen die Variablennamen, die du für die Attribute verwenden sollst.
Teamname (name)
Gespielte Spiele (games)
Siege (wins)
Unentschieden (draws)
Niederlagen (losses)
Tore erzielt (goals)
Gegentore (goalsAgainst)
Punkte (points)

Diese Daten sind notwendig, um eine vollständige Zeile einer Meisterschaftstabelle für ein Team auszugeben.

Erzeuge eine Programmklasse namens 

Sew2UeTeam

 und initialisiere in der 

main()

-Methode vier unterschiedliche Team-Objekte und lege die Teamnamen fest.

Schreibe danach die Methode

static void playGame(Team a, Team b, int toreA, int toreB)

Diese Methode dient dazu, EIN Bewerbsspiel von zwei Mannschaften zu erfassen und auszuwerten. Die beiden Mannschaften werden als Team-Objekte übergeben, zusätzlich werden die von jeder Mannschaft in diesem Spiel geschossenen Tore an die Methode übergeben.

Die jeweils erzielten Tore entscheiden über den Ausgang des Spieles (Sieg 1 – Unentschieden – Sieg 2). Eine Mannschaft bekommt für einen Sieg 3 Punkte, für ein Unentschieden 1 Punkt, und keinen Punkt für eine Niederlage.

Die Methode soll alle relevanten Daten in den beiden Teamobjekten aktualisieren (Anzahl Spiele, Anzahl Siege/Unentschieden/Niederlagen, Tore erzielt/erhalten, Punkte).

Lass danach jedes Team gegen jedes andere „spielen“, indem Du (vielleicht mit Zufallszahlen für die Tore) die Methode 

playGame(…)

 für alle möglichen Spielpaarungen aufrufst.

Als Abschluss gib für alle Teams die Daten als Tabellenzeile (unsortiert) aus.


Schule, programmieren, Java, Informatik, Objektorientierte Programmierung
Wie stelle ich mithilfe compareTo() die natürliche Objektreihenfolge her (Java)?

Ich habe heute über die compareTo()-Methode des Comparable-Interfaces gelesen, man würde sie wie folgt verwenden:

"If your class objects have a natural order, implement the 

Comparable<T>

 interface and define this method."

Aber wie kann ich compareTo() implementieren, um die natürliche Reihenfolge der Objekte herzustellen?

Beispiel: Ich sollte Studenten nach ihrer Punktzahl sortieren, habe dann compareTo() wie folgt überschrieben:

@Override
public int compareTo(Student student) {
    if(this.points > student.points)
        return 1; //current student is better
    return 0;
}

Allerdings returnt das ja jetzt nur einen bestimmten Wert, mit dem man dann arbeiten könnte, wenn man anschließend die Studenten z.B. in eine Liste packen will, aber es stellt ja nicht bereits in der Methode selbst die Objektreihenfolge her. Ich verstehe auch gar nicht, wie das gehen soll, wenn ich z.B. will, dass die Klasse Student das Interface Comparable implementiert. Ich meine, wenn ich dann ein Objekt erzeuge, dann kann ich auf dieses und ein anderes diese Methode anwenden, aber ich bräuchte ein weiteres Hilfsmittel, um die Studenten zu ordnen, wie eben z.B. besagte Liste.

Ist es also irgendwie möglich, compareTo() so zu überschreiben, dass es automatisch Studenten oder allgemein Objekte in ihre natürliche Reihenfolge bringt oder brauche ich dafür immer noch weitere Hilfsmittel?

Oder habe ich compareTo() auf richtige Weise überschrieben?

LG Kath

PS:
In der Doku steht ebenfalls Folgendes über Comparable():

This interface imposes a total ordering on the objects of each class that implements it. This ordering is referred to as the class's natural ordering, and the class's compareTo method is referred to as its natural comparison method.

programmieren, Java, Informatik, Interface, Objektorientierte Programmierung
Sind diese Java-Projekte zu schwer für mich?

Seid gegrüßt liebe GuteFrage.net-Community,

der Titel ist etwas irreführend, denn ich habe Ideen, die ich umsetzen könnte, aber bin mir nicht sicher, ob die mir nicht zu komplex sind.

Ich beherrsche Java ziemlich ok und programmiere gelegentlich Minecraft-Server-Plugins und habe somit (als Nebeneffekt) meine Erfahrung "ausgebessert", aber nun haben sich über die Zeit Ideen für Projekte in Form von eigenständigen Desktopanwendungen angesammelt. Der Ursprung ist meistens, dass ich im Internet kein geeignetes oder kostenloses Programm finde, um einen gewissen Zweck zu erfüllen.

Ich habe drei Programme, die ich (mit Java und ohne externe API) gerne umsetzen würde.

Nummer 1: Ein Programm, welches mich To-Do-Listen erstellen lässt, welche jeweils eine tabellenartige Form hat, wobei ein- und ausklappbare Unterelemente, welche ebenso Unterelemente enthalten können. Man soll Unterkategorien oder einzelne Elemente per Drag and Drop in andere Spalten verschieben können.

Nummer 2: Ein Programm, welches eine YouTube-Playlist nimmt, von jedem Video den Link nimmt oder, falls das Video in Kapitel untergliedert ist oder in den ersten paar Kommentaren eine Liste von Zeitstempeln ist mit den Namen der Songs, die in diesem Video gespielt werden, ist, diese auf YouTube gesucht werden und von diesem Video, der Link kopiert wird und in eine Text-Datei geschrieben wird (vorerst).

Nummer 3: Ein Programm, welches einem beim Lernen eines Instrumentes bzw. von Musiktheorie helfen soll. Es sollte spielerisch gestaltet sein. Ich hatte mir 7 Modi überlegt:

  • Notenlesen
  • Intervallhören
  • Harmonik üben
  • Rhythmus lernen
  • Parallelspielen / Song lernen
  • Song erraten (Künstler und Songname)
  • Lernen (einfach ein paar Tutorials oder so über Musiktheorie von mir)

Nun ist meine Frage, ob diese Programme zu komplex für mich sind? Ich habe Erfahrung (auch außerhalb von Addons) mit Java, aber ich möchte nicht meine Zeit mit etwas verschwenden, wenn ich am Ende vielleicht alles in die Tonne kloppen kann.

Wie bekomme ich neue Ideen für Projekte bzw. habt ihr Ideen für simple Ideen für mich? (Nur beantworten, wenn obige Frage bejaht wurde)

Ich habe mir auch andere Sprachen angeeignet, aber habe keine Erfahrung mit denen gesammelt und finde somit, dass diese Projekte für den Anfang zu groß wären. Sollte ich mich mit einer anderen Sprache besser vertraut machen und in dieser eines der oben genannten Projekte umsetzen? Zum Beispiel JavaScript für Nummer 1?

Ich danke im Voraus!

Einfach ins Verderben stürzen und loslegen 100%
Zu schwere Projekte 0%
Nummer 1 als erstes 0%
Nummer 2 als erstes 0%
Nummer 3 als erstes 0%
Andere Sprache nutzen 0%
Ich habe mir die Frage nicht durchgelesen 0%
Computer, programmieren, Java, Anwendung, Anwendungsentwicklung, Informatik, Programmiersprache, Objektorientierte Programmierung
Wofür stehen die Parameter in __init__(self, ...) und super().__init__(...) in Python?

Hallo, ich lese mir in einem Buch gerade das Kapitel zu Klassen und Vererbung durch. Was ich bislang verstanden habe: Basisklassen kann man durch Tochterklassen im Stil Tochterklasse(Basisklasse) kopieren und anschliessend weiterentwickeln (Vererbung).

Dabei gibt man der Tochterklasse mit __init__(self, ...) ihren eigenen Konstruktor und damit der Codeverlauf konsistent bleibt, fügt man in der anschliessenden Zeile super().__init__( ...) hinzu. Anschliessend kann man Methoden der Basisklasse überschreiben. Bei einfachen Beispielen fand ich das nachvollziehbar.

Nun habe ich ein komplizierteres Beispiel vor, bei dem in den jeweiligen Klammern noch weitere Parameter stehen (sowohl bei dem neuen als auch alten Konstruktor), das sieht wie folgt aus:

#Tochterklasse der Basisklasse VerwalteterGeldbetrag

class AllgemeinesKonto(VerwalteterGeldbetrag):

  def __init__(self, kundendaten, kontostand):

    super().__init__(kontostand)

self.Kundendaten = kundendaten

Frage: Wofür genau stehen Werte wie diese in den Klammern, was machen sie? Gemeint sind die ab def. Da der Gesamtcode über 80 Zeilen oder so lang ist, habe ich nur diese beiden Inhalte eingefügt, um die Frage abstrakt zu halten. Was objektorientierte Programmierung ist, habe ich grob verstanden, nur sind da so viele Schritte, auf die ich als kompletter Anfänger nicht so schnell kommen würde.

Computer, programmieren, Informatik, Python, Objektorientierte Programmierung
"<objekt>": Unbekannter Überschreibungsspezifierer [C++ | Visual Studio Community]?

Hallo, lieber Leser,

leider gelingt es mir partout nicht, Objektinstanzen innerhalb von Klassen weiter zu verwenden und ich befürchte, dass ich etwas Grundlegendes im Konzept der OOP übersehe bzw. nicht kenne.

In einem kleinen Freizeitprojekt von mir werden, was Beweggrund für diesen Post hier war, leider eine Reihe von Fehlern ausgespuckt, für die zu lösen zu versuchen ich schon eine Menge Zeit aufgewandt habe und welche ich alle auf eine Unkenntnis eines wichtigen Konzeptes, wie oben schon beschrieben, zurückführe.

Ich würde mich über konkrete Lösungsvorschläge genauso freuen, wie auf Hinweise, was ich wohl konzeptuell nicht so recht verstanden habe. Vielen Dank.

main.cpp: https://pastebin.com/PKCF75FR

Fehler: Schweregrad Code Beschreibung Projekt Datei Zeile Unterdrückungszustand

Fehler C3646 "difficulty": Unbekannter Überschreibungsspezifizierer C:\Users*\source\repos*\main.cpp 9

Fehler C3646 "getDifficulty": Unbekannter Überschreibungsspezifizierer C:\Users*\source\repos*\main.cpp 20

Fehler C2065 "Item": nichtdeklarierter Bezeichner C:\Users*\source\repos*\main.cpp 76

Fehler C3646 "playerClass": Unbekannter Überschreibungsspezifizierer C:\Users*\source\repos*\main.cpp 73

Fehler C2923 "std::vector": "Item" ist kein gültiges Vorlage-Typargument für den _Ty-Parameter. C:\Users*\source\repos*\main.cpp 76

Fehler C4430 Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. * C:\Users*\source\repos*\main.cpp 73

Fehler C2059 Syntaxfehler: "(" C:\Users*\source\repos*\main.cpp 20

Fehler C2059 Syntaxfehler: "=" C:\Users*\source\repos*\main.cpp 9

Fehler C2238 Unerwartete(s) Token vor ";" C:\Users*\source\repos*\main.cpp 9

Fehler C2334 Unerwartete(s) Token vor "{"; sichtbarer Funktionstext wird übersprungen C:\Users*\source\repos*\main.cpp 20

Fehler C1903 Weiterverarbeitung nach vorherigem Fehler nicht möglich; Kompilierung wird abgebrochen. C:\Users*\source\repos*\main.cpp 76

Grundlegende Fehler, also noch grundlegender, als die oben beschriebenen, dürfen ignoriert werden.

Computer, programmieren, CPP, Informatik, Visual Studio, Objektorientierung, Objektorientierte Programmierung
UML Diagramm in Python umsetzen?

Chrutschow. Nachdem mein Versuch, vorgegebene Datentypen in ein Klassendiagramm zu schreiben, bemerkenswert kläglich scheiterte, heute nun the-other-way-round: Ein UML Diagramm in Python umsetzen:

Insbesondere frage ich mich, wie bei der Implementierung zwischen Vererbung, Aggregation und gerichteten Assoziationen unterschieden wird. Scheinbar gibt es dafür 2000 Tutorials mit 30000 unterschiedlichen Lösungsansätzen. Außerdem weiß ich nicht, was genau die einzelnen Objekte tun. Zum Beispiel steht beim Professor nur Kostencenternummer als geschützte Variable. Und der WiMi macht anscheinend gar nichts. Was schreibe ich in die Getter und Setter?

Hier der bisherige Ansatz:

######Vererbung
"""This programm models the UML diagram of the inheritante between
members and professors.
"""
class Member:
  name = ""

  def __init__(self, name, id_number):
    self.name = name
    self.id_number = id_numer

class Professor(Member):
  def __init__(self, name, id_number, cost_center_no):
    self.name = name
    self._cost_center_no = _cost_center_no

  def get_cost_center_no(self):
    # Wie Kostenstellennummer umsetzen?

class WiMi(Member):
  def __init__(self, name, id_number):
    self.name = name             

Aggregation

class Presentation:
  def __init__ (self, title, date):
    self.title = name
    self.date = date

  def change_date(self):
    print ("Class Owner: method1")

Gerichtete Assoziation

class research_group:
  def __init__(self, name, total_presentation):
    self.name = name
    self.total_presentation = total_presentation
    self.name = name

  def get_members(id_number, name, total_representation):
  
  def get_head (id_number, name, total_reprensentation)

  def set_head (id_number, name, total_reprensentation)

  def add_member (id_number, name, total_representation)

  #Was machen diese Methoden?
Bild zu Frage
programmieren, Informatik, Python, UML, Klassendiagramm, Objektorientiert, Objektorientierte Programmierung, OOP Programmierung
Klassen- und Objektdiagramme in UML?

Hallo Leute,

normalerweise hasse ich es, wenn man so lächerlich einfache Fragen, die sich mit zwei Minuten googeln selbst beantwortet, stellt, aber ich komme nach zwei Tagen Recherche immer noch nicht auf den Trichter:

Aufgabe:

Erstellen Sie ein UML-Diagramm für folgende, sowie eine weitere übergeordnete Klasse mit den gegebenen Attributen und Methoden. Geben Sie in ihrem UML-Diagramm auch Konstruktoren an. Passen Sie die Namen an, beachten Sie hierbei PEP 8.Erzeugen Sie eine sinnvolle Vererbungshierarchie zwischen den Klassen.

Hinweis: Überlegen Sie genau, was die angegebenen Klassen verbindet.

Angestellter

• Personalnummer

• Name

• Adresse

• Geburtsdatum

• Gehalt

• Bankverbindung

• DruckeAdresse()

• ÜberweiseGehalt()

Student

•Matrikelnummer

•Name

•Adresse

•Geburtsdatum

•DruckeAdresse()

•DruckeAusweis()

Hilfskraft

• Matrikelnummer

• Name

• Adresse

• Geburtsdatum

• Personalnummer

• Beschäftigungsart

• DruckeAdresse()

• DruckeAusweis()

• DruckeArbeitszeiten()

Erstellen Sie zwei Objektdiagramme, welche dieses Klassendiagramm erfüllen. Generieren Sie die erforderlichen Objektwerte

Mein Ansatz/Problem: Die eigenen Klassen interagieren doch überhaupt nicht miteinander? Die einzige Vererbung findet zwischen Stundeten und Hilfskraft statt. Selbst die Hilskraft bekommt noch nicht mal Gehalt. Wie soll man das in einem UML-Diagramm verbinden? Und soll man als Objektdiagramm dann einfach nur 8 Kästchen malen, ohne Pfeile?

Schule, programmieren, Informatik, UML, Klassendiagramm, Vererbung, Objektorientierte Programmierung, OOP Programmierung

Meistgelesene Fragen zum Thema Objektorientierte Programmierung