{"beispielaufgaben":[{"artefakt_id":"artefakt.freitextantwort","aufgabe":[{"text":"Die Nordlicht Verkehrs GmbH entwickelt die Steuerungssoftware ihrer Fahrscheinautomaten neu. Je nach Automatentyp (Stadtautomat, Regionalautomat) sollen unterschiedliche Fahrscheinobjekte wie Einzelfahrschein, Tagesticket oder Anschlussticket erzeugt werden. Bisher werden diese Objekte an vielen Stellen der Verkaufslogik unmittelbar über den new-Operator instanziiert. Ihre Teamleiterin schlägt vor, die Objekterzeugung auf das Entwurfsmuster Factory Method umzustellen, sodass jeder Automatentyp als eigene Unterklasse die jeweils passende Fahrscheinvariante liefert, ohne dass die gemeinsame Verkaufslogik geändert werden muss. In der nächsten Teambesprechung sollen Sie das Muster vorstellen.","typ":"absatz"},{"text":"Erläutern Sie zwei Aspekte der Arbeitsweise des Entwurfsmusters Factory Method bezogen auf die beschriebene Automatensoftware. (6 Punkte)","typ":"absatz"}],"beispiel_id":"bsp-factory-method-entwurfsmuster-erlaeutern-freitextantwort-01","freigabeart":"maschinell","loesung":[{"text":"Je Aspekt 3 Punkte (2 Punkte fachlich korrekte Aussage, 1 Punkt Bezug zur Automatensoftware); maximal 6 Punkte.\nMögliche Aspekte:\n1. Kapselung der Erzeugung: Der direkte new-Aufruf in der Verkaufslogik wird durch den Aufruf einer Fabrikmethode ersetzt; die Instanziierung findet nur noch innerhalb dieser Methode statt.\n2. Überschreiben in Unterklassen: Stadt- und Regionalautomat überschreiben die Fabrikmethode und bestimmen so den konkreten Fahrscheintyp, ohne die gemeinsame Oberklasse/Verkaufslogik zu ändern.\n3. Arbeit gegen einen gemeinsamen Typ: Die Verkaufslogik nutzt die zurückgegebenen Fahrscheinobjekte nur über den deklarierten gemeinsamen Rückgabetyp und bleibt vom konkreten Produkt unabhängig. Andere fachlich zutreffende Aspekte des Musters sind gleichwertig zu bewerten.","typ":"absatz"}],"operator_id":"operator.erlaeutern","pruefungszuordnung":{"berufe":["FIAE"],"teil":"AP2"},"punkte":6,"punkterahmen":{"max":6,"min":3},"quellen":["ap2-fiae-2025-sommer-ae1-a04-a-aa","ap2-fiae-2025-sommer-ae1-a04-a-ab"]},{"artefakt_id":"artefakt.freitextantwort","aufgabe":[{"text":"In der Verwaltungssoftware einer Hochschule sollen Bescheinigungen (Immatrikulationsbescheinigung, Notenübersicht, Praktikumsnachweis) künftig über das Entwurfsmuster Factory Method erzeugt werden. Eine Oberklasse deklariert die Fabrikmethode, je Bescheinigungsart erzeugt eine eigene Unterklasse das passende Objekt. Der Softwarearchitekt weist darauf hin, dass das Muster eine Bedingung an die Struktur der erzeugten Klassen stellt.","typ":"absatz"},{"text":"Erläutern Sie eine Einschränkung, die dabei bezogen auf die Klassenstruktur zu beachten ist. (3 Punkte)","typ":"absatz"}],"beispiel_id":"bsp-factory-method-entwurfsmuster-erlaeutern-freitextantwort-02","freigabeart":"maschinell","loesung":[{"text":"Erwartete Lösung: Die von den Unterklassen zurückgegebenen Bescheinigungsobjekte müssen eine gemeinsame Oberklasse bzw. ein gemeinsames Interface besitzen (1 P.). Erläuterung: Der Rückgabetyp der Fabrikmethode in der Oberklasse wird auf diesen gemeinsamen Typ festgelegt, sodass die aufrufende Verwaltungslogik unabhängig von der konkreten Bescheinigungsart arbeiten kann; ohne diesen gemeinsamen Typ ist ein einheitlicher Aufruf nicht möglich (2 P.). Hinweis: Sachlich gleichwertige Formulierungen sind zu akzeptieren; nur eine Einschränkung wird bewertet.","typ":"absatz"}],"operator_id":"operator.erlaeutern","pruefungszuordnung":{"berufe":["FIAE"],"teil":"AP2"},"punkte":3,"punkterahmen":{"max":6,"min":3},"quellen":["ap2-fiae-2025-sommer-ae1-a04-a-aa","ap2-fiae-2025-sommer-ae1-a04-a-ab"]},{"artefakt_id":"artefakt.freitextantwort","aufgabe":[{"text":"Eine Steuerkanzlei-Software soll Auswertungen künftig in mehreren Ausgabeformaten (PDF, CSV, XML) bereitstellen. Die Entwicklungsabteilung hat die Erzeugung der jeweiligen Exportobjekte nach dem Entwurfsmuster Factory Method umgesetzt: Eine Basisklasse deklariert die Fabrikmethode, konkrete Unterklassen erzeugen das jeweils passende Exportobjekt. Die Geschäftsführung möchte vor der Freigabe wissen, welche Konsequenzen diese Entwurfsentscheidung für die weitere Pflege der Software hat.","typ":"absatz"},{"text":"Erläutern Sie hierzu\n- einen Vorteil und\n- einen Nachteil\ndes Einsatzes des Entwurfsmusters Factory Method in dieser Exportfunktion. (6 Punkte)","typ":"absatz"}],"beispiel_id":"bsp-factory-method-entwurfsmuster-erlaeutern-freitextantwort-03","freigabeart":"maschinell","loesung":[{"text":"Vorteil 3 Punkte, Nachteil 3 Punkte (je 2 Punkte Aussage, 1 Punkt Begründung/Bezug zur Exportfunktion).\nVorteil, z. B.: Der aufrufende Auswertungscode kennt nur den gemeinsamen Export-Typ; ein weiteres Format kann durch eine zusätzliche Unterklasse ergänzt werden, ohne bestehenden Code zu ändern (lose Kopplung, gute Erweiterbarkeit).\nNachteil, z. B.: Für jedes Format entstehen zusätzliche Klassen; die Klassenhierarchie wird umfangreicher und schwerer nachvollziehbar, der Einarbeitungs- und Testaufwand steigt.\nNur je eine Nennung wird gewertet; weitere fachlich zutreffende Vor- bzw. Nachteile sind gleichwertig.","typ":"absatz"}],"operator_id":"operator.erlaeutern","pruefungszuordnung":{"berufe":["FIAE"],"teil":"AP2"},"punkte":6,"punkterahmen":{"max":6,"min":3},"quellen":["ap2-fiae-2025-sommer-ae1-a04-a-aa","ap2-fiae-2025-sommer-ae1-a04-a-ab"]},{"artefakt_id":"artefakt.quellcode","aufgabe":[{"text":"Ein Webshop soll Kaufbelege wahlweise als PDF-Dokument oder als HTML-Seite ausgeben. Zur Umsetzung wird das Entwurfsmuster Factory Method eingesetzt. Es existieren bereits das gemeinsame Interface Beleg mit der Methode rendere() : String sowie die beiden Produktklassen PdfBeleg und HtmlBeleg, die dieses Interface implementieren. Erstellen Sie in Java die abstrakte Erzeugerklasse BelegErzeuger mit der abstrakten Fabrikmethode erstelleBeleg() : Beleg sowie die beiden Unterklassen PdfErzeuger und HtmlErzeuger, welche diese Fabrikmethode überschreiben und jeweils ein Objekt des passenden Produkts zurückgeben.","typ":"absatz"}],"beispiel_id":"bsp-factory-method-entwurfsmuster-erstellen-quellcode-01","freigabeart":"maschinell","loesung":[{"text":"Erwartete Lösung (Java, sinngemäß gleichwertige objektorientierte Sprachen sind anzuerkennen):","typ":"absatz"},{"text":"abstract class BelegErzeuger {\n    public abstract Beleg erstelleBeleg();\n}\nclass PdfErzeuger extends BelegErzeuger {\n    @Override\n    public Beleg erstelleBeleg() {\n        return new PdfBeleg();\n    }\n}\nclass HtmlErzeuger extends BelegErzeuger {\n    @Override\n    public Beleg erstelleBeleg() {\n        return new HtmlBeleg();\n    }\n}","typ":"code"},{"text":"Punkteverteilung (5 P): abstrakte Erzeugerklasse mit korrekt deklarierter abstrakter Fabrikmethode und Rückgabetyp `Beleg` (1 P); Unterklasse `PdfErzeuger` erbt, überschreibt die Fabrikmethode und liefert `new PdfBeleg()` (2 P); Unterklasse `HtmlErzeuger` analog mit `new HtmlBeleg()` (2 P). Der Rückgabetyp der Fabrikmethode muss das gemeinsame Interface sein; direkte Objekterzeugung außerhalb der Fabrikmethode gibt keine Punkte.","typ":"absatz"}],"operator_id":"operator.erstellen","pruefungszuordnung":{"berufe":["FIAE"],"teil":"AP2"},"punkte":5,"punkterahmen":{"max":5,"min":5},"quellen":["ap2-fiae-2023-sommer-ae1-a02-b-bc"]},{"artefakt_id":"artefakt.quellcode","aufgabe":[{"text":"Ein Kundenportal verschickt Benachrichtigungen wahlweise per E-Mail oder per SMS. Die Auswahl des Versandkanals soll über das Entwurfsmuster Factory Method gekapselt werden. Gegeben sind das Interface Benachrichtigung mit der Methode Zustellen() : void sowie die Produktklassen EmailBenachrichtigung und SmsBenachrichtigung, die dieses Interface implementieren. Erstellen Sie in C# die abstrakte Basisklasse Versanddienst mit der abstrakten Fabrikmethode ErzeugeBenachrichtigung() : Benachrichtigung und die beiden abgeleiteten Klassen EmailVersand und SmsVersand, welche die Fabrikmethode überschreiben und jeweils das zugehörige Produkt zurückliefern.","typ":"absatz"}],"beispiel_id":"bsp-factory-method-entwurfsmuster-erstellen-quellcode-02","freigabeart":"maschinell","loesung":[{"text":"Erwartete Lösung (C#, sinngemäß gleichwertige objektorientierte Sprachen sind anzuerkennen):","typ":"absatz"},{"text":"abstract class Versanddienst {\n    public abstract Benachrichtigung ErzeugeBenachrichtigung();\n}\nclass EmailVersand : Versanddienst {\n    public override Benachrichtigung ErzeugeBenachrichtigung() {\n        return new EmailBenachrichtigung();\n    }\n}\nclass SmsVersand : Versanddienst {\n    public override Benachrichtigung ErzeugeBenachrichtigung() {\n        return new SmsBenachrichtigung();\n    }\n}","typ":"code"},{"text":"Punkteverteilung (5 P): abstrakte Basisklasse `Versanddienst` mit korrekt deklarierter abstrakter Fabrikmethode und Rückgabetyp `Benachrichtigung` (1 P); `EmailVersand` leitet ab, überschreibt (override) und liefert `new EmailBenachrichtigung()` (2 P); `SmsVersand` analog mit `new SmsBenachrichtigung()` (2 P). Der deklarierte Rückgabetyp muss das gemeinsame Interface sein.","typ":"absatz"}],"operator_id":"operator.erstellen","pruefungszuordnung":{"berufe":["FIAE"],"teil":"AP2"},"punkte":5,"punkterahmen":{"max":5,"min":5},"quellen":["ap2-fiae-2023-sommer-ae1-a02-b-bc"]},{"artefakt_id":"artefakt.quellcode","aufgabe":[{"text":"In einer Anwendung sollen Protokolleinträge wahlweise in eine Datei oder auf die Konsole geschrieben werden. Die Erzeugung des passenden Ausgabeziels soll mit dem Entwurfsmuster Factory Method erfolgen. Vorhanden sind die abstrakte Produktklasse Protokollziel mit der Methode schreibe(text) sowie die konkreten Produktklassen DateiZiel und KonsolenZiel, die von ihr erben. Erstellen Sie in Python die abstrakte Erzeugerklasse ProtokollFabrik mit der abstrakten Fabrikmethode erzeuge_ziel() und die beiden Unterklassen DateiFabrik und KonsolenFabrik, die die Fabrikmethode überschreiben und ein Objekt des jeweils passenden Ausgabeziels zurückgeben.","typ":"absatz"}],"beispiel_id":"bsp-factory-method-entwurfsmuster-erstellen-quellcode-03","freigabeart":"maschinell","loesung":[{"text":"Erwartete Lösung (Python, sinngemäß gleichwertige objektorientierte Sprachen sind anzuerkennen):","typ":"absatz"},{"text":"from abc import ABC, abstractmethod","typ":"ueberschrift"},{"text":"class ProtokollFabrik(ABC):\n    @abstractmethod\n    def erzeuge_ziel(self):\n        ...","typ":"code"},{"text":"class DateiFabrik(ProtokollFabrik):\n    def erzeuge_ziel(self):\n        return DateiZiel()","typ":"code"},{"text":"class KonsolenFabrik(ProtokollFabrik):\n    def erzeuge_ziel(self):\n        return KonsolenZiel()","typ":"code"},{"text":"Punkteverteilung (5 P): abstrakte Erzeugerklasse `ProtokollFabrik` mit als abstrakt gekennzeichneter Fabrikmethode `erzeuge_ziel` (1 P); `DateiFabrik` erbt, überschreibt und liefert eine `DateiZiel`-Instanz (2 P); `KonsolenFabrik` analog mit `KonsolenZiel` (2 P). Die Fabrikmethode muss ein Objekt des gemeinsamen Produkttyps zurückgeben; direkte Instanziierung außerhalb der Fabrikmethode gibt keine Punkte.","typ":"absatz"}],"operator_id":"operator.erstellen","pruefungszuordnung":{"berufe":["FIAE"],"teil":"AP2"},"punkte":5,"punkterahmen":{"max":5,"min":5},"quellen":["ap2-fiae-2023-sommer-ae1-a02-b-bc"]},{"artefakt_id":"artefakt.diagramm.uml.klassendiagramm","aufgabe":[{"text":"Ein Kundenserviceportal versendet automatische Benachrichtigungen an Nutzer. Zur Erzeugung der Nachrichtenobjekte ist das Entwurfsmuster Factory Method umgesetzt; die Kanäle E-Mail und SMS sind fertig modelliert, nun soll ein Push-Kanal ergänzt werden.","typ":"absatz"},{"text":"Bestehendes UML-Klassenmodell (textuell):\n- Benachrichtigung {abstract}: # empfaenger : String; # inhalt : String; + sende() : void {abstract}\n- EmailBenachrichtigung: + EmailBenachrichtigung(empfaenger : String); + sende() : void\n- SmsBenachrichtigung: + SmsBenachrichtigung(empfaenger : String); + sende() : void\n- BenachrichtigungFabrik {abstract}: + erstelleBenachrichtigung() : Benachrichtigung {abstract}\n- EmailFabrik: + erstelleBenachrichtigung() : Benachrichtigung\n- SmsFabrik: + erstelleBenachrichtigung() : Benachrichtigung\nEmailBenachrichtigung und SmsBenachrichtigung sind von Benachrichtigung, EmailFabrik und SmsFabrik von BenachrichtigungFabrik abgeleitet. Jede Fabrik erzeugt ihr Produkt über eine gerichtete «create»-Beziehung mit der Multiplizität 1 zu *; eine Fabrik kann somit im Laufe ihrer Nutzung beliebig viele Produktobjekte erzeugen.","typ":"absatz"},{"text":"Ergänzen Sie das Modell für den Push-Kanal und modellieren Sie ausdrücklich: (1) die konkrete Fabrikklasse PushFabrik, (2) deren Generalisierung zu BenachrichtigungFabrik, (3) die überschreibende Fabrikmethode erstelleBenachrichtigung() : Benachrichtigung, (4) die konkrete Produktklasse PushBenachrichtigung mit passendem Konstruktor, (5) deren Generalisierung zu Benachrichtigung samt überschreibender Methode sende() : void sowie (6) die gerichtete «create»-Beziehung von PushFabrik zu PushBenachrichtigung mit der Multiplizität 1 zu *.","typ":"absatz"}],"aufgabe_diagramm":{"beziehungen":[{"a":"EmailBenachrichtigung","art":"vererbung","b":"Benachrichtigung"},{"a":"SmsBenachrichtigung","art":"vererbung","b":"Benachrichtigung"},{"a":"EmailFabrik","art":"vererbung","b":"BenachrichtigungFabrik"},{"a":"SmsFabrik","art":"vererbung","b":"BenachrichtigungFabrik"},{"a":"EmailFabrik","art":"abhaengigkeit","b":"EmailBenachrichtigung","multA":"1","multB":"*","stereotyp":"create"},{"a":"SmsFabrik","art":"abhaengigkeit","b":"SmsBenachrichtigung","multA":"1","multB":"*","stereotyp":"create"}],"klassen":[{"art":"abstrakt","attribute":[{"name":"empfaenger","sicht":"#","typ":"String"},{"name":"inhalt","sicht":"#","typ":"String"}],"id":"K1","methoden":[{"abstrakt":true,"name":"sende","parameter":[],"rueckgabe":"void","sicht":"+"}],"name":"Benachrichtigung"},{"art":"klasse","attribute":[],"id":"K2","methoden":[{"name":"EmailBenachrichtigung","parameter":[{"name":"empfaenger","typ":"String"}],"sicht":"+"},{"name":"sende","parameter":[],"rueckgabe":"void","sicht":"+"}],"name":"EmailBenachrichtigung"},{"art":"klasse","attribute":[],"id":"K3","methoden":[{"name":"SmsBenachrichtigung","parameter":[{"name":"empfaenger","typ":"String"}],"sicht":"+"},{"name":"sende","parameter":[],"rueckgabe":"void","sicht":"+"}],"name":"SmsBenachrichtigung"},{"art":"abstrakt","attribute":[],"id":"K4","methoden":[{"abstrakt":true,"name":"erstelleBenachrichtigung","parameter":[],"rueckgabe":"Benachrichtigung","sicht":"+"}],"name":"BenachrichtigungFabrik"},{"art":"klasse","attribute":[],"id":"K5","methoden":[{"name":"erstelleBenachrichtigung","parameter":[],"rueckgabe":"Benachrichtigung","sicht":"+"}],"name":"EmailFabrik"},{"art":"klasse","attribute":[],"id":"K6","methoden":[{"name":"erstelleBenachrichtigung","parameter":[],"rueckgabe":"Benachrichtigung","sicht":"+"}],"name":"SmsFabrik"}],"modus":"uml_klasse"},"beispiel_id":"bsp-factory-method-entwurfsmuster-ergaenzen-diagramm-uml-klassendiagramm-01","freigabeart":"maschinell","loesung":[{"text":"Zu ergänzen sind zwei neue Klassen mit den bekannten Musterbeziehungen (je Kontrollpunkt 1 P, gesamt 6 P):\n1. Konkrete Fabrikklasse PushFabrik. (1 P)\n2. Generalisierung: PushFabrik ist von BenachrichtigungFabrik abgeleitet. (1 P)\n3. In PushFabrik die überschreibende Fabrikmethode + erstelleBenachrichtigung() : Benachrichtigung (Rückgabetyp bleibt der abstrakte Produkttyp). (1 P)\n4. Konkrete Produktklasse PushBenachrichtigung mit Konstruktor + PushBenachrichtigung(empfaenger : String). (1 P)\n5. Generalisierung PushBenachrichtigung → Benachrichtigung samt überschreibender Methode + sende() : void. (1 P)\n6. Gerichtete «create»-Beziehung von PushFabrik zu PushBenachrichtigung mit Multiplizität 1 zu * (eine Fabrik kann mehrere Push-Objekte erzeugen). (1 P)\nBewertungshinweis: Fachlich gleichwertige Bezeichner und UML-Notationen (z. B. abweichender Konstruktorparameter gleicher Bedeutung) sind anzuerkennen. Die abstrakten Basisklassen Benachrichtigung und BenachrichtigungFabrik samt ihren abstrakten Methoden bleiben unverändert.","typ":"absatz"}],"loesung_diagramm":{"beziehungen":[{"a":"EmailBenachrichtigung","art":"vererbung","b":"Benachrichtigung"},{"a":"SmsBenachrichtigung","art":"vererbung","b":"Benachrichtigung"},{"a":"PushBenachrichtigung","art":"vererbung","b":"Benachrichtigung"},{"a":"EmailFabrik","art":"vererbung","b":"BenachrichtigungFabrik"},{"a":"SmsFabrik","art":"vererbung","b":"BenachrichtigungFabrik"},{"a":"PushFabrik","art":"vererbung","b":"BenachrichtigungFabrik"},{"a":"EmailFabrik","art":"abhaengigkeit","b":"EmailBenachrichtigung","multA":"1","multB":"*","stereotyp":"create"},{"a":"SmsFabrik","art":"abhaengigkeit","b":"SmsBenachrichtigung","multA":"1","multB":"*","stereotyp":"create"},{"a":"PushFabrik","art":"abhaengigkeit","b":"PushBenachrichtigung","multA":"1","multB":"*","stereotyp":"create"}],"klassen":[{"art":"abstrakt","attribute":[{"name":"empfaenger","sicht":"#","typ":"String"},{"name":"inhalt","sicht":"#","typ":"String"}],"id":"K1","methoden":[{"abstrakt":true,"name":"sende","parameter":[],"rueckgabe":"void","sicht":"+"}],"name":"Benachrichtigung"},{"art":"klasse","attribute":[],"id":"K2","methoden":[{"name":"EmailBenachrichtigung","parameter":[{"name":"empfaenger","typ":"String"}],"sicht":"+"},{"name":"sende","parameter":[],"rueckgabe":"void","sicht":"+"}],"name":"EmailBenachrichtigung"},{"art":"klasse","attribute":[],"id":"K3","methoden":[{"name":"SmsBenachrichtigung","parameter":[{"name":"empfaenger","typ":"String"}],"sicht":"+"},{"name":"sende","parameter":[],"rueckgabe":"void","sicht":"+"}],"name":"SmsBenachrichtigung"},{"art":"abstrakt","attribute":[],"id":"K4","methoden":[{"abstrakt":true,"name":"erstelleBenachrichtigung","parameter":[],"rueckgabe":"Benachrichtigung","sicht":"+"}],"name":"BenachrichtigungFabrik"},{"art":"klasse","attribute":[],"id":"K5","methoden":[{"name":"erstelleBenachrichtigung","parameter":[],"rueckgabe":"Benachrichtigung","sicht":"+"}],"name":"EmailFabrik"},{"art":"klasse","attribute":[],"id":"K6","methoden":[{"name":"erstelleBenachrichtigung","parameter":[],"rueckgabe":"Benachrichtigung","sicht":"+"}],"name":"SmsFabrik"},{"art":"klasse","attribute":[],"id":"K7","methoden":[{"name":"erstelleBenachrichtigung","parameter":[],"rueckgabe":"Benachrichtigung","sicht":"+"}],"name":"PushFabrik"},{"art":"klasse","attribute":[],"id":"K8","methoden":[{"name":"PushBenachrichtigung","parameter":[{"name":"empfaenger","typ":"String"}],"sicht":"+"},{"name":"sende","parameter":[],"rueckgabe":"void","sicht":"+"}],"name":"PushBenachrichtigung"}],"modus":"uml_klasse"},"operator_id":"operator.ergaenzen","pruefungszuordnung":{"berufe":["FIAE"],"teil":"AP2"},"punkte":6,"punkterahmen":{"max":6,"min":6},"quellen":["ap2-fiae-2025-sommer-ae1-a04-c"]},{"artefakt_id":"artefakt.diagramm.uml.klassendiagramm","aufgabe":[{"text":"Ein Controlling-Werkzeug exportiert Auswertungen in unterschiedlichen Dateiformaten. Zur Erzeugung der Dateiobjekte ist das Entwurfsmuster Factory Method umgesetzt; die Formate CSV und PDF sind fertig modelliert, nun soll ein XML-Export ergänzt werden.","typ":"absatz"},{"text":"Bestehendes UML-Klassenmodell (textuell):\n- Exportdatei {abstract}: # dateiname : String; # inhalt : String; + schreibe() : void {abstract}\n- CsvDatei: + CsvDatei(dateiname : String); + schreibe() : void\n- PdfDatei: + PdfDatei(dateiname : String); + schreibe() : void\n- ExportFabrik {abstract}: + erzeugeDatei() : Exportdatei {abstract}\n- CsvFabrik: + erzeugeDatei() : Exportdatei\n- PdfFabrik: + erzeugeDatei() : Exportdatei\nCsvDatei und PdfDatei sind von Exportdatei, CsvFabrik und PdfFabrik von ExportFabrik abgeleitet. Jede Fabrik erzeugt ihre Datei über eine gerichtete «create»-Beziehung mit der Multiplizität 1 zu *; eine Fabrik kann somit beliebig viele Dateiobjekte erzeugen.","typ":"absatz"},{"text":"Ergänzen Sie das Modell für den XML-Export und modellieren Sie ausdrücklich: (1) die konkrete Fabrikklasse XmlFabrik, (2) deren Generalisierung zu ExportFabrik, (3) die überschreibende Fabrikmethode erzeugeDatei() : Exportdatei, (4) die konkrete Produktklasse XmlDatei mit passendem Konstruktor, (5) deren Generalisierung zu Exportdatei samt überschreibender Methode schreibe() : void sowie (6) die gerichtete «create»-Beziehung von XmlFabrik zu XmlDatei mit der Multiplizität 1 zu *.","typ":"absatz"}],"aufgabe_diagramm":{"beziehungen":[{"a":"CsvDatei","art":"vererbung","b":"Exportdatei"},{"a":"PdfDatei","art":"vererbung","b":"Exportdatei"},{"a":"CsvFabrik","art":"vererbung","b":"ExportFabrik"},{"a":"PdfFabrik","art":"vererbung","b":"ExportFabrik"},{"a":"CsvFabrik","art":"abhaengigkeit","b":"CsvDatei","multA":"1","multB":"*","stereotyp":"create"},{"a":"PdfFabrik","art":"abhaengigkeit","b":"PdfDatei","multA":"1","multB":"*","stereotyp":"create"}],"klassen":[{"art":"abstrakt","attribute":[{"name":"dateiname","sicht":"#","typ":"String"},{"name":"inhalt","sicht":"#","typ":"String"}],"id":"K1","methoden":[{"abstrakt":true,"name":"schreibe","parameter":[],"rueckgabe":"void","sicht":"+"}],"name":"Exportdatei"},{"art":"klasse","attribute":[],"id":"K2","methoden":[{"name":"CsvDatei","parameter":[{"name":"dateiname","typ":"String"}],"sicht":"+"},{"name":"schreibe","parameter":[],"rueckgabe":"void","sicht":"+"}],"name":"CsvDatei"},{"art":"klasse","attribute":[],"id":"K3","methoden":[{"name":"PdfDatei","parameter":[{"name":"dateiname","typ":"String"}],"sicht":"+"},{"name":"schreibe","parameter":[],"rueckgabe":"void","sicht":"+"}],"name":"PdfDatei"},{"art":"abstrakt","attribute":[],"id":"K4","methoden":[{"abstrakt":true,"name":"erzeugeDatei","parameter":[],"rueckgabe":"Exportdatei","sicht":"+"}],"name":"ExportFabrik"},{"art":"klasse","attribute":[],"id":"K5","methoden":[{"name":"erzeugeDatei","parameter":[],"rueckgabe":"Exportdatei","sicht":"+"}],"name":"CsvFabrik"},{"art":"klasse","attribute":[],"id":"K6","methoden":[{"name":"erzeugeDatei","parameter":[],"rueckgabe":"Exportdatei","sicht":"+"}],"name":"PdfFabrik"}],"modus":"uml_klasse"},"beispiel_id":"bsp-factory-method-entwurfsmuster-ergaenzen-diagramm-uml-klassendiagramm-02","freigabeart":"maschinell","loesung":[{"text":"Zu ergänzen sind zwei neue Klassen mit den Musterbeziehungen (je Kontrollpunkt 1 P, gesamt 6 P):\n1. Konkrete Fabrikklasse XmlFabrik. (1 P)\n2. Generalisierung: XmlFabrik ist von ExportFabrik abgeleitet. (1 P)\n3. In XmlFabrik die überschreibende Fabrikmethode + erzeugeDatei() : Exportdatei (Rückgabetyp bleibt der abstrakte Produkttyp). (1 P)\n4. Konkrete Produktklasse XmlDatei mit Konstruktor + XmlDatei(dateiname : String). (1 P)\n5. Generalisierung XmlDatei → Exportdatei samt überschreibender Methode + schreibe() : void. (1 P)\n6. Gerichtete «create»-Beziehung von XmlFabrik zu XmlDatei mit Multiplizität 1 zu * (eine Fabrik kann mehrere XmlDatei-Objekte erzeugen). (1 P)\nBewertungshinweis: Fachlich gleichwertige Bezeichner und UML-Notationen sind anzuerkennen. Die abstrakten Basisklassen Exportdatei und ExportFabrik samt ihren abstrakten Methoden bleiben unverändert.","typ":"absatz"}],"loesung_diagramm":{"beziehungen":[{"a":"CsvDatei","art":"vererbung","b":"Exportdatei"},{"a":"PdfDatei","art":"vererbung","b":"Exportdatei"},{"a":"XmlDatei","art":"vererbung","b":"Exportdatei"},{"a":"CsvFabrik","art":"vererbung","b":"ExportFabrik"},{"a":"PdfFabrik","art":"vererbung","b":"ExportFabrik"},{"a":"XmlFabrik","art":"vererbung","b":"ExportFabrik"},{"a":"CsvFabrik","art":"abhaengigkeit","b":"CsvDatei","multA":"1","multB":"*","stereotyp":"create"},{"a":"PdfFabrik","art":"abhaengigkeit","b":"PdfDatei","multA":"1","multB":"*","stereotyp":"create"},{"a":"XmlFabrik","art":"abhaengigkeit","b":"XmlDatei","multA":"1","multB":"*","stereotyp":"create"}],"klassen":[{"art":"abstrakt","attribute":[{"name":"dateiname","sicht":"#","typ":"String"},{"name":"inhalt","sicht":"#","typ":"String"}],"id":"K1","methoden":[{"abstrakt":true,"name":"schreibe","parameter":[],"rueckgabe":"void","sicht":"+"}],"name":"Exportdatei"},{"art":"klasse","attribute":[],"id":"K2","methoden":[{"name":"CsvDatei","parameter":[{"name":"dateiname","typ":"String"}],"sicht":"+"},{"name":"schreibe","parameter":[],"rueckgabe":"void","sicht":"+"}],"name":"CsvDatei"},{"art":"klasse","attribute":[],"id":"K3","methoden":[{"name":"PdfDatei","parameter":[{"name":"dateiname","typ":"String"}],"sicht":"+"},{"name":"schreibe","parameter":[],"rueckgabe":"void","sicht":"+"}],"name":"PdfDatei"},{"art":"abstrakt","attribute":[],"id":"K4","methoden":[{"abstrakt":true,"name":"erzeugeDatei","parameter":[],"rueckgabe":"Exportdatei","sicht":"+"}],"name":"ExportFabrik"},{"art":"klasse","attribute":[],"id":"K5","methoden":[{"name":"erzeugeDatei","parameter":[],"rueckgabe":"Exportdatei","sicht":"+"}],"name":"CsvFabrik"},{"art":"klasse","attribute":[],"id":"K6","methoden":[{"name":"erzeugeDatei","parameter":[],"rueckgabe":"Exportdatei","sicht":"+"}],"name":"PdfFabrik"},{"art":"klasse","attribute":[],"id":"K7","methoden":[{"name":"XmlDatei","parameter":[{"name":"dateiname","typ":"String"}],"sicht":"+"},{"name":"schreibe","parameter":[],"rueckgabe":"void","sicht":"+"}],"name":"XmlDatei"},{"art":"klasse","attribute":[],"id":"K8","methoden":[{"name":"erzeugeDatei","parameter":[],"rueckgabe":"Exportdatei","sicht":"+"}],"name":"XmlFabrik"}],"modus":"uml_klasse"},"operator_id":"operator.ergaenzen","pruefungszuordnung":{"berufe":["FIAE"],"teil":"AP2"},"punkte":6,"punkterahmen":{"max":6,"min":6},"quellen":["ap2-fiae-2025-sommer-ae1-a04-c"]},{"artefakt_id":"artefakt.diagramm.uml.klassendiagramm","aufgabe":[{"text":"Ein Versandsystem eines Logistikdienstleisters erstellt für Sendungen verschiedene Frachtpapiere. Zur Erzeugung der Papierobjekte ist das Entwurfsmuster Factory Method umgesetzt; Lieferschein und Zollerklärung sind fertig modelliert, nun soll ein internationaler Frachtbrief ergänzt werden.","typ":"absatz"},{"text":"Bestehendes UML-Klassenmodell (textuell):\n- Frachtpapier {abstract}: # sendungsnummer : String; # zielland : String; + drucke() : void {abstract}\n- Lieferschein: + Lieferschein(sendungsnummer : String); + drucke() : void\n- Zollerklaerung: + Zollerklaerung(sendungsnummer : String); + drucke() : void\n- FrachtpapierFabrik {abstract}: + erstelleFrachtpapier() : Frachtpapier {abstract}\n- LieferscheinFabrik: + erstelleFrachtpapier() : Frachtpapier\n- ZollerklaerungFabrik: + erstelleFrachtpapier() : Frachtpapier\nLieferschein und Zollerklaerung sind von Frachtpapier, LieferscheinFabrik und ZollerklaerungFabrik von FrachtpapierFabrik abgeleitet. Jede Fabrik erstellt ihr Papier über eine gerichtete «create»-Beziehung mit der Multiplizität 1 zu *; eine Fabrik kann somit beliebig viele Papierobjekte erstellen.","typ":"absatz"},{"text":"Ergänzen Sie das Modell für den Frachtbrief und modellieren Sie ausdrücklich: (1) die konkrete Fabrikklasse FrachtbriefFabrik, (2) deren Generalisierung zu FrachtpapierFabrik, (3) die überschreibende Fabrikmethode erstelleFrachtpapier() : Frachtpapier, (4) die konkrete Produktklasse Frachtbrief mit passendem Konstruktor, (5) deren Generalisierung zu Frachtpapier samt überschreibender Methode drucke() : void sowie (6) die gerichtete «create»-Beziehung von FrachtbriefFabrik zu Frachtbrief mit der Multiplizität 1 zu *.","typ":"absatz"}],"aufgabe_diagramm":{"beziehungen":[{"a":"Lieferschein","art":"vererbung","b":"Frachtpapier"},{"a":"Zollerklaerung","art":"vererbung","b":"Frachtpapier"},{"a":"LieferscheinFabrik","art":"vererbung","b":"FrachtpapierFabrik"},{"a":"ZollerklaerungFabrik","art":"vererbung","b":"FrachtpapierFabrik"},{"a":"LieferscheinFabrik","art":"abhaengigkeit","b":"Lieferschein","multA":"1","multB":"*","stereotyp":"create"},{"a":"ZollerklaerungFabrik","art":"abhaengigkeit","b":"Zollerklaerung","multA":"1","multB":"*","stereotyp":"create"}],"klassen":[{"art":"abstrakt","attribute":[{"name":"sendungsnummer","sicht":"#","typ":"String"},{"name":"zielland","sicht":"#","typ":"String"}],"id":"K1","methoden":[{"abstrakt":true,"name":"drucke","parameter":[],"rueckgabe":"void","sicht":"+"}],"name":"Frachtpapier"},{"art":"klasse","attribute":[],"id":"K2","methoden":[{"name":"Lieferschein","parameter":[{"name":"sendungsnummer","typ":"String"}],"sicht":"+"},{"name":"drucke","parameter":[],"rueckgabe":"void","sicht":"+"}],"name":"Lieferschein"},{"art":"klasse","attribute":[],"id":"K3","methoden":[{"name":"Zollerklaerung","parameter":[{"name":"sendungsnummer","typ":"String"}],"sicht":"+"},{"name":"drucke","parameter":[],"rueckgabe":"void","sicht":"+"}],"name":"Zollerklaerung"},{"art":"abstrakt","attribute":[],"id":"K4","methoden":[{"abstrakt":true,"name":"erstelleFrachtpapier","parameter":[],"rueckgabe":"Frachtpapier","sicht":"+"}],"name":"FrachtpapierFabrik"},{"art":"klasse","attribute":[],"id":"K5","methoden":[{"name":"erstelleFrachtpapier","parameter":[],"rueckgabe":"Frachtpapier","sicht":"+"}],"name":"LieferscheinFabrik"},{"art":"klasse","attribute":[],"id":"K6","methoden":[{"name":"erstelleFrachtpapier","parameter":[],"rueckgabe":"Frachtpapier","sicht":"+"}],"name":"ZollerklaerungFabrik"}],"modus":"uml_klasse"},"beispiel_id":"bsp-factory-method-entwurfsmuster-ergaenzen-diagramm-uml-klassendiagramm-03","freigabeart":"maschinell","loesung":[{"text":"Zu ergänzen sind zwei neue Klassen mit den Musterbeziehungen (je Kontrollpunkt 1 P, gesamt 6 P):\n1. Konkrete Fabrikklasse FrachtbriefFabrik. (1 P)\n2. Generalisierung: FrachtbriefFabrik ist von FrachtpapierFabrik abgeleitet. (1 P)\n3. In FrachtbriefFabrik die überschreibende Fabrikmethode + erstelleFrachtpapier() : Frachtpapier (Rückgabetyp bleibt der abstrakte Produkttyp). (1 P)\n4. Konkrete Produktklasse Frachtbrief mit Konstruktor + Frachtbrief(sendungsnummer : String). (1 P)\n5. Generalisierung Frachtbrief → Frachtpapier samt überschreibender Methode + drucke() : void. (1 P)\n6. Gerichtete «create»-Beziehung von FrachtbriefFabrik zu Frachtbrief mit Multiplizität 1 zu * (eine Fabrik kann mehrere Frachtbrief-Objekte erstellen). (1 P)\nBewertungshinweis: Fachlich gleichwertige Bezeichner und UML-Notationen sind anzuerkennen. Die abstrakten Basisklassen Frachtpapier und FrachtpapierFabrik samt ihren abstrakten Methoden bleiben unverändert.","typ":"absatz"}],"loesung_diagramm":{"beziehungen":[{"a":"Lieferschein","art":"vererbung","b":"Frachtpapier"},{"a":"Zollerklaerung","art":"vererbung","b":"Frachtpapier"},{"a":"LieferscheinFabrik","art":"vererbung","b":"FrachtpapierFabrik"},{"a":"ZollerklaerungFabrik","art":"vererbung","b":"FrachtpapierFabrik"},{"a":"LieferscheinFabrik","art":"abhaengigkeit","b":"Lieferschein","multA":"1","multB":"*","stereotyp":"create"},{"a":"ZollerklaerungFabrik","art":"abhaengigkeit","b":"Zollerklaerung","multA":"1","multB":"*","stereotyp":"create"},{"a":"Frachtbrief","art":"vererbung","b":"Frachtpapier"},{"a":"FrachtbriefFabrik","art":"vererbung","b":"FrachtpapierFabrik"},{"a":"FrachtbriefFabrik","art":"abhaengigkeit","b":"Frachtbrief","multA":"1","multB":"*","stereotyp":"create"}],"klassen":[{"art":"abstrakt","attribute":[{"name":"sendungsnummer","sicht":"#","typ":"String"},{"name":"zielland","sicht":"#","typ":"String"}],"id":"K1","methoden":[{"abstrakt":true,"name":"drucke","parameter":[],"rueckgabe":"void","sicht":"+"}],"name":"Frachtpapier"},{"art":"klasse","attribute":[],"id":"K2","methoden":[{"name":"Lieferschein","parameter":[{"name":"sendungsnummer","typ":"String"}],"sicht":"+"},{"name":"drucke","parameter":[],"rueckgabe":"void","sicht":"+"}],"name":"Lieferschein"},{"art":"klasse","attribute":[],"id":"K3","methoden":[{"name":"Zollerklaerung","parameter":[{"name":"sendungsnummer","typ":"String"}],"sicht":"+"},{"name":"drucke","parameter":[],"rueckgabe":"void","sicht":"+"}],"name":"Zollerklaerung"},{"art":"abstrakt","attribute":[],"id":"K4","methoden":[{"abstrakt":true,"name":"erstelleFrachtpapier","parameter":[],"rueckgabe":"Frachtpapier","sicht":"+"}],"name":"FrachtpapierFabrik"},{"art":"klasse","attribute":[],"id":"K5","methoden":[{"name":"erstelleFrachtpapier","parameter":[],"rueckgabe":"Frachtpapier","sicht":"+"}],"name":"LieferscheinFabrik"},{"art":"klasse","attribute":[],"id":"K6","methoden":[{"name":"erstelleFrachtpapier","parameter":[],"rueckgabe":"Frachtpapier","sicht":"+"}],"name":"ZollerklaerungFabrik"},{"art":"klasse","attribute":[],"id":"K7","methoden":[{"name":"Frachtbrief","parameter":[{"name":"sendungsnummer","typ":"String"}],"sicht":"+"},{"name":"drucke","parameter":[],"rueckgabe":"void","sicht":"+"}],"name":"Frachtbrief"},{"art":"klasse","attribute":[],"id":"K8","methoden":[{"name":"erstelleFrachtpapier","parameter":[],"rueckgabe":"Frachtpapier","sicht":"+"}],"name":"FrachtbriefFabrik"}],"modus":"uml_klasse"},"operator_id":"operator.ergaenzen","pruefungszuordnung":{"berufe":["FIAE"],"teil":"AP2"},"punkte":6,"punkterahmen":{"max":6,"min":6},"quellen":["ap2-fiae-2025-sommer-ae1-a04-c"]}],"konzept_id":"fachkonzept.factory-method-entwurfsmuster","schema_version":3}