Begleitete .NET Übungen – Merkblatt

Merkblatt - Begleitete Übungen .NET
Merkblatt – Begleitete Übungen .NET

Auf dieser Seite habe ich das Merkblatt, das die Schüler üblicherweise im Laufe des C#-, VB.NET- oder .NET-Unterrichts erhalten, digitalisiert. Bedenke bitte, dass es für die Verwendung im, bzw. auf die Vorbereitung für den Unterricht gedacht ist. Auf der Webseite hier wirkt es vermutlich auch wesentlich größer / erschreckender, als es eigentlich in DIN A4 ist.

Dieses kurze Dokument (jetzt Website-Inhalt) solltest Du idealerweise vor jeder begleiteten Übung durchgehen. Es wiederholt die absoluten Grundlagen und hilft dir dabei, die wesentlichen Dinge fast wie Ohrwürmer im Gedächtnis zu verankern. Dies hilft Dir bei der Umsetzung aller zukünftigen Aufgaben im Unterricht, privat, oder im echten Entwickler-Alltag. Außerdem enthält es hilfreiche Hinweise, Tipps und Tricks 😉.

Umfang einer begleiteten Übung

Umfang einer begleiteten Übung
Umfang einer begleiteten Übung

Jede begleitete Übung umfasst grundsätzlich 3 Bereiche

  • Theoretischer Austausch (dem Gespräch mit einem potenziellen Kunden, etc. gleichsetzend)
  • Modellierung / Konzeption / Überlegungen
  • Beantwortung der Theorie-Fragen
  • Umsetzung der geforderten, praxisorientierten Features

Was die Übung nicht umfassen wird / worum es geht:

  • Die Erwartungshaltung eines „perfekten Programmes“
  • Bei den Übungen geht es um die „Schritt für Schritt“-Aneignung von Skills, eine Software umzusetzen
  • Einen 100 % klaren Weg. Es ist weitestgehend offen, wie „das Programm“ zu bauen ist.

Warum es weitestgehend offen ist? Denk’ mal an einen echten Kunden – der weiß meist selbst nicht, was er will. Trust me, I’m a developer 😉! Wie gesagt, es sind Übungen…

Hinweise

Das habe ich doch schonmal gemacht?

Falls Du Dir genau diese Frage stellen solltest, gibt es nur eine Antwort: Es ist Absicht! Gewisse Dinge müssen sich durch konsequente Übung und Wiederholungen in Dein Gehirn einbrennen. Ich kann Dir aus Erfahrung sagen, dass es Deine Denkweise formt und Deine Vorgehensweise vereinfachen wird. Du musst Dir dann eben halt z. B. keine Gedanken mehr darum machen, wie Du eine „For-Schleife“ schreibst. Du kannst Dich dann glücklicherweise auf das eigentliche Problem konzentrieren – DAS ist es, was wir wollen!

Notiere Dir Deine Gedankengänge

Ein Teil der persönlichen Verbesserung liegt darin, zu wissen, wo man überhaupt Schwierigkeiten hat. Diese kann man nur – vernünftig – erörtern, wenn man sich darüber bewusst wird! Glaubst Du mir nicht? Du hast also noch nie ein Programmier-Video geguckt, gedacht: „Achja, easy..“ und bist gescheitert, als das Video weg war 😉! Das liegt daran, dass es immer einfach ist, während man zuguckt. Wenn man diese Wege aber selbst bestreiten muss, sieht es anders aus!

Schreibe Dir also unbedingt auf, wo Du Schwierigkeiten hattest, damit Du Sie Dir entweder selbst nach dem Lernen (oder später mit meiner Hilfe) beantworten kannst. Nur so festigt sich das Ganze und bei dem nächsten, gleichen Problem, kannst Du das Wissen abrufen, oder aller spätestens nachschauen. Das kann in Form von: “Ich hatte Schwierigkeiten, xy zu tun”. “Xy ist mir einfach, aber z ist mir schwer gefallen”. “Ich habe Probleme mir xy zu merken / programmiertechnisch zu formulieren”, etc.

Reden ist Silber, schweigen ist…

Du kennst den Spruch! In meinem Unterricht lege ich viel Wert darauf, dass meine Schüler selbst zur Lösung kommen. Natürlich lasse ich Dich nicht im Stich und Du musst Dich auch (BITTE) nicht schämen, wenn es mal nicht klappt – das ist NORMAL!

Ich werde an vielen Stellen im Unterricht ganz bewusst vermeiden, die jeweiligen 100% treffenden Wörter / Begriffe zu verwenden. Ich versuche aber natürlich immer ausreichend Umschreibungen und Beispiele zu nennen, damit Du auf das Ziel kommen kannst. So lernst du eher die Denkweise, statt alles exakt vorgekaut zu bekommen. Selbst Lösungen zu konzipieren und umzusetzen – das ist DER Skill!

Die Theorie – Wiederverwendbare Fragen

Die Theorie – Wiederverwendbare Fragen
Die Theorie – Wiederverwendbare Fragen

Hier kommen wir nun zu den konkreten Fragen, die Du als Entwickler – meiner Meinung nach – immer im Kopf haben musst, um befähigt zu sein, Aufgaben zu lösen. Für gewöhnlich trainieren wir Diese inkl. Antworten innerhalb der Unterrichtsstunden in – selbstverständlich – Deiner eigenen Geschwindigkeit ein. Wenn Du Diese Fragen und die passenden Antworten vor dem Lösen einer Aufgabe im Kopf behältst, oder zumindest nachschlagen kannst, bist Du optimal gewappnet.

  1. Worüber macht man sich bei der Konzeption eines Programmes als erstes Gedanken? Tipp: Hat nichts mit der Programmierung selbst / an sich zu tun…
  2. Durch Welches Konzept in der OOP erkläre ich dem Programm die Art der Daten, die ich speichern möchte? (Zahl, Name, Busch, Spiel, Tabelle, Tabellenspalte, Hund, Mysql-Verbindung…) Tipp: Die Antwort lautet weder “Klassen”, noch “Variablen” 😉 – siehe auch die rot umrahmten Dinge im Bild. Wenn ich dem Programm beibringen möchte, was ein “Roboter” ist, dann füge ich einen neuen … hinzu.
  1. Wodurch repräsentiert man einfache “Dinge”, wie z. B. “Vorname”, “Alter”, “Ja-Nein-Werte“ in der Programmierung? Tipp: Nicht etwa “Variablen” / “strings, ints”. Wie lautet der Sammelbegriff für int, bool, string und Co.? Siehe hier z. B. die blau geschriebenen Dinge aus dem hier drüber.
  2. Wie repräsentiert man “mehrere Dinge”, wie z. B. “Zahlen”, statt “Zahl”. Oder “Vornamen”, statt “Vorname”, oder auch “Rechnungen“, statt “Rechnung”?
  3. Wie repräsentiert man komplexe / komplexere “Dinge” in der objektorientierten Programmierung? (Für die es z. B. nichts Passendes von “Haus” aus gibt).
  4. Welches Konzept der Softwareentwicklung kann z. B. sicherstellen, dass ich eine Art Auswahl nur aus gültigen Werten treffen kann? (z. B. für den Aufruf einer Funktion) Was hält mich davon ab, eine Spielkarte von dem ungültigen Typ „Hund“ zu erstellen, obwohl es z. B. nur Kreuz, Pik, Herz und Karo gibt? Wichtiger Hinweis: Dieses Ding namens “gültige Werte für Karten-Typen“ muss schon zur Kompilierzeit bestehen. Es darf also nicht während der Laufzeit aus der Datenbank geladen werden.
  5. Welches Konzept in der OOP stellt „Gemeinsamkeiten“ im engsten Sinne dar? Ein Chef und z. B. ein Mitarbeiter haben beide einen Vornamen und einen Nachnamen, sie müssen beiden auf Toilette gehen und haben Haarwuchs, etc. Das gesuchte „Ding“ hilft auch dabei, Dinge zu gruppieren und zu einem sinnvollen Ganzen zusammenzufügen.
  6. Was erschafft / produziert / erstellt ein Objekt anhand eines „Bauplans“? Was wird dadurch intern aufgerufen? Schreibe zusätzlich eine Beispielanweisung!
  7. Schaue Dir die folgenden beiden Klassen an – was könnte man verbessern und warum (bezogen auf den aktuellen Aufbau!)? Mache Dir bitte ebenfalls Gedanken über Probleme dieser Änderung – die dennoch “richtig” wäre. Wir betrachten letztendlich nur das bisschen von unten – darauf basierend entscheiden wir also in erster Linie! (Es geht im Bild um einen Card-Dealer 😉 – nicht um den „Anderen“…)
  1. Wähle bitte die „optimale“ / “richtige” Schreibweise für das private Feld einer Klasse: 
// a
private bool isHungry;

// b
private bool IsHungry;

// c
Private bool _isHungry;

// d
bool _isHungry;
' a
Private isHungry As Boolean

' b
Private IsHungry As Boolean

' c
Private _isHungry As Boolean

' d
Private _isHungry As Boolean
  1. Warum ist die in der vorherigen Aufgabe “korrekte” Schreibweise, eben die “Korrekte”? Welche Alternative Schreibweise wäre auch okay? Welches Prinzip unterstützt diese These ggf.? Was musst Du beachten, wenn Du diese Entscheidungen triffst?
  2. Beschreibe, aus welchen Bestandteilen eine Funktion / Method besteht. Schreibe einfach eine Methode innerhalb Visual Studio und screenshotte Diese. Danach kannst Du die Bestandteile beschriften.
  3. Wähle bitte die korrekte Schreibweise der folgenden Methoden. Begründe nun die Antwort wie z. B. (Antwort x ist richtig, weil… xy so und so geschrieben wird und man z so und so schreibt…)
// a.
public void drawCards(int Quantity) 
{ 
 // …. 
}

// b.
public void DrawCards(int quantity) 
{ 
 // …. 
}

// c.
public void Drawcards(int _quantity) 
{ 
 // …. 
} 
  1. Stelle Dir vor, Du hättest eine Funktion, Welche den zuletzt angemeldeten Nutzer zurückgeben soll. (Wie, woher, egal…). Was wäre warum ein passender Rückgabetyp? Tipp: Naja, wenn noch nie ein Nutzer angemeldet war…
  2. Stell’ Dir vor, Du hast ein Heizungsmonteur und einen Elektriker – ggf. auch noch 5 andere ähnliche Jobs in Deinem Haus am Werkeln (Du renovierst…). Jetzt möchtest Du jeden davon Fragen, wie weit er ist. Das Problem ist natürlich, dass wir jetzt nicht 15x einzeln die Anweisung “FrageHandwerkerWieWeitErIst” aufrufen. Es wäre cooler, wenn man dies in einer Schleife erledigen könnte. Das Problem ist nur: Du hast je nach Aufgabenbereich ggf. 10 verschiedene Klassen. Wie willst Du die jetzt mit einer Schleife durchgehen? Erstelle dazu auch gerne mal verschiedene Klassen wie: “Elektriker”, “Maurer”, “Maler”, “Maschinenbauer”, “Whatever”. Wie willst Du die jetzt alle in eine Liste packen? Was brauchst Du?
  3. Wenn Du Dir die Aufgabe 16 noch einmal ansiehst… Welche Möglichkeit hättest Du ohne jegliche Zusatzarbeit, alle zusammen zu durchlaufen, also gesammelt (in einer Liste…)? Du hast also einfach nur Instanzen von 10 rohen Klassen vorliegen, ganz in dem Beispiel: (class Electrician {}) – ohne großartigen Inhalt, etc.

Fazit

Mit Hilfe dieses Merkzettels möchte ich Dir einen Basis-Leitfaden für Notizen und Gedanken bereitstellen, der Dir bei allen privaten und beruflichen Programmier-Abenteuern hilft. Primär wurde Dieser allerdings im Sinne von meinen „Begleiteten Übungen“ im und für den Unterricht erstellt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert