From b03b89f316acdb592fd9c0cfa01a757c4139e88f Mon Sep 17 00:00:00 2001 From: paulusja Date: Thu, 28 May 2026 16:51:53 +0200 Subject: [PATCH] Add design pattern solutions. --- uebungen.ipynb | 97 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 92 insertions(+), 5 deletions(-) diff --git a/uebungen.ipynb b/uebungen.ipynb index 528143e..08fb54c 100644 --- a/uebungen.ipynb +++ b/uebungen.ipynb @@ -1816,6 +1816,13 @@ "# Erweitern Sie die Klasse Database\n", "\n", "class Database:\n", + " __my_obj = None\n", + "\n", + " def __new__(cls):\n", + " if Database.__my_obj is None:\n", + " Database.__my_obj = super().__new__(cls)\n", + " return Database.__my_obj\n", + "\n", " def __init__(self):\n", " self.__entries = []\n", "\n", @@ -1856,7 +1863,14 @@ "metadata": {}, "outputs": [], "source": [ - "# Fügen Sie hier Ihren Code für die Quadrat-Klasse ein." + "# Fügen Sie hier Ihren Code für die Quadrat-Klasse ein.\n", + "\n", + "class Quadrat:\n", + " def __init__(self, seitenlaenge):\n", + " self.__seitenlaenge = seitenlaenge\n", + "\n", + " def seitenlaenge(self):\n", + " return self.__seitenlaenge" ] }, { @@ -1875,6 +1889,36 @@ "outputs": [], "source": [ "# Fügen Sie hier Ihren Code für die RechteckAdapter-Klasse ein.\n", + "class Rechteck:\n", + " def seite1(self):\n", + " pass\n", + "\n", + " def seite2(self):\n", + " pass\n", + "\n", + " def umfang(self):\n", + " pass\n", + "\n", + " def flaecheninhalt(self):\n", + " pass\n", + "\n", + "\n", + "class RechteckAdapter(Rechteck):\n", + " def __init__(self, quadrat):\n", + " self.__quadrat = quadrat\n", + "\n", + " def seite1(self):\n", + " return self.__quadrat.seitenlaenge()\n", + "\n", + " def seite2(self):\n", + " return self.__quadrat.seitenlaenge()\n", + "\n", + " def umfang(self):\n", + " return self.__quadrat.seitenlaenge() * 4\n", + "\n", + " def flaecheninhalt(self):\n", + " return self.__quadrat.seitenlaenge()**2\n", + " \n", "\n", "def verarbeiteRechteck(rechteck):\n", " print(f'Die 1. Seite des Rechtecks ist {rechteck.seite1()} Einheiten lang.')\n", @@ -1884,7 +1928,7 @@ "\n", "\n", "quadrat = Quadrat(4)\n", - "verarbeiteRechteck(quadrat) # Erstellen bzw. ergänzen Sie hier Ihr Adapter-Objekt, um es mit dem Quadrat-Objekt an die Funktion zu übergeben." + "verarbeiteRechteck(RechteckAdapter(quadrat)) # Erstellen bzw. ergänzen Sie hier Ihr Adapter-Objekt, um es mit dem Quadrat-Objekt an die Funktion zu übergeben." ] }, { @@ -1905,12 +1949,51 @@ "source": [ "# Fügen Sie hier Ihren Code für die Klasse EntryCounter ein.\n", "\n", + "class EntryCounter:\n", + " def __init__(self, max_persons):\n", + " self.__max_persons = max_persons\n", + " self.__count = 0\n", + " self.__lights = []\n", + " self.__state = None\n", + "\n", + " def someone_enters(self):\n", + " self.__count += 1\n", + " self.__update_state()\n", + "\n", + " def someone_leaves(self):\n", + " self.__count -= 1\n", + " self.__update_state()\n", + "\n", + " def get_count(self):\n", + " return self.__count\n", + " \n", + " def register(self, light):\n", + " self.__lights.append(light)\n", + " \n", + " def __update_state(self):\n", + " state = None\n", + " if self.__count + 1 < self.__max_persons:\n", + " state = 'green'\n", + " elif self.__count + 1 == self.__max_persons:\n", + " state = 'yellow'\n", + " else:\n", + " state = 'red'\n", + "\n", + " if state != self.__state:\n", + " for light in self.__lights:\n", + " light.update(state)\n", + " self.__state = state\n", + "\n", + "\n", "class TrafficLight:\n", " def __init__(self, status):\n", " self.__status = status\n", "\n", " def get_light_status(self):\n", " return self.__status\n", + " \n", + " def update(self, status):\n", + " self.__status = status\n", "\n", " # Erweitern Sie hier die Klasse TrafficLight um weitere Methoden, falls notwendig." ] @@ -1928,16 +2011,20 @@ "\n", "entry_counter = EntryCounter(5)\n", "# Fügen Sie hier zusätzlichen Code für entry_counter ein, falls notwendig, und nur, wenn Sie in der Aufgabenbeschreibung dazu aufgefordert werden.\n", + "entry_counter.register(traffic_light1)\n", + "entry_counter.register(traffic_light2)\n", "\n", "for enter_or_leave in [1, 1, 1, 1, -1, 1, 1, 1, -1, -1, -1, -1]:\n", " if enter_or_leave == 1:\n", - " entry_counter.someoneEnters()\n", + " print('Someone enters')\n", + " entry_counter.someone_enters()\n", " elif enter_or_leave == -1:\n", - " entry_counter.someoneLeaves()\n", + " print('Someone leaves')\n", + " entry_counter.someone_leaves()\n", " else:\n", " print(f'Unrecognized code: {enter_or_leave}')\n", "\n", - " print(f'People in the room: {entry_counter.getCount()}')\n", + " print(f'People in the room: {entry_counter.get_count()}')\n", " print(f'Traffic light 1: {traffic_light1.get_light_status()}')\n", " print(f'Traffic light 2: {traffic_light2.get_light_status()}\\n')" ]