Paweł Koralewski

Paweł Koralewski architekt aplikacji,
team leader

Temat: role w asocjacji w EA

Nie do końca rozumiem działanie ról, tak jak to podpowiada EA.
Mam takie klasy:

Obrazek

1 tabela musi zawierać co najmniej 1 kolumnę, w tabeli jest lista kolumn, każda kolumna zawiera wskazanie na jej tabelę.

Zdefiniowałem relację i wszedłem w jej właściwości, w zakładkę "Target Role". EA podpowiada mi tutaj wszystkie publiczne właściwości z AdColumn, czyli "table". Wybrałem to oraz analogicznie we zakładce "Source Role".

Mam wrażenie, że rola relacji "columns" powinna być zdefiniowana przy AdTable, zaś "table" przy AdColumn, gdyż takie są funkcje tej asocjacji.

Przyjmując, że to jest prawidłowe, jak powinienem czytać tę relację?Ten post został edytowany przez Autora dnia 21.01.14 o godzinie 13:30
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: role w asocjacji w EA

Paweł K.:

bo diagram klas nie służy do modelowania baz danych... jeżeli owe Add coś tam to operacje, to to jest baaaaardzo kiepski projekt, gdyż na poziomie klas (struktura logiki działania oprogramowania) odostępniasz niskopoziomową wiedza o implementacji, sugeruję jedna klasę zarządzająca repozytorium...

no i pytanie: co ma robić ten program/komponent?

dodam, że EA to bardzo kiepskie narzędzie, niezgodne ze specyfikacją UML...Ten post został edytowany przez Autora dnia 22.01.14 o godzinie 09:11
Paweł Koralewski

Paweł Koralewski architekt aplikacji,
team leader

Temat: role w asocjacji w EA

Jarosław Ż.:

bo diagram klas nie służy do modelowania baz danych...

AdTable, AdColumn ... to klasy reprezentujące strukturę bazy danych w metamodelu w aplikacji. Adekwatne tabele w bazie nazywają się ad_table, ad_column ... i nie są zaznaczone na diagramie klas. Czyli wygląda, że tutaj błędu nie popełniłem :)

Program na podstawie danych w metamodelu będzie przygotowywać migracje bazy danych dla różnych warst pośredniczących, np. liquibase.
dodam, że EA to bardzo kiepskie narzędzie, niezgodne ze specyfikacją UML...

Nie mam wpływu na wybór narzędzia, takie mi dostarczył pracodawca.
Jakbym miał dla siebie kupować, to które narzędzie? Czy też może na początek jakieś darmowe jest przyzwoite?
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: role w asocjacji w EA

Paweł K.:
Jarosław Ż.:

bo diagram klas nie służy do modelowania baz danych...

AdTable, AdColumn ... to klasy reprezentujące strukturę bazy danych w metamodelu w aplikacji. Adekwatne tabele w bazie nazywają się ad_table, ad_column ... i nie są zaznaczone na diagramie klas. Czyli wygląda, że tutaj błędu nie popełniłem :)
Program na podstawie danych w metamodelu będzie przygotowywać migracje bazy danych dla różnych warst pośredniczących, np. liquibase.


nie jestem przekonany do tego by tak to modelować i projektować.... ja na jakimś wysokim poziomie stworzył bym klasę odpowiedzialna za te tablice z operacją "utwórzNoweFajneTablice", parametrem była by jakaś forma XML albo coś innego (metamodel) tych fajnych tablic (lub ich nodwej werskji), to co ty robisz wygląda mi na funkcyjne projektowanie z pomocą języka obiektowego.

ale tu wkraczam w dyskusje o gustach :)
dodam, że EA to bardzo kiepskie narzędzie, niezgodne ze specyfikacją UML...

Nie mam wpływu na wybór narzędzia, takie mi dostarczył pracodawca.

współczuję :)
Jakbym miał dla siebie kupować, to które narzędzie? Czy też może na początek jakieś darmowe jest przyzwoite?

nie ma nic fajnego za darmo :) ale sa wersje commuity ;)
ja używam tego pakietu:
http://www.visual-paradigm.com/

jest zgodny z UML (i nie tylko) w 100%
Paweł Koralewski

Paweł Koralewski architekt aplikacji,
team leader

Temat: role w asocjacji w EA

Jarosław Ż.:

ale tu wkraczam w dyskusje o gustach :)

Tak a tymczasem źródłowe pytanie cały czas bez odpowiedzi :(
Mianowicie, pomijając kwestię użytego narzędzia, czy prawidłowe jest opisanie relacji jak na obrazku?

nie ma nic fajnego za darmo :) ale sa wersje commuity ;)
ja używam tego pakietu:
http://www.visual-paradigm.com/

jest zgodny z UML (i nie tylko) w 100%

Dzięki.
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: role w asocjacji w EA

Paweł K.:
Mianowicie, pomijając kwestię użytego narzędzia, czy prawidłowe jest opisanie relacji jak na obrazku?

jaki jest cel tworzenia tej klasy, po drugie związki pomiędzy obiektami to nie relacje a o rolach można mówić na modeli pojęciowym, do tego nie jest rola klasy jakaś jej operacja, klasa to nie tablica tylko klasa, ... rola klasy nie jest "bycie tablicą" czy dlatego napisałem, że EA to nie UML....

to co narysowałeś to kompozycja, w której AdColumn jest częścią AdTable. Jeżeli klasa ma operacje "column" to nie rozumiem, być może jest to operacja "createColumn" ale z Twojego modelu w zasadzie nic nie wynika i dlatego nie potrafię odpowiedzieć inaczej na Twoje pytanie, tym bardziej, że w UML nie ma relacji a są związki, jeżeli masz na myśli relacje takie jakie są między tablicami w RDBMS to ten diagram nie ma nic wspólnego z UML.

Tak więc moja odpowiedź jest "na temat' ale faktycznie nie jest to odpowiedź "tak prawidłowe" czy "nie nieprawidłowe"... Dodam, że rolą klasy jest "robienie czegoś" (klasa ma odpowiedzialność) a nie "bycie czymś" i w tym kontekście Twoje role są złe

Temat: role w asocjacji w EA

Jarosław Ż.:
nie ma relacji a są związki, jeżeli masz na myśli relacje takie jakie są między tablicami w RDBMS to ten diagram nie ma

Tak przy okazji - to są związki. W modelu relacyjnym relacją jest tabela.

Problem (z powodu którego można oblać egzamin i polecieć na rozmowie kwalifikacyjnej, a nawet zostać wyproszonem ze spotkania projektowego w pewnej firmie) powstał ze złego tłumaczenia słowa relationship. Relationship != relation w kontekście teorii relacyjnych baz danych.Ten post został edytowany przez Autora dnia 22.01.14 o godzinie 12:36
Paweł Koralewski

Paweł Koralewski architekt aplikacji,
team leader

Temat: role w asocjacji w EA

Dodam, że rolą klasy jest "robienie czegoś" (klasa ma odpowiedzialność) a nie "bycie czymś" i w tym kontekście Twoje role są złe

I to jest clou, dziękuję.
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: role w asocjacji w EA

Adrian O.:
Jarosław Ż.:
nie ma relacji a są związki, jeżeli masz na myśli relacje takie jakie są między tablicami w RDBMS to ten diagram nie ma

Tak przy okazji - to są związki. W modelu relacyjnym relacją jest tabela.

Problem (z powodu którego można oblać egzamin i polecieć na rozmowie kwalifikacyjnej, a nawet zostać wyproszonem ze spotkania projektowego w pewnej firmie) powstał ze złego tłumaczenia słowa relationship. Relationship != relation w kontekście teorii relacyjnych baz danych.

faktem jest, że jakość "tłumaczenia" ma znaczenie bo dwie klasy (a konkretnie obiekty) współpracują zaś dwie tabele są ze sobą powiązane
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: role w asocjacji w EA

Paweł K.:
Dodam, że rolą klasy jest "robienie czegoś" (klasa ma odpowiedzialność) a nie "bycie czymś" i w tym kontekście Twoje role są złe

I to jest clou, dziękuję.

ufff, udało się ;)
Radosław Zadroga

Radosław Zadroga
Programista/projekta
nt - młodszy adept

Temat: role w asocjacji w EA

Paweł K.:
>
AdColumn ma oznaczać kolumna ogłoszenia (ad - ogłoszenie) czy raczej AddColumn - dodaj kolumnę?
tak samo z AdTable

Ja bym widział to tak:
class Table{
_name;
_defaultCollation;
_rowsCount;
_columnsCount;
_lastPrimaryKey;

}
class Column{
_orderNumber;//liczba porządkowa
_isForeignKey;
_isPrimaryKey;
_attributes;
_extras;
/** W PHP typowanie jest dynamicze ale w JAVAie dałbym klasę VariableData która miałaby potomki: FloatData, IntData, StringData, ... i ich interfejs _toString(), i getValue()
_defaultValue;
/** @var String */
_type;
_isIndex;
/**@var: Column|null */
_index;
_collation;

}
class Row {

}
class SQLGenerator {
}

Table związek kompozycja do części Column, Row

od tego bym zaczął

PS: niedawno pisałem javascriptowy parser struktury tabeli MySQL wyświetlanej w PHPMyAdmin-ie
do generowania klasy PHP mającej 'obsłużyć' tabelę

Jarosław Ż.:
>... EA to nie UML....
Szkoda bo to lekkie narzędzie, przyjemne w obsłudze i pomocne również programiście (generowanie klas, SQL-a), miło wspominam ze studiów., szkoda że tylko dla systemów operacyjnych z rodziny Windows.
Jarosław Ż.:
...nic wspólnego z UML.
Z UML czy obiektowym modelowaniem? Dla mnie UML to sposób notacji, czy już stał się sposobem myślenia w modelowaniu, niestety po studiach nie miałem przyjemności dalej rozwijać się w tym kierunku dlatego pytam
Jarosław Ż.:
...
że rolą klasy jest "robienie czegoś" (klasa ma odpowiedzialność) a nie "bycie czymś" i w tym kontekście Twoje role są złe
owszem ale klasa/obiekt ma pewne atrybuty jeżeli nie to wystarczyłby język funkcyjny lub źle została zaprojektowana ta klasa
obiekt - coś co istnieje ma i cechy i umiejętności chociaż o kamieniu tak powiedzieć nie można ale jest obiektem w świecie rzeczywistym, więc co jest ważniejsze mieć czy być, czy coś jest ważniejsze?
Nauczono mnie że projektując zaczyna się od ustalenia nazwy klasy, potem jej atrybutów dopiero wtedy funkcjonalność, teraz praktykując trochę dla każdego atrybutu szukam od razu uzasadnienia czyli funkcjonalności która będzie nad nim pracowała. Inaczej jest on w tej klasie niepotrzebny.
Przepraszam że tak bujam w obłokach, jeżeli w którymś miejscu zabłądziłem proszę szybko mnie naprowadzić na właściwą drogę.
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: role w asocjacji w EA

Radosław Z.:

to programowanie funkcyjne językiem obiektowym
Jarosław Ż.:
...nic wspólnego z UML.
Z UML czy obiektowym modelowaniem? Dla mnie UML to sposób notacji, czy już stał się sposobem myślenia w modelowaniu, niestety po studiach nie miałem przyjemności dalej rozwijać się w tym kierunku dlatego pytam

UML to obiektowo zorientowana notacja...

Jarosław Ż.:
...
że rolą klasy jest "robienie czegoś" (klasa ma odpowiedzialność) a nie "bycie czymś" i w tym kontekście Twoje role są złe
owszem ale klasa/obiekt ma pewne atrybuty

które w podejściu obiektowym są niedostępne na zewnątrz

obiekt - coś co istnieje ma i cechy i umiejętności chociaż o kamieniu tak powiedzieć nie można

można, ma operacje np. reakcja na uderzenie... jako atrybut ma swoja masę i objętość (nie udostępniane na zewnątrz, trzeba wykonać operacje "podaj swoje parametry".
Nauczono mnie że projektując zaczyna się od ustalenia nazwy klasy, potem jej atrybutów dopiero wtedy funkcjonalność,

kiepsko Cie nauczono
Paweł Koralewski

Paweł Koralewski architekt aplikacji,
team leader

Temat: role w asocjacji w EA

Radosław Z.:

AdColumn ma oznaczać kolumna ogłoszenia (ad - ogłoszenie) czy raczej AddColumn - dodaj kolumnę?

"Ad" to nazwa modułu, w którym są zdefiniowane klasy Ad*** oraz powoływane instancje tych klas.
Zatem w nazewnictwie nie popełniłem pomyłki ;)



Wyślij zaproszenie do