Wpis z mikrobloga

Czy można powiedzieć że klasa ma hipotetyczną doskonałą wewnętrzną spójność (cohesion) jeżeli każda z publicznych metod klasy używa wszystkich zmiennych stanu (pól) klasy ?

#programowanie
  • 11
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@LeopoldStuff: Wydaje mi się, że żeby coś było spójne, to powinno być logiczne i niesprzeczne, do tego koherentne, czyli każda część klasy powinna w jakiś sposób znaczeniowo przystawać do całości. Nie wydaje mi się, żeby spójność dało się sprowadzić do jakiejś prostej zasady, praktyki.
  • Odpowiedz
@rmweb: ale czy w tym przypadku to nie bedzie prawda? Wydaje mi sie, że użycie wszystkich zmiennych stanu w danej metodzie powoduje, że jest ona jednoznacznie spojna z klasą. I analogicznie mozna powiedziec, że gdy połowa metod uzywa połowy zmiennych a druga połowa metod drugiej połowy zmiennych to na pewno mamy do czynienia z niespójną klasą i powinna ona byc rodzielona na dwie
  • Odpowiedz
@LeopoldStuff: Idąc takim rozumowaniem dojdziemy do absurdu, że np. nie można zrobić całościowego obiektu samochodu, no bo przecież składa się z różnych elementów tj. sprzęgło, skrzynia biegów, silnik itd., więc to będzie logiczne, jeśli jedna metoda operuje tylko na sprzęgle, a inna tylko na skrzyni biegów. Czy fakt, że samochód posiada pewne funkcje, które ze sobą nie kolidują, sprawia, że samochód jest wewnętrznie niespójny? Wydaje mi się, że nie. Oczywiście
  • Odpowiedz
@rmweb: zależy jakie zmienne stanu siedzą w samochozi. Jeżeli np siedzą zmienne: predkość jazdy, kierunek jazdy, działające siły, moment itp to wtedy właściwie dotykając czy to sprzęgła, czy silnika, czy kierownicy powodujemy że musimy uwzględnić i zaktualizować te wszystkie zmienne
  • Odpowiedz
@rmweb: zależy jaki to model, jeżeli bardzo szczegółowy to sprzęgło będzie oddziaływało na wycieraczki poprzez zmianę prędkości i przez to zmiany oporu pracy wycieraczek.
Jeżeli mamy prostszy model gdzie system wycieraczek nie oddziałuje na auto i vice versa to po co je umieszczać w aucie?
Będziesz wtedy miał taki kod mniej więcej:

class
  • Odpowiedz
@LeopoldStuff: Powiem Ci, że w gruncie rzeczy masz rację, ale w mojej opinii spójność to nie to samo co single responsibility principle. Samo istnienie metod, które prowadzą do rozdwojenia klasy, nie powoduje jeszcze sprzeczności wewnątrz klasy, a dopóki nie ma sprzeczności, to jest spójność. W twoim przykładzie, gdzie jedna metoda używa 50% właściwości, a druga drugie 50%, to raczej nie prowadzi do wewnętrznej sprzeczności, bo one jakby idealnie są od
  • Odpowiedz
@rmweb: jeśli chodzi o przykład gdzie jest podział klasy na pół to pozornie nie ma problemu bo jest w miarę czysto podzielone ale w praktyce te problemy są:
- jeżeli klasa implementuje też jeden zbiorczy typ (interfejs) który odpowiada za jedne i drugie operacje to mamy problem z częstą zmianą interfejsu a co za tym moduły używające tego typu/interfejsu niepotrzebnie są narażone na zmiany za każdym razem gdy coś w
  • Odpowiedz
@rmweb: chyba się zapętliliśmy bo wydaje mi się że z moich rozważań wynika że warto stosować te zasady (czyli to żeby niezależne rzeczy były oddzielnie mimo że pozornie należą do jednej całości) bo prowadzi to do szeregu problemów o których wyżej wspominałem.

Ale pierwotne pytanie było inne:
Czy można powiedzieć że klasa jest idealnie spójna jeżeli wszystkie jej publiczne metody używają wszystkich zmiennych stanu?
Nie mówię że zawsze tak ma
  • Odpowiedz
@LeopoldStuff: To właściwie trzeba by wrócić do mojej pierwszej odpowiedzi. Spójność - logiczna niesprzeczność, koherencja. Wtedy odpowiedź brzmi nie. Zależy od definicji spójności ( ͡° ͜ʖ ͡°)
  • Odpowiedz