Pytania otagowane jako object-oriented-design

Projektowanie obiektowe to proces planowania systemu interakcji obiektów w celu rozwiązania problemu z oprogramowaniem.

3
Jak rozwiązać zależność cykliczną?
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 …

2
Jak zaprojektować skalowalny system powiadomień? [Zamknię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 …

7
Czy ustawianie flagi w pętli w celu użycia jej później jest zapachem kodu?
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; …

3
Czy metoda „start”, „uruchom” lub „uruchom” jest dobrą praktyką?
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 …

10
Jak zwolennicy programowania funkcjonalnego odpowiedzieliby na to stwierdzenie w Code Complete?
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 …

17
Jaka jest wartość ukrywania szczegółów za pomocą abstrakcji? Czy nie ma wartości w przejrzystości?
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 …

10
Interfejsy w klasie abstrakcyjnej
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 …

3
Co dzieje się z testami metod, gdy metoda ta staje się prywatna po przeprojektowaniu w TDD?
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)); …

4
Czy nowy nieważny operator C # 6.0 jest sprzeczny z prawem Demetera?
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 . …

6
Czy można zaimplementować programowanie „obiektowe” bez słowa kluczowego class?
Powiedzmy, że chcemy przedstawić abstrakcję „konta” w banku. Oto jedno podejście, używając functionobiektu w Pythonie: def account(): """Return a dispatch dictionary representing a bank account. >>> a = account() >>> a['deposit'](100) 100 >>> a['withdraw'](90) 10 >>> a['withdraw'](90) 'Insufficient funds' >>> a['balance'] 10 """ def withdraw(amount): if amount > dispatch['balance']: return …

6
Czy istnieje wzorzec projektowy, który eliminuje potrzebę sprawdzania flag?
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); …

7
Czy programowanie funkcjonalne ignoruje korzyści płynące z „O kryteriach, które należy zastosować przy rozkładaniu systemów na moduły” (ukrywanie danych)?
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 …


4
Czym właściwie dziedziczenie prototypowe różni się od dziedziczenia klasycznego?
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, …


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.