OOP ma skład i substytucję.
C ++ ma wiele elementów dziedziczenia, specjalizacji szablonów, osadzania i semantyki value / move / pointer.
Java ma pojedyncze dziedziczenie i interfejsy, osadzanie i semantykę odniesienia.
Powszechnym sposobem, w jaki szkoła OOP używa tych języków, jest stosowanie dziedziczenia do podstawiania obiektów i osadzania do kompozycji. Ale potrzebujesz także wspólnego przodka i sposobu na wykonanie w środowisku uruchomieniowym (w C ++ nazywa się dynamic_cast
, w Javie po prostu pyta interfejsu od innego).
Java robi to wszystko przez swoją własną java.lang.Object
zakorzenioną hierarchię. C ++ nie ma predefiniowanego wspólnego katalogu głównego, więc powinieneś przynajmniej go zdefiniować, aby uzyskać ten sam „obraz” (ale to ogranicza niektóre możliwości C ++ ...).
Następnie możliwość posiadania polimorfizmu w czasie kompilacji (pomyśl o CRTP) i semantycznej wartości może zaoferować także inne alternatywy dla sposobu, w jaki koncepcja „obiektu OOP” może zostać przeniesiona do programu C ++.
Możesz nawet wyobrazić sobie, że herezja używa osadzania i niejawnej konwersji do zarządzania substytucją i prywatnym dziedziczeniem do zarządzania kompozycją, w rzeczywistości odwracając tradycyjny paradygmat szkolny. (Oczywiście w ten sposób jest o 20 lat młodszy od drugiego, więc nie oczekuj wsparcia ze strony szerokiej społeczności)
Lub możesz sobie wyobrazić wirtualną wspólną bazę dla wszystkich klas, od interfejsu interfejsu (bez implementacji) do klas końcowych (w pełni zaimplementowanych) przechodzących przez częściowo zaimplementowane interfejsy, a nawet klastry interfejsów, wykorzystując „dominację” jako wysyłanie z interfejsu do implementacji za pomocą „wielu stosów” -parallelogram ”schemat dziedziczenia.
Porównanie OOP do java z C ++ przy założeniu, że istnieje tylko jeden sposób OOP, ogranicza możliwości obu języków.
Zmuszanie C ++ do ścisłego przestrzegania idiomów kodujących Java oznacza denaturację C ++, ponieważ zmuszanie Javy do zachowywania się jak język C ++ denaturuje Javę.
Nie chodzi o „wrażliwość”, ale o różne „mechanizmy agregacji” dwóch języków i inny sposób ich łączenia, co sprawia, że niektóre idiomy są bardziej opłacalne w jednym języku niż w drugim i odwrotnie.