Dziedziczenie to sposób na ponowne użycie kodu istniejących obiektów lub ustanowienie podtypu z istniejącego obiektu, lub obu, w zależności od obsługi języka programowania.
Kiedy wolisz wzorce dziedziczenia niż miksy w dynamicznych językach? Przez mixiny mam na myśli faktyczne właściwe wkomponowanie, tak jak wstawianie funkcji i elementów danych do obiektu w czasie wykonywania. Kiedy użyjesz na przykład dziedziczenia prototypowego zamiast mixin? Aby lepiej zilustrować, co rozumiem przez mixin, pseudokod: asCircle(obj) { obj.radius = 0 …
W Meyer Object-Oriented Software Construction (1988) definiuje zasadę otwartego / zamkniętego w następujący sposób: Mówi się, że moduł jest otwarty, jeśli jest nadal dostępny do rozszerzenia. Na przykład powinna istnieć możliwość dodawania pól do zawartych w nim struktur danych lub nowych elementów do zestawu funkcji, które wykonuje. Moduł zostanie uznany …
Pewna awaria OOP jest pokazana z klasą Kwadrat dziedziczącą po Prostokącie, gdzie logicznie Kwadrat jest specjalizacją Prostokąta i dlatego powinien dziedziczyć po nim, ale wszystko się rozpada, gdy próbujesz zmienić długość lub szerokość Kwadratu. Czy istnieje konkretny termin opisujący, co dzieje się w tej sprawie?
W naszej aplikacji Rails dodajemy powiadomienia. Niektóre z nich to blocking: Zatrzymują postęp dodawanego zasobu, ponieważ brakuje niektórych informacji o tym zasobie. Inne powiadomienia są prostymi powiadomieniami i zawierają jedynie informacje. Dzisiaj rozmawiałem z innym programistą w naszym zespole. Utworzyłem następującą strukturę dziedziczenia: Wolałby jednak, abym po prostu dodał blockingjako …
W Javie dostępne są cztery modyfikatory dostępu do metod: public - każda klasa może korzystać z tej metody. protected - klasy w tym samym pakiecie i podklasy w dowolnym pakiecie mogą korzystać z tej metody. private - tylko ta klasa może korzystać z tej metody. no modifier („pakiet prywatny”) - …
Obecnie mam dwie klasy pochodzące, Ai B, że obaj mają równe wspólnego i próbuję ustalić, czy należy przejść do klasy podstawowej. Nigdy nie jest przywoływany z klasy podstawowej i powiedzmy, że jeśli w pewnym momencie drogi zostanie wyprowadzona inna klasa C, która nie ma _field1, to nie naruszono by zasady …
W obecnej formie to pytanie nie pasuje do naszego formatu pytań i odpowiedzi. Oczekujemy, że odpowiedzi poparte będą faktami, referencjami lub wiedzą fachową, ale to pytanie prawdopodobnie będzie wymagało debaty, argumentów, ankiet lub rozszerzonej dyskusji. Jeśli uważasz, że to pytanie można poprawić i ewentualnie ponownie otworzyć, odwiedź centrum pomocy w …
Zainspirowany tą odpowiedzią: Wymaga tego zasada substytucji Liskowa W podtypie nie można wzmocnić warunków wstępnych. Warunki podrzędne nie mogą zostać osłabione w podtypie. Niezmienniki nadtypu muszą być zachowane w podtypie. Ograniczenie historii („reguła historii”). Obiekty są uważane za modyfikowalne tylko za pomocą ich metod (enkapsulacji). Ponieważ podtypy mogą wprowadzać metody, …
Dzisiaj zauważyłem, że zasadniczo nigdy nie używam protectedmetod w kodzie C ++, ponieważ rzadko czuję potrzebę wywoływania niepublicznych metod rodzica. Używam trybu chronionego w Javie we wzorcu metod szablonów, ale ponieważ możesz zastąpić metody prywatne w C ++, ja też nie potrzebuję protected. Więc jakie są niektóre scenariusze w świecie …
Ta strona opowiada się za kompozycją za dziedziczeniem za pomocą następującego argumentu (sformułował to w moich słowach): Zmiana podpisu metody nadklasy (która nie została zastąpiona w podklasie) powoduje dodatkowe zmiany w wielu miejscach, gdy używamy dziedziczenia. Jednak gdy korzystamy ze składu, wymagana dodatkowa zmiana występuje tylko w jednym miejscu: podklasie. …
Mam klasę, która otacza inną klasę wspólnego typu podstawowego. Ponieważ interfejs typu podstawowego jest dość duży, wymaga to napisania wielu funkcji tranzytowych. Szukam sposobu, aby tego uniknąć. Zróbmy przykład: Car / \ Volvo VolvoWithTrailer Teraz muszę zaimplementować każdą funkcję w interfejsie samochodowym VolvoWithTrailer i wywołać odpowiednią funkcję na zawiniętym obiekcie …
Próbuję nauczyć się inżynierii oprogramowania i napotykam sprzeczne informacje, które mnie dezorientują. Uczyłem się OOP i czym są abstrakcyjne klasy / interfejsy i jak z nich korzystać, ale potem czytam, że należy „preferować kompozycję zamiast dziedziczenia”. Rozumiem, że skład ma miejsce, gdy jedna klasa tworzy / tworzy obiekt innej klasy …
Poniższy kod powoduje wyciek pamięci: #include <iostream> #include <memory> #include <vector> using namespace std; class base { void virtual initialize_vector() = 0; }; class derived : public base { private: vector<int> vec; public: derived() { initialize_vector(); } void initialize_vector() { for (int i = 0; i < 1000000; i++) { …
Czy w przypadku klas z polami opcjonalnymi lepiej jest użyć dziedziczenia lub właściwości zerowalnej? Rozważ ten przykład: class Book { private String name; } class BookWithColor extends Book { private String color; } lub class Book { private String name; private String color; //when this is null then it is …
O ile wiem, puste interfejsy są ogólnie uważane za złą praktykę - szczególnie tam, gdzie język obsługuje takie atrybuty, jak atrybuty. Czy jednak interfejs jest uważany za „pusty”, jeśli dziedziczy po innych interfejsach? interface I1 { ... } interface I2 { ... } //unrelated to I1 interface I3 : I1, …
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.