Part 8 Link Objects association classes
No edit summary
mNo edit summary
Line 80: 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
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 21:58, 15 April 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.


Typical association class Association class  with the dotted line Introduce and remove Association ends Implicit link Inner link name and link role name Lifetime controlled objects and classes Concept of modelling and abstraction No ability to remove things from the  inner link Remove from the correct link

This page was edited 90 days ago on 02/10/2024. What links here