Mam trzy klasy, które są od siebie zależne od siebie: TestExecuter wykonuje żądania TestScenario i zapisuje plik raportu za pomocą klasy ReportGenerator. Więc: TestExecuter zależy od ReportGenerator do wygenerowania raportu ReportGenerator zależy od TestScenario i parametrów ustawionych z TestExecuter. TestScenario zależy od TestExecuter. Nie mogę dowiedzieć się, jak usunąć te …
Muszę napisać menedżera systemu powiadomień. Oto moje wymagania: Muszę być w stanie wysłać powiadomienie na różnych platformach, które mogą być zupełnie inne (na przykład muszę mieć możliwość wysłania wiadomości SMS lub e-mail). Czasami powiadomienie może być takie samo dla wszystkich odbiorców na danej platformie, ale czasami może to być powiadomienie …
Mam fragment kodu, w którym iteruję mapę, dopóki jakiś warunek nie jest spełniony, a następnie użyję tego warunku, aby zrobić więcej rzeczy. Przykład: Map<BigInteger, List<String>> map = handler.getMap(); if(map != null && !map.isEmpty()) { for (Map.Entry<BigInteger, List<String>> entry : map.entrySet()) { fillUpList(); if(list.size() > limit) { limitFlag = true; break; …
Obecnie pracuję nad bazą kodu, która ma wiele klas, które implementują metodę Start. Wydaje mi się to konstrukcją dwufazową, co zawsze uważałem za złą praktykę. Nie umiem odróżnić tego od konstruktora. Kiedy należy zastosować metodę początkową zamiast normalnej konstrukcji obiektu? Kiedy powinienem używać konstruktora? Edycja: Nie sądzę, że jest to …
Na stronie 839 drugiego wydania Steve McConnell omawia wszystkie sposoby, w jakie programiści mogą „pokonać złożoność” w dużych programach. Jego wskazówki kończą się tym stwierdzeniem: „Programowanie obiektowe zapewnia poziom abstrakcji, który dotyczy jednocześnie algorytmów i danych , rodzaj abstrakcji, której nie zapewnił sam rozkład funkcjonalny”. W połączeniu z konkluzją, że …
tło Nie jestem wielkim fanem abstrakcji. Przyznaję, że można skorzystać z możliwości dostosowania, przenośności i ponownego wykorzystywania interfejsów itp. Są tam realne korzyści i nie chcę tego kwestionować, więc zignorujmy to. Jest jeszcze jedna główna „korzyść” abstrakcji, która polega na ukryciu logiki implementacji i szczegółów przed użytkownikami tej abstrakcji. Argument …
Mój współpracownik i ja mamy różne opinie na temat relacji między klasami podstawowymi a interfejsami. Jestem przekonany, że klasa nie powinna implementować interfejsu, chyba że z tej klasy można korzystać, gdy wymagana jest implementacja interfejsu. Innymi słowy, lubię widzieć taki kod: interface IFooWorker { void Work(); } abstract class BaseWorker …
Załóżmy, że zaczynam rozwijać grę RPG z postaciami atakującymi inne postacie i tym podobne rzeczy. Stosując TDD, wykonuję kilka przypadków testowych w celu przetestowania logiki wewnątrz Character.receiveAttack(Int)metody. Coś takiego: @Test fun healthIsReducedWhenCharacterIsAttacked() { val c = Character(100) //arg is the health c.receiveAttack(50) //arg is the suffered attack damage assertThat(c.health, is(50)); …
Prawo Demeter stwierdza co następuje: Każda jednostka powinna mieć ograniczoną wiedzę na temat innych jednostek: tylko jednostki „ściśle” związane z bieżącą jednostką. Każda jednostka powinna rozmawiać tylko z przyjaciółmi; nie rozmawiaj z nieznajomymi. Rozmawiaj tylko z najbliższymi przyjaciółmi. W C # 6.0 wprowadzono nowy operator o nazwie operator null-warunkowy . …
Mam zamiar zapisać trochę ładunku ciągu w bazie danych. Mam dwie konfiguracje globalne: szyfrowanie kompresja Można je włączyć lub wyłączyć za pomocą konfiguracji w taki sposób, że tylko jedna z nich jest włączona, obie są włączone lub obie są wyłączone. Moja obecna implementacja to: if (encryptionEnable && !compressEnable) { encrypt(data); …
Jest klasyczny artykuł zatytułowany „Kryteria do zastosowania w rozkładaniu systemów na moduły”, który właśnie przeczytałem po raz pierwszy. Ma to dla mnie idealny sens i jest prawdopodobnie jednym z tych artykułów, na których oparto OOP. Wniosek: Na podstawie tych przykładów próbowaliśmy wykazać, że prawie zawsze niewłaściwe jest rozpoczęcie rozkładu systemu …
Ś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.
Dziedziczenie, polimorfizm i enkapsulacja to trzy najbardziej wyraźne, ważne cechy OOP, a od nich dziedziczenie ma obecnie wysoką statystykę użytkowania. Uczę się JavaScript, a tutaj wszyscy mówią, że ma on dziedzictwo prototypowe, a ludzie na całym świecie mówią, że jest to coś zupełnie innego niż klasyczne dziedzictwo. Nie rozumiem jednak, …
Stanie się dobrym analizatorem i projektantem może być bardzo korzystne dla programisty. Ale są na pewno przeszkody. Nie wszyscy są zainteresowani OOAD i nie każda zainteresowana osoba zna ścieżkę. Czy dobry OOAD powinien znać wiele języków OO? A może powinien on / ona nie zaliczyć projektów? Jak stać się dobrym …
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.