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! |
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 |
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:
2. Überlege mal, was du wissen müsstest, wenn du dieses Rechteck wärst um komplett definiert zu sein.
type
TRechteck = class(TObject) private public end; 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:
und die Umsetzung des Constructors sähe beispielsweise so aus:
constructor Create(px1, py1, px2, py2: Integer);
Delphi-Quellcode:
4. Für die erste Aufgabe zum Ermitteln der Breite bräuchtest du eine Methode.
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; 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:
Dann musst du die Methode im implementation Teil der Unit wie folgt umsetzen:
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
Delphi-Quellcode:
5. Du hast dann hoffentlich auch schon erkannt, dass die Höhenberechnung analog zur
function TRechteck.breite:Integer;
begin result := // hier müsste jetzt deine Breitenberechnung hin, versuche mal selber drauf zu kommen end; 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:
Und die Ausprogrammierung vermutlich so ähnlich:
function pruefe:Boolean;
Delphi-Quellcode:
So, jetzt hab' ich dir hoffentlich ein paar Ideen vermittelt. Ggf. nochmal zu den Details
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; hier im Thread nachfragen, dann aber bitte mal deine angefangene Unit mit posten, damit wir sehen wo du gerade stehst. |
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:
-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
private
Delphi-Quellcode:
-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.
public
Die Deklaration könnte so aussehen:
Delphi-Quellcode:
Statt TPoint, das bereits eine Zusammenfassung aus X und Y darstellt, könnte man auch zwei getrennte Variablen (A1/A2 und B1/B2) benutzen.
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; 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