Einzelnen Beitrag anzeigen

TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.960 Beiträge
 
Delphi 12 Athens
 
#3

AW: Objektorientiertes Programmieren

  Alt 11. Apr 2019, 20:41
Hallo,

also deine Aufgabe werden wir dir nicht direkt lösen, sonst lernst du nicht genügend, aber wir geben dir gerne ein paar "Stupser" in die richtige Richtung.

1. Dein Rechteck sollte sicher als Klasse umgesetzt werden.
Beispielhaftes Grundgerüst:

Delphi-Quellcode:
type
  TRechteck = class(TObject)
  private
  public
  end;
2. Überlege mal, was du wissen müsstest, wenn du dieses Rechteck wärst um komplett definiert zu sein.
Richtig! Die X und Y Koordinaten von 2 diagonalen Ecken des Rechtecks. Diese muss dein Rechteck speichern können.

Frage an dich: wo gehören die entsprechenden Felder hin? In public oder in private?
Wenn die in der private Sektion eingebaut werden, dann kann nur dein Rechteck darauf zugreifen und
jemand anderes von Außen (ein benutzer deines Rechtecks) kann diese nicht durcheinander bringen.
Wäre das sinnvoll? Also, wo rein mit denen? private oder public?

Man könnte die Punkte dann z.B. so umsetzen:

x1, y1: Integer;
x2, y2: Integer;

3. Wie kommt das Rechteck zu seinen koordinaten?
Falls ihr Konstruktoren schon durchgenommen habt wäre ein Constructor wie dieser hier
eine Möglichkeit:

  constructor Create(px1, py1, px2, py2: Integer); und die Umsetzung des Constructors sähe beispielsweise so aus:

Delphi-Quellcode:
  constructor TRechteck.Create(px1, py1, px2, py2: Integer);
  begin
    inherited Create; // Constructor der Klasse aufrufen, von der man erbt,
                      // evtl. will die nämlich auch schon etwas initialisieren
    x1 := px1;
    y1 := py1;
    x2 := px2;
    y2 := py2;
  end;
4. Für die erste Aufgabe zum Ermitteln der Breite bräuchtest du eine Methode.
Ich schreibe mal nur ein Grundgerüst dazu hin, den Rest musst du selber ausfüllen, damit du noch etwas dabei lernst.
Die Methode muss zuerst im public Bereich deiner Klasse definiert werden, damit Nutzer deines Rechtecks diese auch
aufrufen können. Das sähe so aus:

Delphi-Quellcode:
function breite: Integer; // ermittelt die Breite des rechtecks und liefert diese als Integer Wert zurück,
                          // man kann hier debatieren ob ein vorzeichenloser Datentyp hier besser wäre, z.B. UInt16
Dann musst du die Methode im implementation Teil der Unit wie folgt umsetzen:

Delphi-Quellcode:
function TRechteck.breite:Integer;
begin
  result := // hier müsste jetzt deine Breitenberechnung hin, versuche mal selber drauf zu kommen
end;
5. Du hast dann hoffentlich auch schon erkannt, dass die Höhenberechnung analog zur
Breitenberechnung/Rückgabe erfolgt.

6. Auch die Fläche sollte dir keine ernsthaften Probleme mehr bereiten. Tipp:
die Fläche kannst du einfach durch Multiplizieren der Rückgaben deiner inzwischen
geschriebenen breite und hoehe Methoden ausrechnen. Es hindert dich ja keiner
Daran die in der eigenen Klasse aufzurufen.

7. Was die pruefe Methode tun soll, hab' ich noch nicht ganz verstanden. Ich hoffe aber,
dass ihr schon den boolean Datentyp durchgenommen habt. Falls ja würde die in die public
Sektion gehörende pruefe Methode so aussehen:

function pruefe:Boolean; Und die Ausprogrammierung vermutlich so ähnlich:

Delphi-Quellcode:
function TRechteck.pruefe:Boolean;
begin
  // an die Profis hier: ja, das kann man auch besser schreiben, aber dann würde er
  // vermutlich ganz verwirrt. Daher ruhig mal zuerst auf die "platte" Weise umsetzen
  if (von dir auszufüllen) then
    result := true
  else
    result := false;
end;
So, jetzt hab' ich dir hoffentlich ein paar Ideen vermittelt. Ggf. nochmal zu den Details
hier im Thread nachfragen, dann aber bitte mal deine angefangene Unit mit posten, damit wir
sehen wo du gerade stehst.
  Mit Zitat antworten Zitat