No edit summary |
No edit summary |
||
Line 49: | Line 49: | ||
<div id="video12"> | <div id="video12"> | ||
<iframe width="740" height="500" src="https://www.youtube.com/embed/yDKHzI992jQ?rel=0&autoplay= | <iframe width="740" height="500" src="https://www.youtube.com/embed/yDKHzI992jQ?rel=0&autoplay=0" frameborder="0" allowfullscreen></iframe> | ||
<div> | <div> | ||
Line 63: | Line 63: | ||
<span data-video="yDKHzI992jQ" data-start="1597" tabindex="0"> No ability to remove things from the inner link </span> | <span data-video="yDKHzI992jQ" data-start="1597" tabindex="0"> No ability to remove things from the inner link </span> | ||
<span data-video="yDKHzI992jQ" data-start="1875" tabindex="0"> Remove from the correct link </span> | <span data-video="yDKHzI992jQ" data-start="1875" tabindex="0"> Remove from the correct link </span> | ||
</div> | </div> | ||
</div> | </div> | ||
Line 81: | Line 81: | ||
</html> | </html> | ||
Raw subtitles text | '''Raw subtitles text''' | ||
hi, we got a few questions on link objects or Association classes | hi, we got a few questions on link objects or Association classes | ||
Line 99: | Line 99: | ||
not move them, we're going to view them in a separate diagram | not move them, we're going to view them in a separate diagram | ||
create a new diagram | create a new diagram, I open that diagram | ||
I open that diagram | |||
I find what I was looking for house class, person class | I find what I was looking for house class, person class | ||
Line 113: | Line 111: | ||
association it was implicitly added to my view | association it was implicitly added to my view | ||
this is, of course, just what | this is, of course, just what I want now, so that's ok | ||
I want now, so that's ok | |||
and press "Delete" | if I didn't want it, I would mark it and press "Delete" | ||
remember, if we press Delete we just | remember, if we press Delete we just | ||
Line 135: | Line 129: | ||
want that, that would remove it from the model | want that, that would remove it from the model | ||
I just want to remove it from the diagram, | I just want to remove it from the diagram, delete, all right | ||
delete, all right | |||
let's look at this, what happens | let's look at this, what happens | ||
Line 167: | Line 159: | ||
find in the property inspector the class | find in the property inspector the class | ||
that is selected | that is selected and I can choose to have no association class | ||
and I can choose to have no association class | |||
when I do this the dotted line is removed | when I do this the dotted line is removed | ||
Line 197: | Line 187: | ||
as well, just to make it easier for me | as well, just to make it easier for me | ||
introduce pick from available own houses | introduce pick from available own houses rented apartments | ||
rented apartments | |||
you can see it, but I see it | you can see it, but I see it | ||
Line 210: | Line 198: | ||
that was around about way | that was around about way | ||
so these are the association ends | so these are the association ends | ||
Line 237: | Line 223: | ||
there is an implicit link available in OCL for us | there is an implicit link available in OCL for us | ||
so that we can go from the house | so that we can go from the house to the lease contracts, | ||
to the lease contracts, | |||
because the lease contracts are often quite good to use | because the lease contracts are often quite good to use | ||
Line 271: | Line 255: | ||
but also the lease contract which is that one | but also the lease contract which is that one | ||
alright, so | alright, so if I add a list of those lease contract | ||
if I add a list of those lease contract | |||
self lease contract it ended up a bit missplaced | self lease contract it ended up a bit missplaced | ||
Line 291: | Line 273: | ||
link to get here | link to get here | ||
why is that link called lease contract | why is that link called lease contract good question | ||
good question | |||
actually, when we stand on the association | actually, when we stand on the association | ||
Line 301: | Line 281: | ||
we have something we called inner link name | we have something we called inner link name | ||
and link role name | and link role name, these are both to default and | ||
these are both to default and | |||
default means that it's gonna | default means that it's gonna | ||
Line 335: | Line 313: | ||
so this is actually a better naming | so this is actually a better naming | ||
of lease contract list | of lease contract list, so instead of the default, but that was | ||
so instead of the default, but that was | |||
when I point at this end "tenants" | when I point at this end "tenants" | ||
I can really go this way, with the link role name | I can really go this way, with the link role name the lease contract | ||
the lease contract | |||
but once here, I might want to continue | but once here, I might want to continue | ||
to go up this way | to go up this way and go that way | ||
and go that way | |||
let's see, so I'm in a lease contract | let's see, so I'm in a lease contract | ||
Line 393: | Line 365: | ||
we can go straight to the tenants | we can go straight to the tenants | ||
it will be a list of persons, | it will be a list of persons, but we can also go to | ||
but we can also go to | |||
the link role name, to the lease contract | the link role name, to the lease contract |
Revision as of 19:34, 5 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
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