LernMoment / csharp-einfach-verschluesselt

Der Quellcode (Übung und Lösung) zum Übungskurs "C# Grundlagen üben mit System"
https://www.udemy.com/csharp-uebungskurs-einfach-verschluesselt/?couponCode=GH-UROT-10
1 stars 6 forks source link

Meine Lösung zur Aufgabe #2

Open flokosoft opened 2 years ago

flokosoft commented 2 years ago

Hier meine Lösung: Zum Git

Lösung und alles was nach dem Video "Aufgabenbeschreibung" kommt, werde ich mir jetzt angucken.

Mehr Infos hab ich unter "Frage und Antworten" niedergeschrieben.

Liebe Grüße, Florian

MK-NEUKO commented 2 years ago

@flokosoft Hallo Florian, entschuldige bitte die Wartezeit. Wie schon im Frage und Antworten Bereich auf Udemy angekündigt, sehen wir uns deine Lösung an.

Zuerst etwas zu MVC, wenn du das MVC-Pattern zu Übungszwecken, oder um die Aufgabe zu erweitern anwenden möchtest, ist das ok. Es wäre aber für die Aufgabe selbst nicht erforderlich. Was ich damit sagen will ist, dass der Focus für die eigentliche Aufgabe hier schnell verloren gehen kann, besonders wenn die Erweiterung der Aufgabe größer ist, als sie selbst.

Ich mache es so als würde das Programm ablaufen, so gehen wir Methode für Methode durch:

Das Erstellen von Objekten in der Klasse von deren Typ das Objekt ist:

List<CryptModel> positionDerBuchstaben = newList<CryptModel>();
CryptModel a = new CryptModel();

Versuche es vorerst zu vermeiden solche Objekte zu erstellen, es gibt Anwendungsfälle wo es erwünscht ist und es ist auch legitim. Es Kann aber zu einem ungewollten rekursiven Verhalten führen. Z.B. würde man diese Klasse Instanziieren, hatte man ein StackOverflow:

public class CryptModelRecursive
    {
        private CryptModelRecursive objectA;

        public CryptModelRecursive()
        {
            objectA = new CryptModelRecursive();
        }
    }

Du brauchst keine List<CryptModel> ..., um einen Index mit dem jeweiligen Buchstaben zu erhalten, ein Array würde hier ausreichen. Ich habe damals eine ähnliche Lösung implementiert. Bei Interesse hier Klicken Aber auch dies ist nicht erforderlich, wenn du dir die Lösung von Jan anguckst. Ob du eine Zahl oder eine Buchstaben hast kannst du mit Char.IsLetter() herausfinden. Verwende bitte keinen Try-Catch-Block um deine Programmfluss zu steuern, dieser sollte nur für die Behandlung von Exceptiones benutzt werden.

Zwei Kleinigkeiten sind noch zu nennen, ß und Sonderzeichen werden in deinem Algorithmus nicht berücksichtigt. Bei allen Sonderzeichen in der Eingabe, bekommt man ein "M" in der Ausgabe.

Ich hoffe du bist jetzt nicht zu sehr verunsichert und hegst einen Groll gegen mich, das was du gemacht hast ist nicht der einfachste Weg Objektorientierung zu lernen. Es ist so, als wolltest du dein Meisterstück zum Anfang der Lehre machen. Ein Design-Pattern umzusetzen ist oft keine leichte Aufgabe und erfordert viel Grundkenntnisse und Erfahrung. Wenn du möchtest, würde ich dir empfehlen, dich mit folgenden Grundlagen der OOP zu beschäftigen.

  1. Das Klassendesign als solches, Felder, Eigenschaften, Methoden, Konstruktor, Zugriffsmodifizierer, Datenkappselung etc.
  2. Das Instanziiren von Objekten, wo, mit und ohne Parameter, der Umgang mit Objekten.
  3. Single-Responsibility-Prinzip SRP
  4. Keep it simple, stupid KISS
  5. Don’t repeat yourself DRY
  6. Namensmuster, Namenskonvention, das richtige Benennen von Klassen, Methoden und Variablen

Das ist schon eine ganze Menge, wenn du Hilfe, oder Quellen zu den Themen benötigst, dann einfach mir schreiben, entweder mit @MK-NEUKO hier im Issue weiter schreiben, oder auf den anderen bekannten Kanälen.

Viel Grüße Michael von LernMoment.de