Powiedzmy, że mamy listę encji Zadania i ProjectTaskpodtyp. Zadania można zamknąć w dowolnym momencie, z wyjątkiem tych, ProjectTasksktórych nie można zamknąć, gdy mają status Uruchomione. Interfejs użytkownika powinien upewnić się, że opcja zamknięcia uruchomionego ProjectTasknigdy nie jest dostępna, ale w domenie istnieją pewne zabezpieczenia: public class Task { public Status …
Próbuję zrozumieć SOLIDNE zasady OOP i doszedłem do wniosku, że LSP i OCP mają pewne podobieństwa (jeśli nie powiedzieć więcej). zasada otwarta / zamknięta stwierdza: „jednostki oprogramowania (klasy, moduły, funkcje itp.) powinny być otwarte na rozszerzenie, ale zamknięte na modyfikację”. LSP w prostych słowach stwierdza, że dowolną instancję Foomożna zastąpić …
Najwyżej oceniana odpowiedź na to pytanie dotyczące zasady substytucji Liskowa stara się rozróżnić pojęcia podtyp i podklasa . Wskazuje również, że niektóre języki łączą oba języki, podczas gdy inne nie. W przypadku języków obiektowych, które znam najbardziej (Python, C ++), „typ” i „klasa” są pojęciami synonimicznymi. Jeśli chodzi o C …
Dobrze znaną wadą tradycyjnych hierarchii klas jest to, że są one złe, jeśli chodzi o modelowanie świata rzeczywistego. Na przykład próba przedstawienia gatunku zwierząt za pomocą klas. W rzeczywistości robi to kilka problemów, ale jednym z nich, którego nigdy nie widziałem, jest rozwiązanie, gdy podklasa „traci” zachowanie lub właściwość zdefiniowaną …
Śledziłem to wysoko głosowane pytanie dotyczące możliwego naruszenia zasady substytucji Liskowa. Wiem, czym jest zasada podstawienia Liskowa, ale wciąż nie jest jasne, co może pójść źle, gdybym jako programista nie myślał o tej zasadzie podczas pisania kodu zorientowanego obiektowo.
Załóżmy, że mam interfejs FooInterfacez następującą sygnaturą: interface FooInterface { public function doSomething(SomethingInterface something); } I konkretna klasa, ConcreteFooktóra implementuje ten interfejs: class ConcreteFoo implements FooInterface { public function doSomething(SomethingInterface something) { } } Chciałbym ConcreteFoo::doSomething()zrobić coś wyjątkowego, jeśli przejdzie on przez specjalny typ SomethingInterfaceobiektu (powiedzmy, że się nazywa SpecialSomething). …
Czytam, że zasada substytucji Liskowa jest naruszona, jeśli: Warunki wstępne są wzmocnione, lub Warunki dodatkowe są osłabione Ale jeszcze nie rozumiem, w jaki sposób te dwa punkty naruszałyby zasadę substytucji Liskowa. Czy ktoś może wyjaśnić przykład. W szczególności, w jaki sposób którykolwiek z powyższych warunków spowodowałby sytuację, w której obiekt …
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?
To zdjęcie pochodzi z aplikacji Projektowanie i wzorce oparte na domenie: z przykładami w języku C # i .NET To jest diagram klasowy dla Wzorca Stanu, w którym a SalesOrdermoże mieć różne stany w czasie swojego życia. Tylko niektóre przejścia są dozwolone między różnymi stanami. Teraz OrderStateklasa jest abstractklasą, a …
LSP stwierdza, że klasy powinny być substytucyjne dla ich klas podstawowych, co oznacza, że klasy pochodne i podstawowe powinny być semantycznie równoważne. Ale czy LSP ma również zastosowanie do klas implementujących interfejs? Innymi słowy, jeśli metoda interfejsu zaimplementowana przez klasę różni się semantycznie od tego, czego spodziewa się użytkownik, czy …
Tło: opracowuję strukturę przesyłania wiadomości. Ramy te umożliwią: wysyłanie wiadomości za pośrednictwem magistrali usług subskrybowanie kolejek na szynie komunikatów subskrybowanie tematów na szynie wiadomości Obecnie używamy RabbitMQ, ale wiem, że w najbliższej przyszłości przejdziemy do Microsoft Service Bus (w lokalu). Planuję utworzyć zestaw interfejsów i implementacji, aby po przejściu na …
Powiedz, że mam: interface Thing { GetThing(); } class FastThing : Thing { public int GetThing() { return 1; } } class SlowThing : Thing { public int GetThing() { return GetThingFromDatabase(); } } Czy jest to naruszenie zasady substytucji Liskowa?
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, …
Istnieje klasa LinkedList z funkcjami takimi jak add_first (), add_last (), add_after (), remove_first (), remove_last () i remove () Teraz istnieje stos klas, który zapewnia funkcje takie jak push (), pop (), peek () lub top (), a do implementacji tych metod rozszerza metody klasy LinkedList. Czy jest to …
Po CirclerozszerzeniuEllipse łamie zasadę substytucji Liskowa , ponieważ modyfikuje ona warunek końcowy : mianowicie możesz ustawić X i Y niezależnie, aby narysować elipsę, ale X musi zawsze być równe Y dla okręgów. Ale czy problem nie jest spowodowany tym, że Circle jest podtypem elipsy? Czy nie moglibyśmy odwrócić relacji? Tak …
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.