Add design pattern solutions.
This commit is contained in:
parent
b648b70521
commit
b03b89f316
@ -1816,6 +1816,13 @@
|
|||||||
"# Erweitern Sie die Klasse Database\n",
|
"# Erweitern Sie die Klasse Database\n",
|
||||||
"\n",
|
"\n",
|
||||||
"class Database:\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",
|
" def __init__(self):\n",
|
||||||
" self.__entries = []\n",
|
" self.__entries = []\n",
|
||||||
"\n",
|
"\n",
|
||||||
@ -1856,7 +1863,14 @@
|
|||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"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": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
"# Fügen Sie hier Ihren Code für die RechteckAdapter-Klasse ein.\n",
|
"# 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",
|
"\n",
|
||||||
"def verarbeiteRechteck(rechteck):\n",
|
"def verarbeiteRechteck(rechteck):\n",
|
||||||
" print(f'Die 1. Seite des Rechtecks ist {rechteck.seite1()} Einheiten lang.')\n",
|
" print(f'Die 1. Seite des Rechtecks ist {rechteck.seite1()} Einheiten lang.')\n",
|
||||||
@ -1884,7 +1928,7 @@
|
|||||||
"\n",
|
"\n",
|
||||||
"\n",
|
"\n",
|
||||||
"quadrat = Quadrat(4)\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": [
|
"source": [
|
||||||
"# Fügen Sie hier Ihren Code für die Klasse EntryCounter ein.\n",
|
"# Fügen Sie hier Ihren Code für die Klasse EntryCounter ein.\n",
|
||||||
"\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",
|
"class TrafficLight:\n",
|
||||||
" def __init__(self, status):\n",
|
" def __init__(self, status):\n",
|
||||||
" self.__status = status\n",
|
" self.__status = status\n",
|
||||||
"\n",
|
"\n",
|
||||||
" def get_light_status(self):\n",
|
" def get_light_status(self):\n",
|
||||||
" return self.__status\n",
|
" return self.__status\n",
|
||||||
|
" \n",
|
||||||
|
" def update(self, status):\n",
|
||||||
|
" self.__status = status\n",
|
||||||
"\n",
|
"\n",
|
||||||
" # Erweitern Sie hier die Klasse TrafficLight um weitere Methoden, falls notwendig."
|
" # Erweitern Sie hier die Klasse TrafficLight um weitere Methoden, falls notwendig."
|
||||||
]
|
]
|
||||||
@ -1928,16 +2011,20 @@
|
|||||||
"\n",
|
"\n",
|
||||||
"entry_counter = EntryCounter(5)\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",
|
"# 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",
|
"\n",
|
||||||
"for enter_or_leave in [1, 1, 1, 1, -1, 1, 1, 1, -1, -1, -1, -1]:\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",
|
" 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",
|
" elif enter_or_leave == -1:\n",
|
||||||
" entry_counter.someoneLeaves()\n",
|
" print('Someone leaves')\n",
|
||||||
|
" entry_counter.someone_leaves()\n",
|
||||||
" else:\n",
|
" else:\n",
|
||||||
" print(f'Unrecognized code: {enter_or_leave}')\n",
|
" print(f'Unrecognized code: {enter_or_leave}')\n",
|
||||||
"\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 1: {traffic_light1.get_light_status()}')\n",
|
||||||
" print(f'Traffic light 2: {traffic_light2.get_light_status()}\\n')"
|
" print(f'Traffic light 2: {traffic_light2.get_light_status()}\\n')"
|
||||||
]
|
]
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user