-
Data: 2009-05-17 20:52:05
Temat: Re: jak napisać szybki program
Od: Bronek Kozicki <b...@s...net> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]A.L. wrote:
> On Sun, 17 May 2009 17:21:00 +0100, Bronek Kozicki <b...@s...net>
> wrote:
>
>> 2. ...., dużo invariants
>
> Moge prosic o komentarz?...
invariant , czyli niezmienny elemnt zachowania klasy. Rzecz na której
można polegasć, bo jest zakodowana w projekcie. Np. pole klasy dla
oznaczenia rozmiaru czegoś-tam
int size;
problem: jest kilka innych pól, np.
int size_with_wings;
int size_unfold;
itd. Wartości początkowe są podane przez użytkownika albo pochodzą z
innego źródła, i w kodzie jest wymóg że size jest zawsze z najmniejszy z
tych pól. Można po prostu założyć że tak jest i pisać jakby warunek nie
musiał być sprawdzony (to jest klasyczny invariant). Ale, po uważnym
przyjrzeniu się działaniu programu, okazuje się że raz wprowadzony
rozmiar się nigdy nie zmienia (to jest okazja którą trzeba zobaczyć,
albo czasami stworzyć). A jeżeli się zmienia, to ze względu na pełnioną
funkcję, koszt utworzenia nowego obiektu jest zdecydowanie mniejszy od
kosztu sprawdzania rozmiaru za każdym razem, albo kosztu błędu. Co
robimy? Dopisujemy jedno (albo więcej, do innych pól) const.
const int size;
... i inicjalizujemy w liście inicjalizacyjnej konstruktora (jeżeli
wartość trzeba obliczyć to dobrze sprawdzają się statyczne funkcje
prywatne, albo współdzielone przez klasę i jej użytkowników "utility
functions"; jeżeli trzeba sprawdzić, to oczywiście wyjątki wyrzuca się w
konstruktorze).
W ten sposób mamy invariant zapisany w projekcie
Podobnie : wartości całkowite o specjalnym znaczeniu zapisujemy w enum
(nie #define) bo w ten sposób typesystem możne nam podpowiedzieć czy
stosowane są w dobrym (czy złym) kontekście. Podobnie : stosujemy
referencje zamiast wskaźników (invariantem staje się wybór obiektu do
któego referencja się odnosi), itd. Czyli zmniejszamy ilość kodu
wykonywanego przez CPU (którym można dokonać zmiany wartości/trezba
sprawdzać zgodność wartości z regułami) a zwiększamy ilość kodu
"wykonywanego" tylko przez kompilator - jednocześnie zwiększając
wierność projektu do konretnego zastosowania. Dodatkowa zaleta - taki
kod się łatwo refaktoruje. Jeszcze jedna zaleta - upublicznienie
invariants zapisanych w projekcie powoduje znacznie mniejsze coupling
niż klasyczne pary accesorów get/set , nawet mniejszy niż pojedyncze get
(bez set). Z tego prostego powodu, że łatwiej sprawdzić w jednym
miejscu, tj deklaracje pola klasy (ponieważ jest "const"), że raz
zainicjowane nigdy się nie zmieni, niż szukać w całym kodzie kto,
pośrednio lub bezpośrednio, może modyfikować jego wartość.
OCZYWIŚCIE BEZ PRZESADY. To jest narzędzie, i powinno być stosowane jak
każde inne - jedno z wielu, a nie jedyny młotek w pudle.
B.
--
Remove -trap- when replying. Usun -trap- gdy odpisujesz.
Następne wpisy z tego wątku
- 17.05.09 20:53 Bronek Kozicki
- 17.05.09 20:59 A.L.
- 17.05.09 21:00 A.L.
- 17.05.09 21:01 A.L.
- 17.05.09 21:40 Wojciech Muła
- 17.05.09 21:40 Bronek Kozicki
- 17.05.09 21:40 Bronek Kozicki
- 17.05.09 21:50 A.L.
- 17.05.09 21:51 A.L.
- 17.05.09 21:52 A.L.
- 18.05.09 06:31 gosmo
- 18.05.09 07:02 Maciej Sobczak
- 18.05.09 06:13 Rafal Kupka
- 18.05.09 07:35 Wojciech Muła
- 18.05.09 11:30 Maciej Sobczak
Najnowsze wątki z tej grupy
- Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
Najnowsze wątki
- 2025-01-13 Szczecin => Senior Field Sales (system ERP) <=
- 2025-01-13 Rzeszów => International Freight Forwarder <=
- 2025-01-13 Bydgoszcz => Specjalista ds. Sprzedaży (transport drogowy) <=
- 2025-01-13 Poznań => Konsultant wdrożeniowy Comarch XL/Optima (Księgowość i
- 2025-01-13 Warszawa => Staż w dziale Sprzedaży B2B <=
- 2025-01-13 Wydajność klimy w obecnych temperaturach
- 2025-01-13 Błonie => Analityk Systemów Informatycznych (TMS SPEED) <=
- 2025-01-13 Kraków => UX Designer <=
- 2025-01-13 Katowice => Key Account Manager (ERP) <=
- 2025-01-13 Mińsk Mazowiecki => Spedytor Międzynarodowy <=
- 2025-01-12 USB3.x->HDMI/DP ze sterownikami w win11
- 2025-01-12 Jak na naszych oczach odradza się cenzura :-)
- 2025-01-11 Koszty prowadzenia firmy za granicą
- 2025-01-11 19 migrantów
- 2025-01-11 300km/h