Jeff, myślę, że masz właściwą intuicję: to zależy.
Hierarchie obiektów zorientowanych na obiekt z wirtualnym rozsyłaniem metod są dobre, gdy masz stosunkowo ustalony zestaw metod, które trzeba wdrożyć, ale wiele potencjalnych podklas, które mogą dziedziczyć z katalogu głównego hierarchii i implementować te metody. W takiej konfiguracji stosunkowo łatwo jest dodać nowe podklasy (wystarczy zaimplementować wszystkie metody), ale stosunkowo trudno jest dodać nowe metody (musisz zmodyfikować wszystkie podklasy, aby upewnić się, że poprawnie implementują nową metodę).
Typy danych z funkcjami opartymi na dopasowywaniu wzorców są dobre, gdy masz względnie ustalony zestaw klas, które należą do typu danych, ale wiele potencjalnych funkcji, które działają na tym typie danych. W takiej konfiguracji stosunkowo łatwo jest dodać nową funkcjonalność dla typu danych (tylko dopasowanie wzorca na wszystkich jego klasach), ale stosunkowo trudno jest dodać nowe klasy, które są częścią typu danych (musisz zmodyfikować wszystkie funkcje, które pasują do siebie na typie danych, aby upewnić się, że poprawnie obsługują nową klasę).
Kanonicznym przykładem podejścia OO jest programowanie GUI. Elementy GUI muszą obsługiwać bardzo mało funkcjonalności (rysowanie na ekranie to absolutne minimum), ale nowe elementy GUI są dodawane przez cały czas (przyciski, tabele, wykresy, suwaki itp.). Kanonicznym przykładem podejścia do dopasowywania wzorca jest kompilator. Języki programowania mają zazwyczaj względnie ustaloną składnię, więc elementy drzewa składni rzadko się zmieniają (jeśli w ogóle), ale stale dodawane są nowe operacje na drzewach składniowych (szybsze optymalizacje, dokładniejsza analiza typów itp.).
Na szczęście Scala pozwala łączyć oba podejścia. Klasy przypadków mogą być zarówno dopasowane do wzorca, jak i obsługiwać wysyłanie metodą wirtualną. Regularne klasy obsługują wysyłanie metod wirtualnych i mogą być dopasowywane do wzorca, definiując ekstraktor w odpowiednim obiekcie towarzyszącym. Do programisty należy decyzja, kiedy każde podejście jest odpowiednie, ale uważam, że oba są przydatne.
Link Beust jest uszkodzony, widocznie do zmiany schematu URL. Próbowałem sprawdzić, czy mogę ustalić, który post jest przeznaczony, ale nie jestem pewien. Podaj poprawiony link lub dodatkowe informacje (jaki był tytuł wpisu?). –