# Module Grundlegendes Konzept in der Programmierung zur Organisation von Programmcode. Module kapseln Implementationen und exportieren eine Schnittstelle mit Operationen, Typen und Konstanten. Dies kann explizit durch die Java 9 Modules geschehen oder implizit durch Zugriffsmodifikatoren. --- # Geschachtelte Klassen Erlaubt das Verstecken von Hilfsklassen. ```java class Dreieck { private Koordinate _a; private Koordinate _b; private Koordinate _c; private class Koordinate { ... } } ``` --- # Pakete Ermöglichen Namensräume von zusammengehörigen Klassen. Klassen und Interfaces sind nur sichtbar wenn sie mit dem Schlüsselwort `public` deklariert wurden. ```java // Dreieck.java package formen; public class Dreieck { private Koordinate _a; private Koordinate _b; private Koordinate _c; //... } // Koordinate.java package formen; class Koordinate { //... } ``` --- # Imports Möchte man Klassen und Interfaces aus einem anderen Paket nutzen dann müssen diese importiert werden. Um eine Grundfunktionalität von Java zu gewährleisten wird das Paket [`java.lang`](https://docs.oracle.com/javase/8/docs/api/java/lang/package-summary.html) immer importiert. ```java import java.util.List; // Nur List import java.util.*; // Alle Klassen und Interfaces aus java.util import static org.junit.Assert.*; // Statischer Import der Asserts import java.lang.*; // Default Import der immer gemacht wird ``` --- # Sichtbarkeiten Sichtbarkeiten von Methoden, Konstruktoren und Feldern: * **public**: Sichtbar innerhalb und außerhalb des eigenen Pakets * **protected**: Sichtbar innerhalb des Pakets und für erbende Klassen * **package-private**: Sichtbar innerhalb des Pakets * **private**: Nur sichtbar innerhalb der Klasse --- # Übung 1) Durch welches Schlüsselwort wird der Modifikator `package-private` genutzt? * Durch die Verwendung von keinem Schlüsselwort als Modifikator 2) Wie sollten Pakete benannt werden? * Umgedrehte Domain: `de.henriburau.meineKlassen`