|
|
OPP- Aufgabe mit vererbung |
|
jupit778 |
Forum-Anfänger
|
|
Beiträge: 23
|
|
|
|
Anmeldedatum: 18.09.21
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 18.09.2021, 21:46
Titel: OPP- Aufgabe mit vererbung
|
|
|
|
|
Hallo!
Bräuchte bei folgender OOP Aufgabe Hilfe beim Code:
Es soll eine Klasse Schiff erstellt werden, werden, welche die Eigenschaften Länge u. Geschwindigkeit des jeweiligen Schiffes besitzt. Außerdem soll es eine erbende Klasse Containerschiff geben, die als zusätzliche Eigenschaft die Anzahl der maximal ladefähigen 40-Fuß-Container angibt.
a) Die Klasse Schiff wird mit folgenden öffentlichen Eigenschaften (properties) beschrieben und hat einen erweiterten Konstruktor mit Parametern:
- laenge
- Geschwindigkeit
% Schiff.m
classdef Schiff
properties (access= public)
Laenge
Geschwindigkeit
end
methods
function obj = Konstruktor(l,g) %name der Klasse (Werte die man messen will)
obj.Laenge=l;
obj.Geschwindigkeit=g;
end
function ausgabe (obj)
fprintf('Zu diesem Schiff sind folgende Informationen bekannt: \n%s\n%s\n%i.%i.%i.i%n,'(obj.Laenge, obj.Geschwindigkeit));
end
end
end
b) Implementieren Sie die Klasse Containerschiff, welche von der Klasse Schiff erbt.
Neben Eigenschaften von Schif soll die Klasse die Eigenschaften Kapazität besitzen. Neben dem erweiterten Konstruktor soll noch die Methode changeCapacity() definiert werden.
Die Methode changeCapacity() bekannt als Parameter die neue Kapazität an Containern übergeben. Für jede Vergrößerung der Kapazität um 20 Container soll die Länge des Schiffes um 1 Meter vergrößert und die Geschwindigkeit um einen halben Knoten (0,5) verringert werden. Für jede Absenkung der Kapazität um 20 Container wird die Länge des Schiffs um 1 Meter verringert und die Geschwindigkeit um 0,5 Knoten erhöht.
%Containerschiff.m
ab hier komme ich nicht weiter ^^
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.484
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 18.09.2021, 22:31
Titel:
|
|
Hallo,
was ist nun die konkrete Frage? Falls es bereits darum geht, wie man vererbt, siehe hier:
https://de.mathworks.com/help/matla....._oop/subclass-syntax.html
Man kann jetzt sicher die Aufgabe für dich lösen, aber dabei gibt es keinen Lerneffekt.
Der Konstruktor sollte übrigens wie die Klasse heißen, also Schiff.
Hast du die ausgabe-Methode mal getestet?
Grüße,
Harald
P.S.: Bitte keine Doppel-Posts.
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
jupit778 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 23
|
|
|
|
Anmeldedatum: 18.09.21
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 18.09.2021, 23:00
Titel:
|
|
Hallo,
mir ging es darum ob mein Code bei Auf. a richtig wäre.
Und bei bei Auf. b komme ich nicht weiter, weil ich nicht weiß wie ich die Werte eingeben soll.
Bin erst neu im Forum, deswegen doppelter Beitrag.
und vielen Dank, dass du versuchst mir weiter zu helfen
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.484
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 18.09.2021, 23:12
Titel:
|
|
Hallo,
es wäre hilfreich, wenn du deutlich machst, was Aufgabenstellung und was dein Lösungsansatz ist. Mir ist erst durch die (genannten) Fehler klar geworden, dass das wohl ein Lösungsansatz sein soll.
Und wie eben im anderen Beitrag gesagt: führe deinen Code aus. Dann solltest du ziemlich schnell bemerken, wo Fehler sind.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
jupit778 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 23
|
|
|
|
Anmeldedatum: 18.09.21
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 18.09.2021, 23:20
Titel:
|
|
der Code aus Aufgabe a ist eig. fast richtig... aber falls es fehler gibt wäre es nicht schlimm. es geht um den Ansatz. Das sind Aufgaben aus einer Beispielsprüfung und die werden eh auf einem Blatt Papier notiert.
Mir geht es explizit um Auf. b, weil ich da überhaupt nicht weiter komme.
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.484
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 18.09.2021, 23:24
Titel:
|
|
Hallo,
Zitat: |
aber falls es fehler gibt wäre es nicht schlimm. |
Man sollte sich aber doch zumindest die Mühe machen, sie zu verstehen und zu korrigieren, wenn man darauf hingewiesen wird?
Zitat: |
Mir geht es explizit um Auf. b, weil ich da überhaupt nicht weiter komme.
|
Der Anfang ist, die Klasse abzuleiten. Dazu habe ich dir einen Link geschickt. Eigenschaften und Methoden definierst du wie in der Oberklasse. Da solltest du also zumindest mal den Anfang machen können.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
jupit778 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 23
|
|
|
|
Anmeldedatum: 18.09.21
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 18.09.2021, 23:27
Titel:
|
|
fprintf ('Zu diesem Schiff sind folgende Informationen bekannt: \n%s\n%s\n%i.%i.%i.i%n,'(obj.Laenge, obj.Geschwindigkeit));
in der Zeile ist ein fehler drin!? aber ich kann den fehler jetzt auch nicht erkennen
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.484
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 18.09.2021, 23:53
Titel:
|
|
Hallo,
eher (mindestens) drei Fehler.
1. Jedes % steht für einen Platzhalter, und dazu muss dann auch übergeben werden, was hineingeschrieben werden soll.
2. %n ist kein gültiger Platzhalter.
3. Die Klammern um obj.Laenge, obj.Geschwindigkeit müssen weg.
Welche Ausgabe soll denn überhaupt erzeugt werden?
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
jupit778 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 23
|
|
|
|
Anmeldedatum: 18.09.21
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 19.09.2021, 12:13
Titel:
|
|
Mein Anfang wäre so.
%Containerschiff.m
classdef Containerschiff
properties (acces = public)
Laenge
Geschwindigkeit
Kapazität
end
methods
function obj=Containerschiff(l,g,k) %Konstruktor zum erstellen eines Schiffs mit Parametern für Attribute
obj.Laenge=l;
obj.Geschwindigkeit=g;
obj.Kapazität=k;
end
wäre das rchtig? weiter weiß nicht
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.484
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 19.09.2021, 13:23
Titel:
|
|
Hallo,
nun hast du eine komplett von Schiff unabhängige Klasse. Die Aufgabenstellung ist aber
Zitat: |
Implementieren Sie die Klasse Containerschiff, welche von der Klasse Schiff erbt. |
Wenn du nicht weißt, wie man vererbt, schau dir bitte den Link an. Die vererbte Klasse hat dann automatisch alle Methoden und Eigenschaften, die die Superklasse hat.
Ich kann dir nur empfehlen, den Code in MATLAB einzugeben statt nur aufzuschreiben. Dann siehst du z.B., dass Kapazität kein gültiger Name ist und dass zwei end-Statements fehlen.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
jupit778 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 23
|
|
|
|
Anmeldedatum: 18.09.21
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 19.09.2021, 17:41
Titel:
|
|
YEEESSS, ich habe den Code
[% Schiff.m
classdef Schiff
properties (Access = public)
laenge
Geschwindigkeit
end
methods
function obj = Konstruktor(l,g) %name der Klasse (Werte die man messen will)
obj.laenge=l;
obj.Geschwindigkeit=g;
end
function ausgabe (obj)
fprintf('Zu diesem Schiff sind folgende Informationen bekannt: %/n',obj.Laenge,obj.Geschwindigkeit);
end
end
end]
das wäre dann der zur Aufgabe a.
|
|
|
jupit778 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 23
|
|
|
|
Anmeldedatum: 18.09.21
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 19.09.2021, 17:47
Titel:
|
|
Hallo Harald,
könntest du mir bitte wenigstens den Anfang von Aufgabe b sagen?... dann hätte ich wenigsten einen richtigen Ansatz.
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.484
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 19.09.2021, 18:37
Titel:
|
|
Hallo,
Zitat: |
YEEESSS, ich habe den Code |
Da sind mindestens zwei Fehler (auf die ich dich auch schon hingewiesen habe):
1. Name des Konstruktors muss mit Klassenname übereinstimmen (also "Schiff" statt "Konstruktor").
2. %/n ist keine gültige Schreibweise für fprintf. Du übergibst im Anschluss zwei Werte, hast aber keine zwei Platzhalter.
Zitat: |
könntest du mir bitte wenigstens den Anfang von Aufgabe b sagen? |
Da hätte man doch anhand des Links drauf kommen können?
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
jupit778 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 23
|
|
|
|
Anmeldedatum: 18.09.21
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 19.09.2021, 20:10
Titel:
|
|
%Containerschiff.m
classdef Containerschiff < Schiff
end
properties (access = public)
Laenge
Geschwindigkeit
Kapazitaet
end
methods
function obj = Containerschiff (l,g,k) %Konstruktor zum Erstellen eines Schiffs mit Parametern fuer alle Att
obj.Laenge = l;
obj.Geschwindigkeit = g;
obj. Kapazitaet = k;
end
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.484
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 19.09.2021, 20:29
Titel:
|
|
Hallo,
das end zum classdef muss ans Ende.
Der Sinn von Vererbung ist, nur das zu definieren, was die Klasse von der anderen unterscheidet - also nicht Geschwindigkeit und Laenge.
Sinnvoll wäre auch, aus dem Konstruktor den Superclass-Konstruktor aufzurufen und anschließend nur das Property zu setzen, das speziell für diese Klasse ist.
Grüße,
Harald
P.S.: verwende bitte die Code-Umgebung.
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
|
Gehe zu Seite 1, 2 Weiter
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|