-
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
- A Szwajcarzy kombinują tak: FinalSpark grows human neurons from stem cells and connects them to electrode arrays
- Re: Najgorszy język programowania
- NOWY: 2025-09-29 Alg., Strukt. Danych i Tech. Prog. - komentarz.pdf
- Na grupie comp.os.linux.advocacy CrudeSausage twierdzi, że Micro$lop używa SI do szyfrowania formatu dok. XML
- Błąd w Sofcie Powodem Wymiany 3 Duńskich Fregat Typu Iver Huitfeldt
- Grok zaczął nadużywać wulgaryzmów i wprost obrażać niektóre znane osoby
- Can you activate BMW 48V 10Ah Li-Ion battery, connecting to CAN-USB laptop interface ?
- We Wrocławiu ruszyła Odra 5, pierwszy w Polsce komputer kwantowy z nadprzewodzącymi kubitami
- Ada-Europe - AEiC 2025 early registration deadline imminent
- John Carmack twierdzi, że gdyby gry były optymalizowane, to wystarczyły by stare kompy
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2025
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- ,,Polski przemysł jest w stanie agonalnym" - podkreślił dobitnie, wskazując na brak zamówień.
- Rewolucja w debugowaniu!!! SI analizuje zrzuty pamięci systemu M$ Windows!!!
- Brednie w wiki - hasło Dehomag
Najnowsze wątki
- 2025-12-26 Gdańsk => ERP Microsoft Dynamics 365 Commerce Consultant <=
- 2025-12-26 Kraków => Konsultant Microsoft Dynamics 365 Finance <=
- 2025-12-26 Kraków => Microsoft Dynamics 365 Finance Consultant <=
- 2025-12-26 wymieniłem termostat
- 2025-12-26 Warszawa => Senior Backend Java Developer <=
- 2025-12-25 Finlandia przywraca swastykę
- 2025-12-25 Skuteczność wymiaru sprawiedliwości
- 2025-12-24 Felgi
- 2025-12-24 2,5 x więcej niż Li-Ion
- 2025-12-24 No i kolejny ograniczony
- 2025-12-24 Warszawa => Młodszy Specjalista ds. wsparcia sprzedaży <=
- 2025-12-24 New York Times zagrożeniem bezpieczeństwa narodowego USA - POTUS D. Trump
- 2025-12-24 Podżeganie?
- 2025-12-24 => Senior Algorithm Developer (Java/Kotlin) <=
- 2025-12-24 otwarcie drugiej obwodnicy Trójmiasta




7 pułapek i okazji - zobacz co cię czeka podczas kupna mieszkania na wynajem