Java - allgemeine Themen
Für die weiterführende Programmierung nutzen wir Java. Hierfür sprechen folgende Gründe:
  • Objektorientierung
  • Saubere Programmiersprache ohne "Schnörkel"
  • Performant (wegen JIT)
  • Weit verbreitet
  • Statisch typisiert
  • Steile Lernkurve (im Vergleich zu C++)
  • Lizenzkostenfrei
  • Betriebssystemunabhängig
Manche mögen einzelne hier aufgeführte Argumente als eher hinderlich betrachten. Man muss jedoch bedenken, dass für uns nicht die Einfachheit beim Programmieren oder die Vielzahl von verschiedenen Frameworks wichtig ist, sondern inwieweit ist die Sprache dazu geeigent, die Grundkonzepte von Programmierung näher zu bringen. Noch sinnvoller wäre m.E. C++, wobei die notwendige Zeit für das Erlernen dieser Sprache den Rahmen unserer zeitlichen Möglicheiten in der Berufsschule sprengen würde.
Bei den Videos werdet ihr feststellen, dass manche eher "old school" rüberkommen. Das liegt daran, dass ich schon sehr früh mit Lehrvideos angefangen habe und im Laufe der Zeit meine Skills etwas verbessert habe. Dem Inhalt sollte diese alte Form aber nicht abträglich sein. Ich schreibe aber auf dieser Seite jeweils hin, ob es sich um einen "old school" Inhalt handelt. Mittelfristig plane ich, diese Videos mal neu aufzunehmen.
Ich habe das Thema rund um Java in folgende Teilbereiche zerlegt (wobei in Zukunft vermutlich noch ein paar neue hinzukommen werden): Top
Hier geht es erstmal noch nicht um Java, sondern um die allgemeine Einteilung von Programmiersprachen. Folgende Punkte werden angesprochen:
  • Hochsprache
  • Compiler
  • Maschinensprache
  • Assembler
  • Zwischensprache (Bytecode, Intermediate Language)
  • JIT Compiler
  • Interpreter
  • Prozedural vs. funktional vs. objektorientiert
  • Imperativ vs. deklarativ
Top
Nun kümmern wir uns um die wesentlichen Aspekte von Java die wir benötigen, um überhaupt entwickeln zu können:
  • Installation
  • Grundarchitektur (JRE, Classloader, JDK)
  • Die main-Methode
  • Packages
  • IDE
  • Java Module
  • Java Archives (jar)
Top
Bei den Details beginnen wir mit den nummerischen Datentypen. Wir klären, wie wir uns die Datenhaltung vorstellen können analysieren, wie sich die Variablen unter bestimmten Bedingungen verhalten:
  • Binärer Aufbau von Speicherzellen
  • Statische vs. dynamische Typisierung
  • Deklaration vs. Initialisierung
  • Überlaufverhalten von ganzen Zahlendatentypen
  • Zweierkomplement
  • Aufbau von Gleitkommazahlen
  • Rundungsproblem bei Gleitkommazahlen
Top
Arrays sind die wohl wichtigste Form von zusammengesetzten Datentypen. Wir klären den Aufbau von ein- bzw. mehrdimensionalen Arrays. Anschließend kümmern wir uns um dynamische Arrays in Form von Arraylisten und Hashtables:
  • Erzeugung und Nutzung von Arrays
  • Initialbelegungen von Arrays
  • Aufbau mehrdimensionaler Arrays
  • Dynamische Arrays
  • Assoziative Arrays
Top
Nun, da wir die Gundlagen von Datentypen haben, können wir uns um das allgemeine Verhalten bei der Nutzung ansehen. Hierbei kümmern wir uns um:
  • Call by reference vs. call by value
  • Primitive vs. zusammengesetzte Datentypen
  • Referenzvariablen
  • Stringvergleich
  • Interoperabilität / Typecasts
Top
Das Video zu den Kontrollstrukturen ist noch von Früher - sprich "old school". Inhaltlich gehe ich auf die verschiedenen Kontrollstrukturen in Struktogramm ein und wie sie in Java umgesetzt werden. Dabei mache ich auch einen kurzen Hinweis auf die Program Ablauf Plan (PAP) Darstellung.
  • Sequenz
  • Verzweigung
  • Mehrfachauswahl
  • Kopf- vs. fußgesteuerte Schleife
  • Zählschleife
Top
Bei der Umsetzung von GUIs setze ich auf SWING. Der Grund liegt darin, dass es mir nur um die Grundlagen und die Grundkonzepte geht. Diese lassen sich mit SWING relativ einfach erklären. Diese Elemente können anschließend auf andere GUI APIs wie bspw. JavaFX oder WPF übertrage werden.
  • Das Problem mit dem UI Thread
  • Frame als sichtbarer Rahmen
  • Die Grundelemente einer GUI
  • Der Layoutmanager
  • Eventhandling
Top
Nun geht es darum, Grafiken einzubinden. Hierbei kümmern wir uns um die in SWING notwendigen Container, um den Prozess des ladens und vorab um die verschiedenen Grafiktypen.
  • Raster vs. Vektor
  • Transparenz mit png
  • Animation mit gif
  • Einbinden in SWING
  • Cachen von Grafiken
Top
Mittels Canvas können wir pixelgenaue Grafiken dynamisch selbst erzeugen. In Java wird dies primär mit der JPanel Klasse erledigt, in den meisten anderen Programmiersrpachen heißt die Klasse "Canvas". Im ersten Video zu diesem Thema klären wir die Grundlagen:
  • Das repaint Problem
  • Das konzept des "Stiftes"
  • Zeichnen von Formen
  • Umrandung vs. Füllen
Top
Die weiteführenden Kenntisse zu Canvas beinhalten primär die Nutzung von Transformationen, um die vorher gezeichneten Formen flexibler darzustellen. Darüberhinaus kümmern wir uns noch um das Zeichnen einzelner Pixel:
  • Rotation
  • Verschiebung
  • Einbindung von Grafiken
  • Mausposition bestimmen
  • Mausbewegung als Pixel bzw. Polygon aufzeichnen
Top
Mit Multithreading betreten wir die etwas höhere Schule der Programmierung. Wir klären die verschiedenen Begriffe, um parallele, asynchrone und synchrone Verarbeitung zu unterscheiden, lernen die Problematik des parallelen Zugriffs und den damit verbundenen Entwicklungsproblemen kennen und wie man die Software threadsafe machen kann.
  • Synchron vs. asynchron vs. parallel
  • Die Thread Klasse und das Runnable Interface
  • Race Conditions
  • Synchronisationsmechanismen
  • Deadlocks
Top
Rekursionen sind ein nicht zu unterschätzendes Verfahren zur effizienten Erstellung von Algorithmen. Wir kümmern uns um die Probleme und Möglichkeiten von Rekursionen anhand von mehreren Usecases:
  • Rekursion vs. Iteration am Beispiel Fakultät
  • Belegung des Stacks durch Rekursionen
  • Endrekursion
  • Rekursives durchsuchen einer Baumstruktur
  • Quicksort
Top