• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Różnice między napisaniem programu z użyciem struktur, a bez nich. Co one nam dają?

VPS Starter Arubacloud
0 głosów
466 wizyt
pytanie zadane 24 kwietnia 2016 w C i C++ przez Konrad Nabożny Stary wyjadacz (13,460 p.)
Witam. Kolejnym działem w mojej książce są struktury. Po przerobieniu działu jako ćwiczenie miałem napisać program używając tablic który pobierze od użytkownika 10 imion, wieków, oraz wag. Oczywiście string, int, float, a następnie policzy średnią z wieków osób. Banał, napisałem to. Kolejną rzeczą było przerobienie  tego programu tak, aby był on zrobiony za pomocą struktury. Nie było problemu, zrobiłem strukturę, stworzyłem dla niej obiekty, dla których w dalszej kolejności zrobiłem tablicę itp. Dochodząc do sedna, autor napisał aby chwilę pomyśleć nad tym, jakie korzyści daje nam użycie struktur. Tak otóż zrobiłem. Stwierdziłem że pozwalają nam one uporządkować potrzebne zmienne do jednej funkcji programu w jednym miejscu. Ale to nie może być wszystko. Dlatego pytam się Was, co jeszcze nam takiego dają, ponieważ nie widzę innych korzyści. Jedynie kod jest dłuższy i mniej czytelny przez samą potrzebę używania tego operatora kropki :)
komentarz 25 kwietnia 2016 przez Strategiusz Dyskutant (9,220 p.)
edycja 26 kwietnia 2016 przez Strategiusz
Chciałbym tylko skomentować, że denerwuje mnie takie podejście, że uczniowi każe się wyciągnąć jakiś wniosek, a później ocenia się go i warunkuje tym dopuszczenie do dalszej nauki. Zamiast naprawdę wyciągnąć jakieś wnioski, uczeń stara się odgadnąć jaka jest nagradzana odpowiedź, nawet gdy sam nie jest do niej przekonany. Takie coś to tresura.
komentarz 25 kwietnia 2016 przez Konrad Nabożny Stary wyjadacz (13,460 p.)
Materiały z których korzystam są z roku 2005, wtedy być może było to nieco inaczej postrzegane, sam nie wiem.

5 odpowiedzi

+1 głos
odpowiedź 25 kwietnia 2016 przez Surykat Stary wyjadacz (14,760 p.)
wybrane 25 kwietnia 2016 przez Konrad Nabożny
 
Najlepsza

Na początku spoko, ale gdy przyjdzie ci uporządkować 15 plików w projekcie, to bez struktur/obiektów będziesz gorzko płakał :D

Z czasem docenisz to podejście. Łatwiej jest przesłać jako parametr jeden obiekt niż powiedzmy 5 parametrów będących typami prostymi.

Powiedzmy, że masz program automatycznie konfigurujący kartę sieciową- jego parametrami będą adres ip, maska podsieci, brama domyślna, główny dns i alternatywny dns- 5 parametrów. Wywołanie mogłoby wyglądać tak:

Configure("192.168.1.4", "255.255.255.0", "192.168.1.1" , "8.8.8.8","8.8.4.4");

Wiadomo, można to wcześniej użyć zmiennych i zrobić to tak:

Configure(ip, maskaPodsieci, bramaDomyslna, primaryDns, altDns);

Wyobraź sobie, że wszystkie twoje funkcje tak wyglądają, a masz ich ze 40 :D

A możesz sobie stworzyć obiekt, który bedzie w sobie zawierał wszystkie informacje które zapisałem powyżej, i wywołanie wyglądałoby po prostu tak:

Configure(networkConfiguration);

Gdzie "networkConfiguration" jest obiektem jakiejś klasy, która zawiera te wszystkie dane. Wywołanie tej metody można niemal przeczytać jak zdanie po angielsku- takiego kodu nie trzeba komentować. ;)

komentarz 25 kwietnia 2016 przez Konrad Nabożny Stary wyjadacz (13,460 p.)
Dzięki, wytłumaczyłeś bardzo sprawnie i przystępnie :)

Swoją drogą fajnie że przytoczyłeś przykład sieci, bo jakiś czas temu zrobiłem kalkulator przeliczający adresy IP, Maskę itp. Zrobiłem to w całkowicie podstawowy sposób, podam ci kod, ale przygotuj się psychicznie bo to co zobaczysz zszokuje Cię.

http://wklej.org/id/2344069/

 

Tak wygląda kod robiony schematycznie krok po kroku bez żadnych funkcji, ani obiektów :)
1
komentarz 25 kwietnia 2016 przez Surykat Stary wyjadacz (14,760 p.)
Wiem, bo sam tak pisałem. :) Także idź i nie grzesz więcej, powodzenia. :)
0 głosów
odpowiedź 24 kwietnia 2016 przez Patrycjerz Mędrzec (192,340 p.)

Głównymi zaletami stosowania struktur są:

  • Uporządkowanie kodu (lepiej operować na obiektach, niż na wielu tablicach).
  • Łatwiejsze przesyłanie danych (lepiej przesłać obiekty, niż wiele tablic, np. do funkcji).
komentarz 24 kwietnia 2016 przez Konrad Nabożny Stary wyjadacz (13,460 p.)
Ale według mnie znacznie łatwiej jest się w tym wszystkim pogubić. Mam rację?
komentarz 24 kwietnia 2016 przez Patrycjerz Mędrzec (192,340 p.)

To zależy od indywidualnych preferencji.

Zauważ, że ludzki mózg najlepiej analizuje rzeczy powiązane ze sobą, pogrupowane, gdyż godzi się to z jego naturalnym systemem postrzegania rzeczywistości - lepiej powiedzieć, że widzisz człowieka niż zbiór atomów, co nie?

To samo w programowaniu - lepiej operować na danych pogrupowanych w obiekty, gdyż lepiej się na takim kodzie pracuje, m.in. przy jego konserwacji.

komentarz 24 kwietnia 2016 przez Konrad Nabożny Stary wyjadacz (13,460 p.)
W takim razie muszę pewnie trochę poużywać struktur zanim poczuję się w nich pewnie.
komentarz 24 kwietnia 2016 przez MetGang Nałogowiec (34,360 p.)
Kolega idealnie napisał dlaczego trudniej się pogubić. Jest to kwestia gustu, ale programowanie obiektowe pozwala o wiele łatwiej utrzymać kod i nim zarządzać. Z perspektywy małego programu tego nie zobaczysz. Zrób sobie 10+ plików i w każdym parę tablic/zmiennych mających spełniać podobne zadania. Powodzenia w nazywaniu :p
komentarz 24 kwietnia 2016 przez Konrad Nabożny Stary wyjadacz (13,460 p.)
Wiesz, póki co nie wyobrażam sobie większego projektu niż 3 pliki. Na nagłówki, ciała, oraz maina. Z mojego punktu widzenia nie widzę nawet sensu ponad 3 plików ;)
komentarz 24 kwietnia 2016 przez MetGang Nałogowiec (34,360 p.)
No wiesz, nie każdy od razu tworzy duże projekty czy własne biblioteki :p Gdybym ja miał cały swój projekt zamknąć w paru plikach bez obiektówki to bym zwariował. Na razie rób jak Ci lepiej, ale też nie marnuj potencjału C++ OOP :)
komentarz 24 kwietnia 2016 przez Konrad Nabożny Stary wyjadacz (13,460 p.)
Nie zamierzam odpuścić C++. Próbowałem kilka języków i ten jest dla mnie najbardziej "przyjazny", o ile można to tak nazwać. :) A tak z czystej ciekawości, co takiego jest w tych dziesiątkach plików podczas pisania większych programów, bo za nic nie mogę sobie wyobrazić więcej potrzebnych rzeczy niż nagłówki, ciała i main :D
1
komentarz 24 kwietnia 2016 przez Patrycjerz Mędrzec (192,340 p.)
Wystarczy spojrzeć na jakikolwiek projekt na GitHub, aby się tego dowiedzieć - od razu powiem, że nic specjalnego, tzn. pliki nagłówkowe z deklaracjami klas i funkcji oraz pliki źródłowe z definicjami metod (funkcje w klasie) i funkcji, czyli same dane i operacje.
0 głosów
odpowiedź 24 kwietnia 2016 przez Konrad Nabożny Stary wyjadacz (13,460 p.)
Kod w przypadku NIE używania struktur: http://wklej.org/id/2339559/

Kod w przypadku UŻYWANIA struktur: http://wklej.org/id/2339561/

 

Według mnie kod bez użycia struktur jest znacznie bardziej czytelny :)
komentarz 24 kwietnia 2016 przez Patrycjerz Mędrzec (192,340 p.)
Chodzi tu tylko o wygodę programisty - ja wolę korzystać z pogrupowanych danych, niż z wielu tablic, które nic mi nie mówią.
0 głosów
odpowiedź 24 kwietnia 2016 przez niezalogowany
Dla takiego małego programu kod bez struktur może jest czytelniejszy. Ale pisząc większe programy już tak nie będzie i wtedy docenisz struktury i klasy. Btw. struktury w C++ to to samo co klasa z elementami w sekcji public.
0 głosów
odpowiedź 24 kwietnia 2016 przez Ehlert Ekspert (212,630 p.)

W takim razie mamy inne pojmowanie czytelności. Struktury danych są na pewnym poziomie konieczne. Oprócz tego co napisał Ci Patrycjerz: 

  1. Kod i cały projekt jest o wiele łatwiejszy do rozbudowania / wykorzystania fragmentów
  2. Wprowadzenie struktur tworzy ład dzięki któremu możesz pracować w grupie

Twój program był mały. Spójrz na przykład przytaczany przez M. Zelenta. Co przy pisaniu Diablo 2? 40 diablików na mapie, a Ty walczysz z 20 (dynamicznymi!) tablicami. Powstaje spaghtetti code i jak człowiek widzi coś takiego to szlag go trafia. smiley

komentarz 24 kwietnia 2016 przez Konrad Nabożny Stary wyjadacz (13,460 p.)

No widzisz, mnie zapewne przerosło by użycie kilku dynamicznych tablic w konsoli laugh

Podobne pytania

+2 głosów
1 odpowiedź 1,000 wizyt
0 głosów
1 odpowiedź 2,224 wizyt
pytanie zadane 28 marca 2016 w C# przez hubot Dyskutant (9,100 p.)
0 głosów
1 odpowiedź 696 wizyt

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...