m (Alexandra moved page MDriven designer overview Part 8 to Part 8 Link Objects association classes) |
No edit summary |
||
Line 47: | Line 47: | ||
color: blue; | color: blue; | ||
</style> | </style> | ||
<div id="video12"> | <div id="video12"> | ||
Line 53: | Line 52: | ||
<div> | <div> | ||
<span data-video="yDKHzI992jQ | <span data-video="yDKHzI992jQ" data-start="12" tabindex="0"> Typical association class | ||
</span> | </span> | ||
<span data-video="yDKHzI992jQ | <span data-video="yDKHzI992jQ" data-start="167" tabindex="0"> Association class with the dotted line </span> | ||
<span data-video="yDKHzI992jQ | <span data-video="yDKHzI992jQ" data-start="304" tabindex="0"> Introduce and remove</span> | ||
<span data-video="yDKHzI992jQ | <span data-video="yDKHzI992jQ" data-start="340" tabindex="0"> Association ends </span> | ||
<span data-video="yDKHzI992jQ | <span data-video="yDKHzI992jQ" data-start="374" tabindex="0"> Implicit link </span> | ||
<span data-video="yDKHzI992jQ | <span data-video="yDKHzI992jQ" data-start="589" tabindex="0"> Inner link name and link role name </span> | ||
<span data-video="yDKHzI992jQ | <span data-video="yDKHzI992jQ" data-start="897" tabindex="0">Lifetime controlled objects and classes </span> | ||
<span data-video="yDKHzI992jQ | <span data-video="yDKHzI992jQ" data-start="1110" tabindex="0">Concept of modelling and abstraction </span> | ||
<span data-video="yDKHzI992jQ | <span data-video="yDKHzI992jQ" data-start="1597" tabindex="0"> No ability to remove things from the inner link </span> | ||
<span data-video="yDKHzI992jQ | <span data-video="yDKHzI992jQ" data-start="1875" tabindex="0"> Remove from the correct link </span> | ||
</div> | </div> | ||
</div> | </div> | ||
Line 81: | Line 80: | ||
</script> | </script> | ||
</html> | </html> | ||
Raw subtitles text | |||
hi, we got a few questions on link objects or Association classes | |||
so, we're going to dive into those right now | |||
this is a typical association class | |||
it is on a many-to-many association | |||
let's draw this in a new diagram | |||
going just move these things | |||
"person", "house, "lease contract" | |||
not move them, we're going to view them in a separate diagram | |||
create a new diagram | |||
I open that diagram | |||
I find what I was looking for house class, person class | |||
as I drag this on, all the associations | |||
associated with these two classes are also drawn | |||
and since the association class is part of this | |||
association it was implicitly added to my view | |||
this is, of course, just what | |||
I want now, so that's ok | |||
if I didn't want it, I would mark it | |||
and press "Delete" | |||
remember, if we press Delete we just | |||
remove it from the diagram | |||
"Ctrl+Delete" delete from the model completely | |||
this association, I'm not interested to show in this diagram | |||
so I press delete and not "Ctrl+Delete" | |||
because that will remove it and I don't | |||
want that, that would remove it from the model | |||
I just want to remove it from the diagram, | |||
delete, all right | |||
let's look at this, what happens | |||
the house has many tenants that are of class person | |||
the person has many rented apartments | |||
that are of class house | |||
in every relationship that is many-to-many, like this | |||
we have the ability to add | |||
association class, like this | |||
it's added with the dotted line tool, this one | |||
let's check the tooltip drag-out | |||
new association class connection | |||
so if I press that one, I can find association | |||
but I had one already, so I can remove the | |||
association class by clicking the association line | |||
find in the property inspector the class | |||
that is selected | |||
and I can choose to have no association class | |||
when I do this the dotted line is removed | |||
I can set it back by choosing it, | |||
but the dotted line would not get there | |||
because he and it's only | |||
drawn, when added to the diagram | |||
if it is a association, so a better way, | |||
now to get it to show | |||
I can remove this from view | |||
and say right-click, introduce&removed... | |||
that ended up outside the screen | |||
still, introduce&removed, pick from available | |||
when I remove this might | |||
as well, just to make it easier for me | |||
introduce pick from available own houses | |||
rented apartments | |||
you can see it, but I see it | |||
I don't know how to get this on screen | |||
so now it added the thing like this | |||
so now we're back, where we started from | |||
that was around about way | |||
sorry about that | |||
so these are the association ends | |||
rented apartments and tenants | |||
and these is the association | |||
so on the association I see the ends | |||
rented apartments and tenants | |||
if I click one, I only see this association end | |||
and the other one and I can see that | |||
name property to tenants | |||
if I click the other one, we see | |||
the name property rented apartments | |||
what about this, what actually happens is | |||
there is an implicit link available in OCL for us | |||
so that we can go from the house | |||
to the lease contracts, | |||
because the lease contracts are often quite good to use | |||
and it has important information in this case | |||
apartment number, end date and rent, etc. | |||
so let's see how a viewmodel that | |||
started in house and say that it had all houses | |||
so I would add a nested...with | |||
multilinks, house allinstances | |||
ok, so this will be a list where I have all the houses | |||
and for certain house I can say that | |||
I want to show the street number | |||
and for the selected house | |||
I can see that I have a few multi-link options | |||
is that onscreen for you | |||
the tenants, which is this one | |||
but also the lease contract which is that one | |||
alright, so | |||
if I add a list of those lease contract | |||
self lease contract it ended up a bit missplaced | |||
but let's say that for each house | |||
each selected the house | |||
I have a list of lease contracts | |||
so let's add a few columns to that grid | |||
that apartment number and rent | |||
so what we've learned is that there is an implicit | |||
link to get here | |||
why is that link called lease contract | |||
good question | |||
actually, when we stand on the association | |||
we fold down the one called tenants | |||
we have something we called inner link name | |||
and link role name | |||
these are both to default and | |||
default means that it's gonna | |||
and get a name based on the class | |||
it's pointing to basically | |||
and remember that the one used | |||
was called lease contract | |||
why was it called lease contract | |||
well it turns out it's the link role name | |||
so if I were to change this to | |||
the lease contract the ocl editor | |||
would say that you use the name lease contract | |||
I don't even know what that is | |||
but the lease contracts that I know | |||
so let's remove that one and type the lease contracts | |||
and that's a collection of lease contract | |||
so this is actually a better naming | |||
of lease contract list | |||
so instead of the default, but that was | |||
when I point at this end "tenants" | |||
I can really go this way, with the link role name | |||
the lease contract | |||
but once here, I might want to continue | |||
to go up this way | |||
and go that way | |||
let's see, so I'm in a lease contract | |||
going to add a generic empty column | |||
used to get an OCL position to writing | |||
and see roles, there is one called tenants person | |||
and that one, the tenants going to | |||
use that one, that's just... | |||
that points out one person, but maybe | |||
we think that is a good name | |||
it's actually quite ok name, but just | |||
for the sake of arguments | |||
we're gonna change the inner link name | |||
this is called the inner link | |||
to the interlink name, let's call it | |||
the tenant of the lease | |||
and if I have done that and check this OCL again | |||
it says, oh I don't know anything about | |||
tenants from lease contract | |||
but I do know the tenant of the lease, | |||
so that's still the new name that we gave it | |||
so what we have learned is of course | |||
we can go straight to the tenants | |||
it will be a list of persons, | |||
but we can also go to | |||
the link role name, to the lease contract | |||
in this case, we called it the lease contracts | |||
then we are here and then we might want | |||
to go up here and to the specific person | |||
associated with this lease contract and | |||
that would be called the tenant of the lease | |||
ok so important things with link objects | |||
or association classes or that they are | |||
life time controlled by the framework | |||
this is really part of the uml standard | |||
that whenever a person is associated | |||
with the house, in this association | |||
namely the person gets another rented apartment | |||
if we add a house to the person's rented apartments | |||
a lease contract will implicitly be created | |||
we can't avoid it, that is what the link class does | |||
whenever there's a new of object | |||
added in this end of the association | |||
and new link oobject is created in of this class | |||
and the same is if we had a this class | |||
and were to add it in person as a tenant | |||
it would create at lease contract | |||
so that means that we can always trust | |||
that there will be at lease contract | |||
where we have designed it this way | |||
ok, but if that is the case that it is | |||
lifetime controlled | |||
by the existence of this association | |||
and how can we then delete or remove a lease contract | |||
instead we should remove the person | |||
as a tenant, if we remove a person | |||
as a talent, the lease contract | |||
associated with that person will be removed | |||
and vice versa, if a person would | |||
remove a rented apartment | |||
the lease contract would be destructed | |||
logically the association class could be simulated this way | |||
if we have a multilink of | |||
lease contracts that points out one house | |||
and we also had a multi-ink from | |||
person to lease contracts that as one person | |||
this is more or less equivalent | |||
to this association class, but this | |||
implementation of the same concept does not offer | |||
the lifetime control that this | |||
implementation does | |||
this is often how we see association class | |||
is done in databases | |||
but the databases seldom offer their lifetime control | |||
actually, when we do it | |||
with an association class we cover a lot of ground | |||
with very few concepts | |||
this tells the reader of the model | |||
that the lease contracts are | |||
implicitly created whenever there's a house | |||
and person in association | |||
lets use set the specific attributes on that | |||
it's a real strong concept of modeling and abstraction | |||
so we're gonna try this out | |||
I'm going to remove this column and | |||
add an action to show this | |||
just a dummy action add, global action for show | |||
then I got that this action will be created | |||
ok, save this and see why its | |||
yeah, since I changed the innerlink names | |||
I will need to change the places | |||
where I use them | |||
so, this could be a good example of | |||
so, we are on a lease contract, but we want | |||
the tenant of the lease, self.. instead... and | |||
we had more errors, so instead of calling it | |||
that it was called the lease contract | |||
so I corrected those, start prototyping | |||
and bring up our sample prototype and | |||
see there's an exception null value in | |||
link object, because we loaded the file | |||
where there were missing data | |||
since we changed it in the XML file | |||
we don't evolve the data, | |||
so if we change names | |||
we can get and strange results like this | |||
but the xml file is mainly suitable | |||
for prototyping data so that's not a problem for us | |||
we can just clean that up, | |||
so I cleaned up the file, out of the screen | |||
I basically recreated a file | |||
so this was the one we created | |||
we can see that, we see just this street | |||
number and the apartment number | |||
that might be a little vague | |||
can we add something more, so that we get | |||
some context, the street | |||
model refresh, view, the street name, | |||
if I pointed this one | |||
I can see that I have a few lease contracts | |||
but on each lease contract | |||
I can add a generic column following to | |||
the tenant of the lease and full name | |||
like that, want to call that "full name", like that | |||
so, if I kwould want to remove one of | |||
these lease contracts | |||
how would I go about that | |||
well, let's say that we want to add a button | |||
to remove lease contract | |||
this time I'm gonna add a generic volume here | |||
and I'm gonna check "is action" | |||
it ended up there, I'm going to add here | |||
don't need to be that big, like that | |||
"Delete Picked Lease", so which one is the | |||
currently picked lease | |||
I know they are in this list, lease contract list | |||
so there should be a variable called "vCurrent | |||
lease contract list" | |||
and let's try with a delete | |||
remember the thing I said that shouldn't work | |||
because this is actually lifetime | |||
controlled by the framework | |||
model-refresh, select, select this one and delete | |||
and that's you saw that, went just fine | |||
so actually I remembered wrong | |||
it's ok to delete the link objects | |||
because what we will do is to | |||
clean up these two associations | |||
you can do delete this, what I was referring to | |||
is that we cannot remove things from the inner link | |||
so let's try that next | |||
because this has no possibility | |||
to live without the house and the person | |||
so the house and the person is the reason | |||
for this existence, for its existence | |||
so this was ok, but I'm gonna undo | |||
we had that one right, undo, so "Ctrl+Z" | |||
cancel on everything | |||
Discard changes? - yes, | |||
so let's head back to the view model | |||
if I right click here | |||
and insert row, I get a new in the grid | |||
everything is moved down one step for me | |||
so that's a convenient way | |||
to get more space | |||
so I don't have to move everything by hand | |||
but gonna copy this action "ctrl-c", "ctrl-v" and | |||
remove from inner link | |||
this is what shouldn't be possible | |||
so from instead the selected house | |||
vCurrent all house | |||
this is the selected house, vCurrent is one | |||
the current one and don't confuse that | |||
this with vSelected all house | |||
that contains all houses, that are selected | |||
so basically when I do this | |||
hold ctrl down and select another one | |||
can't do that because we are in edit mode here | |||
when I do this I have houses multiple houses selected | |||
and they are all in the vSelected all house collection of houses | |||
but we just want to the current house | |||
the currently selected, the currently focused house, | |||
that's in the vCurrent all house | |||
like that and the inner link | |||
that we gave a name, explicit name | |||
the lease contracts | |||
we can try to remove | |||
here we could use the currently focused lease contract | |||
vCurrent lease contact list | |||
that's the one that is the current in this list | |||
so this would be illegal | |||
if what I say is correct | |||
now they are on the same spot, | |||
I'm going to move this one here | |||
remove from inner link | |||
head back over here, model refresh, | |||
show the view model again | |||
now this one is selected and now that one is also | |||
this one is vCurrent for all house | |||
this is the current for lease contract list | |||
remove from inner link error and | |||
list of link objects is read-only | |||
list of links object is read-only | |||
that was where I was going for to show you | |||
so that it's not allowed, because we can't | |||
remove things in this implicit link | |||
instead we would need to remove this one | |||
from this link | |||
so if we were to rectify this | |||
let's do yet another copy | |||
remove from correct link, we could use | |||
the same vCurrent all house | |||
but then it should be the role to tenants | |||
from here we want to remove the vCurrent lease contract | |||
but that will not be correct because that's | |||
of the wrong type it expects a tenant | |||
so we need to follow the inner link up to | |||
the tenant of the lease | |||
now we have the tenant of the lease | |||
in the tenants collection | |||
so the buttons ended up on top of each other | |||
when I copy, going to move it here | |||
so now I'm removing one of | |||
these from the selected of those | |||
selected of those following the inner link to here | |||
inner link name, the tenant of the lease that name | |||
and the link role name, that name | |||
so there's an implicit name here and one here | |||
I showed these in the second grid | |||
but in order to remove, to delete this one | |||
by removing | |||
I need to remove one of these from this link | |||
not really that confusing once you get the hang of it | |||
model refresh, so I picked that one | |||
and I picked this one | |||
now I'm going to remove from correct | |||
link and then it disappears and | |||
what happens is that since one of these | |||
objects are removed from this link | |||
this one has no, one of these loses its right to exist | |||
so it is destroyed by the framework | |||
get some warnings, because they | |||
should have apartment numbers | |||
yeah, that's okay, the ones missing | |||
apartment numbers were these step | |||
or any other ones, these have, | |||
ok so quite an in-depth check on Association classes | |||
and how they work | |||
let me know if you | |||
have further questions | |||
and we will dive into those as well thank you |
Revision as of 16:51, 4 January 2017
Deep overview of link objects and association classes
To make your experience more comfortable, we set the main tags mentioned in the video to the right bar menu of this mini player. Choose the interesting subtitle on the list and immediately get to the exact theme timeplace in the video. Now you can pick any topic to be instructed without watching the whole video.
Raw subtitles text
hi, we got a few questions on link objects or Association classes
so, we're going to dive into those right now
this is a typical association class
it is on a many-to-many association
let's draw this in a new diagram
going just move these things
"person", "house, "lease contract"
not move them, we're going to view them in a separate diagram
create a new diagram
I open that diagram
I find what I was looking for house class, person class
as I drag this on, all the associations
associated with these two classes are also drawn
and since the association class is part of this
association it was implicitly added to my view
this is, of course, just what
I want now, so that's ok
if I didn't want it, I would mark it
and press "Delete"
remember, if we press Delete we just
remove it from the diagram
"Ctrl+Delete" delete from the model completely
this association, I'm not interested to show in this diagram
so I press delete and not "Ctrl+Delete"
because that will remove it and I don't
want that, that would remove it from the model
I just want to remove it from the diagram,
delete, all right
let's look at this, what happens
the house has many tenants that are of class person
the person has many rented apartments
that are of class house
in every relationship that is many-to-many, like this
we have the ability to add
association class, like this
it's added with the dotted line tool, this one
let's check the tooltip drag-out
new association class connection
so if I press that one, I can find association
but I had one already, so I can remove the
association class by clicking the association line
find in the property inspector the class
that is selected
and I can choose to have no association class
when I do this the dotted line is removed
I can set it back by choosing it,
but the dotted line would not get there
because he and it's only
drawn, when added to the diagram
if it is a association, so a better way,
now to get it to show
I can remove this from view
and say right-click, introduce&removed...
that ended up outside the screen
still, introduce&removed, pick from available
when I remove this might
as well, just to make it easier for me
introduce pick from available own houses
rented apartments
you can see it, but I see it
I don't know how to get this on screen
so now it added the thing like this
so now we're back, where we started from
that was around about way
sorry about that
so these are the association ends
rented apartments and tenants
and these is the association
so on the association I see the ends
rented apartments and tenants
if I click one, I only see this association end
and the other one and I can see that
name property to tenants
if I click the other one, we see
the name property rented apartments
what about this, what actually happens is
there is an implicit link available in OCL for us
so that we can go from the house
to the lease contracts,
because the lease contracts are often quite good to use
and it has important information in this case
apartment number, end date and rent, etc.
so let's see how a viewmodel that
started in house and say that it had all houses
so I would add a nested...with
multilinks, house allinstances
ok, so this will be a list where I have all the houses
and for certain house I can say that
I want to show the street number
and for the selected house
I can see that I have a few multi-link options
is that onscreen for you
the tenants, which is this one
but also the lease contract which is that one
alright, so
if I add a list of those lease contract
self lease contract it ended up a bit missplaced
but let's say that for each house
each selected the house
I have a list of lease contracts
so let's add a few columns to that grid
that apartment number and rent
so what we've learned is that there is an implicit
link to get here
why is that link called lease contract
good question
actually, when we stand on the association
we fold down the one called tenants
we have something we called inner link name
and link role name
these are both to default and
default means that it's gonna
and get a name based on the class
it's pointing to basically
and remember that the one used
was called lease contract
why was it called lease contract
well it turns out it's the link role name
so if I were to change this to
the lease contract the ocl editor
would say that you use the name lease contract
I don't even know what that is
but the lease contracts that I know
so let's remove that one and type the lease contracts
and that's a collection of lease contract
so this is actually a better naming
of lease contract list
so instead of the default, but that was
when I point at this end "tenants"
I can really go this way, with the link role name
the lease contract
but once here, I might want to continue
to go up this way
and go that way
let's see, so I'm in a lease contract
going to add a generic empty column
used to get an OCL position to writing
and see roles, there is one called tenants person
and that one, the tenants going to
use that one, that's just...
that points out one person, but maybe
we think that is a good name
it's actually quite ok name, but just
for the sake of arguments
we're gonna change the inner link name
this is called the inner link
to the interlink name, let's call it
the tenant of the lease
and if I have done that and check this OCL again
it says, oh I don't know anything about
tenants from lease contract
but I do know the tenant of the lease,
so that's still the new name that we gave it
so what we have learned is of course
we can go straight to the tenants
it will be a list of persons,
but we can also go to
the link role name, to the lease contract
in this case, we called it the lease contracts
then we are here and then we might want
to go up here and to the specific person
associated with this lease contract and
that would be called the tenant of the lease
ok so important things with link objects
or association classes or that they are
life time controlled by the framework
this is really part of the uml standard
that whenever a person is associated
with the house, in this association
namely the person gets another rented apartment
if we add a house to the person's rented apartments
a lease contract will implicitly be created
we can't avoid it, that is what the link class does
whenever there's a new of object
added in this end of the association
and new link oobject is created in of this class
and the same is if we had a this class
and were to add it in person as a tenant
it would create at lease contract
so that means that we can always trust
that there will be at lease contract
where we have designed it this way
ok, but if that is the case that it is
lifetime controlled
by the existence of this association
and how can we then delete or remove a lease contract
instead we should remove the person
as a tenant, if we remove a person
as a talent, the lease contract
associated with that person will be removed
and vice versa, if a person would
remove a rented apartment
the lease contract would be destructed
logically the association class could be simulated this way
if we have a multilink of
lease contracts that points out one house
and we also had a multi-ink from
person to lease contracts that as one person
this is more or less equivalent
to this association class, but this
implementation of the same concept does not offer
the lifetime control that this
implementation does
this is often how we see association class
is done in databases
but the databases seldom offer their lifetime control
actually, when we do it
with an association class we cover a lot of ground
with very few concepts
this tells the reader of the model
that the lease contracts are
implicitly created whenever there's a house
and person in association
lets use set the specific attributes on that
it's a real strong concept of modeling and abstraction
so we're gonna try this out
I'm going to remove this column and
add an action to show this
just a dummy action add, global action for show
then I got that this action will be created
ok, save this and see why its
yeah, since I changed the innerlink names
I will need to change the places
where I use them
so, this could be a good example of
so, we are on a lease contract, but we want
the tenant of the lease, self.. instead... and
we had more errors, so instead of calling it
that it was called the lease contract
so I corrected those, start prototyping
and bring up our sample prototype and
see there's an exception null value in
link object, because we loaded the file
where there were missing data
since we changed it in the XML file
we don't evolve the data,
so if we change names
we can get and strange results like this
but the xml file is mainly suitable
for prototyping data so that's not a problem for us
we can just clean that up,
so I cleaned up the file, out of the screen
I basically recreated a file
so this was the one we created
we can see that, we see just this street
number and the apartment number
that might be a little vague
can we add something more, so that we get
some context, the street
model refresh, view, the street name,
if I pointed this one
I can see that I have a few lease contracts
but on each lease contract
I can add a generic column following to
the tenant of the lease and full name
like that, want to call that "full name", like that
so, if I kwould want to remove one of
these lease contracts
how would I go about that
well, let's say that we want to add a button
to remove lease contract
this time I'm gonna add a generic volume here
and I'm gonna check "is action"
it ended up there, I'm going to add here
don't need to be that big, like that
"Delete Picked Lease", so which one is the
currently picked lease
I know they are in this list, lease contract list
so there should be a variable called "vCurrent
lease contract list"
and let's try with a delete
remember the thing I said that shouldn't work
because this is actually lifetime
controlled by the framework
model-refresh, select, select this one and delete
and that's you saw that, went just fine
so actually I remembered wrong
it's ok to delete the link objects
because what we will do is to
clean up these two associations
you can do delete this, what I was referring to
is that we cannot remove things from the inner link
so let's try that next
because this has no possibility
to live without the house and the person
so the house and the person is the reason
for this existence, for its existence
so this was ok, but I'm gonna undo
we had that one right, undo, so "Ctrl+Z"
cancel on everything
Discard changes? - yes,
so let's head back to the view model
if I right click here
and insert row, I get a new in the grid
everything is moved down one step for me
so that's a convenient way
to get more space
so I don't have to move everything by hand
but gonna copy this action "ctrl-c", "ctrl-v" and
remove from inner link
this is what shouldn't be possible
so from instead the selected house
vCurrent all house
this is the selected house, vCurrent is one
the current one and don't confuse that
this with vSelected all house
that contains all houses, that are selected
so basically when I do this
hold ctrl down and select another one
can't do that because we are in edit mode here
when I do this I have houses multiple houses selected
and they are all in the vSelected all house collection of houses
but we just want to the current house
the currently selected, the currently focused house,
that's in the vCurrent all house
like that and the inner link
that we gave a name, explicit name
the lease contracts
we can try to remove
here we could use the currently focused lease contract
vCurrent lease contact list
that's the one that is the current in this list
so this would be illegal
if what I say is correct
now they are on the same spot,
I'm going to move this one here
remove from inner link
head back over here, model refresh,
show the view model again
now this one is selected and now that one is also
this one is vCurrent for all house
this is the current for lease contract list
remove from inner link error and
list of link objects is read-only
list of links object is read-only
that was where I was going for to show you
so that it's not allowed, because we can't
remove things in this implicit link
instead we would need to remove this one
from this link
so if we were to rectify this
let's do yet another copy
remove from correct link, we could use
the same vCurrent all house
but then it should be the role to tenants
from here we want to remove the vCurrent lease contract
but that will not be correct because that's
of the wrong type it expects a tenant
so we need to follow the inner link up to
the tenant of the lease
now we have the tenant of the lease
in the tenants collection
so the buttons ended up on top of each other
when I copy, going to move it here
so now I'm removing one of
these from the selected of those
selected of those following the inner link to here
inner link name, the tenant of the lease that name
and the link role name, that name
so there's an implicit name here and one here
I showed these in the second grid
but in order to remove, to delete this one
by removing
I need to remove one of these from this link
not really that confusing once you get the hang of it
model refresh, so I picked that one
and I picked this one
now I'm going to remove from correct
link and then it disappears and
what happens is that since one of these
objects are removed from this link
this one has no, one of these loses its right to exist
so it is destroyed by the framework
get some warnings, because they
should have apartment numbers
yeah, that's okay, the ones missing
apartment numbers were these step
or any other ones, these have,
ok so quite an in-depth check on Association classes
and how they work
let me know if you
have further questions
and we will dive into those as well thank you