Onixarts / Hapcanuino

Arduino based modules for Hapcan Home Automation Project
4 stars 2 forks source link

Call super anti-pattern in HapcanDeviceSubModuleHost #30

Open mariusz-n opened 4 years ago

mariusz-n commented 4 years ago

Call super Wszystkie metody wirtualne muszą być wywołane z klasy wyprowadzonej. Jeśli się tego nie zrobi, dzieją się złe rzeczy, np. sub-moduły nie zostają zainicjalizowane. Przydałoby się to zrobić inaczej, bezpieczniej.

Onixarts commented 4 years ago

Akurat tutaj wirtualne metody w klasie bazowej są puste i raczej nic w nich nie będzie, bo ich przeznaczeniem jest przeciążanie w klasie potomnej. Więc niewywołanie ich nie jest groźne i nie popsuje niczego. Gdy zajdzie taka potrzeba to wywołanie się doda. A jesli ktoś będzie przeciążał metody z HapcanDeviceSubModuleHost to jak najbardziej musi pamiętać o wywołaniu supera. No chyba, że ma inny pomysł na działanie tych metod :).

mariusz-n commented 4 years ago

Jeśli są puste w klasie bazowej, to dlaczego trzeba wywołać supera?

A może nie mówimy o tej samej klasie, bo metody wirtualne klasy HapcanDeviceSubModuleHost nie są puste. Przykład:

virtual void OnInit()
{
    for (byte i = 0; i < SubmodulesCount; i++)
    {
        m_subModules[i]->Init();
    }
}

Jeśli czytałeś podanego linka, to wiesz, że to jest problem, a opisałem go, bo sam na niego trafiłem,