Spaghetti code: Różnice pomiędzy wersjami

Z Wikipedii, wolnej encyklopedii
[wersja nieprzejrzana][wersja nieprzejrzana]
Usunięta treść Dodana treść
Nie podano opisu zmian
Linia 1: Linia 1:
{{dopracować|styl}}
{{dopracować|styl}}


'''Spaghetti code'''- terminem tym przyjęto określać skomplikowany, trudny do zrozumienia [[kod źródłowy]] programu. W taki sposób napisanych zostało wiele programów w starszych [[język_proceduralny|językach proceduralnych]], typu [[Fortran]] czy [[Basic]]. Było to jeszcze przed powstaniem metody [[programowanie strukturalne|programowania strukturalnego]].
'''Spaghetti code'''- terminem tym przyjęto określać skomplikowany, trudny do zrozumienia [[kod źródłowy]] programu. Z takiego kodu skompilowano wiele programów w starszych [[język_proceduralny|językach proceduralnych]], typu [[Fortran]] czy [[Basic]]. Było to jeszcze przed powstaniem metody [[programowanie strukturalne|programowania strukturalnego]].


Używano wielu [[instrukcja_warunkowa|instrukcji warunkowych]] i następnych w nich zagnieżdżonych, instrukcji [[GOTO]], [[wyjątek|wyjątków]], które dalej powodowały wykonanie pewnych [[instrukcja (informatyka)|instrukcji]]. Droga przez kolejne instrukcje była tak poplątana, że odczytanie takiego kodu i zrozumienie go często graniczyło z cudem, a ewentualne modyfikacje zwykle prowadziły do błędów w programie.
Używano wielu [[instrukcja_warunkowa|instrukcji warunkowych]] i następnych w nich zagnieżdżonych, konstrukcji [[GOTO]], [[wyjątek|wyjątków]], które dalej powodowały wykonanie pewnych [[instrukcja (informatyka)|instrukcji]]. Droga przez kolejne rozkazy była tak poplątana, że odczytanie takiego kodu i zrozumienie go było bardzo uciążliwe, a ewentualne modyfikacje zwykle prowadziły do błędów w programie.


Programowanie strukturalne, w myśl zasady ''od ogółu do szczegółu'', wprowadziło znaczne uporządkowanie w procesie tworzenia programów.
Programowanie strukturalne, w myśl zasady ''od ogółu do szczegółu'', wprowadziło znaczne uporządkowanie w procesie tworzenia programów.


W skrócie polega to na dzieleniu zadania do wykonania na mniejsze aż do uzyskania wystarczająco prostych fragmentów do zrealizowania. Łatwiej wtedy jest [[implementacja|zaimplementować]] w poszczególnych modułach [[podprogram|procedury]], które w całości dadzą pożądany efekt.
W skrócie taka metodologia programowania polega na dzieleniu zadania do wykonania na mniejsze, aż do uzyskania wystarczająco prostych fragmentów do zrealizowania. Łatwiej wtedy jest [[implementacja|zaimplementować]] w poszczególnych modułach [[podprogram|procedury]], które w całości dadzą pożądany efekt.


W praktyce zazwyczaj dzieli się program na [[funkcja_(informatyka)|funkcje]], z których każda realizuje określony cel i może być wywoływana wielokrotnie. Tak napisany kod jest już znacznie bardziej czytelny.
W praktyce zazwyczaj dzieli się program na [[funkcja_(informatyka)|funkcje]], z których każda realizuje określony cel i może być wywoływana wielokrotnie. Tak napisany kod jest już znacznie bardziej czytelny.
Linia 25: Linia 25:


Program wyświetla podaną przez użytkownika ilość pierwszych wyrazów ciągu Fibonacciego.
Program wyświetla podaną przez użytkownika ilość pierwszych wyrazów ciągu Fibonacciego.
W kilku liniach trywialnego programu dość potrzebne było dwukrotne użycie bezwarunkowej instrukcji
W kilku liniach trywialnego programu dwukrotne użyto bezwarunkowej instrukcji
skoku - [[GOTO]]. Przy bardziej złożonym kodzie i większej liczbie skoków pojawi się problem z jego zrozumieniem, nie wspominając o konserwacji programu.
skoku - [[GOTO]]. Przy bardziej złożonym kodzie i większej liczbie skoków pojawi się problem z jego zrozumieniem.


Ten sam cel zrealizowany przez programowanie strukturalne (w [[C (język programowania)|C]]):
Ten sam cel zrealizowany przez programowanie strukturalne (w [[C (język programowania)|C]]):

Wersja z 12:41, 5 mar 2007

Spaghetti code- terminem tym przyjęto określać skomplikowany, trudny do zrozumienia kod źródłowy programu. Z takiego kodu skompilowano wiele programów w starszych językach proceduralnych, typu Fortran czy Basic. Było to jeszcze przed powstaniem metody programowania strukturalnego.

Używano wielu instrukcji warunkowych i następnych w nich zagnieżdżonych, konstrukcji GOTO, wyjątków, które dalej powodowały wykonanie pewnych instrukcji. Droga przez kolejne rozkazy była tak poplątana, że odczytanie takiego kodu i zrozumienie go było bardzo uciążliwe, a ewentualne modyfikacje zwykle prowadziły do błędów w programie.

Programowanie strukturalne, w myśl zasady od ogółu do szczegółu, wprowadziło znaczne uporządkowanie w procesie tworzenia programów.

W skrócie taka metodologia programowania polega na dzieleniu zadania do wykonania na mniejsze, aż do uzyskania wystarczająco prostych fragmentów do zrealizowania. Łatwiej wtedy jest zaimplementować w poszczególnych modułach procedury, które w całości dadzą pożądany efekt.

W praktyce zazwyczaj dzieli się program na funkcje, z których każda realizuje określony cel i może być wywoływana wielokrotnie. Tak napisany kod jest już znacznie bardziej czytelny.


Przykłady

10 INPUT count
20 LET steps = count; bbk = 0; bk = 1
30 IF count < 1 THEN GOTO 70
40 LET k = bbk + bk
50 bbk = bk: bk = k
60 count = count - 1
70 PRINT "Wyraz nr "; steps - count; "ciagu Fibonacci'ego wynosi: "; k
80 IF count > 0 THEN GOTO 30
90 END

Program wyświetla podaną przez użytkownika ilość pierwszych wyrazów ciągu Fibonacciego. W kilku liniach trywialnego programu dwukrotne użyto bezwarunkowej instrukcji skoku - GOTO. Przy bardziej złożonym kodzie i większej liczbie skoków pojawi się problem z jego zrozumieniem.

Ten sam cel zrealizowany przez programowanie strukturalne (w C):

scanf ("%d",&steps);
   for (count = 0; count < steps; count++){
       static int bbk = 0, bk = 1;
       int k = bbk + bk;
       bbk = bk; bk = k;
       printf ("Wyraz nr %d ciagu Fibonacci'ego wynosi: %d\n",
       steps - count,k);
   }

Poszczególne kroki wykonywane są w przejrzystej i formalnej pętli. Ciąg instrukcji do wykonania w programowaniu strukturalnym nie może być dowolnie zmieniany, "przejścia" do poszczególnych bloków są obsługiwane przez zaimplementowane konstrukcje (np. for, while, do while czy if else).

Zobacz też