Laden...

Stimmt der Weg zum OOP Code? Was lege ich wo hin?

Erstellt von Cplusplusler vor 3 Jahren Letzter Beitrag vor 3 Jahren 2.156 Views
C
Cplusplusler Themenstarter:in
3 Beiträge seit 2020
vor 3 Jahren
Stimmt der Weg zum OOP Code? Was lege ich wo hin?

Kaum zu glauben, das ich hier doch mal ein Beitrag verfasse. vor zwei Jahren hab ich eure Beitrage still und heimlich gelesen, und hab mich gefragt was ihr für Kryptische Sachen Postet 😉

Nu bin ich mal dran, denn für meinen Problem habe ich kein Beitrag gesehen oder ich bin zu speziell 😜

Ich hab vorher mit C++ Angefangen, leider hab ich bei dem Buch von Jürgen Wolf eine Kriese bekommen , SCHEIß buch!!

Nu hab ich doch wieder mit dem Programmieren angefangen, da es wirklich spaß macht und ich auch dafür ein kleines Händchen dafür habe, aber leider aber auch mit Fehlern , wie ihr gleich sehen wird.

Ich bin bei der Objekt Orientierung Programmierung angekommen, also bei Klassen usw.

Da die Übungen ausschließlich nur in der Main Methode gemacht wurden. weiß ich jetzt überhaupt nicht was ich in den Klassen packe und was ich in der Main Packe. genauso weiß ich nicht was ich alles in den Methoden der klasse packe.

Ich weiß was mit Objekt Orientiert arbeiten ist. also Beispiel eine Person, Person hat ein Name alter usw. aber wendet das mal auf ein Konsolen Projekt an. das finde ich gleich viel schwerer.

Mein Quelltext ist noch nicht Fertig. der Login fehlt noch. genauso das der Betreiber selbst die preise setzen kann. ich hab das erstmal Manuell gemacht. Probleme beim denken gibt es auch bei (get, set ). Kommt die switch Auswahl in die Main, oder doch in die Klasse so wie ich das gemacht habe. genauso die eingaben , kommen die in die Main oder so wie ich das in den klasse gemacht habe.

Mein Erstes Projekt, vorher hatte ich nur Theorie 🙂 Fehlt mir mal bitte.

ganz wichtig ist, bin ich auf dem richtigen weg, oder sollte ich das Programmieren lassen?
manchmal denke ich auch zu Kompliziert 😁
Editiert:
Was gehört in den Klassen und was gehört in die Main Methode, sollte das Willkommen s logo in die main oder in die Klasse. wie sehe ich wo was rein kommt?

Abgesehen von den Namenskonvention und mein Schreibfehlern . bin ich auf dem richtigen weg?
Das ist mein erster Quelltext, und natürlich noch nicht fertig.
Hier Mein Quelltext


using System;

namespace Kaffeautomat
{
    class Program
    {
        static void Main(string[] args)
        {
            Kaffeautomat meinCaffo = new Kaffeautomat(15);
            
            //Willkllcome logo
            Console.WriteLine("Willkommen bei Caffo..................");
            Console.WriteLine(".........Ihr Kaffe .Service...........");
            Console.WriteLine("......................................");
            Console.WriteLine("..............By Steven...............");
            Console.WriteLine("......................................");
            Console.WriteLine("......................................");
            Console.Write("Bennden mit ESC ..Weiter mit ENTER/Login\n\n");
            Console.ReadLine();
            Console.Clear();


            meinCaffo.KaffePreiseInfo();
             
            meinCaffo.KaffeAuswahl();






        }
    }
}
[\CSHARP][CSHARP]
ä
[CSHARP] 
 using System;
using System.Collections.Generic;
using System.Text;

namespace Kaffeautomat
{
    class Kaffeautomat
    {
        //Kontostand in dem Automat
        //Die Maximal Summe
        private double _kontostand;
        private double _einzahlung;
        //Faffesorten
        enum KAFFESORTEN { KaExcelsa, Arabica, Robusta, Maragogype, Liberia, Kopi, Luwak }

        //Mit einem Wert initialisieren.
        public Kaffeautomat(double kontostand)
        {
            _kontostand = 0;

        }
        //Kaffesorten
        //Etgegengenommenen Euro,s
        public double Eeinzahlung
        {
            get { return _einzahlung; }
            set { _einzahlung = value; }


        }

        //Die auswahl Der Kaffesorte
        private int kaffeAusswahl;
        internal void KaffeAuswahl()
        {

            do
            {

                //Auswahl der kaffe
                //Dabei Kontollerien das die eingabe Richtig ist              


                try
                {
                    Console.WriteLine("Bitte wählen sie:");
                    kaffeAusswahl = Convert.ToInt32(Console.ReadLine());

                }
                catch (FormatException)//Format ist falsch
                {
                    Console.WriteLine("bitte geben geben sie ein Richtigen Wert ein");
                     
                     
                }
                catch (OverflowException)
                {
                    Console.WriteLine("Der eingegebene Wert ist zu Groß.");
                }


                //Die eingabe zu ordnen
                switch (kaffeAusswahl)
                {
                    case 1:
                        Console.WriteLine("Bitteschön ihre auswahl {0}", KAFFESORTEN.Arabica);
                        break;
                    case 2:
                        Console.WriteLine("Bitteshön Ihre Auswahl {0}", KAFFESORTEN.KaExcelsa);
                        break;
                    case 3:
                        Console.WriteLine("Bitteschön ihre auswahl {0}", KAFFESORTEN.Kopi);
                        break;
                    case 4:
                        Console.WriteLine("Bitteschön ihre auswahl {0}", KAFFESORTEN.Liberia);
                        break;
                    case 5:
                        Console.WriteLine("Bitteschön ihre auswahl {0}", KAFFESORTEN.Luwak);
                        break;
                    case 6:
                        Console.WriteLine("Bitteschön ihre auswahl {0}", KAFFESORTEN.Maragogype);
                        break;
                    case 7:
                        Console.WriteLine("Bitteschön ihre auswahl {0}", KAFFESORTEN.Robusta);
                        break;

                    default:

                        Console.WriteLine("Keine auswahl getroffen, oder falsche sich vertippt?!");
                        kaffeAusswahl = 99;
                        break;
                }







            } while (kaffeAusswahl != 99);


        }
        internal double Einzahlung(double einzahlung)
        {
            this._einzahlung = einzahlung;
            return einzahlung;

        }

        //Preise die von Betreiber festgelegt werden
        private double _preisKaExcelsa = 1.20;
        private double _preisArabica =1.10;
        private double _preisRobusta = 1.50;
        private double _preisMaragogype = 1.10; 
        private double _preisLiberia = 2.10;
        private double  _preisKopi = 2.90;
        private double _preisLuwak = 0.99; 
     
        //Preise Ausgeben die der Benutzer sehen kann ,die von Betreiber Festgelegt wurden
        internal void KaffePreiseInfo()
        {
             
            Console.WriteLine("1 KaExcelsa {0} Euro ", _preisKaExcelsa);
            Console.WriteLine("2 Arabica   {0} Euro", _preisArabica);
            Console.WriteLine("3 Robusta   {0} Euro", _preisRobusta); 
            Console.WriteLine("4 Maragogyp {0} Euro", _preisMaragogype); 
            Console.WriteLine("5 Liberia   {0} Euro", _preisLiberia);
            Console.WriteLine("6 Kobi      {0} Euro", _preisKopi);
            Console.WriteLine("7 Luwak     {0} Euro", _preisLuwak);
        }
        internal void Menu()
        {

            //Willkllcome logo
            Console.WriteLine("Willkommen bei SRATO..................");
            Console.WriteLine(".........Ihr Kaffe .Service...........");
            Console.WriteLine("......................................");
            Console.WriteLine("..............By Steven...............");
            Console.WriteLine("......................................");
            Console.WriteLine("......................................");
            Console.Write("Bennden mit ESC .. ENTER zu Login\n\n");

        }


    }
}
[\CSHARP]
Hinweis von Abt vor 3 Jahren

Du suchst Hilfe im Forum, dann wäre es auch toll, wenn Du [Hinweis] Wie poste ich richtig? beachten würdest.
Stell Dir vor jeder nennt sein Thread hier "Brauche Hilfe"....

Beachte auch dass ein Helfer halt nur helfen kann, wenn Du auch Fragen stellst.
Leider muss man raten, was Deine Frage ist.

Eventuell ist es auch ein Review, dann biste im komplett falschen Forenbereich.

C
2.121 Beiträge seit 2010
vor 3 Jahren

Ganz schön viel Text, ich versuche deine Fragen zu erraten. (Da stecken gleich zwei Hinweise drin 😉 )

Du definierst Kaffeesorten und Preise fest im Programm. Ein produktiv genutztes Programm würde sich diese Daten aus einer Datei oder Datenbank einlesen und in eine Liste stecken, die variabel viele Elemente aufnehmen kann. Siehe List<> oder was es eben alles gibt.

Dazu könntest du also eine Klasse namens "Kaffee" nutzen, die den Namen der Sorte und den Preis enthält. Es gibt dann so viele Objete vom Typ "Kaffee", wie das Programm eben gerade findet.
Das Programm hat dann kein switch auf feste Werte, sondern durchsucht diese Liste und schaut ob es was passendes findet.

Wäre dann so:
if (eingegebeneZahl < 1 || eingegebeneZahl > Anzahl Elemente in der Liste) dann Fehler.
else nimm Listenelement [eingegebener Wert -1] -1 denn die Zahl 1 entspricht dem Index 0!

Der Bezahlvorgang könnte in eine eigene Klasse kommen. Die merkt sich wie viel eingezahlt wurde und tut alles was mit Geld zu tun hat. Wechselgeld rausgeben, man kann sie fragen ob jemand den gewählten Kaffee bekommen darf usw.

Schöner wäre es, eine Klasse "Kaffeesortenliste" oder gern auch mit besserem Namen zu nutzen. Diese Klasse enthält die Liste der Kaffeesorten und kann die Kaffeeliste von irgendwo her laden und auch nach einem bestimmten Kaffee durchsuchen.
Damit hast du alles was sich auf die Kaffeeliste bezieht, sauber in eine eigene Klasse gepackt, für dich heißt das der ganze Code der diese Liste bearbeitet, steckt in einer eigenen Datei.

Dein throw nach dem continue wird übrigens nicht ausgeführt, denn continue springt ja von dieser Stelle weg. Ich nehme an du willst an dieser Stelle auch keine Exception auslösen.

Jetzt stellst du am besten die nächste Frage die dich bewegt.

C
Cplusplusler Themenstarter:in
3 Beiträge seit 2020
vor 3 Jahren

Sorry, kommt nicht nochmal vor.
Danke für dein großen Text 😜
Ich bin zwar noch nicht so weit, also ich weiß noch nicht wie man das in einer Datei oder Datenbank Speichert. Wenn ich mein wissen festigen konnte was Klassen angeht, dann werde ich mich Mit Datenbanken beschäftigen.

Ich werde mir das nachher mal in mein Notiz Buch Schreiben :rtfm:, und mein Caffooo Automat Editieren 😉. Also ich melde mich dann nochmal 😁

von <list> nur von gehört, aber ich denke es sollte wie bei C++ wie der <vector> sein oder? Ich guck nachher mal in die Reference . danke

Hab meine Frage Editiert Sorry nochmal

Hinweis von Abt vor 3 Jahren

Keine Full Quotes
[Hinweis] Wie poste ich richtig?

2.298 Beiträge seit 2010
vor 3 Jahren

Hallo,

bitte zitiere keine Vollbeiträge.

Ansonsten: Du musst im ersten Schritt die Kaffeesorten ja nicht in einer Datenbank speichern. Du kannst sie auch erst mal im Code festlegen und später die Datenquelle anpassen.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

16.807 Beiträge seit 2008
vor 3 Jahren

Erneut der Hinweis auf [Hinweis] Wie poste ich richtig?
Bitte beachten, sonst funktioniert das hier nicht.
Du suchst hier schließlich Hilfe.

301 Beiträge seit 2009
vor 3 Jahren

Ich hätte ein paar generelle Tipps für dich:

  • Programmieren ist zum allergrößten Teil Erfahrung. Erfahrung erlernt man nicht aus Büchern (die sind aber natürlich trotzdem wichtig) und man muss viel Zeit mitbringen. Das Programmieren sein zu lassen würde ich dir also nur dann raten wenn es dir keinen Spaß macht. Ansonsten gilt: Bleib dran auch wenn es stellenweise frustrierend sein kann.

  • Du glaubst Objektorientierung verstanden zu haben. Aber das ganze geht weit über die Verwendung von Objekten hinaus. Und auch die OOP ist kein Allheilmittel. Ich habe das Gefühl das dir ein Buch über Entwurfsmuster einen großen Schritt ermöglichen würde. Buchempfehlung hier: "Head first design patterns" ( wenn du es magst das Dinge wirklich einfach und verbildlicht erklärt sind ) oder "Design Patterns. Elements of Reusable Object-Oriented Software" ( mehr text aber eigentlich die bessere Lektüre ).

  • Es ist gut wenn du fragst was andere über deinen Code denken. Das zeigt das du selbst reflektiert bist und Kritik zulässt. Das ist ein sehr wichtiger Faktor in der Softwareentwicklung. Bleib dabei von anderen etwas zu lernen und gib weiter was du selbst verstanden hast.

  • Es gibt nur ganz selten den einen richtigen Weg. Gewöhne dir an darüber nachzudenken was für deinen Anwendungsfall gerade die beste Lösung zu sein scheint ( unter den dir wichtigsten Gesichtspunkten ). Du wirst merken, dass man nicht immer alle Vorteile eines Weges bekommen kann ohne andere Nachteile mit zu ziehen. Daher ist es wichtig sich zu überlegen was man erreichen will.

M
368 Beiträge seit 2006
vor 3 Jahren

Zusätzlich:

von <list> nur von gehört, aber ich denke es sollte wie bei C++ wie der <vector> sein oder?

Das könnte sogar passen, vgl. Vector & C++ sowie List & C#
Der gepostete Code scheint auch teilweise von C-Richtlinien (Stichwort: Unterstriche, Ungarische Notation) beeinflusst zu sein ? Diese hat(te) in C/C durchaus Sinn, sollte in C# aber vermieden werden: https://stackoverflow.com/questions/450238/to-underscore-or-to-not-to-underscore-that-is-the-question
Was Architektur und Software-Design angeht, siehe den kurzen Beitrag unter java-forum.org

Goalkicker.com // DNC Magazine for .NET Developers // .NET Blogs zum Folgen
Software is like cathedrals: first we build them, then we pray 😉