<?xml version="1.0" encoding="UTF-8"?>
<mxfile host="drawio" pages="4"><diagram name="01-用例图 Use Case Diagram" id="pg0"><mxGraphModel dx="1200" dy="800" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1320" pageHeight="930" math="0" shadow="0"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="c3_0" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fafafa;" vertex="1" parent="1"><mxGeometry x="330" y="70" width="700" height="560" as="geometry"/></mxCell><mxCell id="c4_0" value="ExampleShop System" style="text;html=1;align=center;verticalAlign=middle;fontSize=15;fontStyle=1;" vertex="1" parent="1"><mxGeometry x="500" y="80" width="360" height="20" as="geometry"/></mxCell><mxCell id="c5_0" value="Customer" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" vertex="1" parent="1"><mxGeometry x="150" y="110" width="70" height="110" as="geometry"/></mxCell><mxCell id="c6_0" value="Manager" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" vertex="1" parent="1"><mxGeometry x="150" y="460" width="70" height="110" as="geometry"/></mxCell><mxCell id="c7_0" value="Staff" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" vertex="1" parent="1"><mxGeometry x="150" y="690" width="70" height="110" as="geometry"/></mxCell><mxCell id="c8_0" value="Payment Gateway&lt;br&gt;«system»" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" vertex="1" parent="1"><mxGeometry x="1120" y="270" width="70" height="110" as="geometry"/></mxCell><mxCell id="c9_0" value="Browse Products" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="415" y="108" width="210" height="64" as="geometry"/></mxCell><mxCell id="c10_0" value="Place Order" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="415" y="268" width="210" height="64" as="geometry"/></mxCell><mxCell id="c11_0" value="Cancel Order" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="775" y="108" width="210" height="64" as="geometry"/></mxCell><mxCell id="c12_0" value="Make Payment" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="775" y="268" width="210" height="64" as="geometry"/></mxCell><mxCell id="c13_0" value="Manage Catalogue" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="415" y="438" width="210" height="64" as="geometry"/></mxCell><mxCell id="c14_0" value="View Sales Report" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="775" y="438" width="210" height="64" as="geometry"/></mxCell><mxCell id="c15_0" value="Elements shown:&lt;br&gt;1 Actor — Customer / Manager / Staff&lt;br&gt;2 System boundary — ExampleShop System&lt;br&gt;3 Use case — ellipse with a verb phrase&lt;br&gt;4 Association — actor to use case, no arrowhead&lt;br&gt;5 «include» — Place Order includes Make Payment (always executed)&lt;br&gt;6 «extend» — Cancel Order extends Place Order (conditional)&lt;br&gt;7 Generalization — Manager ▷ Staff (hollow triangle)&lt;br&gt;8 External system actor — «system» Payment Gateway" style="shape=note;whiteSpace=wrap;html=1;size=14;fillColor=#FFF9C4;strokeColor=#C8B400;align=left;spacingLeft=8;spacingTop=6;fontSize=11;verticalAlign=top;" vertex="1" parent="1"><mxGeometry x="700" y="700" width="560" height="200" as="geometry"/></mxCell><mxCell id="c16_0" value="" style="endArrow=none;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="220" y="168" as="sourcePoint"/><mxPoint x="415" y="140" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c17_0" value="" style="endArrow=none;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="220" y="178" as="sourcePoint"/><mxPoint x="415" y="300" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c18_0" value="" style="endArrow=none;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="220" y="518" as="sourcePoint"/><mxPoint x="415" y="470" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c19_0" value="" style="endArrow=none;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="220" y="748" as="sourcePoint"/><mxPoint x="775" y="502" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c20_0" value="" style="endArrow=none;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="1120" y="325" as="sourcePoint"/><mxPoint x="985" y="300" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c21_0" value="" style="endArrow=block;endFill=0;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="185" y="566" as="sourcePoint"/><mxPoint x="185" y="676" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c22_0" value="«include»" style="endArrow=block;endFill=1;dashed=1;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="625" y="290" as="sourcePoint"/><mxPoint x="775" y="300" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c23_0" value="«extend»" style="endArrow=block;endFill=1;dashed=1;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="830" y="172" as="sourcePoint"/><mxPoint x="700" y="268" as="targetPoint"/></mxGeometry></mxCell></root></mxGraphModel></diagram><diagram name="02-活动图 Activity Diagram with Entities" id="pg1"><mxGraphModel dx="1200" dy="800" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1400" pageHeight="1040" math="0" shadow="0"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="c3_1" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fcfcfc;" vertex="1" parent="1"><mxGeometry x="40" y="60" width="360" height="915" as="geometry"/></mxCell><mxCell id="c4_1" value="Customer" style="text;html=1;align=center;verticalAlign=middle;fontSize=15;fontStyle=1;" vertex="1" parent="1"><mxGeometry x="220.0" y="74" width="300" height="20" as="geometry"/></mxCell><mxCell id="c5_1" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fcfcfc;" vertex="1" parent="1"><mxGeometry x="400" y="60" width="650" height="915" as="geometry"/></mxCell><mxCell id="c6_1" value="System (Boundary / Control)" style="text;html=1;align=center;verticalAlign=middle;fontSize=15;fontStyle=1;" vertex="1" parent="1"><mxGeometry x="725.0" y="74" width="300" height="20" as="geometry"/></mxCell><mxCell id="c7_1" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fcfcfc;" vertex="1" parent="1"><mxGeometry x="1050" y="60" width="310" height="915" as="geometry"/></mxCell><mxCell id="c8_1" value="Entity" style="text;html=1;align=center;verticalAlign=middle;fontSize=15;fontStyle=1;" vertex="1" parent="1"><mxGeometry x="1205.0" y="74" width="300" height="20" as="geometry"/></mxCell><mxCell id="c9_1" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#222;" vertex="1" parent="1"><mxGeometry x="210" y="110" width="40" height="40" as="geometry"/></mxCell><mxCell id="c10_1" value="Select product and&lt;br&gt;place order" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="110" y="170" width="240" height="64" as="geometry"/></mxCell><mxCell id="c11_1" value="Validate stock" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="590" y="170" width="270" height="64" as="geometry"/></mxCell><mxCell id="c12_1" value="Stock&lt;br&gt;[checked]" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#eef6ee;" vertex="1" parent="1"><mxGeometry x="1075" y="170" width="260" height="64" as="geometry"/></mxCell><mxCell id="c13_1" value="In stock?" style="rhombus;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="655" y="275" width="140" height="92" as="geometry"/></mxCell><mxCell id="c14_1" value="Show 'out of stock'&lt;br&gt;message" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="420" y="420" width="240" height="64" as="geometry"/></mxCell><mxCell id="c15_1" value="Create order" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="690" y="420" width="280" height="64" as="geometry"/></mxCell><mxCell id="c16_1" value="Order&lt;br&gt;[created]" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#eef6ee;" vertex="1" parent="1"><mxGeometry x="1075" y="420" width="260" height="64" as="geometry"/></mxCell><mxCell id="c17_1" value="Process payment" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="690" y="540" width="280" height="64" as="geometry"/></mxCell><mxCell id="c18_1" value="Payment&lt;br&gt;[paid]" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#eef6ee;" vertex="1" parent="1"><mxGeometry x="1075" y="540" width="260" height="64" as="geometry"/></mxCell><mxCell id="c19_1" value="Confirm order" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="690" y="660" width="280" height="64" as="geometry"/></mxCell><mxCell id="c20_1" value="Order&lt;br&gt;[confirmed]" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#eef6ee;" vertex="1" parent="1"><mxGeometry x="1075" y="660" width="260" height="64" as="geometry"/></mxCell><mxCell id="c21_1" value="Notify customer" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="690" y="780" width="280" height="64" as="geometry"/></mxCell><mxCell id="c22_1" value="Notification&lt;br&gt;[sent]" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#eef6ee;" vertex="1" parent="1"><mxGeometry x="1075" y="780" width="260" height="64" as="geometry"/></mxCell><mxCell id="c23_1" value="" style="rhombus;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="655" y="840" width="140" height="70" as="geometry"/></mxCell><mxCell id="c24_1" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=none;" vertex="1" parent="1"><mxGeometry x="705" y="915" width="40" height="40" as="geometry"/></mxCell><mxCell id="c25_1" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#222;" vertex="1" parent="1"><mxGeometry x="715" y="925" width="20" height="20" as="geometry"/></mxCell><mxCell id="c26_1" value="Object node = entity name + [state]; the dashed arrow is the action that changes the state" style="text;html=1;align=center;verticalAlign=middle;fontSize=13;" vertex="1" parent="1"><mxGeometry x="400" y="995" width="700" height="24" as="geometry"/></mxCell><mxCell id="c27_1" value="" style="endArrow=none;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="40" y="94" as="sourcePoint"/><mxPoint x="400" y="94" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c28_1" value="" style="endArrow=none;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="400" y="94" as="sourcePoint"/><mxPoint x="1050" y="94" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c29_1" value="" style="endArrow=none;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="1050" y="94" as="sourcePoint"/><mxPoint x="1360" y="94" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c30_1" value="" style="endArrow=block;endFill=1;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="725" y="910" as="sourcePoint"/><mxPoint x="725" y="915" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c31_1" value="" style="endArrow=block;endFill=1;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="230" y="150" as="sourcePoint"/><mxPoint x="230" y="170" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c32_1" value="" style="endArrow=block;endFill=1;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="350" y="202" as="sourcePoint"/><mxPoint x="590" y="202" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c33_1" value="" style="endArrow=block;endFill=1;dashed=1;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="860" y="202" as="sourcePoint"/><mxPoint x="1075" y="202" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c34_1" value="" style="endArrow=block;endFill=1;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="725" y="234" as="sourcePoint"/><mxPoint x="725" y="275" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c35_1" value="[no]" style="endArrow=block;endFill=1;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="655" y="321" as="sourcePoint"/><mxPoint x="540" y="420" as="targetPoint"/><Array as="points"><mxPoint x="540" y="321"/></Array></mxGeometry></mxCell><mxCell id="c36_1" value="[yes]" style="endArrow=block;endFill=1;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="795" y="321" as="sourcePoint"/><mxPoint x="830" y="420" as="targetPoint"/><Array as="points"><mxPoint x="830" y="321"/></Array></mxGeometry></mxCell><mxCell id="c37_1" value="" style="endArrow=block;endFill=1;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="725" y="484" as="sourcePoint"/><mxPoint x="725" y="540" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c38_1" value="" style="endArrow=block;endFill=1;dashed=1;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="970" y="452" as="sourcePoint"/><mxPoint x="1075" y="452" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c39_1" value="" style="endArrow=block;endFill=1;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="830" y="604" as="sourcePoint"/><mxPoint x="830" y="660" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c40_1" value="" style="endArrow=block;endFill=1;dashed=1;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="970" y="572" as="sourcePoint"/><mxPoint x="1075" y="572" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c41_1" value="" style="endArrow=block;endFill=1;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="830" y="724" as="sourcePoint"/><mxPoint x="830" y="780" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c42_1" value="" style="endArrow=block;endFill=1;dashed=1;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="970" y="692" as="sourcePoint"/><mxPoint x="1075" y="692" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c43_1" value="" style="endArrow=block;endFill=1;dashed=1;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="970" y="812" as="sourcePoint"/><mxPoint x="1075" y="812" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c44_1" value="" style="endArrow=block;endFill=1;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="830" y="844" as="sourcePoint"/><mxPoint x="795" y="875" as="targetPoint"/><Array as="points"><mxPoint x="830" y="875"/></Array></mxGeometry></mxCell><mxCell id="c45_1" value="" style="endArrow=block;endFill=1;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="540" y="484" as="sourcePoint"/><mxPoint x="655" y="875" as="targetPoint"/><Array as="points"><mxPoint x="540" y="875"/></Array></mxGeometry></mxCell></root></mxGraphModel></diagram><diagram name="03-时序图 Sequence Diagram (Analysis Model)" id="pg2"><mxGraphModel dx="1200" dy="800" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1340" pageHeight="930" math="0" shadow="0"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="c3_2" value=":Customer" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="90" y="70" width="160" height="44" as="geometry"/></mxCell><mxCell id="c4_2" value=":FormPlaceOrder" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="350" y="70" width="160" height="44" as="geometry"/></mxCell><mxCell id="c5_2" value=":PlaceOrderControl" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="620" y="70" width="160" height="44" as="geometry"/></mxCell><mxCell id="c6_2" value=":Order" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="870" y="70" width="160" height="44" as="geometry"/></mxCell><mxCell id="c7_2" value=":Payment" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"><mxGeometry x="1100" y="70" width="160" height="44" as="geometry"/></mxCell><mxCell id="c8_2" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#efefef;" vertex="1" parent="1"><mxGeometry x="163" y="190" width="14" height="20" as="geometry"/></mxCell><mxCell id="c9_2" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#efefef;" vertex="1" parent="1"><mxGeometry x="423" y="190" width="14" height="620" as="geometry"/></mxCell><mxCell id="c10_2" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#efefef;" vertex="1" parent="1"><mxGeometry x="693" y="250" width="14" height="520" as="geometry"/></mxCell><mxCell id="c11_2" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#efefef;" vertex="1" parent="1"><mxGeometry x="943" y="310" width="14" height="390" as="geometry"/></mxCell><mxCell id="c12_2" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#efefef;" vertex="1" parent="1"><mxGeometry x="1173" y="550" width="14" height="80" as="geometry"/></mxCell><mxCell id="c13_2" value="Solid arrow = synchronous message, dashed open arrow = return message; number follows the basic flow of events." style="text;html=1;align=left;verticalAlign=middle;fontSize=13;" vertex="1" parent="1"><mxGeometry x="60" y="880" width="900" height="24" as="geometry"/></mxCell><mxCell id="c14_2" value="" style="endArrow=none;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="170" y="114" as="sourcePoint"/><mxPoint x="170" y="870" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c15_2" value="" style="endArrow=none;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="430" y="114" as="sourcePoint"/><mxPoint x="430" y="870" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c16_2" value="" style="endArrow=none;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="700" y="114" as="sourcePoint"/><mxPoint x="700" y="870" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c17_2" value="" style="endArrow=none;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="950" y="114" as="sourcePoint"/><mxPoint x="950" y="870" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c18_2" value="" style="endArrow=none;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="1180" y="114" as="sourcePoint"/><mxPoint x="1180" y="870" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c19_2" value="1: enterOrderDetails()" style="endArrow=block;endFill=1;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="170" y="190" as="sourcePoint"/><mxPoint x="430" y="190" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c20_2" value="2: submitOrder()" style="endArrow=block;endFill=1;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="430" y="250" as="sourcePoint"/><mxPoint x="700" y="250" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c21_2" value="3: checkStock()" style="endArrow=block;endFill=1;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="700" y="310" as="sourcePoint"/><mxPoint x="950" y="310" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c22_2" value="4: stockAvailable" style="endArrow=block;endFill=1;dashed=1;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="950" y="370" as="sourcePoint"/><mxPoint x="700" y="370" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c23_2" value="5: createOrder()" style="endArrow=block;endFill=1;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="700" y="430" as="sourcePoint"/><mxPoint x="950" y="430" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c24_2" value="6: orderId" style="endArrow=block;endFill=1;dashed=1;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="950" y="490" as="sourcePoint"/><mxPoint x="700" y="490" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c25_2" value="7: processPayment()" style="endArrow=block;endFill=1;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="700" y="550" as="sourcePoint"/><mxPoint x="1180" y="550" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c26_2" value="8: paymentStatus" style="endArrow=block;endFill=1;dashed=1;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="1180" y="610" as="sourcePoint"/><mxPoint x="700" y="610" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c27_2" value="9: updateStatus()" style="endArrow=block;endFill=1;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="700" y="670" as="sourcePoint"/><mxPoint x="950" y="670" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c28_2" value="10: confirmation" style="endArrow=block;endFill=1;dashed=1;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="700" y="730" as="sourcePoint"/><mxPoint x="430" y="730" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c29_2" value="11: showConfirmation()" style="endArrow=block;endFill=1;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="430" y="790" as="sourcePoint"/><mxPoint x="170" y="790" as="targetPoint"/></mxGeometry></mxCell></root></mxGraphModel></diagram><diagram name="04-类图 Class Diagram" id="pg3"><mxGraphModel dx="1200" dy="800" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1400" pageHeight="900" math="0" shadow="0"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="c3_3" value="&lt;b&gt;«boundary» FormPlaceOrder&lt;/b&gt;&lt;hr size=1&gt;&lt;hr size=1&gt;+ enterOrderDetails() : void&lt;br&gt;+ showConfirmation(ref) : void" style="rounded=0;whiteSpace=wrap;html=1;align=left;spacingLeft=6;verticalAlign=top;spacingTop=2;fontSize=12.5;" vertex="1" parent="1"><mxGeometry x="60" y="90" width="240" height="110" as="geometry"/></mxCell><mxCell id="c4_3" value="&lt;b&gt;«control» PlaceOrderControl&lt;/b&gt;&lt;hr size=1&gt;&lt;hr size=1&gt;+ createOrder(dto) : Order&lt;br&gt;+ processPayment(id, mode) : Payment" style="rounded=0;whiteSpace=wrap;html=1;align=left;spacingLeft=6;verticalAlign=top;spacingTop=2;fontSize=12.5;" vertex="1" parent="1"><mxGeometry x="350" y="90" width="260" height="110" as="geometry"/></mxCell><mxCell id="c5_3" value="&lt;b&gt;Customer&lt;/b&gt;&lt;hr size=1&gt;- customerId : String&lt;br&gt;- name : String&lt;br&gt;- email : String&lt;hr size=1&gt;+ placeOrder() : Order" style="rounded=0;whiteSpace=wrap;html=1;align=left;spacingLeft=6;verticalAlign=top;spacingTop=2;fontSize=12.5;" vertex="1" parent="1"><mxGeometry x="60" y="280" width="240" height="150" as="geometry"/></mxCell><mxCell id="c6_3" value="&lt;b&gt;Order&lt;/b&gt;&lt;hr size=1&gt;- orderId : String&lt;br&gt;- orderDate : Date&lt;br&gt;- status : String&lt;br&gt;- amount : double&lt;hr size=1&gt;+ confirm() : void&lt;br&gt;+ cancel() : void" style="rounded=0;whiteSpace=wrap;html=1;align=left;spacingLeft=6;verticalAlign=top;spacingTop=2;fontSize=12.5;" vertex="1" parent="1"><mxGeometry x="350" y="280" width="260" height="170" as="geometry"/></mxCell><mxCell id="c7_3" value="&lt;b&gt;OrderLine&lt;/b&gt;&lt;hr size=1&gt;- quantity : int&lt;br&gt;- unitPrice : double&lt;hr size=1&gt;+ getSubtotal() : double" style="rounded=0;whiteSpace=wrap;html=1;align=left;spacingLeft=6;verticalAlign=top;spacingTop=2;fontSize=12.5;" vertex="1" parent="1"><mxGeometry x="660" y="280" width="240" height="120" as="geometry"/></mxCell><mxCell id="c8_3" value="&lt;b&gt;Product&lt;/b&gt;&lt;hr size=1&gt;- productId : String&lt;br&gt;- name : String&lt;br&gt;- price : double&lt;hr size=1&gt;+ getPrice() : double" style="rounded=0;whiteSpace=wrap;html=1;align=left;spacingLeft=6;verticalAlign=top;spacingTop=2;fontSize=12.5;" vertex="1" parent="1"><mxGeometry x="960" y="280" width="240" height="130" as="geometry"/></mxCell><mxCell id="c9_3" value="&lt;b&gt;Address&lt;/b&gt;&lt;hr size=1&gt;- street : String&lt;br&gt;- city : String&lt;br&gt;- postal : String&lt;hr size=1&gt;+ format() : String" style="rounded=0;whiteSpace=wrap;html=1;align=left;spacingLeft=6;verticalAlign=top;spacingTop=2;fontSize=12.5;" vertex="1" parent="1"><mxGeometry x="60" y="520" width="240" height="130" as="geometry"/></mxCell><mxCell id="c10_3" value="&lt;b&gt;«abstract» Payment&lt;/b&gt;&lt;hr size=1&gt;# paymentId : String&lt;br&gt;# amount : double&lt;hr size=1&gt;+ {abstract} pay() : void" style="rounded=0;whiteSpace=wrap;html=1;align=left;spacingLeft=6;verticalAlign=top;spacingTop=2;fontSize=12.5;" vertex="1" parent="1"><mxGeometry x="350" y="520" width="260" height="150" as="geometry"/></mxCell><mxCell id="c11_3" value="&lt;b&gt;«interface» IPaymentGateway&lt;/b&gt;&lt;hr size=1&gt;&lt;hr size=1&gt;+ authorize(amount) : boolean" style="rounded=0;whiteSpace=wrap;html=1;align=left;spacingLeft=6;verticalAlign=top;spacingTop=2;fontSize=12.5;" vertex="1" parent="1"><mxGeometry x="660" y="520" width="260" height="110" as="geometry"/></mxCell><mxCell id="c12_3" value="&lt;b&gt;CreditCardPayment&lt;/b&gt;&lt;hr size=1&gt;- cardNo : String&lt;hr size=1&gt;+ pay() : void" style="rounded=0;whiteSpace=wrap;html=1;align=left;spacingLeft=6;verticalAlign=top;spacingTop=2;fontSize=12.5;" vertex="1" parent="1"><mxGeometry x="150" y="720" width="230" height="110" as="geometry"/></mxCell><mxCell id="c13_3" value="&lt;b&gt;PayPalPayment&lt;/b&gt;&lt;hr size=1&gt;- email : String&lt;hr size=1&gt;+ pay() : void" style="rounded=0;whiteSpace=wrap;html=1;align=left;spacingLeft=6;verticalAlign=top;spacingTop=2;fontSize=12.5;" vertex="1" parent="1"><mxGeometry x="420" y="720" width="220" height="110" as="geometry"/></mxCell><mxCell id="c14_3" value="&lt;b&gt;StripeGateway&lt;/b&gt;&lt;hr size=1&gt;&lt;hr size=1&gt;+ authorize(amount) : boolean" style="rounded=0;whiteSpace=wrap;html=1;align=left;spacingLeft=6;verticalAlign=top;spacingTop=2;fontSize=12.5;" vertex="1" parent="1"><mxGeometry x="660" y="720" width="260" height="110" as="geometry"/></mxCell><mxCell id="c15_3" value="Elements shown:&lt;br&gt;1 Class — 3 compartments: name / attributes / operations&lt;br&gt;2 Visibility — + public, - private, # protected&lt;br&gt;3 Stereotypes — «boundary» «control» «abstract» «interface»&lt;br&gt;4 Association with multiplicity — 1, 0..*, 1..*&lt;br&gt;5 Composition — Order ◆— OrderLine (filled diamond)&lt;br&gt;6 Aggregation — Customer ◇— Address (hollow diamond)&lt;br&gt;7 Generalization — Payment ▷ CreditCardPayment / PayPalPayment&lt;br&gt;8 Realization — StripeGateway ⇢ IPaymentGateway (dashed + hollow triangle)&lt;br&gt;9 Dependency — FormPlaceOrder ⇢ PlaceOrderControl (dashed + open arrow)&lt;br&gt;10 Association class — OrderLine (Order × Product)" style="shape=note;whiteSpace=wrap;html=1;size=14;fillColor=#FFF9C4;strokeColor=#C8B400;align=left;spacingLeft=8;spacingTop=6;fontSize=11;verticalAlign=top;" vertex="1" parent="1"><mxGeometry x="980" y="500" width="360" height="330" as="geometry"/></mxCell><mxCell id="c16_3" value="«use»" style="endArrow=block;endFill=1;dashed=1;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="300" y="145" as="sourcePoint"/><mxPoint x="350" y="145" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c17_3" value="«use»" style="endArrow=block;endFill=1;dashed=1;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="480" y="200" as="sourcePoint"/><mxPoint x="480" y="280" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c18_3" value="1 — 0..*" style="endArrow=none;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="300" y="355" as="sourcePoint"/><mxPoint x="350" y="355" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c19_3" value="1 ◆— 1..*" style="endArrow=diamond;endFill=1;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="660" y="340" as="sourcePoint"/><mxPoint x="610" y="340" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c20_3" value="1..* — 0..*" style="endArrow=none;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="900" y="340" as="sourcePoint"/><mxPoint x="960" y="340" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c21_3" value="1 ◇— 0..*" style="endArrow=diamond;endFill=0;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="180" y="520" as="sourcePoint"/><mxPoint x="180" y="430" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c22_3" value="1 — 0..1" style="endArrow=none;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="480" y="450" as="sourcePoint"/><mxPoint x="480" y="520" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c23_3" value="" style="endArrow=block;endFill=0;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="265" y="720" as="sourcePoint"/><mxPoint x="440" y="670" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c24_3" value="" style="endArrow=block;endFill=0;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="530" y="720" as="sourcePoint"/><mxPoint x="540" y="670" as="targetPoint"/></mxGeometry></mxCell><mxCell id="c25_3" value="" style="endArrow=block;endFill=1;dashed=1;html=1;rounded=0;labelBackgroundColor=#FFFFFF;fontSize=12;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="790" y="720" as="sourcePoint"/><mxPoint x="790" y="630" as="targetPoint"/></mxGeometry></mxCell></root></mxGraphModel></diagram></mxfile>