bg_image
header

Entity Manager

Ein Entity Manager ist ein zentraler Bestandteil von ORM-Frameworks (Object-Relational Mapping), vor allem im Zusammenhang mit Java (JPA – Java Persistence API), aber auch in anderen Sprachen wie PHP (Doctrine ORM).

Hier ist eine verständliche Erklärung:


💡 Definition:

Ein Entity Manager ist eine Komponente, die sich um die Verwaltung von Datenbank-Entities (also Objekten/Datensätzen) kümmert. Er bildet die Schnittstelle zwischen der objektorientierten Welt des Codes und der relationalen Welt der Datenbank.


📦 Aufgaben eines Entity Managers:

  1. Persistieren (Speichern):

    • Speichert ein neues Objekt (Entity) in der Datenbank.

    • Beispiel: $entityManager->persist($user);

  2. Finden/Laden:

    • Holt ein Objekt anhand seiner ID oder anderer Kriterien.

    • Beispiel: $entityManager->find(User::class, 1);

  3. Aktualisieren:

    • Änderungen an einem Objekt werden verfolgt und in die Datenbank geschrieben (z. B. beim flush()).

  4. Entfernen/Löschen:

    • Löscht ein Objekt aus der Datenbank.

    • Beispiel: $entityManager->remove($user);

  5. Transaktionen verwalten:

    • Beginnt, commitet oder rollt Transaktionen zurück.

  6. Query-Handling:


🔁 Lebenszyklus von Entities:

Der Entity Manager verwaltet den „Zustand“ von Objekten:

  • managed (verfolgt Änderungen),

  • detached (nicht mehr verwaltet),

  • removed (zum Löschen markiert),

  • new (noch nicht gespeichert).


🛠 Beispiel mit Doctrine (PHP):

$user = new User();
$user->setName('Max Mustermann');

$entityManager->persist($user); // Zum Speichern vormerken
$entityManager->flush();        // Tatsächlich in DB schreiben

Fazit:

Der Entity Manager ist der zentrale Ansprechpartner, wenn es darum geht, mit Datenbankobjekten zu arbeiten – lesen, schreiben, ändern, löschen. Er abstrahiert die SQL-Ebene und macht die Datenbankarbeit objektorientiert steuerbar.


Aspect Oriented Programming - AOP

Aspect-Oriented Programming (AOP) ist ein Programmierparadigma, das sich darauf konzentriert, Querschnittsfunktionen (Cross-Cutting Concerns) modular zu kapseln. Es ergänzt objektorientierte oder funktionale Programmierung, indem es Code, der sich durch viele Klassen oder Module zieht, auslagert und separat behandelt.


💡 Ziel:

Probleme wie Logging, Sicherheitsprüfungen, Fehlerbehandlung, Transaktionsmanagement oder Performance-Messungen sind typische Cross-Cutting Concerns. Diese wiederholen sich oft in vielen Klassen und Methoden – AOP ermöglicht es, solchen Code zentral zu schreiben und automatisch an den richtigen Stellen auszuführen.


🔧 Grundbegriffe:

  • Aspect: Ein Modul, das eine Querschnittsfunktion kapselt.

  • Advice: Der eigentliche Code, der ausgeführt wird (z. B. vor, nach oder anstatt einer Methode).

  • Join Point: Ein Punkt im Programmablauf, an dem ein Aspect eingreifen kann (z. B. Methodenaufruf).

  • Pointcut: Eine Definition, welche Join Points betroffen sind (z. B. "alle Methoden in Klasse X").

  • Weaving: Der Prozess, bei dem Aspect-Code mit dem eigentlichen Code „verwoben“ wird – zur Laufzeit, beim Kompilieren oder beim Laden.


🛠 Beispiel (in Java mit Spring AOP):

@Aspect
public class LoggingAspect {
    @Before("execution(* com.example.service.*.*(..))")
    public void logBeforeMethod(JoinPoint joinPoint) {
        System.out.println("Methode wird aufgerufen: " + joinPoint.getSignature().getName());
    }
}

Dieser Code führt automatisch Logging aus, bevor jede Methode im com.example.service-Paket ausgeführt wird.


✅ Vorteile:

  • Bessere Modularität

  • Weniger Code-Duplikate

  • Trennung von Fachlogik und Querschnittslogik


❌ Nachteile:

  • Kann die Lesbarkeit erschweren (man sieht nicht sofort, was alles beim Methodenaufruf passiert).

  • Debugging kann komplexer sein.

  • Oft framework-abhängig (z. B. Spring, AspectJ).


Design by Contract - DbC

Design by Contract (DbC) ist ein Konzept aus der Softwareentwicklung, das von Bertrand Meyer eingeführt wurde. Es beschreibt eine Methode zur Sicherstellung der Korrektheit und Zuverlässigkeit von Software, indem Verträge zwischen den verschiedenen Komponenten (z.B. Methoden, Klassen) definiert werden.

Grundprinzipien von Design by Contract

Bei DbC wird jede Software-Komponente wie eine Vertragspartei gesehen, die bestimmte Verpflichtungen und Garantien einhält:

  1. Vorbedingungen (Preconditions)
    Bedingungen, die erfüllt sein müssen, bevor eine Methode oder Funktion korrekt ausgeführt werden kann.
    → Verantwortung des Aufrufers.

  2. Nachbedingungen (Postconditions)
    Bedingungen, die nach der Ausführung garantiert werden.
    → Verantwortung der Methode/Funktion.

  3. Invariant (Klasseninvariante)
    Bedingungen, die während der gesamten Lebenszeit eines Objekts wahr bleiben müssen.
    → Verantwortung sowohl der Methode als auch des Aufrufers.

Ziel von Design by Contract

  • Klare Spezifikation der Verantwortlichkeiten.

  • Robustere und besser testbare Software.

  • Fehler werden frühzeitig erkannt (z.B. durch Verletzung des Vertrags).

Beispiel in Pseudocode

class BankAccount {
    private double balance;

    // Invariante: balance >= 0

    void withdraw(double amount) {
        // Vorbedingung: amount > 0 && amount <= balance
        if (amount <= 0 || amount > balance) throw new IllegalArgumentException();

        balance -= amount;

        // Nachbedingung: balance wurde um amount verringert
    }
}

Vorteile

  • Klare Verträge führen zu weniger Missverständnissen.

  • Bessere Fehlersuche, da Verstöße gegen Verträge sofort auffallen.

  • Unterstützt die defensive Programmierung.

Nachteile


Materialized View

Eine Materialized View (auf Deutsch: „materialisierte Sicht“) ist ein spezielles Datenbankobjekt, das das Ergebnis einer SQL-Abfrage dauerhaft speichert – im Gegensatz zu einer normalen View, die bei jeder Abfrage dynamisch berechnet wird.

Eigenschaften einer Materialized View:

  • Speicherung auf Festplatte: Die Daten der Abfrage werden tatsächlich gespeichert, nicht nur die Abfrage selbst.

  • Schnellere Abfragen: Da die Daten bereits berechnet und gespeichert sind, können Anfragen deutlich schneller beantwortet werden.

  • Aktualisierung notwendig: Da sich die zugrundeliegenden Daten ändern können, muss die Materialized View explizit oder automatisch aktualisiert (refreshed) werden, um aktuell zu bleiben.

Vergleich: View vs. Materialized View

Merkmal View Materialized View
Speicherung Nur Abfrage, keine Daten Abfrage und Daten gespeichert
Performance Langsamer bei komplexen Abfragen Schneller, da Daten vorgerechnet
Aktualität Immer aktuell Kann veraltet sein
Aktualisierung notwendig Nein Ja (manuell oder automatisch)

Beispiel:

-- Erstellen einer Materialized View in PostgreSQL
CREATE MATERIALIZED VIEW top_customers AS
SELECT customer_id, SUM(order_total) AS total_spent
FROM orders
GROUP BY customer_id;

Um die Daten zu aktualisieren:

REFRESH MATERIALIZED VIEW top_customers;

Wann ist sie sinnvoll?

  • Bei komplexen Aggregationen, die häufig gebraucht werden

  • Wenn Performance wichtiger ist als Echtzeit-Aktualität

  • In Data Warehouses oder Reporting-Systemen


Partial Mock

Ein Partial Mock (teilweises Mocking) ist eine Technik beim Testen von Software, bei der nur ein Teil eines Objekts durch ein Mock ersetzt wird, während der Rest der echten Implementierung erhalten bleibt. Dies ist besonders nützlich, wenn du nur bestimmte Methoden eines Objekts stubben oder mocken möchtest, während andere Methoden normal ausgeführt werden.

Wann wird ein Partial Mock verwendet?

  • Wenn du eine Klasse testen möchtest, aber bestimmte Methoden von ihr isolieren musst.

  • Wenn einige Methoden schwer zu testen sind (z. B. weil sie externe Abhängigkeiten haben), aber andere weiterhin mit ihrer echten Logik arbeiten sollen.

  • Wenn du nur einige Methoden stubben möchtest, um den Testablauf zu steuern.

Beispiel in PHP mit PHPUnit

Angenommen, du hast eine Klasse Calculator, aber möchtest die Methode multiply() mocken, während add() normal funktioniert.

class Calculator {
    public function add($a, $b) {
        return $a + $b;
    }

    public function multiply($a, $b) {
        return $a * $b;
    }
}

// PHPUnit Test mit Partial Mock
class CalculatorTest extends \PHPUnit\Framework\TestCase {
    public function testPartialMock() {
        // Partial Mock von Calculator
        $calculator = $this->getMockBuilder(Calculator::class)
                           ->onlyMethods(['multiply']) // Nur diese Methode mocken
                           ->getMock();

        // Definiere Verhalten für multiply()
        $calculator->method('multiply')->willReturn(10);

        // Teste echte Methode add()
        $this->assertEquals(5, $calculator->add(2, 3));

        // Teste gemockte Methode multiply()
        $this->assertEquals(10, $calculator->multiply(2, 3));
    }
}

Hier bleibt add() unverändert und arbeitet mit der echten Implementierung, während multiply() immer 10 zurückgibt.

Fazit

Partial Mocks sind nützlich, wenn du Teile einer Klasse isolieren möchtest, ohne sie vollständig zu ersetzen. Sie helfen, Tests stabiler und effizienter zu machen, indem nur bestimmte Methoden gemockt werden.


Objektorientiertes Datenbanksystem - OODBMS

Ein objektorientiertes Datenbanksystem (OODBMS) ist ein Datenbanksystem, das die Prinzipien der objektorientierten Programmierung (OOP) mit den Funktionalitäten einer Datenbank kombiniert. Es ermöglicht das Speichern, Abrufen und Verwalten von Daten in Form von Objekten, wie sie in objektorientierten Programmiersprachen (z. B. Java, Python oder C++) definiert werden.

Merkmale eines OODBMS:

  1. Objektmodell:

    • Die Daten werden als Objekte gespeichert, ähnlich wie in einer objektorientierten Programmiersprache.
    • Jedes Objekt hat Attribute (Daten) und Methoden (Funktionen, die mit diesen Daten arbeiten).
  2. Klassen und Vererbung:

    • Objekte werden auf Basis von Klassen definiert.
    • Vererbung ermöglicht es, von bestehenden Klassen neue abzuleiten, wodurch Code- und Datenwiederverwendung gefördert wird.
  3. Kapselung:

    • Die Daten und die zugehörigen Operationen (Methoden) sind im Objekt gebündelt.
    • Dies verbessert die Datenintegrität und reduziert die Wahrscheinlichkeit von Inkonsistenzen.
  4. Persistenz:

    • Objekte, die normalerweise nur im Arbeitsspeicher existieren, werden im OODBMS dauerhaft gespeichert, sodass sie auch nach dem Beenden des Programms erhalten bleiben.
  5. Identität:

    • Jedes Objekt hat eine eindeutige Identität (OID – Objektidentifikator), unabhängig von seinen Attributwerten. Dies unterscheidet es von relationalen Datenbanken, bei denen die Identität oft durch den Primärschlüssel definiert wird.
  6. Komplexe Datentypen:

    • OODBMS unterstützt komplexe Datentypen, wie z. B. verschachtelte Objekte oder Arrays, ohne dass sie in einfache Tabellenform umgewandelt werden müssen.

Vorteile eines OODBMS:

  • Nahtlose Integration mit OOP: Entwickler können dieselbe Struktur wie in ihrer Programmiersprache verwenden, ohne Daten in relationale Tabellen zu konvertieren.
  • Komplexe Datenstrukturen: Es ist ideal für Anwendungen mit komplexen Daten, z. B. CAD-Systeme, Multimedia-Anwendungen oder wissenschaftliche Daten.
  • Bessere Performance: Weniger Konvertierung zwischen Programm- und Datenbankebene.

Nachteile eines OODBMS:

  • Geringe Verbreitung: Im Vergleich zu relationalen Datenbanksystemen (RDBMS) wie MySQL oder PostgreSQL sind OODBMS weniger verbreitet.
  • Standardisierung: Es gibt weniger standardisierte Abfragesprachen (wie SQL in RDBMS).
  • Steilere Lernkurve: Entwickler müssen sich mit den Prinzipien der Objektorientierung und der spezifischen Implementierung des OODBMS auseinandersetzen.

Beispiele für OODBMS:

  • ObjectDB (für Java-Entwickler optimiert)
  • Versant Object Database
  • db4o (open-source, für Java und .NET)
  • GemStone/S

Objektorientierte Datenbanken sind besonders nützlich, wenn es darum geht, mit komplexen, hierarchischen oder verschachtelten Datenstrukturen zu arbeiten, wie sie in vielen modernen Softwareprojekten vorkommen.

 


Object Query Language - OQL

Object Query Language (OQL) ist eine Abfragesprache, die ähnlich wie SQL (Structured Query Language) funktioniert, aber speziell für objektorientierte Datenbanken entwickelt wurde. Sie wird verwendet, um Daten aus objektorientierten Datenbanksystemen (OODBs) abzufragen, die Daten als Objekte speichern. OQL wurde als Teil des Object Data Management Group (ODMG)-Standards definiert.

Merkmale von OQL:

  1. Objektorientierte Ausrichtung:

    • Im Gegensatz zu SQL, das sich auf relationale Datenmodelle konzentriert, arbeitet OQL mit Objekten und deren Beziehungen.
    • OQL kann Objekteigenschaften und Methoden direkt ansprechen.
  2. Ähnlichkeit mit SQL:

    • Viele OQL-Syntaxelemente basieren auf SQL, was den Einstieg für Entwickler erleichtert, die bereits SQL kennen.
    • Es gibt jedoch zusätzliche Funktionen zur Unterstützung von objektorientierten Konzepten wie Vererbung, Polymorphismus und Methodenaufrufen.
  3. Abfragen von komplexen Objekten:

    • Mit OQL kann man komplexe Datenstrukturen wie verschachtelte Objekte, Sammlungen (z. B. Listen, Sets) und Assoziationen abfragen.
  4. Unterstützung für Methoden:

    • OQL ermöglicht den Aufruf von Methoden auf Objekten, was SQL nicht bietet.
  5. Kompatibilität mit objektorientierten Programmiersprachen:

Beispiel für eine OQL-Abfrage:

Angenommen, es gibt eine Datenbank mit einer Klasse Person mit den Attributen Name und Age. Eine OQL-Abfrage könnte wie folgt aussehen:

SELECT p.Name
FROM Person p
WHERE p.Age > 30

Diese Abfrage gibt die Namen aller Personen zurück, deren Alter größer als 30 ist.

Einsatzgebiete von OQL:

  • OQL wird häufig in Anwendungen verwendet, die mit objektorientierten Datenbanken arbeiten, z. B. CAD-Systeme, wissenschaftliche Datenbanken oder komplexe Geschäftsanwendungen.
  • Es eignet sich besonders gut für Systeme, die mit vielen Beziehungen und Hierarchien zwischen Objekten arbeiten.

Vorteile von OQL:

  • Direkte Unterstützung von Objektstrukturen und Methoden.
  • Effiziente Abfrage komplexer Daten.
  • Gute Integration mit objektorientierten Programmiersprachen.

Herausforderungen:

  • Weniger weit verbreitet als SQL, da relationale Datenbanken dominieren.
  • Komplexer bei der Nutzung und Implementierung in Vergleich zu SQL.

In der Praxis ist OQL weniger populär als SQL, da relationale Datenbanken nach wie vor weit verbreitet sind. Allerdings ist OQL in spezialisierten Anwendungen, die objektorientierte Datenmodelle nutzen, sehr leistungsfähig.

 

 


Dynamic HTML - DHTML

Dynamic HTML (DHTML) ist eine Kombination von Technologien, die verwendet wird, um interaktive und dynamische Webinhalte zu erstellen. Es ist kein eigenständiger Standard oder eine Programmiersprache, sondern eine Sammlung von Techniken und Tools, die zusammenarbeiten. Mit DHTML können Websites dynamisch und interaktiv gestaltet werden, ohne dass die gesamte Seite neu geladen werden muss.

Die Bestandteile von DHTML

  1. HTML (Hypertext Markup Language)
    Die Grundstruktur der Website.

  2. CSS (Cascading Style Sheets)
    Steuert das Aussehen und das Layout der Webseite. Mit CSS können Stile dynamisch verändert werden, z. B. durch Hover-Effekte oder das Ändern von Farben und Positionen.

  3. JavaScript
    Ermöglicht das Hinzufügen von Interaktivität und dynamischem Verhalten, wie das Aktualisieren von Inhalten, ohne die Seite neu zu laden.

  4. DOM (Document Object Model)
    Eine Programmierschnittstelle, die den Zugriff auf und die Manipulation der Struktur der Webseite ermöglicht. JavaScript interagiert mit dem DOM, um Inhalte zu ändern oder neue Elemente hinzuzufügen.

Was macht DHTML besonders?

  • Interaktivität: Inhalte und Stile können auf Benutzereingaben reagieren.
  • Animationen: Elemente wie Text oder Bilder können sich bewegen oder animiert werden.
  • Veränderte Inhalte: Teile der Webseite können dynamisch aktualisiert werden, ohne die Seite neu zu laden.
  • Benutzerfreundlichkeit: Verbessert die Nutzererfahrung durch Echtzeit-Aktionen.

Beispiel für DHTML:

Ein einfaches Beispiel wäre ein Button, der beim Anklicken den Text auf der Seite ändert.

<!DOCTYPE html>
<html>
<head>
    <style>
        #text {
            color: blue;
            font-size: 20px;
        }
    </style>
    <script>
        function changeText() {
            document.getElementById("text").innerHTML = "Text geändert!";
            document.getElementById("text").style.color = "red";
        }
    </script>
</head>
<body>
    <p id="text">Originaler Text</p>
    <button onclick="changeText()">Klicke mich</button>
</body>
</html>

Vorteile von DHTML:

  • Erhöht die Interaktivität und Dynamik einer Website.
  • Reduziert die Serverbelastung, da weniger Seiten-Neuladen erforderlich ist.
  • Ermöglicht individuelle Anpassungen für Benutzer.

Nachteile:

  • Kann bei älteren Browsern oder Geräten zu Inkompatibilitäten führen.
  • Erfordert mehr Entwicklungsaufwand und komplexeres Debugging.
  • Abhängig von JavaScript, das von Benutzern deaktiviert sein könnte.

Heutzutage hat DHTML durch modernere Techniken wie AJAX und Frameworks (z. B. React, Vue.js) an Bedeutung verloren, war jedoch ein wichtiger Schritt in der Entwicklung interaktiver Webanwendungen.

 

 


Data Definition Language - DDL

Die Data Definition Language (DDL) ist ein Bestandteil von SQL (Structured Query Language) und umfasst Befehle, die zur Definition und Verwaltung der Struktur einer Datenbank verwendet werden. DDL-Befehle ändern die Metadaten einer Datenbank, also Informationen über Tabellen, Indizes, Schemata und andere Datenbankobjekte, anstatt die eigentlichen Daten zu manipulieren.

Wichtige DDL-Befehle:

1. CREATE
Wird verwendet, um neue Datenbankobjekte wie Tabellen, Schemata, Views oder Indizes zu erstellen.
Beispiel:

CREATE TABLE Kunden (
    ID INT PRIMARY KEY,
    Name VARCHAR(50),
    Alter INT
);

2. ALTER
Dient zur Änderung der Struktur von existierenden Objekten, z. B. Hinzufügen oder Entfernen von Spalten.
Beispiel:

ALTER TABLE Kunden ADD Email VARCHAR(100);

3. DROP
Entfernt ein Datenbankobjekt (z. B. eine Tabelle) dauerhaft.
Beispiel:

DROP TABLE Kunden;

4. TRUNCATE
Löscht alle Daten aus einer Tabelle, behält jedoch die Struktur der Tabelle bei. Es ist schneller als ein DELETE, da keine Transaktionsprotokolle erstellt werden.
Beispiel:

TRUNCATE TABLE Kunden;

Eigenschaften von DDL-Befehlen:

  • Änderungen durch DDL-Befehle sind automatisch permanent (implizites Commit).
  • Sie beeinflussen die Datenbankstruktur, nicht die Daten selbst.

DDL ist essenziell für das Design und die Verwaltung einer Datenbank und wird meist zu Beginn eines Projekts oder bei strukturellen Änderungen verwendet.

 

 


Document Object Model - DOM

Das Document Object Model (DOM) ist eine standardisierte Schnittstelle, die von Webbrowsern bereitgestellt wird, um strukturierte Dokumente – insbesondere HTML- und XML-Dokumente – darzustellen und programmatisch zu manipulieren. Es beschreibt die hierarchische Struktur eines Dokuments als Baum, wobei jeder Knoten ein Element, Attribut oder einen Text darstellt.

Hauptmerkmale des DOM:

  1. Baumstruktur:

    • Ein HTML-Dokument wird als hierarchischer Baum dargestellt. Die Wurzel ist das <html>-Element, mit untergeordneten Knoten wie <head>, <body>, <div>, <p> usw.
  2. Objektorientierte Darstellung:

    • Jedes Element im Dokument wird als Objekt repräsentiert, das über Methoden und Eigenschaften angesprochen werden kann.
  3. Interaktivität:

    • Das DOM erlaubt Entwicklern, Inhalte und Stile einer Webseite zur Laufzeit zu ändern. Beispielsweise können JavaScript-Skripte den Text eines <p>-Elements ändern oder ein <div>-Element einfügen.
  4. Plattform- und Programmiersprachenunabhängig:

    • Obwohl es oft mit JavaScript verwendet wird, kann das DOM auch von anderen Sprachen wie Python, Java oder PHP genutzt werden.

Beispiele für DOM-Manipulation:

1. Zugriff auf ein Element:

let element = document.getElementById("meinElement");

2. Ändern des Inhalts:

element.textContent = "Neuer Text";

3. Hinzufügen eines neuen Elements:

let neuerKnoten = document.createElement("div");
document.body.appendChild(neuerKnoten);

Wichtig:

Das DOM wird durch Standards des W3C (World Wide Web Consortium) definiert und ständig weiterentwickelt, um moderne Webtechnologien zu unterstützen.