WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

OPP- Aufgabe mit vererbung

 

jupit778
Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 18.09.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.09.2021, 21:46     Titel: OPP- Aufgabe mit vererbung
  Antworten mit Zitat      
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 ^^
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.09.2021, 22:31     Titel:
  Antworten mit Zitat      
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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
jupit778
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 18.09.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.09.2021, 23:00     Titel:
  Antworten mit Zitat      
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 Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.09.2021, 23:12     Titel:
  Antworten mit Zitat      
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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
jupit778
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 18.09.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.09.2021, 23:20     Titel:
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.09.2021, 23:24     Titel:
  Antworten mit Zitat      
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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
jupit778
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 18.09.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.09.2021, 23:27     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.09.2021, 23:53     Titel:
  Antworten mit Zitat      
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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
jupit778
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 18.09.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.09.2021, 12:13     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.09.2021, 13:23     Titel:
  Antworten mit Zitat      
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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
jupit778
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 18.09.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.09.2021, 17:41     Titel:
  Antworten mit Zitat      
YEEESSS, ich habe den Code Smile

[% 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.
Private Nachricht senden Benutzer-Profile anzeigen
 
jupit778
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 18.09.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.09.2021, 17:47     Titel:
  Antworten mit Zitat      
Hallo Harald,

könntest du mir bitte wenigstens den Anfang von Aufgabe b sagen?... dann hätte ich wenigsten einen richtigen Ansatz.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.09.2021, 18:37     Titel:
  Antworten mit Zitat      
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?

Code:
classdef Containerschiff < Schiff
end

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
jupit778
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 18.09.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.09.2021, 20:10     Titel:
  Antworten mit Zitat      
%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
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.09.2021, 20:29     Titel:
  Antworten mit Zitat      
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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.