Required class for CS majors at the Technische Hochschule Nürnberg. --- Pflichtmodul im Bachelorstudiengang Informatik an der Technischen Hochschule Nürnberg.
Lecture: Thursdays at 11.30a
Tutorials: Tuesdays at 8a, Thursdays at 8a and 9.45a.
Announcements and Discussions: Moodle course 5335
Note: Materials will be in English, the lectures/tutorials will be taught in German; the written exam will be German (you may answer in English).
Lectures: Not your classic lecture--- we'll work together on concrete problems and their solution. The class will be taught in German, the materials are mostly in English.
Tutorials and assignments: Pairprogramming preferred, BYOD strongly recommended!
Credits: written exam (90') at the end of the semester.
- Bloch: Effective Java
- Oaks: Java Performance
- Gamma et al.: Design Patterns
- Subramaniam: Functional Programming in Java
- Siedersleben: Moderne Softwarearchitektur
-
Introduction (March 21, slides, assignments)
We'll talk about software architecture, abstraction, decomposition and good software design. We'll also review the tools and ressources that you'll need for this class.
-
Classes and Interfaces revisited (March 28, slides, lecture notes, assignments)
We look at different types of classes (inner, anonymous, local, static), when to use them, and which visibility for which purpose. Also:
@FunctionalInterface
and lambda expressions. -
Inheritance revisited (April 4, slides, lecture notes, assignments)
We talk about abstract and final classes, (pure) virtual functions and defaults. Also, when (and how) to use abstract base classes, and how the Decorator pattern can be used to add functionality to existing classes.
-
Mixins, pt. 1; Generics, pt. 1 (April 11, slides, lecture notes, assignments)
After a short digression to Mixins, we dig into the details of how generics work in Java, and how to apply them to data structures and algorithms.
No class and assignments on April 18 (Maundy Thursday/Gründonnerstag).
-
Mixin, pt. 2; Generics, pt. 2 (April 25, slides, lecture notes, assignments)
We'll review Mixins and see how to use generics to make them stateful. Generics and inheritance need special attention, and will lead us to bounds and wildcards.
-
Reflection and Annotations (May 2, slides, lecture notes, assignments)
Learn how reflection works in Java, and how they enable annotations by using examples of testing (JUnit5), serialization (gson) and networking (retrofit).
-
Design patterns, pt. 1 (May 9, slides, lecture notes, assignments: JavaFX (recommended) or Android (advanced))
We begin with a few basic patterns: composite, iterator and observer, and use that to dive into Android and MVC/MVVC.
-
Design patterns, pt. 2 (May 16, slides, lecture notes, assignments: JavaFX or Android)
We look at more every-day-patterns: singleton, factory, strategy and command.
-
Design patterns, pt. 3 (May 23, slides, lecture notes, assignments: JavaFX, Android)
We round up a few more useful patterns: proxy and adapter to make other peoples' modules fit your needs, and flyweight to save on precious memory in (mostly) graphical apps.
No class and assignments on May 30 (Ascension Day/Christi Himmelfahrt)
-
Parallel processing revisited (June 6, materials tba)
Because sometimes, you need to work on more than one thing at a time! Learn about a better
Future
for asynchronous/concurrent workloads, and what promise chaining can do for you. -
Introduction to functional programming (June 13, slides, lecture notes, assignments)
Leave your imperative and objected oriented programming comfort zone and follow me down the rabbit hole of functional programming. After some theory, we'll do some basic exercises, including
filter
,map
andforEach
.
No class and assignments on June 20 (Corpus Christi/Fronleichnam)
-
Functional programming in Java (June 27, slides, lecture notes, assignments)
We'll talk about the specifics (and limits) of functional programming in Java. Learn about the classes and interfaces used for Java's functional parts, and the more sophisticated stream reduction using
reduce
andcollect
. -
Dependency Injection (July 4, materials tba)
Singletons are actually a bad idea, most of the time. Dependency injection (DI) uses dependency inversion together with a mechanism to organize instances.
Subscribe to https://github.com/ohm-softa/ohm-softa.github.io repository to follow updates.