Required class for CS majors at the Technische Hochschule Nürnberg. --- Pflichtmodul im Bachelorstudiengang Informatik an der Technischen Hochschule Nürnberg.
Lecture: Fridays at 11.30a in HW.307, starting Mar 16: Class, mostly live coding (interaction appreciated :-).
Tutorials: We'll work on the assignment based on the preceding week's lecture, so bring your laptop! Tutorials start March 21.
- Tuesdays at 9.45a in HQ.306 & HQ.406, starting Mar 21.
- Fridays at 9.45 in HQ.405 & HQ.406, starting Mar 24.
Announcements and Discussions: Teams, enrollment key: bmkntrr
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; nota bene: assignments typically take longer than 90' to prepare!
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
See General
Channel on Teams > Files.
-
Introduction (Mar 17/pt1, slides, assignments)
We talk about software architecture, abstraction, decomposition and good software design. We also review the tools and ressources that you'll need for this class.
-
Classes and Interfaces revisited (Mar 17/pt2, 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 (Mar 24, 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. Note: Due to the 200 year anniversary, we'll have to stop early at 12.30!
-
Mixins, pt. 1; Generics, pt. 1 (Mar 31, 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 on Friday, Apr 7 (Good Friday)
-
Mixins, pt. 2; Generics, pt. 2 (Apr 14, 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 (Apr 21, 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 (Apr 28, 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 5, slides, lecture notes, assignments: JavaFX or Android)
We look at more every-day-patterns: singleton, factory, strategy and command.
-
Design patterns, pt. 3 (May 12, 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.
-
Parallel processing (May 19, slides, lecture notes, assignments: JavaFX, Android)
Because sometimes, you need to work on more than one thing at a time! We'll look at threads and how to control and synchronize them.
No class on May 26 (Pentecost)
-
Asynchronous programming (Jun 2, slides, lecture notes, assignments: CLI, Android)
User interfaces often require us to work not only in parallel, but to do so in an asynchronous way. Learn about a better
Future
for asynchronous or concurrent workloads, and what promise chaining can do for you.
No class on Jun 9
-
Introduction to functional programming (Jun 16, 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
. -
Functional programming in Java (June 23, 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
. -
Patterns of modern software architecture (Jun 30, slides)
We're wrapping up the semester by talking about patterns of modern software architecture, such as dependency injection or microservices.
-
Wrap-up (Jul 7)
Subscribe to https://github.com/ohm-softa/ohm-softa.github.io repository to follow updates.