Programmieren für Anfänger in Python/OO-Design/Ein Quadrat ist KEIN Rechteck

Aus PlusPedia
Wechseln zu: Navigation, Suche

Man lernt: Ist-Ein - Dass dies ein guter Ansatz wäre um Objekte zu definieren.

Coin Übrigens: Die PlusPedia ist NICHT die Wikipedia.
Wir sind ein gemeinnütziger Verein, PlusPedia ist werbefrei. Wir freuen uns daher über eine kleine Spende!

1 Text

Es ist sicherlich im Allgemeinen richtig.

Aber gerade in offensichtlichen Fällen dann doch nicht.

In der OO ist ein Quadrat KEIN Rechteck - und ein Kreis keine Ellipse - und auch nicht umgekehrt:

Hier ein Beispielprogramm zur Verdeutlichung:
Man müsste hierzu wohl noch ein paar Takte sagen - aber die Tendenz ist korrekt.

class CRechteck:
    "Klasse für ein Rechteck"
    iBreite = 0;
    iLaenge = 0;
    def __init__(self):
        pass;
    pass; #enddef

    def SetBreite(self, iNeueBreite): #begin
      "Ändert die Breite"
      print("CRechteck - SetBreite ", iNeueBreite)
      self.iBreite = iNeueBreite;
    pass; #enddef

    def SetLaenge(self, iNeueLaenge): #begin
      "Ändert die Länge"
      print("CRechteck - SetLaenge ", iNeueLaenge)
      self.iLaenge = iNeueLaenge;
    pass; #enddef

    def Flaeche(self): # return double # begin
      print ("Aufruf in CRechteck - Breite=", self.iBreite, "Länge=", self.iLaenge, "Fläche =", self.iBreite * self.iLaenge);
      return self.iBreite * self.iLaenge;
    pass; #enddef
pass; #endclass

def VerdoppleBreiteUndZeigeFlaeche(Rechteck) : # Typ CRechteck begin
    print("Ich verdopple die Breite eines Rechteckes und zeige die Fläche an");
    if (not isinstance(Rechteck, CRechteck)):
        print("Übergebene Variable ist kein Rechteck!");
        print("");
        return;

    print("Übergebene Variable ist ein Rechteck!");
    print ("Fläche vorher", Rechteck.Flaeche());
    Rechteck.SetBreite(Rechteck.iBreite * 2);
    print ("Fläche nachher", Rechteck.Flaeche());
    print("");
pass; #enddef

class CKeinRechteck: pass;

KeinRechteck = CKeinRechteck();
VerdoppleBreiteUndZeigeFlaeche(KeinRechteck);

class CQuadrat(CRechteck): #begin
    "Diese Klasse erweitert das Recheck zu einem Quadrat"
    def SetBreite(self, iNeueBreite): #begin
      "Ändert die Breite"
      print("CQuadrat - SetBreite ", iNeueBreite)
      self.iLaenge = iNeueBreite;
      self.iBreite = iNeueBreite;
    pass; #enddef

    def SetLaenge(self, iNeueLaenge): #begin
      "Ändert die Länge"
      print("CQuadrat - SetLaenge ", iNeueLaenge)
      self.iLaenge = iNeueLaenge;
      self.iBreite = iNeueLaenge;
    pass; #enddef
 
pass; #endclass

Rechteck = CRechteck();
Rechteck.SetBreite(5);
Rechteck.SetLaenge(15);
print(Rechteck.Flaeche());

Quadrat = CQuadrat();
Quadrat.SetBreite(5);
Quadrat.SetLaenge(15);
print(Quadrat.Flaeche());

print("issubclass(CQuadrat, CRechteck)", issubclass(CQuadrat, CRechteck));
print("isinstance(CQuadrat, CRechteck)", isinstance(CQuadrat, CRechteck));
print("isinstance(Quadrat, CQuadrat)", isinstance(Quadrat, CQuadrat));
print("isinstance(Quadrat, CRechteck)", isinstance(Quadrat, CRechteck));

print("");
print("So nun zum Verdoppeln");
VerdoppleBreiteUndZeigeFlaeche(Rechteck);
print("");
VerdoppleBreiteUndZeigeFlaeche(Quadrat);
print("");

print ("Verhält sich so ein Rechteck?")

Diesen Artikel melden!
Verletzt dieser Artikel deine Urheber- oder Persönlichkeitsrechte?
Hast du einen Löschwunsch oder ein anderes Anliegen? Dann nutze bitte unser Kontaktformular

PlusPedia Impressum
Diese Seite mit Freunden teilen:
Mr Wong Digg Delicious Yiggit wikio Twitter
Facebook




Bitte Beachte:
Sämtliche Aussagen auf dieser Seite sind ohne Gewähr.
Für die Richtigkeit der Aussagen übernimmt die Betreiberin keine Verantwortung.
Nach Kenntnissnahme von Fehlern und Rechtsverstößens ist die Betreiberin selbstverständlich bereit,
diese zu beheben.

Verantwortlich für jede einzelne Aussage ist der jeweilige Erstautor dieser Aussage.
Mit dem Ergänzen und Weiterschreiben eines Artikels durch einen anderen Autor
werden die vorhergehenden Aussagen und Inhalte nicht zu eigenen.
Die Weiternutzung und Glaubhaftigkeit der Inhalte ist selbst gegenzurecherchieren.


Typo3 Besucherzähler - Seitwert blog counter
java hosting vpn norway