Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Objektorientiertes Programmieren (https://www.delphipraxis.net/200350-objektorientiertes-programmieren.html)

DelphiKevin 11. Apr 2019 19:58

Objektorientiertes Programmieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Liebe Delphi-Praxis Mitglieder!

Ich bin in der 11. Klasse und habe folgendes Problem. Ich schreibe bald eine Klausur in Informatik und unter anderem ist das Thema: Objektorientiertes Programmieren. In der Woche, in der wir dies besprochen habe lag ich leider krank im Bett. Nun habe ich folgende Übungsaufgabe, wozu mir eine Lösung helfen würde. (Aufgabe im Anhang)


Gegeben ist also ein Rechteck.
zu a) Was muss genau in den private Bereich und was in den public Bereich?

wie programmiere ich die angegebenen Methoden denn?


von b) habe ich leider auch nur Ansätze.


Ihr müsst wissen, dass ich Informatik erst seit diesem Schuljahr habe und es als 2 stündiges Fach in der Woche leider sehr schwer zu verstehen für mich ist.


Ich freue mich für jede Hilfe von Euch!
Lösungen würden mir dann denke ich das Lernen und Verstehen erleichtern:-D

Liebe Grüße!

Klaus01 11. Apr 2019 20:39

AW: Objektorientiertes Programmieren
 
Hallo,

steht doch schon mehr oder weniger in der Aufgabe drin.

Erstellen Sie einen Konstruktor "create" mit 4 Parametern die im private Bereich gespeichert werden.

Höhe, Breite, etc. sind dann public weill ja von aussen darauf zugegriffen werden soll.

Grüße
Klaus

TurboMagic 11. Apr 2019 20:41

AW: Objektorientiertes Programmieren
 
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:

Delphi-Quellcode:
  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:

Delphi-Quellcode:
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.

Dalai 11. Apr 2019 20:42

AW: Objektorientiertes Programmieren
 
Sei dir bewusst, dass es hier im Forum keine vollständige Lösung von Hausaufgaben gibt, lediglich Hilfe zur Selbsthilfe. Insofern wäre es gut (gewesen), wenn du deine bisherigen Erkenntnisse und Code gleich mitgeteilt hättest.

Nichtsdestotrotz versuche ich mal, dir zu helfen. In den
Delphi-Quellcode:
private
-Bereich einer Klasse kommen alle Felder (Datentypen) und Methoden, die von außen nicht zugreifbar sein sollen/dürfen, eben Privatsache der Klasse sind. In den
Delphi-Quellcode:
public
-Bereich kommt alles, was von außen sichtbar und zugreifbar sein muss. Zu letzterem gehört der Konstruktor. Von außen bedeutet z.B. von einer anderen Klasse bzw. von einem Objekt einer anderen Klasse aus.

Die Deklaration könnte so aussehen:
Delphi-Quellcode:
interface

type
  TRechteck = class
  private
    FPunktA: TPoint;
    FPunktB: TPoint;
  public
    constructor Create(A1, A2, B1, B2: integer);
    function breite: integer;
    function hoehe: integer;
    function flaeche: integer;
    function pruefe: boolean;
  end;
Statt TPoint, das bereits eine Zusammenfassung aus X und Y darstellt, könnte man auch zwei getrennte Variablen (A1/A2 und B1/B2) benutzen.

Grüße
Dalai


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz