Temat: Częste błędy na diagramach UML dziedziczenie i użycie
Jakub W.:
A ja sobie pozwolę na konstruktywną krytykę.
Na taką jestem zawsze chętny :)
1. relations over inheritance
Masz rację, miało być "composition over inheritance". Już poprawione. Dzięki za czujność.
dziedziczenie [...] nie da się emulować agregacją / kompozycją / asocjacją
Tylko, że celem nie powinna być emulacja, a zastąpienie dziedziczenia jakąś "słabszą", nie tak wiążącą relacją.
Sumując - jeśli na etapie projektowania najlepszym rozwiązaniem jest dziedziczenie to należy je zastosować bez wgłębiania się w to, jak będzie wyglądać diagram (o wyglądzie później).
Jeśli wychodzi, że dziedziczenie jest najlepszym rozwiązaniem, to zgadzam się, że należy je wykorzystać. Po to w końcu ktoś dał nam taką możliwość. Jednak, jeżeli cały projekt jest w porządku, to nigdy nie będzie nam dane oglądać takich diagramów - one po prostu w takich przypadkach nie powstają.
Mechanizm dziedziczenia wprowadzono min. po to, żeby w pewnych sytuacjach, zamiast modyfikować klasę, można było na jej postawie stworzyć nową (dziedziczenie) i w niej coś nowego zaimplementować.
Ciężko mi jest przypomnieć sobie sytuację gdy nie było (sensownej i logicznej) możliwości zastąpienia dziedziczenia innym rodzajem relacji. A to zawsze przynosi korzyść - zamieniamy najmocniejszą relację, na lżejszą zależność,
BTW: drzewo, jako rodzaj grafu, jest najłatwiejsze w analizie.
Nie rozumiem jak to zdanie odnosi się do kontekstu, czyli do poprawnego projektowania rozwiązań?
Wprowadzenie mediatora nigdy nie jest rozwiązaniem tego problemu
Tylko, że ja nie napisałem, że jest to rozwiązanie problemu, a pierwszy krok ku temu rozwiązaniu.
Odseparowanie tych wszystkich zależności i zagregowanie ich w jednym miejscu często ułatwia podjęcie kolejnych kroków.
i to z bardzo prostego powodu - nie likwiduje, a jedynie ukrywa (na diagramie), powiązania między klasami (tzn. może ukrywać zależności między obiektami a nie konkretnymi klasami).
Ale nie to jest celem tego pierwszego kroku. Nie ukrycie, a zebranie ich wszystkich w jednym miejscu, przyjrzenie się powiązaniom pomiędzy nimi. To pozwala wyciągnąć wnioski, które ułatwiają dalszą refaktoryzację.