Wprowadzenie
Wśród wielu stron WWW jest także ta: Modeling Languages (źródło poniżej). Tym razem autorka w tekście “On comparing modelling languages”, porównuje kilka wybranych, jak je nazwała, “języków modelowania”. Autorka nazywa modelem urządzenia diagramy map myśli i modele pojęciowe, co jest moim zdaniem złym podejściem. Teza, że ontologia to projekt oprogramowania też nie wytrzymuje prostych testów.
Modelowanie
Najpierw sprawdźmy co oznaczają w literaturze pojęcia model i modelowanie:
modelować coś, aby stworzyć kopię lub opis działania, sytuacji itp., aby móc je przeanalizować przed przystąpieniem do prawdziwego działania.
https://www.oxfordlearnersdictionaries.com/definition/english/model_2?q=modeling
W poprzednim artykule na powiązany temat pisałem:
Graficznie ten model pojęciowy mozna zobrazować jako diagram: Pojęcia: diagram, model i mechanizm oraz regulujące je obszary prawa (opr. własne autora)
żr.: Mechanizm działania vs model systemu vs diagram – Jarosław Żeliński IT-Consulting
W komentowanym tekście skupię się na poniższej grafice:
Figure 1. Two example diagrams about espresso machines: a mind map and a conceptual data model. If you have no idea about what or how to compare yet: before reading about the comparisons, can you describe differences between these two examples?
Source: On comparing models
Jak zawsze, warto uporządkować znaczenie pojęć używanych w opracowaniu:
konceptualizacja: stworzyć w umyśle wyobrażenie o czymś
na podstawie https://www.oxfordlearnersdictionaries.com/
koncepcja: idea lub zasada związana z czymś abstrakcyjnym
pojęcie: słowo lub wyrażenie używane jako nazwa czegoś, zwłaszcza związane z określonym typem języka
model pojęciowy (the conceptual model): jest reprezentacją systemu, zjawiska lub problemu, który pokazuje kluczowe pojęcia, zmienne, relacje i założenia. Może być wyrażony za pomocą słów, diagramów lub innych form i pomaga kierować pytaniami badawczymi, hipotezami, metodami i analizą
ontologia: lista pojęć i kategorii w obszarze tematycznym, która pokazuje relacje między nimi
Jak widać, model pojęciowy to sposób wyrażenia ontologii. To bardzo ważne w tym, i nie tylko tym tekście.
Poniżej tak zwana mapa myśli, często stosowane narzędzie do notowania wyników burz mózgów
Powyższy diagram nic nie mówi o tym jak działa to urządzenie i jak je skonstruować.
Automatyczny ekspres do kawy
Realnie taki express wygląda tak:
Schemat blokowy opisujący działanie ekspresu do kawy:
Elementy z jakich zbudowany jest zaparzacz kawy:
Powyższe to jedno zdjęcie i dwa diagramy. Zdjęcie obrazuje realne urządzenie. Schematy pokazują odpowiednio: mechanizm działania oraz części składowe realnego urządzenia.
Prosze zwrócić uwagę, że każdy z tych obrazów ma inny cel. Każda z tych grafik, jako określona forma wyrażenia pewnej treści, to przedmiot prawa autorskiego. Mechanizm działania, wyrażony jako model, z pomocą diagramu jak wyżej, może być np. przedmiotem patentu, jednak hipotetyczny wniosek patentowy nie mógłby zawierać ani zdjęcia ani listy elementów określonej konstrukcji (wcielenie wynalazku w życie). Musiał by zawierać opis mechanizmu działania wyrażony np. w postaci jak powyżej .
To co nazwano “software design”
Czym jest powyższy model? Jeżeli, jak uważa autorka jet to “koncepcyjny model danych”, to spodziewam się atrybutów każdego z tych pojęć. Powyższy diagram nie opisuje tego co można zapisać w jakiejkolwiek bazie danych (związek zawierania sie generalizacja). Odtworzenie tej konstrukcji w kodzie z pomocą języka takiego jak C++/C# czy Java jest możliwe, o ile elementy na tym diagramie będą zawierały operacje pozwalające skorzystać z tej konstrukcji, pozostaje pytanie jak. Owszem jest to możliwe ale bardzo trudne i skomplikowane (prostym testem będzie próba narysowania diagramu sekwencji dla tej architektury), dlatego powyższy schemat, odtworzony w kodzie, nie będzie symulatorem takiego ekspresu, będzie bardzo kosztowną atrapą.
Model ekspresu
Przypomnijmy schemat:
Pytanie: który z powyższych diagramów opisuje (wyjaśnia) mechanizm działania ekspresu do kawy? Wygląda na to, że żaden. Więc jaki model powinien powstać?
Przyjętym w inżynierii systemów (MBSE) sposobem postępowania jest dwuetapowy proces:
- definiowanie typów bloków funkcjonalnych: powstaje Block Definition Diagram,
- oraz projektowanie wewnętrznej konstrukcji systemu (tu urządzania), powstaje Internal Block Diagram
Poniżej oba te diagramy:
Diagram definicji bloków bywa nazywany metamodelem systemu na wzór diagramów klas w UML. Jednak w terminologii notacji SysML to pojęcie nie jest używane. Poniżej model urządzenia:
Po uzupełnieniu go diagramem aktywności byłby pełnym opisem mechanizmu jego działania. Jedynym miejscem, gdzie mógł by się tu pojawić komputer (i programowanie) jest moduł realizujący wybór receptury i jej wykonanie (sterowanie zaparzaczem).
Kończąc, przyznam, że nie wiem co autorka miała na myśli pisząc, że jej diagram to model danych…
Jeden z wielu opisów wyjaśniających szkodliwość dziedziczenia:
https://petozoltan.gitbook.io/clearcode/oop/do-not-use-inheritance
https://thevaluable.dev/guide-inheritance-oop/