Pytanie Jaka jest różnica między klasą abstrakcyjną a mieszanką?


Właśnie znalazłem artykuł w środowisku Java, które najwyraźniej pozwala na obsługę Mixins i coś, co nazywa się Programowaniem Zorientowanym Kompozytowo (co, o ile wiem, może być nawet tym samym) ... Słyszałem też o / pracowałem z AOP, i nie jestem pewien, jak to się od tego różni ...


14
2018-02-26 16:48


pochodzenie




Odpowiedzi:


Na poziomie językowo-agnostycznym, mixin po prostu dodaje funkcjonalność do klasy, i jest bardziej dla wygody programisty i uniknięcia duplikacji kodu. Klasa abstrakcyjna (podstawowa) tworzy relację is-a i pozwala na polimorfizm. Jednym z powodów, dla których dziedziczenie jest nadużywane, jest to, że jest to łatwy sposób na implementowanie mixinów bez pisania jakiegokolwiek schematu w językach, które tak naprawdę ich nie wspierają. Problem polega na tym, że deklarujesz polimorfizm - związek jako efekt uboczny, co powoduje, że twoje API jest bardziej mylące i prawdopodobnie dodaje niejednoznaczność. W związku z tym nowsze języki, takie jak D i Ruby, obsługują mixiny jako funkcje natywne, co pozwala w wygodny sposób dodać do klasy kilka funkcji bez deklarowania polimorficznego związku.


24
2018-02-26 16:54



+1 Dobre krótkie wyjaśnienie. Te rzeczy COP brzmią fajnie. Chociaż lubię widzieć takie rzeczy, idą w dół do poziomu podstawowego języka. To samo z rzeczami AOP. - BuddyJoe
@Bruno Podstawowy język, taki jak C ++? - leeand00
zwięzłe i bardzo jasne. Niesamowite wytłumaczenie! - Hugo
Sądzę, że sens tworzenia niepoprawnej / niepotrzebnej relacji "jest-a" to dobry punkt. - mklauber
Wspomniane "ramy" (Qi4j) według PO to już teraz Apache Zest. - Niclas Hedhman


Mixin nigdy nie jest rozumiany jako samodzielna klasa. Dodają tylko niektóre funkcje do zadeklarowanej klasy. W języku Python można je łatwo zastosować do dekoratorów klas. Na przykład możesz udekorować swoją klasę za pomocą Singleton mixin, dzięki czemu twoja klasa będzie singletonem.


0
2018-02-26 17:35