Part 8 Link Objects association classes

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

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

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