OOP in Aufzugsimulation



  • Hallo,

    wie kann man am einfachsten eine Funktion aus der Main in eine neue Klasse auslagern? Ist das überhaupt möglich? Unser Programm für die Aufzugsimulation ist nämlich komplett in der Main geschrieben.

    Ist es möglich z.B. folgende if-Funktionen in eine separate Klasse auszulagern und, falls möglich, sie per Objekt in der main wieder aufzurufen?

    if (DestinationPosition[0]==1){
    TargetDestination = 1;
    }
    else if (DestinationPosition[1]==1){
    TargetDestination = 2;
    }
    else if (DestinationPosition[2]==1){
    TargetDestination = 3;
    }
    else if (DestinationPosition[3]==1){
    TargetDestination = 4;
    }

    Die Vorgabe ist nämlich OOP zu programmieren, jedoch finde ich keine Möglichkeit unser bereits laufendes Programm nochmal in Klassen aufzuteilen...

    Vielen Dank schonmal für eure Hilfe!



  • @usernameuser sagte in OOP in Aufzugsimulation:

    edoch finde ich keine Möglichkeit unser bereits laufendes Programm nochmal in Klassen aufzuteilen..

    Das ist auch nicht so überraschend. OOP ist nicht eine vorhandene Funktion in Klassen aufteilen.

    Die Vorgabe ist nämlich OOP zu programmieren

    Warum habt ihr dann anders angefangen?



  • Bei OOP versucht man, Objekten gewisse Zuständigkeiten zuzuteilen. Aus deinem Codeschnipsel kann man überhaupt nicht erkennen, in welchem Zusammenhang es benutzt wird, daher ist ein vernünftiger Ratschlag schwierig. Es gibt in der OOP auch durchaus Funktionen, die nicht als Member implementiert werden sollten, weil es einfach keinen Sinn macht.
    Bsp:

    double average( double v1, double v2 )
    {
       return (v1 + v2) / 2;
    }
    
    // vs.
    
    class Math
    {
    public:
        double average( double v1, double v2 )
        {
            return (v1 + v2) / 2;
        }
    
       // oder
       static double average( double v1, double v2 )
       {
          return (v1 + v2) / 2;
       }
    };
    
    int main()
    {
        double a1 = average( 1, 2 ); // nix auszusetzen
        
         Math calc:
         double a2 = calc.average( 1,2 ); // iwie doof, dass man hier extra ein Math Objekt braucht
    
         double a3 = Math::average( 1,2 ); // mag Sinn ergeben, find ich aber umständlich. Kann man auch in einen namespace verpacken, wenn man Mehrdeutigkeiten vermeiden möchte
    }
    

    Lange Rede, kurzer Sinn:
    Ja, man kann die Funktion sicher als Member einer Klasse implementieren, ob´s sinnvoll ist ist eine andere Frage. OOP bedeutet nicht, dass man sklavisch alles als Member eine Klasse implementiert.


  • Mod

    Der Sinn von OOP ist nicht, dass man class{...} um seine Prozeduren schreibt. Der Sinn ist, dass man von vornherein in OO denkt, das OO-Modell dann programmiert, und dann kommt auch etwas sinnvolles dabei heraus. Daher gibt es kein Patentrezept dafür, deine Mainfunktion in eine Klasse zu stopfen (außer nicht-hilfreiche Methoden, wie class Programm{int main() {...}};). Der richtige Ansatz, bei dem auch das Lernziel erreicht wird, wäre, dass du deine Anforderungen nochmals objektorientiert modellierst und umsetzt.


Log in to reply