Return to the System Architecture projection. Select the Coffee Maker object and double-click on it in the Internal Block Diagram to focus on it.
We want to add an object instance using the Palette. (If the Palette is not visible, activate it at Palette Panel of the Home Category) Drag an object of type Component from the Palette and drop it somewhere on the Internal Block Diagram background. (This action corresponds to the Add New Object command presented later.) Name the object Nozzle and press ENTER. You can resize the object by clicking on it and dragging its outline to the wanted size.
However, the Nozzle object is now a first-degree child of Coffee Maker; we actually wish to place this object as a child of the Pouring system. In order to do this, Expand the Pouring system object and do a right-click drag and drop to transfer Nozzle inside it. Select Move here from the appearing context menu. A new object now appears inside the Pouring system.
We also wish to allocate two flow objects consumed and produced inside the Pouring system to this newly created Nozzle Component. These flows are actually represented with flow containers inside the Pouring system object. A flow container symbolizes the fact that a flow begins (is produced) or ends (is consumed) inside a given system.
To allocate the Coffee flow, click on its flow container and drag and drop it with a left-click to the Nozzle Component. Choose Move here from the context menu. Now, drag and drop Poured coffee with a left-click and choose Copy as Output in the context menu. If you now double-click on the Nozzle, you can see that the flow containers are inside this object, meaning that it produces and consumes the corresponding flows. This can also be seen in the treeview by displaying the Nozzle node.
You can see that the left-click dragging and dropping of objects with Move here transfers them to the new parent object while a left-click drag and drop and Copy Here duplicates the reference to the object. (Left-click drag and drop and Copy Here corresponds to the Add Existing Object command presented below.) Poured coffee is thus now produced in both the Pouring system and in its Nozzle component. As this is not very realistic, let us delete the flow from the Pouring system. Right-click on the flow container inside the Pouring system object and choose Delete from the context menu (NB! use Delete Locally in the confirmation dialog to remove only the reference and not the object itself).
You can now resize the Pouring system container to better fit the size of Nozzle.
If you have made a mistake in naming an object and you want to change the name later, just right-click on it and choose Rename from the context menu. Let us now rename the Pouring system as Coffee pouring system.
It is not possible to add objects from the Palette everywhere in the Internal Block Diagram; for instance, an object of type System cannot be added inside a Component. The objects types have a predefined hierarchy that determines whether an object instance can be created at a given hierarchical location.
Now, go to the Physical Architecture projection. You can see that the Nozzle Component is visible inside the Coffee pouring system: the changes made in one projection thus also affect other projections. This is because the Nozzle object visible in the two projection is actually the same object instance. As their name indicates, filters merely filter the project and render given object types visible or invisible in the created projections; in the Physical Architecture projections, the Stakeholders and Requirements have been filtered out.
Return to the System Architecture projection and go inside the Brewing and filtering system. You can see that the Capsule Component receives no Matter flows while for instance the Pod Component consumes Hot water and produces Coffee. We now want to implement the same for Capsule. As these two flows already exist, we only need to add references to them (Hot water is produced somewhere inside the Heating & transfer system while the Coffee flow is consumed in the Nozzle Component of Coffee pouring system). To add a reference to an existing object, right-click on Capsule and choose Add Existing Object from the context menu. You are now presented with a list of available types.
Choose the Matter flow type from the list. You are now presented with the Matter flow Dictionary which displays all the object of the Matter flow type.
Choose Coffee from the list and click Add. This adds a new reference to the Coffee flow. However, we also want to add a reference to Hot water. Choose Hot water from the list and click Add and then Close. The new flows now appear for Capsule. However, we can see that there is a mistake: the Hot water flow should be consumed by the container and not produced by it. This could have been specified in the Dictionary window where the Produced option is proposed by default.
In order to rectify the situation, double-click on Capsule and go to the Hot water flow container. Right-click on the flow container and choose Change Direction from the context menu. You can now go up to the Brewing and filtering system level and verify that all is ok.
If both the flow producer and consumer have been defined wrongly, it is necessary to Change Direction twice: once at the starting point of the flow and once at its endpoint. However, in our case, there was only a mistake at the consumer end (which had been defined as producer).
There are now several references to the Hot water and Coffee flows; there are at once three different consumers and two possible producers. The existence of multiple producers is marked with a red double exclamation mark.
It is also possible to create multiple references to non-flow objects; for instance, the functions of a system can be modeled both in functional architecture and in system architecture, allocated to system components. In this case, filters can be used to create projections on these two different system aspects, functional architecture and system architecture. The functions seen in functional architecture et system architecture projections are now different object instances or references.
It is not possible to add references to existing objects everywhere in the object hierarchy: a new reference can only be created at a different location in the object hierarchy. Go back up in the hierarchy so that Coffee Maker is again the focus object. Right-click on the Internal Block Diagram background choosing Add Existing Object and the Component type. Then choose Water reservoir from the Component Dictionary, click Add and then Close. However, no new reference to Water reservoir appears on screen: this is because the Water reservoir already exists as child object of the Coffee Maker and it cannot thus be present twice at the same location.
Now we wish to add a new requirement consumed by the Nozzle Component. Right-click on the gray How to object that interprets higher-level stakeholder requirements in terms of technical requirements. Choose Add New Object and then the Requirement type as Output from the context menu. Name the new requirement Pour coffee. You see that a new requirement flow now appears; however, the flow ends in a question mark. This signifies that the consumer of the flow has not yet been defined. In general, unallocated flows (flows with either no consumer or no producer) are marked with a blue question mark.
In order to allocate the Pour coffee flow to the Nozzle Component, drag and drop the black flow port to Nozzle with a left-click and select Copy as Input from context menu. You now have the following view:
New flows can also be created graphically in the Internal Block Diagram. Delete the Pour coffee requirement: right-click on the flow and choose Delete From Both Ends from the context menu, then confirm that delete will be done globally. This deletes the flow both from the producer and the consumer end. As all references to the Pour coffee flow have now been deleted, it is no longer possible to employ Add Existing Object.
In order to create the flow anew go to the bottom part of How to object. Trace the cursor over the border of the container until it becomes outlined and small dots appear. Click once on a green dot and bring the cursor to the border of the Coffee pouring system container. Here again trace the cursor over the border of the container until it becomes outlined and small dots appear. Click again when the green dot indicates a suitable spot. In the dialog that appears name the new requirement Pour coffee. A Requirement flow should now appear linking the two containers.
Click on the Pour coffee flow to select it; you can see in the Properties panel (accessible through Object Panel of the Home Category or using Ctrl+Shift+P shortcut) that the flow has an attribute named Performance. You can now go and define a value for this attribute by placing the mouse cursor in the empty field. Define the performance value as Pour minimum 99% of coffee. Attributes represent additional characteristics or properties related to a given type.
Various object manipulations can also be performed in the Treeview. For instance, you can delete and rename objects as well as add references to existing objects and create new objects. There is also a tool called Deep Copy that permits you to create an independent duplicate of a chosen object and of its internal structure. Go to the Treeview of the System Architecture projection and right-click on the Storage system node. Choose Deep Copy from the context menu. Now, right-click on the Coffee Maker node and choose Paste. A duplicate of the Storage system object appears on screen. Go inside the duplicate to verify that the internal structure of Storage system has been copied: you should find one child component as well as three flows (Thermal, Electricity and Matter flow) consumed in this component.
You can now delete this Storage system duplicate, it is no longer needed. Note that the deletion of the parent object also removes the child objects.
Next, let us learn about the Management of Variants.