-
Data: 2009-05-21 20:20:58
Temat: Re: jak napisać szybki program
Od: "Mariusz Marszałkowski" <b...@W...gazeta.pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]Marcin 'Malcom' Malich <m...@g...com> napisał(a):
> On 21 Maj, 18:07, "Mariusz Marsza=B3kowski"
> <b...@W...gazeta.pl> wrote:
>
> > No oczywi=B6cie mo=BFna napisa=E6 program w C++ bez u=BFycia klas gdy=BF =
> sk=B3adnia C++
> > z ma=B3ymi wyj=B1tkami jest nadzbiorem sk=B3adni C. Klas te=BF lepiej nie=
> u=BFywa=E6,
> > bo jak optymalizowa=E6 zapis je=B6li dane s=B1 podzielone na klasy i nie =
> ma
> > wsz=EAdzie do nich dost=EApu? Optymalizacja zapisu to =BFonglerka struktu=
> r=B1
> > danych. Po zmianie struktury danych zmienia si=EA cz=EA=B6ci procedur.
>
> A jak zoptymalizowac zapis jesli dane podzielone sa na struktury w C?
Po prostu jest mniej pracy w C. Zmienne typu strukturalnego w C (zgodnie z
ideą C) deklaruje się globalnie, wszystkie funkcje deklaruje się
globalnie, a dostęp do wszystkich danych i składowych jest publiczny.
W C++ projektując strukturę danych trzeba dodatkowo zastanowić się:
1) jakie metody będą miały dostęp do jakich danych
2) jakie składowe będą w sekcjach prywatnych, jakie w chronionych
3) jakiej hierarchii dziedziczenia użyć
Po zmianie struktury danych w C++ trzeba te kroki przejść na nowo. Te
kroki ułatwiają ponowne wykorzystanie kodu, zmniejszają podatność na
błędy, ale nie ułatwiają optymalizacji zapisu.
Np. pisząc program numeryczny w C, zadeklarujesz globalnie tablicę liczb.
Napiszesz później trzy procedury:
1) pierwsza wczyta dane z pliku do tej tablicy liczb
2) druga wykona zadanie numeryczne
3) trzecia zapisze wyniki do pliku.
Programując to samo w C++ napiszesz:
1) klasę do wczytywania danych
2) klasę do obliczeń
3) klasę do wyprowadzania danych.
Nagle zobaczysz że już podczas wczytywania danych możesz przeprowadzić
wstępne obliczenia - co przyspieszy program. Dla struktury klas w C++ nie
będzie to naturalne, ponieważ struktura danych do obliczeń jest
odseparowana w klasie obliczeń. Będziesz musiał dopisać specjalne metody
do komunikacji pomiędzy klasą wczytywania danych a klasą obliczeniową.
Być może narzut na dodatkowe metody przewyższy zysk z wstępnych obliczeń
podczas wczytywania - ale koszt metod składowych to już inna kwestia.
Natomiast w C masz w całym programie dostęp do wszystkich danych. Od razu
podczas wczytywania zrobisz wstępne obliczenia i zmodyfikujesz globalne
dane. Po prostu w C trzeba zmodyfikować mniej kodu.
Jeśli w końcu dokonasz kilku takich spostrzeżeń i kilku takich modyfikacji
kodu, obojętnie czy pisałeś w C czy w C++, to dojdziesz do wniosku że
pierwotny podział kodu i danych na logiczne bloki nie był najlepszy. Będzie
trzeba przepisać wszystko od nowa. I znów zyskasz pisząc w C, bo omijasz
podział na klasy i nie zastanawiasz się jaką składową umieścić w jakiej
klasie i w jakiej sekcji, żeby po kolejnym spostrzeżeniu cały ten
skrupulatny podział trzeba było zburzyć...
>
> > Obudowywanie danych w klasy (cho=E6by jako sk=B3adowe statyczne, kt=F3re =
> nie daj=B1
> > narzutu) podwaja nak=B3ad pracy przy takim eksperymentowaniu. Wi=EAc pows=
> taje
> > programowanie w C przy u=BFyciu kompilatora C++ :)
>
> Narzutu czego?
>
> Nie potrafie zrozumiec do czego zmierzasz :>
Narzut na dodatkowe zaprojektowanie klas. Dobre zaprojektowanie jest
czasochłonne. Klasy projektuje się po to aby kod ponownie wykorzystać
bez ponownego wnikania w ich szczegóły implementacyjne. Zaprojektowane
tak klasy nie są w żaden sposób podatne na późniejsze "sprytne modyfikacje"
w celu przyspieszenia.
Pzdr.
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Następne wpisy z tego wątku
- 21.05.09 21:04 Jacek Czerwinski
- 21.05.09 21:55 Mariusz Marszałkowski
- 23.05.09 21:59 Maciej Sobczak
- 24.05.09 00:06 A.L.
- 28.05.09 19:32 Mariusz Marszałkowski
- 30.05.09 05:15 Mariusz Marszałkowski
- 07.06.09 05:20 Remek
- 07.06.09 14:40 A.L.
- 07.06.09 17:35 Mirosław Habarta
Najnowsze wątki z tej grupy
- 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
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
Najnowsze wątki
- 2024-11-24 Aby WKOOOORWIĆ ekofaszystów ;-)
- 2024-11-22 OC - podwyżka
- 2024-11-22 wyszedł z domu bez buta
- 2024-11-22 Bieda hud.
- 2024-11-24 DS1813-10 się psuje
- 2024-11-23 Białystok => Inżynier bezpieczeństwa aplikacji <=
- 2024-11-23 Szczecin => QA Engineer <=
- 2024-11-23 Warszawa => SEO Specialist (15-20h tygodniowo) <=
- 2024-11-22 Warszawa => Kierownik Działu Spedycji Międzynarodowej <=
- 2024-11-22 Warszawa => Senior Account Manager <=
- 2024-11-22 Warszawa => Key Account Manager <=
- 2024-11-22 Warszawa => DevOps Specialist <=
- 2024-11-22 Kraków => IT Expert (Network Systems area) <=
- 2024-11-22 Warszawa => Infrastructure Automation Engineer <=
- 2024-11-22 Warszawa => Presales / Inżynier Wsparcia Technicznego IT <=