Śmierć technologii OOP [zamknięte]

9

Wiele razy słyszałem o programowaniu aspektowym, głównie że jest to technologia „następnej generacji” w programowaniu i zamierza „zabić” OOP.

Czy to jest poprawne? Czy OOP umrze lub co może być tego przyczyną?

Dehumanizer
źródło

Odpowiedzi:

40

Za każdym razem, gdy ktoś powie Ci, że jedna technologia oprogramowania zabije inną lub zdominuje cały rynek / zastosowanie / odbiorców, pamiętaj o tym:

Zdrowy (dynamiczny, ale stabilny) ekosystem składa się z wielu różnych gatunków.

Oznacza to, że każda nowa technologia hiper przechodzi przez krzywą szumu, a na końcu znajdzie swój specyficzny (-e) cel w czasie i doświadczeniu z nią.

Krzywa szumu

Oznacza to również, że tak ekstremalna koncepcja, jak programowanie zorientowane na aspekt, jest przydatna, jeśli jest potrzebna, co oznacza, że ​​nie zawsze i niezbyt często z powodu domniemanych kosztów.

Ale ma już swoje miejsce, takie jak programowanie OOP, programowanie ogólne, programowanie funkcjonalne, programowanie proceduralne itp.

Czy zauważyłeś, że języki, które są częściej używane (i kontrowersyjnie popularne) i szeroko rozpowszechnione w prawdziwym życiu, nie są „czyste”? Dzieje się tak, ponieważ zezwolenie na kilka paradygmatów sprawia, że ​​są one bardziej elastyczne w zmienianiu kontekstu w czasie i wypełniają więcej nisz użytkowych.

Klaim
źródło
1
+1 za „nieczyste”. Czyste języki OOP są szczególnie martwe, z wyjątkiem bardzo niszowych zastosowań / nauczycieli akademickich.
jv42
Co uznalibyśmy za czysty język OO? Pogawędka?
Zhehao Mao
20

OOP nie umrze z powodu AOP. AOP dodaje pewną wartość, ale żyje w doskonałym współistnieniu z OOP. Nie sądzę, że programowanie funkcjonalne zabije także OOP. OOP jest zbyt dobry dla wielu rodzajów domen problemowych, nie ma sensu zastępować go paradygmatem funkcjonalnym.

użytkownik 281377
źródło
1
To bardzo subiektywne. Nie sądzę, aby OOP dobrze pasowało do konkretnej domeny problemowej, ale dobrze pasuje do sposobu, w jaki konkretny programista tworzy rozwiązanie. OOP nie umrze, ponieważ programiści nie mogą zmieniać paradygmatów.
Raynos
6
Klasycznym przykładem dobrego dopasowania OOP są GUI. Trudno wyobrazić sobie interfejs API dla zestawu narzędzi GUI, który nie jest OO, nawet jeśli nie jest nim język. (To prawda, że ​​zwykle nie używa się terminu „domena problemowa”). Aby podać przykład prawdziwej domeny problemowej, w której OOP jest dobrze dopasowane: automatyzacja magazynu. Modelowanie pojazdów do przechowywania i wyszukiwania oraz ich działań to miejsce, w którym OOP wydaje się być naturalnym dopasowaniem.
user281377,
2
@ammoQ, GUI są straszne, gdy wyrażone w OO. To jest powód, dla którego wszystkie interfejsy API dryfują w kierunku DSL (WPF i podobne). Nietrudno wyobrazić sobie, powiedzmy, Tk - nie ma tam ani jednego śladu OOP, ale nadal jest świetny (do programowania, nie ze względu na wygląd i działanie), znacznie lepszy niż jakikolwiek przerośnięty zestaw narzędzi Java OO. OOP pasuje bardzo dobrze do wszelkich symulacji opartych na agentach (takich jak te, które wymieniłeś), ale jest to niewielka część istniejących problemów.
SK-logic
6
Patrząc na pierwsze przykłady tk, które mogłem znaleźć, jak to nie jest OO? Z samouczka: „Widżety są obiektami, instancjami klas reprezentującymi przyciski, ramki itp.” tkdocs.com/tutorial/concepts.html Co więcej, same DSL są bardzo zależne od programowania OO. Więc tak naprawdę nie rozumiem, co próbujesz powiedzieć?
Inca
3
@ Sk-logic, @ammoQ, @Raynos, @jkocking, awansowałem to na własne pytanie: programmers.stackexchange.com/questions/88385/ ... Byłbym bardzo zainteresowany, aby uzyskać więcej wyjaśnień na ten temat, jestem bardzo zainteresowany do nauki.
Inca
12

Paradygmaty przychodzą i odchodzą, ale starszy kod jest wieczny. Zawsze będzie kod C ++ do utrzymania, więc OOP nigdy nie umrze całkowicie.

John Bode
źródło
6
+1 za naprawdę genialne zdanie: „Paradygmaty przychodzą i odchodzą, ale starszy kod jest wieczny”
NoChance
8

Krótka odpowiedź: Nie, nie sądzę.

Dłuższa odpowiedź: z tego, co rozumiem na temat AOP, nie jest on sam w sobie paradygmatem programowania (jako że nie zastępuje OOP), ale raczej dodatkiem, zestawem narzędzi, który pomaga pisać krótsze metody, prostsze klasy z pojedynczą odpowiedzialnością itp. Ale to nie zastępuje OOP.

Tym, co (przynajmniej częściowo) zastępuje lub dodaje do OOP, jest programowanie funkcjonalne, które w rzeczywistości jest innym paradygmatem programowania (chociaż można go łączyć z OOP, na przykład w języku programowania Scala ). Preferuje niezmienne struktury danych i wszelkiego rodzaju fantazyjne funkcje, które zwykle frustrują programistów OOP, szczególnie jeśli chodzi o współbieżność.

Cthulhu
źródło
Funkcjonalna <-> Imperatywna to linia. OOP jest do niego równoległy. Myślę, że procedura jest na drugim końcu OOP, ale nie jestem pewien. Oczywiście to zabawne, że paradygmat funkcjonalny jest starszy niż paradygmat OOP :)
Raynos
2
@Raynos, nie ma linii prostej. OOP to tylko jedna niewielka metalingwistyczna abstrakcja wewnątrz ogromnego (nieskończonego) zestawu możliwych abstrakcyjnych języków. I oczywiście głupio jest ograniczać się do jednego z nich.
SK-logic
6

O OO mówi się dziś mniej, ponieważ zakłada się, że jest to de facto podejście w wielu sytuacjach. AOP nigdy nie zerwał się z ziemią jako ruch masowy.

http://imgur.com/9VmKC


źródło
5

Pamiętam, jak po raz pierwszy usłyszałem o programowaniu zorientowanym na aspekt w programie OOPSLA '97. Powiedzieli, że wtedy zabije OO. Od tego czasu OO przekroczyło najśmielsze oczekiwania. AOP jest wciąż mało znany, zasadniczo nie ma wpływu na przemysł komputerowy. Myślę, że odpowiedź jest oczywista, że ​​AOP nie jest zabójcą OO.

Maczać
źródło
1

Spójrz na niektóre istniejące systemy AOP. Zależą od tego, że masz kod napisany w jakiejś formie - na przykład Spring AOP polega na tym, że masz zdefiniowane metody w klasie. Castle Windsor obsługuje go w języku C #, który jest językiem obiektowym.

Możesz teoretycznie przejść z OOP na programowanie strukturalne i nadal zachować AOP, ale w praktyce byłoby to trudne. Łatwo jest podklasować coś, zastąpić odpowiednią metodę, aby wywołać odpowiednie filtry przed / po i przekazać to w procesie wstrzykiwania zależności.

To jest cholernie trudne w porównaniu do przepisywania statycznych wywołań metod, aby kierować do metody trampoliny zaprojektowanej do wywoływania filtrów zdefiniowanych przez użytkownika.

Tak więc ze wspólnego punktu widzenia implementacji AOP wymaga OOP.

dhasenan
źródło
0

Chociaż OOP z pewnością nie jest srebrną kulą, to samo można powiedzieć o AOP. Obsługuje projektowanie oparte na komponentach, jednak w schemacie większym komponenty są nowymi obiektami, a interfejsy komponentów są w zasadzie transakcyjną listą metod, co NIE jest prawdziwym OOP.

Dalsze AOP i projektowanie oparte na komponentach wspierają Anemiczny model danych, który jest bardziej krytykowany przez inteligentniejszych ludzi niż ja.

http://martinfowler.com/bliki/AnemicDomainModel.html

(Wiem, że powyższy artykuł jest stary, ale zaskakująco istotny)

Najważniejsze jest to, że systemy AOP są tutaj, ale są dalekie od ideału. Żaden system nie jest idealny.

wałek klonowy
źródło