Sam OOP niewiele się zmienił od samego początku. Zbadano kilka nowych punktów widzenia, ale podstawowe zasady są nadal takie same. Co więcej, zbiorowa wiedza gromadzona przez lata sprawia, że życie programisty jest łatwiejsze niż trudniejsze. Wzory projektowe nie stanowią przeszkody; stanowią zestaw narzędzi do rozwiązywania standardowych problemów, destylowanych na podstawie wieloletniego doświadczenia.
Dlaczego więc dzisiaj postrzegasz OOP jako bardziej złożony niż wtedy, gdy zacząłeś go używać?
Jednym z powodów może być to, że kod, na który jesteś narażony, staje się bardziej złożony - nie dlatego, że OOP stał się bardziej skomplikowany, ale dlatego, że zrobiłeś postępy w drabinie uczenia się i możesz czytać większe i bardziej złożone podstawy kodu.
Innym powodem może być to, że chociaż paradygmat złożoności się nie zmienił, rozmiar i złożoność przeciętnego projektu oprogramowania może równie dobrze mieć. Mając moc obliczeniową dostępną w telefonach komórkowych klasy klienta, która byłaby mokrym marzeniem dewelopera na serwerze mniej niż dwie dekady temu, opinia publiczna zasadniczo oczekuje sprytnych animowanych graficznych interfejsów użytkownika nawet dla najtańszej aplikacji do rzucania, a komputery stacjonarne klasy podstawowej są mocniejsze niż „superkomputer” z lat osiemdziesiątych, naturalne jest, że poprzeczka została podniesiona od początków Smalltalk i C ++.
Jest też fakt, że we współczesnych aplikacjach współbieżność i równoległość są raczej normą niż wyjątkiem, a aplikacje często muszą komunikować się między różnymi maszynami, generując i analizując całe zoo protokołów. Chociaż OOP jest świetny jako paradygmat organizacyjny, ma swoje ograniczenia, podobnie jak każdy inny paradygmat: na przykład nie zapewnia dużej ilości abstrakcji dla współbieżności (większość implementacji jest mniej więcej przemyślana lub całkowicie zlecana bibliotekom) , i nie jest to najlepsze możliwe podejście do budowania parserów i przekształcania danych. Współczesne programowanie często napotyka ograniczenia paradygmatu OOP, a wzorce projektowe mogą cię zaprowadzić. (Osobiście, Uważam, że potrzebujemy wzorców projektowych, co jest tego oznaką - jeśli paradygmat zapewniłby te rozwiązania od razu po wyjęciu z pudełka, byłoby bardziej wyraziste dla tych problemów, a standardowe rozwiązania byłyby oczywiste. Nie ma wzorca projektowego opisującego dziedziczenie metody, ponieważ jest to podstawowa cecha OOP; ale istnieje wzorzec fabryczny, ponieważ OOP nie zapewnia oczywistego naturalnego sposobu konstruowania obiektów polimorficznie i przezroczysto.)
Z tego powodu większość współczesnych języków OOP zawiera funkcje innych paradygmatów, co czyni je bardziej ekspresyjnymi i potężnymi, ale także bardziej złożonymi. C # jest tego najlepszym przykładem: ma oczywiste korzenie OOP, ale funkcje, takie jak delegaty, zdarzenia, wnioskowanie o typie, warianty typów danych, atrybuty, anonimowe funkcje, wyrażenia lambda, generyczne itp., Pochodzą z innych paradygmatów, w szczególności programowania funkcjonalnego .