This is Chapter 9. Here is the first part, Chapter 1, or see Chapter 8 (the previous chapter)
Video 9: Inheritance and Statemachines
To make your experience smooth, we set the main tags mentioned in the video to the right bar menu of this mini-player. Choose an interesting subtitle on the list and immediately get to the exact theme navigation item place in the video. Now you can pick any topic to be instructed on without watching the whole video.
Chapter 9: Inheritance and Statemachines
In this chapter, we introduce UML inheritance and UML Statemachines.
265. Remove the 20-pixel margin on the buttons and apply the Align Items property end instead, to make everything end up on the bottom line.
266. Test out combinations of Justify content and Align Items, and determine how to familiarize yourself with ways to control the flow of UI widgets.
267. Introduce the new class CarDealer.
268. Introduce the new class CarOwner.
269. Add generalization arrows from CarDealer to CarOwner and from Person to CarOwner.
270. Add the Attribute Name:String
to CarOwner and save.
- Notice the error.
- Make sure you understand why Name is reported as a doublet.
- Fix it by removing Name of Person.
271. Make sure you understand Subclass and Superclass. Look up and read through these articles on the Wiki:
272. Add a new association from CarOwner to Car. Name the Car end as CurrentlyOwnedCars.
273. Delete the old link with the currently owned car. Update the autoforms. Save and check for errors.
274. Delete the Combobox that showed the now-removed currently owned car in the Person form.
275. Add a new class: CarTransferOwnershipDocument, and add a new association from Car(0..1)
to CarTransferOwnershipDocument(*)
276. Add an association from CarOwner to CarTransferOwnershipDocument. Call the link DocumentsForSales(*)
and Seller(0..1)
277. Add another association from CarOwner to CarTransferOwnershipDocument. Call the link DocumentsForPurchase(*)
and Buyer(0..1)
278. Add CarFactory and make it a subclass of CarOwner.
279. Add ScrapYard and make it a subclass of CarOwner.
280. Add a statemachine on Class Car.
281. Add a state in the statemachine of the car called BrandNew.
282. Add another state: InOwnershipTransaction.
283. Add a Transition arrow from BrandNew to InOwnershipTransaction.
284. Call the trigger of the transition InitiateSale.
285. Add yet another state called OwnershipStable.
286. Add a transition from InOwnershipTransaction to OwnershipStable. Name the trigger CloseSale.
287. Add a transition from OwnershipStable to InOwnershipTransaction. Reuse the trigger InitiateSale on this transition.
288. Create an Entry Action in the state InOwnerShipTransaction.
- Create a
CarTransferOwnershipDocument
and add it to the cars list of CarTransferOwnershipDocuments. - Also, assign the Seller of the new CarTransferOwnershipDocument to the current owner of the Car.
289. Add an association from CarTransferOwnershipDocument to Car. Call the single-end CurrentTransaction. Set the Car's end to not Navigable.
290. In the Entry Action, in the state InOwnerShipTransaction, assign the CurrentTransaction to the created document.
291. Go to Guard of CloseSale and check that the current transaction has a Buyer.
292. In the OwnershipStable, add an Entry action that removes the Car from Seller's CurrentlyOwnedCars and adds it to the Buyer's CurrentlyOwnedCars.
293. In the OwnershipStable, add an Entry action and add an update of the Seller's CarsOwnerUsedToOwn.
294. On the transition between BrandNew and InOwnerShipTransaction, add a guard that checks that there is a CarOwner.
295. On the InitiateSale trigger, add a ClassAction for the trigger.
296. On the CloseSale trigger, add a ClassAction for the trigger.
297. Refresh the AutoForms.
298. Save and test on the web.
- Create a CarFactory.
- Call it BMW in Munich.
- Add a Car to this CarFactory.
299. Initiate the Sale and check that you get a CarTransferOwnershipDocument.
300. Assign a buyer in the CarTransferOwnershipDocument, then close the Sale. Check that ownership has switched.
301. Set the default representation of CarOwner to self.Name