Files
alda-2025-appointmentplanner/images/cd-abrev-v4_0.svg
github-classroom[bot] 6fcb7c47dd Initial commit
2025-09-19 06:50:22 +00:00

7 lines
33 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg color-interpolation="auto" color-rendering="auto" fill="black" fill-opacity="1" font-family="'Dialog'" font-size="12px" font-style="normal" font-weight="normal" height="890" image-rendering="auto" shape-rendering="auto" stroke="black" stroke-dasharray="none" stroke-dashoffset="0" stroke-linecap="square" stroke-linejoin="miter" stroke-miterlimit="10" stroke-opacity="1" stroke-width="1" text-rendering="auto" viewBox="50 0 1420 890" width="1420" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><!--Generated by the Batik Graphics2D SVG Generator--><defs id="genericDefs"/><g><defs id="defs1"><clipPath clipPathUnits="userSpaceOnUse" id="clipPath1"><path d="M0 0 L2147483647 0 L2147483647 2147483647 L0 2147483647 L0 0 Z"/></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="clipPath2"><path d="M0 0 L0 90 L310 90 L310 0 Z"/></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="clipPath3"><path d="M0 0 L0 150 L280 150 L280 0 Z"/></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="clipPath4"><path d="M0 0 L0 130 L230 130 L230 0 Z"/></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="clipPath5"><path d="M0 0 L0 70 L200 70 L200 0 Z"/></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="clipPath6"><path d="M0 0 L0 70 L140 70 L140 0 Z"/></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="clipPath7"><path d="M0 0 L0 850 L1010 850 L1010 0 Z"/></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="clipPath8"><path d="M0 0 L0 110 L310 110 L310 0 Z"/></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="clipPath9"><path d="M0 0 L0 230 L360 230 L360 0 Z"/></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="clipPath10"><path d="M0 0 L0 140 L200 140 L200 0 Z"/></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="clipPath11"><path d="M0 0 L0 80 L260 80 L260 0 Z"/></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="clipPath12"><path d="M0 0 L0 90 L300 90 L300 0 Z"/></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="clipPath13"><path d="M0 0 L0 130 L280 130 L280 0 Z"/></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="clipPath14"><path d="M0 0 L0 110 L150 110 L150 0 Z"/></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="clipPath15"><path d="M0 0 L0 150 L60 150 L60 0 Z"/></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="clipPath16"><path d="M0 0 L0 170 L70 170 L70 0 Z"/></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="clipPath17"><path d="M0 0 L0 30 L190 30 L190 0 Z"/></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="clipPath18"><path d="M0 0 L0 310 L310 310 L310 0 Z"/></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="clipPath19"><path d="M0 0 L0 140 L170 140 L170 0 Z"/></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="clipPath20"><path d="M0 0 L0 40 L200 40 L200 0 Z"/></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="clipPath21"><path d="M0 0 L0 310 L420 310 L420 0 Z"/></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="clipPath22"><path d="M0 0 L0 70 L30 70 L30 0 Z"/></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="clipPath23"><path d="M0 0 L0 160 L420 160 L420 0 Z"/></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="clipPath24"><path d="M0 0 L0 90 L80 90 L80 0 Z"/></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="clipPath25"><path d="M0 0 L0 410 L250 410 L250 0 Z"/></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="clipPath26"><path d="M0 0 L0 340 L240 340 L240 0 Z"/></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="clipPath27"><path d="M0 0 L0 280 L240 280 L240 0 Z"/></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="clipPath28"><path d="M0 0 L0 150 L190 150 L190 0 Z"/></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="clipPath29"><path d="M0 0 L0 40 L110 40 L110 0 Z"/></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="clipPath30"><path d="M0 0 L0 60 L30 60 L30 0 Z"/></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="clipPath31"><path d="M0 0 L0 30 L80 30 L80 0 Z"/></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="clipPath32"><path d="M0 0 L0 180 L280 180 L280 0 Z"/></clipPath></defs><g fill="rgb(255,255,0)" fill-opacity="0.2" stroke="rgb(255,255,0)" stroke-opacity="0.2" transform="translate(80,720)"><path clip-path="url(#clipPath2)" d="M0.5 0.5 L298.5 0.5 L309 12.5 L309 89 L0.5 89 L0.5 0.5" stroke="none"/></g><g transform="translate(80,720)"><path clip-path="url(#clipPath2)" d="M0.5 0.5 L298.5 0.5 L309 12.5 L309 89 L0.5 89 L0.5 0.5" fill="none"/><path clip-path="url(#clipPath2)" d="M298.5 0.5 L298.5 12.5 L309 12.5" fill="none"/><text clip-path="url(#clipPath2)" font-family="sans-serif" font-size="14px" stroke="none" x="5" xml:space="preserve" y="18.1094">Time timeline can be shared </text><text clip-path="url(#clipPath2)" font-family="sans-serif" font-size="14px" stroke="none" x="5" xml:space="preserve" y="34.2188">by local-day-plans in different time zones</text><text clip-path="url(#clipPath2)" font-family="sans-serif" font-size="14px" stroke="none" x="5" xml:space="preserve" y="50.3281">to provide the correct instances of time</text><text clip-path="url(#clipPath2)" font-family="sans-serif" font-size="14px" stroke="none" x="5" xml:space="preserve" y="66.4375">allocation.</text><text clip-path="url(#clipPath2)" font-family="sans-serif" font-size="14px" stroke="none" x="5" xml:space="preserve" y="82.5469">LocalDay provides the local view.</text></g><g fill="rgb(0,255,255)" fill-opacity="0.2" stroke="rgb(0,255,255)" stroke-opacity="0.2" transform="translate(790,600)"><rect clip-path="url(#clipPath3)" height="148.5" stroke="none" width="278.5" x="0.5" y="0.5"/></g><g transform="translate(790,600)"><rect clip-path="url(#clipPath3)" fill="none" height="148.5" width="278.5" x="0.5" y="0.5"/><text clip-path="url(#clipPath3)" font-family="sans-serif" font-size="14px" stroke="none" x="100" xml:space="preserve" y="18.1094">{concrete}</text><text clip-path="url(#clipPath3)" font-family="sans-serif" font-size="14px" stroke="none" x="107" xml:space="preserve" y="34.2188">LocalDay</text><path clip-path="url(#clipPath3)" d="M1 40.2188 L279 40.2188" fill="none"/><text clip-path="url(#clipPath3)" font-family="sans-serif" font-size="14px" stroke="none" x="5" xml:space="preserve" y="55.3281">- zone: ZoneId</text><text clip-path="url(#clipPath3)" font-family="sans-serif" font-size="14px" stroke="none" x="5" xml:space="preserve" y="71.4375">- date: LocalDate</text><path clip-path="url(#clipPath3)" d="M1 77.4375 L279 77.4375" fill="none"/><text clip-path="url(#clipPath3)" font-family="sans-serif" font-size="14px" stroke="none" x="5" xml:space="preserve" y="92.5469">+ ofLocalTime(LocalTime): Instant</text><text clip-path="url(#clipPath3)" font-family="sans-serif" font-size="14px" stroke="none" x="5" xml:space="preserve" y="108.6562">+ timeOfInstant(Instant): LocalTime</text><text clip-path="url(#clipPath3)" font-family="sans-serif" font-size="14px" stroke="none" x="5" xml:space="preserve" y="124.7656">...</text></g><g fill="rgb(255,255,255)" fill-opacity="0" stroke="rgb(255,255,255)" stroke-opacity="0" transform="translate(400,720)"><rect clip-path="url(#clipPath4)" height="128.5" stroke="none" width="228.5" x="0.5" y="0.5"/></g><g transform="translate(400,720)"><rect clip-path="url(#clipPath4)" fill="none" height="128.5" width="228.5" x="0.5" y="0.5"/><text clip-path="url(#clipPath4)" font-family="sans-serif" font-size="14px" font-style="italic" stroke="none" x="74" xml:space="preserve" y="18.1094">{Interface}</text><text clip-path="url(#clipPath4)" font-family="sans-serif" font-size="14px" font-style="italic" stroke="none" x="83" xml:space="preserve" y="34.2188">TimeLine</text><path clip-path="url(#clipPath4)" d="M1 40.2188 L229 40.2188" fill="none"/><text clip-path="url(#clipPath4)" font-family="sans-serif" font-size="14px" font-style="italic" stroke="none" x="5" xml:space="preserve" y="55.3281">+ nrOfAppointments(): int</text><text clip-path="url(#clipPath4)" font-family="sans-serif" font-size="14px" font-style="italic" stroke="none" x="5" xml:space="preserve" y="71.4375">+ nrOfGaps(): int</text><text clip-path="url(#clipPath4)" font-family="sans-serif" font-size="14px" font-style="italic" stroke="none" x="5" xml:space="preserve" y="87.5469">+ start(): Instant</text><text clip-path="url(#clipPath4)" font-family="sans-serif" font-size="14px" font-style="italic" stroke="none" x="5" xml:space="preserve" y="103.6562">+ end(): Instant</text><text clip-path="url(#clipPath4)" font-family="sans-serif" font-size="14px" stroke="none" x="5" xml:space="preserve" y="119.7656">...</text></g><g fill="blue" stroke="blue" transform="translate(1250,440)"><path clip-path="url(#clipPath5)" d="M0.5 0.5 L125.2627 0.5 L125.2627 21.6094 L199 21.6094 L199 69 L0.5 69 L0.5 0.5" stroke="none"/><path clip-path="url(#clipPath5)" d="M0.5 0.5 L125.2627 0.5 L125.2627 21.6094 L199 21.6094 L199 69 L0.5 69 L0.5 0.5" fill="none" stroke="white"/><path clip-path="url(#clipPath5)" d="M0.5 21.6094 L125.2627 21.6094" fill="none" stroke="white"/></g><g fill="white" font-family="sans-serif" font-size="14px" stroke="white" transform="translate(1250,440)"><text clip-path="url(#clipPath5)" stroke="none" x="5" xml:space="preserve" y="16.1094">referenceproject</text><text clip-path="url(#clipPath5)" stroke="none" x="40" xml:space="preserve" y="50.6094">Implementations</text></g><g fill="red" stroke="red" transform="translate(1250,330)"><path clip-path="url(#clipPath6)" d="M0.5 0.5 L97.2412 0.5 L97.2412 21.6094 L139 21.6094 L139 69 L0.5 69 L0.5 0.5" stroke="none"/><path clip-path="url(#clipPath6)" d="M0.5 0.5 L97.2412 0.5 L97.2412 21.6094 L139 21.6094 L139 69 L0.5 69 L0.5 0.5" fill="none" stroke="black"/><path clip-path="url(#clipPath6)" d="M0.5 21.6094 L97.2412 21.6094" fill="none" stroke="black"/></g><g font-family="sans-serif" font-size="14px" transform="translate(1250,330)"><text clip-path="url(#clipPath6)" stroke="none" x="5" xml:space="preserve" y="16.1094">teachertests</text><text clip-path="url(#clipPath6)" stroke="none" x="51" xml:space="preserve" y="50.6094">Tests</text></g><g fill="lime" stroke="lime" transform="translate(1250,200)"><path clip-path="url(#clipPath6)" d="M0.5 0.5 L111.8174 0.5 L111.8174 21.6094 L139 21.6094 L139 69 L0.5 69 L0.5 0.5" stroke="none"/><path clip-path="url(#clipPath6)" d="M0.5 0.5 L111.8174 0.5 L111.8174 21.6094 L139 21.6094 L139 69 L0.5 69 L0.5 0.5" fill="none" stroke="black"/><path clip-path="url(#clipPath6)" d="M0.5 21.6094 L111.8174 21.6094" fill="none" stroke="black"/></g><g font-family="sans-serif" font-size="14px" transform="translate(1250,200)"><text clip-path="url(#clipPath6)" stroke="none" x="5" xml:space="preserve" y="16.1094">studentproject</text><text clip-path="url(#clipPath6)" stroke="none" x="10" xml:space="preserve" y="50.6094">Implementations</text></g><g fill="rgb(120,120,120)" fill-opacity="0.098" stroke="rgb(120,120,120)" stroke-opacity="0.098" transform="translate(70,20)"><path clip-path="url(#clipPath7)" d="M0.5 0.5 L404.5 0.5 L404.5 37.7188 L1009 37.7188 L1009 849 L0.5 849 L0.5 0.5" stroke="none"/></g><g transform="translate(70,20)"><path clip-path="url(#clipPath7)" d="M0.5 0.5 L404.5 0.5 L404.5 37.7188 L1009 37.7188 L1009 849 L0.5 849 L0.5 0.5" fill="none"/><path clip-path="url(#clipPath7)" d="M0.5 37.7188 L404.5 37.7188" fill="none"/><text clip-path="url(#clipPath7)" font-family="sans-serif" font-size="14px" stroke="none" x="5" xml:space="preserve" y="16.1094">appointmentplanner.api</text></g><g fill="rgb(255,255,255)" fill-opacity="0" stroke="rgb(255,255,255)" stroke-opacity="0" transform="translate(350,210)"><rect clip-path="url(#clipPath8)" height="108.5" stroke="none" width="308.5" x="0.5" y="0.5"/></g><g transform="translate(350,210)"><rect clip-path="url(#clipPath8)" fill="none" height="108.5" width="308.5" x="0.5" y="0.5"/><text clip-path="url(#clipPath8)" font-family="sans-serif" font-size="14px" stroke="none" x="114" xml:space="preserve" y="18.1094">{Interface}</text><text clip-path="url(#clipPath8)" font-family="sans-serif" font-size="14px" font-style="italic" stroke="none" x="80" xml:space="preserve" y="34.2188">AppointmentRequest</text><path clip-path="url(#clipPath8)" d="M1 40.2188 L309 40.2188" fill="none"/><text clip-path="url(#clipPath8)" font-family="sans-serif" font-size="14px" font-style="italic" stroke="none" x="5" xml:space="preserve" y="55.3281">+ startTime(): LocalTime</text><text clip-path="url(#clipPath8)" font-family="sans-serif" font-size="14px" font-style="italic" stroke="none" x="5" xml:space="preserve" y="71.4375">+ timePreference(): TimePreference</text><text clip-path="url(#clipPath8)" font-family="sans-serif" font-size="14px" font-style="italic" stroke="none" x="5" xml:space="preserve" y="87.5469">+ appointmentData(): ApointmentData</text><text clip-path="url(#clipPath8)" font-family="sans-serif" font-size="14px" font-style="italic" stroke="none" x="5" xml:space="preserve" y="103.6562">+ duration(): Duration</text></g><g fill="rgb(255,255,255)" fill-opacity="0" stroke="rgb(255,255,255)" stroke-opacity="0" transform="translate(1090,530)"><path clip-path="url(#clipPath9)" d="M0.5 0.5 L348.5 0.5 L359 12.5 L359 229 L0.5 229 L0.5 0.5" stroke="none"/></g><g transform="translate(1090,530)"><path clip-path="url(#clipPath9)" d="M0.5 0.5 L348.5 0.5 L359 12.5 L359 229 L0.5 229 L0.5 0.5" fill="none"/><path clip-path="url(#clipPath9)" d="M348.5 0.5 L348.5 12.5 L359 12.5" fill="none"/><text clip-path="url(#clipPath9)" font-family="sans-serif" font-size="14px" stroke="none" x="5" xml:space="preserve" y="18.1094">Abreviated class diagram</text><text clip-path="url(#clipPath9)" font-family="sans-serif" font-size="14px" stroke="none" x="5" xml:space="preserve" y="34.2188">The student project implements all classes</text><text clip-path="url(#clipPath9)" font-family="sans-serif" font-size="14px" stroke="none" x="5" xml:space="preserve" y="50.3281">including the abstract factory.</text><text clip-path="url(#clipPath9)" font-family="sans-serif" font-size="14px" stroke="none" x="5" xml:space="preserve" y="82.5469">The teacher project uses the api and the </text><text clip-path="url(#clipPath9)" font-family="sans-serif" font-size="14px" stroke="none" x="5" xml:space="preserve" y="98.6562">factory to obtain instances of implentations </text><text clip-path="url(#clipPath9)" font-family="sans-serif" font-size="14px" stroke="none" x="5" xml:space="preserve" y="114.7656">of the interfaces define in the API.</text><text clip-path="url(#clipPath9)" font-family="sans-serif" font-size="14px" stroke="none" x="5" xml:space="preserve" y="146.9844">As far as the teacher tests are concerned,</text><text clip-path="url(#clipPath9)" font-family="sans-serif" font-size="14px" stroke="none" x="5" xml:space="preserve" y="163.0938">the Student Project is an opaque black box.</text><text clip-path="url(#clipPath9)" font-family="sans-serif" font-size="14px" stroke="none" x="5" xml:space="preserve" y="195.3125">The reference project is private to the teachers </text><text clip-path="url(#clipPath9)" font-family="sans-serif" font-size="14px" stroke="none" x="5" xml:space="preserve" y="211.4219">and is used to verify the teacher tests.</text></g><g fill="rgb(255,255,255)" fill-opacity="0" stroke="rgb(255,255,255)" stroke-opacity="0" transform="translate(100,210)"><rect clip-path="url(#clipPath10)" height="138.5" stroke="none" width="198.5" x="0.5" y="0.5"/></g><g transform="translate(100,210)"><rect clip-path="url(#clipPath10)" fill="none" height="138.5" width="198.5" x="0.5" y="0.5"/><text clip-path="url(#clipPath10)" font-family="sans-serif" font-size="14px" stroke="none" x="71" xml:space="preserve" y="18.1094">{enum}</text><text clip-path="url(#clipPath10)" font-family="sans-serif" font-size="14px" stroke="none" x="44" xml:space="preserve" y="34.2188">TimePreference</text><path clip-path="url(#clipPath10)" d="M1 40.2188 L199 40.2188" fill="none"/><text clip-path="url(#clipPath10)" font-family="sans-serif" font-size="14px" stroke="none" text-decoration="underline" x="5" xml:space="preserve" y="55.3281">+ EARLIEST</text><text clip-path="url(#clipPath10)" font-family="sans-serif" font-size="14px" stroke="none" text-decoration="underline" x="5" xml:space="preserve" y="71.4375">+ LATEST</text><text clip-path="url(#clipPath10)" font-family="sans-serif" font-size="14px" stroke="none" text-decoration="underline" x="5" xml:space="preserve" y="87.5469">+ UNSPECIFIED</text><text clip-path="url(#clipPath10)" font-family="sans-serif" font-size="14px" stroke="none" text-decoration="underline" x="5" xml:space="preserve" y="103.6562">+ LATEST_BEFORE</text><text clip-path="url(#clipPath10)" font-family="sans-serif" font-size="14px" stroke="none" text-decoration="underline" x="5" xml:space="preserve" y="119.7656">+ EARLIEST_AFTER</text><text clip-path="url(#clipPath10)" font-family="sans-serif" font-size="14px" stroke="none" x="5" xml:space="preserve" y="135.875"> </text></g><g fill="rgb(255,255,255)" fill-opacity="0" stroke="rgb(255,255,255)" stroke-opacity="0" transform="translate(350,330)"><rect clip-path="url(#clipPath11)" height="78.5" stroke="none" width="258.5" x="0.5" y="0.5"/></g><g transform="translate(350,330)"><rect clip-path="url(#clipPath11)" fill="none" height="78.5" width="258.5" x="0.5" y="0.5"/><text clip-path="url(#clipPath11)" font-family="sans-serif" font-size="14px" stroke="none" x="89" xml:space="preserve" y="18.1094">{interface}</text><text clip-path="url(#clipPath11)" font-family="sans-serif" font-size="14px" font-style="italic" stroke="none" x="100" xml:space="preserve" y="34.2188">Timeslot</text><path clip-path="url(#clipPath11)" d="M1 40.2188 L259 40.2188" fill="none"/><text clip-path="url(#clipPath11)" font-family="sans-serif" font-size="14px" font-style="italic" stroke="none" x="5" xml:space="preserve" y="55.3281">+ start(): Instant</text><text clip-path="url(#clipPath11)" font-family="sans-serif" font-size="14px" font-style="italic" stroke="none" x="5" xml:space="preserve" y="71.4375">+ end(): Instant</text></g><g fill="rgb(255,255,255)" fill-opacity="0" stroke="rgb(255,255,255)" stroke-opacity="0" transform="translate(440,80)"><rect clip-path="url(#clipPath12)" height="88.5" stroke="none" width="298.5" x="0.5" y="0.5"/></g><g transform="translate(440,80)"><rect clip-path="url(#clipPath12)" fill="none" height="88.5" width="298.5" x="0.5" y="0.5"/><text clip-path="url(#clipPath12)" font-family="sans-serif" font-size="14px" stroke="none" x="109" xml:space="preserve" y="18.1094">{Interface}</text><text clip-path="url(#clipPath12)" font-family="sans-serif" font-size="14px" font-style="italic" stroke="none" x="87" xml:space="preserve" y="34.2188">AppointmentData</text><path clip-path="url(#clipPath12)" d="M1 40.2188 L299 40.2188" fill="none"/><text clip-path="url(#clipPath12)" font-family="sans-serif" font-size="14px" font-style="italic" stroke="none" x="5" xml:space="preserve" y="55.3281">+ description(): String</text><text clip-path="url(#clipPath12)" font-family="sans-serif" font-size="14px" font-style="italic" stroke="none" x="5" xml:space="preserve" y="71.4375">+ duration(): Duration</text></g><g fill="rgb(255,255,255)" fill-opacity="0" stroke="rgb(255,255,255)" stroke-opacity="0" transform="translate(350,550)"><rect clip-path="url(#clipPath13)" height="128.5" stroke="none" width="278.5" x="0.5" y="0.5"/></g><g transform="translate(350,550)"><rect clip-path="url(#clipPath13)" fill="none" height="128.5" width="278.5" x="0.5" y="0.5"/><text clip-path="url(#clipPath13)" font-family="sans-serif" font-size="14px" stroke="none" x="99" xml:space="preserve" y="18.1094">{Interface}</text><text clip-path="url(#clipPath13)" font-family="sans-serif" font-size="14px" font-style="italic" stroke="none" x="93" xml:space="preserve" y="34.2188">LocalDayPlan</text><path clip-path="url(#clipPath13)" d="M1 40.2188 L279 40.2188" fill="none"/><text clip-path="url(#clipPath13)" font-family="sans-serif" font-size="14px" font-style="italic" stroke="none" x="5" xml:space="preserve" y="55.3281">+ day(): LocalDay</text><text clip-path="url(#clipPath13)" font-family="sans-serif" font-size="14px" font-style="italic" stroke="none" x="5" xml:space="preserve" y="71.4375">+ startOfDay(): Instant</text><text clip-path="url(#clipPath13)" font-family="sans-serif" font-size="14px" font-style="italic" stroke="none" x="5" xml:space="preserve" y="87.5469">+ endOfDay(): Instant</text><text clip-path="url(#clipPath13)" font-family="sans-serif" font-size="14px" stroke="none" x="5" xml:space="preserve" y="103.6562">+ timeline(): Timeline/</text><text clip-path="url(#clipPath13)" font-family="sans-serif" font-size="14px" stroke="none" x="5" xml:space="preserve" y="119.7656">...</text></g><g fill="rgb(255,255,255)" fill-opacity="0" stroke="rgb(255,255,255)" stroke-opacity="0" transform="translate(350,440)"><rect clip-path="url(#clipPath11)" height="78.5" stroke="none" width="258.5" x="0.5" y="0.5"/></g><g transform="translate(350,440)"><rect clip-path="url(#clipPath11)" fill="none" height="78.5" width="258.5" x="0.5" y="0.5"/><text clip-path="url(#clipPath11)" font-family="sans-serif" font-size="14px" stroke="none" x="89" xml:space="preserve" y="18.1094">{interface}</text><text clip-path="url(#clipPath11)" font-family="sans-serif" font-size="14px" font-style="italic" stroke="none" x="84" xml:space="preserve" y="34.2188">Appointment</text><path clip-path="url(#clipPath11)" d="M1 40.2188 L259 40.2188" fill="none"/><text clip-path="url(#clipPath11)" font-family="sans-serif" font-size="14px" font-style="italic" stroke="none" x="5" xml:space="preserve" y="55.3281">request(): AppointmentRequest</text></g><g fill="rgb(255,255,255)" fill-opacity="0" stroke="rgb(255,255,255)" stroke-opacity="0" transform="translate(820,110)"><rect clip-path="url(#clipPath14)" height="108.5" stroke="none" width="148.5" x="0.5" y="0.5"/></g><g transform="translate(820,110)"><rect clip-path="url(#clipPath14)" fill="none" height="108.5" width="148.5" x="0.5" y="0.5"/><text clip-path="url(#clipPath14)" font-family="sans-serif" font-size="14px" stroke="none" x="41" xml:space="preserve" y="18.1094">{service}</text><text clip-path="url(#clipPath14)" font-family="sans-serif" font-size="14px" font-style="italic" stroke="none" x="10" xml:space="preserve" y="34.2188">AbstractAPFactory</text></g><g stroke-dasharray="8,5" stroke-linecap="butt" stroke-miterlimit="5" transform="translate(650,160)"><path clip-path="url(#clipPath15)" d="M40.5 10.5 L40.5 130.5" fill="none"/><path clip-path="url(#clipPath15)" d="M40.5 130.5 L10.5 130.5" fill="none"/><path clip-path="url(#clipPath15)" d="M34 21.7583 L40.5 10.5 L47 21.7583" fill="none" stroke-dasharray="none" stroke-linecap="square" stroke-miterlimit="10"/></g><g stroke-dasharray="8,5" stroke-linecap="butt" stroke-miterlimit="5" transform="translate(600,310)"><path clip-path="url(#clipPath16)" d="M50.5 10.5 L50.5 150.5" fill="none"/><path clip-path="url(#clipPath16)" d="M50.5 150.5 L10.5 150.5" fill="none"/><path clip-path="url(#clipPath16)" d="M44 21.7583 L50.5 10.5 L57 21.7583" fill="none" stroke-dasharray="none" stroke-linecap="square" stroke-miterlimit="10"/></g><g transform="translate(620,610)"><path clip-path="url(#clipPath17)" d="M170.5 10.5 L10.5 10.5" fill="none"/><path clip-path="url(#clipPath17)" d="M159.2417 4 L170.5 10.5 L159.2417 17" fill="none"/></g><g stroke-dasharray="8,5" stroke-linecap="butt" stroke-miterlimit="5" transform="translate(960,170)"><path clip-path="url(#clipPath18)" d="M10.5 10.5 L90.5 10.5" fill="none"/><path clip-path="url(#clipPath18)" d="M90.5 10.5 L90.5 290.5" fill="none"/><path clip-path="url(#clipPath18)" d="M90.5 290.5 L290.5 290.5" fill="none"/><path clip-path="url(#clipPath18)" d="M21.7583 17 L10.5 10.5 L21.7583 4" fill="none" stroke-dasharray="none" stroke-linecap="square" stroke-miterlimit="10"/></g><g font-family="sans-serif" font-size="14px" transform="translate(960,170)"><text clip-path="url(#clipPath18)" stroke="none" x="29" xml:space="preserve" y="24.1094">provides</text></g><g transform="translate(620,630)"><path clip-path="url(#clipPath19)" d="M10.5 110.5 L150.5 110.5" fill="none"/><path clip-path="url(#clipPath19)" d="M150.5 110.5 L150.5 10.5" fill="none"/><path clip-path="url(#clipPath19)" d="M150.5 10.5 L10.5 10.5" fill="none"/><path clip-path="url(#clipPath19)" d="M21.7583 117 L10.5 110.5 L21.7583 104" fill="none"/><text clip-path="url(#clipPath19)" font-family="sans-serif" font-size="14px" stroke="none" x="29" xml:space="preserve" y="124.1094">allocator</text></g><g stroke-dasharray="8,5" stroke-linecap="butt" stroke-miterlimit="5" transform="translate(960,140)"><path clip-path="url(#clipPath8)" d="M10.5 10.5 L110.5 10.5" fill="none"/><path clip-path="url(#clipPath8)" d="M110.5 10.5 L290.5 90.5" fill="none"/><path clip-path="url(#clipPath8)" d="M21.7583 17 L10.5 10.5 L21.7583 4" fill="none" stroke-dasharray="none" stroke-linecap="square" stroke-miterlimit="10"/></g><g font-family="sans-serif" font-size="14px" transform="translate(960,140)"><text clip-path="url(#clipPath8)" stroke="none" x="29" xml:space="preserve" y="24.1094">provides</text></g><g stroke-dasharray="8,5" stroke-linecap="butt" stroke-miterlimit="5" transform="translate(1070,460)"><path clip-path="url(#clipPath20)" d="M10.5 20.5 L180.5 20.5" fill="none"/><path clip-path="url(#clipPath20)" d="M21.7583 27 L10.5 20.5 L21.7583 14 L21.7583 27" fill="white" stroke="none"/><path clip-path="url(#clipPath20)" d="M21.7583 27 L10.5 20.5 L21.7583 14 L21.7583 27" fill="none" stroke-dasharray="none" stroke-linecap="square" stroke-miterlimit="10"/></g><g font-family="sans-serif" font-size="14px" transform="translate(1070,460)"><text clip-path="url(#clipPath20)" stroke="none" x="36.2544" xml:space="preserve" y="16">◄ implements all</text></g><g stroke-dasharray="8,5" stroke-linecap="butt" stroke-miterlimit="5" transform="translate(850,210)"><path clip-path="url(#clipPath21)" d="M10.5 10.5 L10.5 290.5" fill="none"/><path clip-path="url(#clipPath21)" d="M10.5 290.5 L400.5 290.5" fill="none"/><path clip-path="url(#clipPath21)" d="M4 21.7583 L10.5 10.5 L17 21.7583" fill="none" stroke-dasharray="none" stroke-linecap="square" stroke-miterlimit="10"/></g><g stroke-dasharray="8,5" stroke-linecap="butt" stroke-miterlimit="5" transform="translate(1290,390)"><path clip-path="url(#clipPath22)" d="M10.5 50.5 L10.5 10.5" fill="none"/><path clip-path="url(#clipPath22)" d="M17 39.2417 L10.5 50.5 L4 39.2417" fill="none" stroke-dasharray="none" stroke-linecap="square" stroke-miterlimit="10"/></g><g stroke-dasharray="8,5" stroke-linecap="butt" stroke-miterlimit="5" transform="translate(850,210)"><path clip-path="url(#clipPath23)" d="M10.5 10.5 L10.5 130.5" fill="none"/><path clip-path="url(#clipPath23)" d="M10.5 130.5 L400.5 130.5" fill="none"/><path clip-path="url(#clipPath23)" d="M4 21.7583 L10.5 10.5 L17 21.7583" fill="none" stroke-dasharray="none" stroke-linecap="square" stroke-miterlimit="10"/></g><g font-family="sans-serif" font-size="14px" transform="translate(850,210)"><text clip-path="url(#clipPath23)" stroke="none" x="308.3066" xml:space="preserve" y="144.1094"> &lt; requires</text></g><g stroke-dasharray="8,5" stroke-linecap="butt" stroke-miterlimit="5" transform="translate(1290,260)"><path clip-path="url(#clipPath24)" d="M10.5 10.5 L10.5 70.5" fill="none"/><path clip-path="url(#clipPath24)" d="M4 21.7583 L10.5 10.5 L17 21.7583" fill="none" stroke-dasharray="none" stroke-linecap="square" stroke-miterlimit="10"/></g><g font-family="sans-serif" font-size="14px" transform="translate(1290,260)"><text clip-path="url(#clipPath24)" stroke="none" x="14" xml:space="preserve" y="54">requires</text></g><g stroke-dasharray="8,5" stroke-linecap="butt" stroke-miterlimit="5" transform="translate(1070,360)"><path clip-path="url(#clipPath20)" d="M10.5 20.5 L180.5 20.5" fill="none"/><path clip-path="url(#clipPath20)" d="M21.7583 27 L10.5 20.5 L21.7583 14" fill="none" stroke-dasharray="none" stroke-linecap="square" stroke-miterlimit="10"/></g><g font-family="sans-serif" font-size="14px" transform="translate(1070,360)"><text clip-path="url(#clipPath20)" stroke="none" x="69.8081" xml:space="preserve" y="16">uses all</text></g><g stroke-dasharray="8,5" stroke-linecap="butt" stroke-miterlimit="5" transform="translate(1070,230)"><path clip-path="url(#clipPath20)" d="M10.5 20.5 L180.5 20.5" fill="none"/><path clip-path="url(#clipPath20)" d="M21.7583 27 L10.5 20.5 L21.7583 14 L21.7583 27" fill="white" stroke="none"/><path clip-path="url(#clipPath20)" d="M21.7583 27 L10.5 20.5 L21.7583 14 L21.7583 27" fill="none" stroke-dasharray="none" stroke-linecap="square" stroke-miterlimit="10"/></g><g font-family="sans-serif" font-size="14px" transform="translate(1070,230)"><text clip-path="url(#clipPath20)" stroke="none" x="36.2544" xml:space="preserve" y="16">◄ implements all</text></g><g stroke-dasharray="8,5" stroke-linecap="butt" stroke-miterlimit="5" transform="translate(620,200)"><path clip-path="url(#clipPath25)" d="M10.5 390.5 L140.5 390.5" fill="none"/><path clip-path="url(#clipPath25)" d="M140.5 390.5 L190.5 10.5" fill="none"/><path clip-path="url(#clipPath25)" d="M190.5 10.5 L200.5 10.5" fill="none"/><path clip-path="url(#clipPath25)" d="M21.7583 397 L10.5 390.5 L21.7583 384" fill="none" stroke-dasharray="none" stroke-linecap="square" stroke-miterlimit="10"/></g><g font-family="sans-serif" font-size="14px" transform="translate(620,200)"><text clip-path="url(#clipPath25)" stroke="none" x="169" xml:space="preserve" y="208.0547">◄ creates </text></g><g stroke-dasharray="8,5" stroke-linecap="butt" stroke-miterlimit="5" transform="translate(600,160)"><path clip-path="url(#clipPath26)" d="M10.5 320.5 L100.5 320.5" fill="none"/><path clip-path="url(#clipPath26)" d="M100.5 320.5 L200.5 10.5" fill="none"/><path clip-path="url(#clipPath26)" d="M200.5 10.5 L220.5 10.5" fill="none"/><path clip-path="url(#clipPath26)" d="M21.7583 327 L10.5 320.5 L21.7583 314" fill="none" stroke-dasharray="none" stroke-linecap="square" stroke-miterlimit="10"/></g><g font-family="sans-serif" font-size="14px" transform="translate(600,160)"><text clip-path="url(#clipPath26)" stroke="none" x="154" xml:space="preserve" y="173.0547">◄ creates </text></g><g stroke-dasharray="8,5" stroke-linecap="butt" stroke-miterlimit="5" transform="translate(600,140)"><path clip-path="url(#clipPath27)" d="M10.5 260.5 L100.5 260.5" fill="none"/><path clip-path="url(#clipPath27)" d="M100.5 260.5 L180.5 10.5" fill="none"/><path clip-path="url(#clipPath27)" d="M180.5 10.5 L220.5 10.5" fill="none"/><path clip-path="url(#clipPath27)" d="M21.7583 267 L10.5 260.5 L21.7583 254" fill="none" stroke-dasharray="none" stroke-linecap="square" stroke-miterlimit="10"/></g><g font-family="sans-serif" font-size="14px" transform="translate(600,140)"><text clip-path="url(#clipPath27)" stroke="none" x="144" xml:space="preserve" y="143.0547">◄ creates </text></g><g stroke-dasharray="8,5" stroke-linecap="butt" stroke-miterlimit="5" transform="translate(650,120)"><path clip-path="url(#clipPath28)" d="M10.5 130.5 L70.5 130.5" fill="none"/><path clip-path="url(#clipPath28)" d="M70.5 130.5 L120.5 10.5" fill="none"/><path clip-path="url(#clipPath28)" d="M120.5 10.5 L170.5 10.5" fill="none"/><path clip-path="url(#clipPath28)" d="M21.7583 137 L10.5 130.5 L21.7583 124" fill="none" stroke-dasharray="none" stroke-linecap="square" stroke-miterlimit="10"/></g><g font-family="sans-serif" font-size="14px" transform="translate(650,120)"><text clip-path="url(#clipPath28)" stroke="none" x="99" xml:space="preserve" y="78.0547">◄ creates </text></g><g stroke-dasharray="8,5" stroke-linecap="butt" stroke-miterlimit="5" transform="translate(730,100)"><path clip-path="url(#clipPath29)" d="M10.5 20.5 L90.5 20.5" fill="none"/><path clip-path="url(#clipPath29)" d="M21.7583 27 L10.5 20.5 L21.7583 14" fill="none" stroke-dasharray="none" stroke-linecap="square" stroke-miterlimit="10"/></g><g font-family="sans-serif" font-size="14px" transform="translate(730,100)"><text clip-path="url(#clipPath29)" stroke="none" x="16.7363" xml:space="preserve" y="16">◄ creates </text></g><g transform="translate(480,400)"><path clip-path="url(#clipPath30)" d="M10.5 10.5 L10.5 40.5" fill="none"/><path clip-path="url(#clipPath30)" d="M4 21.7583 L10.5 10.5 L17 21.7583 L4 21.7583" fill="white" stroke="none"/><path clip-path="url(#clipPath30)" d="M4 21.7583 L10.5 10.5 L17 21.7583 L4 21.7583" fill="none"/></g><g stroke-dasharray="8,5" stroke-linecap="butt" stroke-miterlimit="5" transform="translate(290,260)"><path clip-path="url(#clipPath31)" d="M10.5 10.5 L60.5 10.5" fill="none"/><path clip-path="url(#clipPath31)" d="M21.7583 17 L10.5 10.5 L21.7583 4" fill="none" stroke-dasharray="none" stroke-linecap="square" stroke-miterlimit="10"/></g><g transform="translate(90,450)"><path clip-path="url(#clipPath32)" d="M260.5 10.5 L10.5 10.5" fill="none"/><path clip-path="url(#clipPath32)" d="M10.5 10.5 L10.5 160.5" fill="none"/><path clip-path="url(#clipPath32)" d="M10.5 160.5 L260.5 160.5" fill="none"/><path clip-path="url(#clipPath32)" d="M249.2417 4 L260.5 10.5 L249.2417 17" fill="none"/><text clip-path="url(#clipPath32)" font-family="sans-serif" font-size="14px" stroke="none" x="174.0234" xml:space="preserve" y="24.1094">creates &gt;</text></g></g><style>@media (prefers-color-scheme: dark) {
svg {
filter: invert(100%)
}
}</style></svg>