Programowanie strukturalne: Różnice pomiędzy wersjami

Z Encyklopedia Zarządzania
(LinkTitles.)
m (cleanup bibliografii i rotten links)
 
(Nie pokazano 15 wersji utworzonych przez 2 użytkowników)
Linia 1: Linia 1:
{{infobox4
'''Programowanie strukturalne''' - jeden z [[paradygmat]]ów programowania w którym celem jest konstruowanie programu zmierzające do osiągnięcia takiej jego struktury, aby stanowiła ona odzwierciedlenie struktury rozwiązywanego problemu. Kluczowym zagadnieniem w programowaniu strukturalnym jest systematyczne użycie poziomów abstrakcji w ramach opracowywania kolejnych etapów programu. [[Proces]] tworzenia programu rozpoczyna się od jego ogólnego opisu, przechodząc następnie do szczegółów<ref>Bansal A.K. (2013)</ref> W przeciwieństwie do [[programowanie obiektowe|programowania obiektowego]], w programowaniu strukturalnym zaleca się wykorzystanie tylko kilku najważniejszych struktur sterujących:
|list1=
<ul>
<li>[[Test driven development]]</li>
<li>[[Programowanie]]</li>
<li>[[Ganttproject]]</li>
<li>[[SmallTalk (język programowania)]]</li>
<li>[[C (język programowania)]]</li>
<li>[[Backlog produktu]]</li>
<li>[[Webmaster]]</li>
<li>[[Epic]]</li>
<li>[[Java]]</li>
</ul>
}}
 
'''Programowanie strukturalne''' - jeden z [[paradygmat]]ów programowania w którym celem jest konstruowanie programu zmierzające do osiągnięcia takiej jego struktury, aby stanowiła ona odzwierciedlenie struktury rozwiązywanego problemu. Kluczowym zagadnieniem w programowaniu strukturalnym jest systematyczne użycie poziomów abstrakcji w ramach opracowywania kolejnych etapów programu. [[Proces]] tworzenia programu rozpoczyna się od jego ogólnego opisu, przechodząc następnie do szczegółów. <ref>Bansal A.K. (2013), ''Introduction to programming languages'', CRC Press, Boca Raton</ref> W przeciwieństwie do [[programowanie obiektowe|programowania obiektowego]], w programowaniu strukturalnym zaleca się wykorzystanie tylko kilku najważniejszych struktur sterujących:  
* [[Iteracja]] - powtarzanie instrukcji w pętli do momentu w którym zostanie spełniony warunek iteracyjny
* [[Iteracja]] - powtarzanie instrukcji w pętli do momentu w którym zostanie spełniony warunek iteracyjny
* Wybór - realizacja poszczególnych instrukcji programu w zależności od jego stanu  
* Wybór - realizacja poszczególnych instrukcji programu w zależności od jego stanu
* Sekwencja - wykonanie poszczególnych instrukcji w kolejności
* Sekwencja - wykonanie poszczególnych instrukcji w kolejności
* Pętla
* Pętla
Linia 22: Linia 7:
* [[Instrukcja]] (przypisania, wprowadzania/wyprowadzania danych, warunkowa, wyboru, złożona, procedury)
* [[Instrukcja]] (przypisania, wprowadzania/wyprowadzania danych, warunkowa, wyboru, złożona, procedury)


Ideą programowania strukturalnego jest [[wymuszenie]] opisania najważniejszych struktur danych, przemyślenie całej struktury przygotowywanego programu oraz utworzenie niezbędnej dokumentacji, co pozwala na wczesne wykrycie problemów, które programista może napotkać w trakcie realizacji projektu.  
Ideą programowania strukturalnego jest [[wymuszenie]] opisania najważniejszych struktur danych, przemyślenie całej struktury przygotowywanego programu oraz utworzenie niezbędnej dokumentacji, co pozwala na wczesne wykrycie problemów, które programista może napotkać w trakcie realizacji projektu.
 
==TL;DR==
Programowanie strukturalne to paradygmat programowania, w którym buduje się programy o strukturze odzwierciedlającej rozwiązywany problem. W programowaniu strukturalnym wykorzystuje się kilka podstawowych struktur sterujących, takich jak iteracja, wybór, sekwencja, pętla, podprogram i instrukcja. Instrukcja goto, która pozwala na bezwarunkowe skoki w kodzie, była krytykowana za zaciemnianie struktury programu. Obecnie zamiast instrukcji goto używa się innych standardowych instrukcji, takich jak return czy break.


==Historia==
==Historia==
Wraz z rozwojem technologii i coraz większym naciskiem na [[rozwój]] oprogramowania projektowano nowe języki oprogramowania. W roku 1960 powstał język ALGOL 60, który wprowadzał wiele istotnych właściwości. Wcześniej programiści zmagali się z debuggowaniem kodu, który przez swoje zawiłe i nieustandaryzowane konstrukcje był trudny do zrozumienia, a [[działanie]] programu ciężkie do przewidzenia. ALGOL 60 umożliwiał stosowanie instrukcji warunkowych, pętli oraz instrukcji sterujących.
Wraz z rozwojem technologii i coraz większym naciskiem na [[rozwój]] oprogramowania projektowano nowe języki oprogramowania. W roku 1960 powstał język ALGOL 60, który wprowadzał wiele istotnych właściwości. Wcześniej programiści zmagali się z debuggowaniem kodu, który przez swoje zawiłe i nieustandaryzowane konstrukcje był trudny do zrozumienia, a [[działanie]] programu ciężkie do przewidzenia. ALGOL 60 umożliwiał stosowanie instrukcji warunkowych, pętli oraz instrukcji sterujących.
W tym okresie zaczęto zastanawiać się nad ograniczeniem używania instrukcji goto, która według wielu była zbędna i mogła przeszkadzać w projektowaniu programu, ponieważ uważano, że każda struktura kontrolna w programie powinna mieć jedno wejście i jedno wyjście. <ref>Morgan K.J. (1990), [http://users.csc.calpoly.edu/~jdalbey/308/Resources/StructuredProgramming ''Introduction to structured programming using Turbo Pascal'']DeVry Institute of Technology, Atlanta</ref>
W tym okresie zaczęto zastanawiać się nad ograniczeniem używania instrukcji goto, która według wielu była zbędna i mogła przeszkadzać w projektowaniu programu, ponieważ uważano, że każda struktura kontrolna w programie powinna mieć jedno wejście i jedno wyjście<ref>Morgan K.J. (1990)</ref>
 
<google>n</google>
 
==Instrukcja goto==
==Instrukcja goto==
Instrukcja bezwarunkowego skoku goto pozwalała na [[przeniesienie]] sterowania do wskazanej linii kodu lub miejsca oznaczonego etykietą. Przykład użycia tej instrukcji w języku Perl:
Instrukcja bezwarunkowego skoku goto pozwalała na [[przeniesienie]] sterowania do wskazanej linii kodu lub miejsca oznaczonego etykietą. Przykład użycia tej instrukcji w języku Perl:
Linia 40: Linia 31:
</pre>
</pre>
Powyższy fragment programu jest odpowiedzialny za wypisanie na ekranie "21".
Powyższy fragment programu jest odpowiedzialny za wypisanie na ekranie "21".
Jak można sobie wyobrazić, instrukcja ta może ułatwić pisanie programu, jednak jej niebezpieczną stronę w roku 1968 opisał Edgar Dijkstra w swojej pracy ''Goto statement considered harmful''<ref>Dijkstra E. (1968) [https://homepages.cwi.nl/~storm/teaching/reader/Dijkstra68.pdf ''Goto Statement considered harmful''] Communications of the ACM, tom 11, s. 147–148</ref>
Jak można sobie wyobrazić, instrukcja ta może ułatwić pisanie programu, jednak jej niebezpieczną stronę w roku 1968 opisał Edgar Dijkstra w swojej pracy ''Goto statement considered harmful''<ref>Dijkstra E. (1968), s. 147-148</ref>
 
==Przykłady kodu źródłowego==
==Przykłady kodu źródłowego==
 
Niemalże wszystkie popularne [[języki programowania]] umożliwiają pisanie programów strukturalnych, jak również znacząca mniejszość z nich zabrania używania skoków. Jednym z popularnych języków w którym można pokazać przykład programu wykorzystującego ideę struktur jest [[C++]].
Niemalże wszystkie popularne [[języki programowania]] umożliwiają pisanie programów strukturalnych, jak również znacząca mniejszość z nich zabrania używania skoków. Jednym z popularnych języków w którym można pokazać przykład programu wykorzystującego ideę struktur jest [[C++]].  
[[Prosty program]] w tym języku wykorzystujący programowanie strukturalne, którego zadaniem jest sumowanie liczb ma postać:
[[Prosty program]] w tym języku wykorzystujący programowanie strukturalne, którego zadaniem jest sumowanie liczb ma postać:
<google>ban728t</google>
<pre>
<pre>
# include <iostream>
# include <iostream>
Linia 55: Linia 45:
  int i = 0,
  int i = 0,


  cout << "Podaj liczbę..." << endl,
  cout << "Podaj liczbę..". << endl,


  cin >> liczbaDodatnia,
  cin >> liczbaDodatnia,
Linia 66: Linia 56:
  return 0,
  return 0,
}
}
</pre>  
</pre>
 
==Klasyfikacja programu jako strukturalnego==
==Klasyfikacja programu jako strukturalnego==
Uznaje się, że [[program]] nie ma postaci strukturalnej, jeżeli występuje w nim:
Uznaje się, że [[program]] nie ma postaci strukturalnej, jeżeli występuje w nim:
Linia 74: Linia 65:
* instrukcja skoku (''goto'') do innej części programu
* instrukcja skoku (''goto'') do innej części programu


Przykład programu w języku C++ wykorzystującego instrukcję skoku:  
Przykład programu w języku C++ wykorzystującego instrukcję skoku:
<pre>
<pre>
# include <iostream>
# include <iostream>
# include <cmath>
# include <cmath>
 
int main (){
int main (){
  using namespace std,
  using namespace std,
 
  probujPonownie:
  probujPonownie:
  cout << "Podaj dowolna liczbe dodatnia...",
  cout << "Podaj dowolna liczbe dodatnia..".,
  double dX,
  double dX,
  cin >> dX,
  cin >> dX,
  if (dX < 0.0)
  if (dX < 0.0)
  goto probujPonownie; // instrukcja goto
  goto probujPonownie; // instrukcja goto
 
  cout << "Pierwiastek z " << dX << " wynosi " << sqrt (dX) << endl,
  cout << "Pierwiastek z " << dX << " wynosi " << sqrt (dX) << endl,
  return 0,
  return 0,
Linia 94: Linia 85:


</pre>
</pre>
==Wcześniejsze wyjście==
==Wcześniejsze wyjście==
Niechęć do instrukcji skoku wynikała z pogarszania jakości programu i zaciemniania jego struktury, jednakże zwolennicy wykorzystywania instrukcji ''goto'' uważali, że użycie skoku jest znacznie lepszym rozwiązaniem niż wykorzystywanie kliku innych warunków, pętli i zmiennych mających zastąpić instrukcję ''goto''. Obecnie zamiast instrukcji skoku wykorzystać można wiele standardowych instrukcji ułatwiających tworzenie programu jak np. instrukcję ''return'', czy opuszczenie pętli za pomocą instrukcji ''break''. <ref>Watt D., Findlay W. (2004), ''Programming language design concepts'' John Wiley & Sons Ltd, Chichester</ref>
Niechęć do instrukcji skoku wynikała z pogarszania jakości programu i zaciemniania jego struktury, jednakże zwolennicy wykorzystywania instrukcji ''goto'' uważali, że użycie skoku jest znacznie lepszym rozwiązaniem niż wykorzystywanie kliku innych warunków, pętli i zmiennych mających zastąpić instrukcję ''goto''. Obecnie zamiast instrukcji skoku wykorzystać można wiele standardowych instrukcji ułatwiających tworzenie programu jak np. instrukcję ''return'', czy opuszczenie pętli za pomocą instrukcji ''break''. <ref>Watt D., Findlay W. (2004)</ref>


Przerwanie pętli instrukcją ''break'' lub wybranej iteracji instrukcją ''continue'' również może być uważane za łamanie zasady jednego wyjścia. Kolejnym przykładem jest obsługa wyjątków, które są używane na przykład w bardzo popularnym języku Java. To pokazuje, że programiści skupiają się na przejrzystości kodu, jeśli stosowanie do zasady jednego wyjścia sprawiłoby, że kod byłby mniej zrozumiały i trudny do przeanalizowania.<ref>Fowler M., Fields J., Harvie S. (2006), [https://the-eye.eu/public/Books/IT%20Various/refactoring_ruby_edition.pdf ''Refactoring: Ruby Edition''], Addison-Wesley, Boston </ref>
Przerwanie pętli instrukcją ''break'' lub wybranej iteracji instrukcją ''continue'' również może być uważane za łamanie zasady jednego wyjścia. Kolejnym przykładem jest obsługa wyjątków, które są używane na przykład w bardzo popularnym języku Java. To pokazuje, że programiści skupiają się na przejrzystości kodu, jeśli stosowanie do zasady jednego wyjścia sprawiłoby, że kod byłby mniej zrozumiały i trudny do przeanalizowania<ref>Fowler M., Fields J., Harvie S. (2006)</ref>
 
{{infobox5|list1={{i5link|a=[[Test driven development]]}} &mdash; {{i5link|a=[[Programowanie]]}} &mdash; {{i5link|a=[[Ganttproject]]}} &mdash; {{i5link|a=[[SmallTalk (język programowania)]]}} &mdash; {{i5link|a=[[C (język programowania)]]}} &mdash; {{i5link|a=[[Backlog produktu]]}} &mdash; {{i5link|a=[[Webmaster]]}} &mdash; {{i5link|a=[[Epic]]}} &mdash; {{i5link|a=[[Java]]}} }}


==Przypisy==
==Przypisy==
<references/>
<references />


==Bibliografia==
==Bibliografia==
* Bäckman K. (2012), [http://dspace.bhos.edu.az/xmlui/bitstream/handle/123456789/1000/structured-programming-with-c-plus-plus_copy.pdf Structured programming with C++] Department of Economy and Informatics, University West, Trollhättan
<noautolinks>
* McBride P.K. (2001), Pascal to proste, Wydawnictwo RM, Warszawa
* Bäckman K. (2012), ''Structured programming with C++'', Department of Economy and Informatics, University West, Trollhättan
* Porębski W. (2008), Język C++ Standard [[ISO]] w praktyce, Wydawnictwo Naukowe PWN, Warszawa
* McBride P. (2001), ''Pascal - to proste'', Wydawnictwo RM, Warszawa
* Prata S. (2006), Język C++. Szkoła programowania, Helion, Gliwice
* Porębski W. (2008), ''Język C++ Standard ISO w praktyce'', Wydawnictwo Naukowe PWN, Warszawa
* Schildt H. (2012), [[Java]]. Kompendium programisty. Wydanie VIII, Helion, Gliwice
* Prata S. (2006), ''Język C++. Szkoła programowania'', Helion, Gliwice
* Van Roy P. (2005), Programowanie. Koncepcje, techniki i [[modele]], Helion, Gliwice
* Schildt H. (2012), ''Java. Kompendium programisty'', Helion, Gliwice
* Vinhas L. (2016), [http://wiki.dpi.inpe.br/lib/exe/fetch.php?media=cap390:fund_prog12.pdf Fundamentals Of Structured Programming] National Institute for Space Research, Sao Jose dos Campos
* Van Roy P. (2005), ''Programowanie. Koncepcje, techniki i modele'', Helion, Gliwice
* Yu C. (2015), [https://ps.uci.edu/~cyu/p231C/LectureNotes/ErrorHandling/exceptions.pdf Error Handling and Exceptions], School of Physical Sciences, California
* Vinhas L. (2016), ''[http://wiki.dpi.inpe.br/lib/exe/fetch.php?media=cap390:fund_prog12.pdf Fundamentals Of Structured Programming]'', National Institute for Space Research, Sao Jose dos Campos
 
* Yu C. (2015), ''[https://ps.uci.edu/~cyu/p231C/LectureNotes/ErrorHandling/exceptions.pdf Error Handling and Exceptions]'', School of Physical Sciences, California
</noautolinks>
[[Kategoria:Języki programowania]]
[[Kategoria:Języki programowania]]
{{a|Jarosław Wachel, Arkadiusz Bugajski}}
{{a|Jarosław Wachel, Arkadiusz Bugajski}}
{{#metamaster:description|Programowanie strukturalne to paradygmat programowania, który koncentruje się na dobrze zorganizowanej strukturze programów. Wykorzystuje podstawowe struktury sterujące i wymaga systematycznego użycia abstrakcji i dokumentacji.}}

Aktualna wersja na dzień 18:18, 19 gru 2023

Programowanie strukturalne - jeden z paradygmatów programowania w którym celem jest konstruowanie programu zmierzające do osiągnięcia takiej jego struktury, aby stanowiła ona odzwierciedlenie struktury rozwiązywanego problemu. Kluczowym zagadnieniem w programowaniu strukturalnym jest systematyczne użycie poziomów abstrakcji w ramach opracowywania kolejnych etapów programu. Proces tworzenia programu rozpoczyna się od jego ogólnego opisu, przechodząc następnie do szczegółów[1] W przeciwieństwie do programowania obiektowego, w programowaniu strukturalnym zaleca się wykorzystanie tylko kilku najważniejszych struktur sterujących:

  • Iteracja - powtarzanie instrukcji w pętli do momentu w którym zostanie spełniony warunek iteracyjny
  • Wybór - realizacja poszczególnych instrukcji programu w zależności od jego stanu
  • Sekwencja - wykonanie poszczególnych instrukcji w kolejności
  • Pętla
  • Podprogram
  • Instrukcja (przypisania, wprowadzania/wyprowadzania danych, warunkowa, wyboru, złożona, procedury)

Ideą programowania strukturalnego jest wymuszenie opisania najważniejszych struktur danych, przemyślenie całej struktury przygotowywanego programu oraz utworzenie niezbędnej dokumentacji, co pozwala na wczesne wykrycie problemów, które programista może napotkać w trakcie realizacji projektu.

TL;DR

Programowanie strukturalne to paradygmat programowania, w którym buduje się programy o strukturze odzwierciedlającej rozwiązywany problem. W programowaniu strukturalnym wykorzystuje się kilka podstawowych struktur sterujących, takich jak iteracja, wybór, sekwencja, pętla, podprogram i instrukcja. Instrukcja goto, która pozwala na bezwarunkowe skoki w kodzie, była krytykowana za zaciemnianie struktury programu. Obecnie zamiast instrukcji goto używa się innych standardowych instrukcji, takich jak return czy break.

Historia

Wraz z rozwojem technologii i coraz większym naciskiem na rozwój oprogramowania projektowano nowe języki oprogramowania. W roku 1960 powstał język ALGOL 60, który wprowadzał wiele istotnych właściwości. Wcześniej programiści zmagali się z debuggowaniem kodu, który przez swoje zawiłe i nieustandaryzowane konstrukcje był trudny do zrozumienia, a działanie programu ciężkie do przewidzenia. ALGOL 60 umożliwiał stosowanie instrukcji warunkowych, pętli oraz instrukcji sterujących. W tym okresie zaczęto zastanawiać się nad ograniczeniem używania instrukcji goto, która według wielu była zbędna i mogła przeszkadzać w projektowaniu programu, ponieważ uważano, że każda struktura kontrolna w programie powinna mieć jedno wejście i jedno wyjście[2]

Instrukcja goto

Instrukcja bezwarunkowego skoku goto pozwalała na przeniesienie sterowania do wskazanej linii kodu lub miejsca oznaczonego etykietą. Przykład użycia tej instrukcji w języku Perl:

goto B,
A:
print "1\n",
goto C,
B:
print "2",
goto A,
C:

Powyższy fragment programu jest odpowiedzialny za wypisanie na ekranie "21". Jak można sobie wyobrazić, instrukcja ta może ułatwić pisanie programu, jednak jej niebezpieczną stronę w roku 1968 opisał Edgar Dijkstra w swojej pracy Goto statement considered harmful[3]

Przykłady kodu źródłowego

Niemalże wszystkie popularne języki programowania umożliwiają pisanie programów strukturalnych, jak również znacząca mniejszość z nich zabrania używania skoków. Jednym z popularnych języków w którym można pokazać przykład programu wykorzystującego ideę struktur jest C++. Prosty program w tym języku wykorzystujący programowanie strukturalne, którego zadaniem jest sumowanie liczb ma postać:

# include <iostream>
using namespace std,

int main (){
 int liczbaDodatnia,
 int pierwszaLiczba = 1,
 int i = 0,

 cout << "Podaj liczbę..". << endl,

 cin >> liczbaDodatnia,

 for (int i=0; i < liczbaDodatnia; i++){
 i = pierwszaLiczba + 1,
 cout << i,
 }

 return 0,
}

Klasyfikacja programu jako strukturalnego

Uznaje się, że program nie ma postaci strukturalnej, jeżeli występuje w nim:

  • instrukcja skoku (goto) na zewnątrz pętli
  • instrukcja skoku (goto) do środka instrukcji warunkowej
  • instrukcja skoku (goto) do środka pętli
  • instrukcja skoku (goto) do innej części programu

Przykład programu w języku C++ wykorzystującego instrukcję skoku:

# include <iostream>
# include <cmath>

int main (){
 using namespace std,

 probujPonownie:
 cout << "Podaj dowolna liczbe dodatnia..".,
 double dX,
 cin >> dX,
 if (dX < 0.0)
 goto probujPonownie; // instrukcja goto

 cout << "Pierwiastek z " << dX << " wynosi " << sqrt (dX) << endl,
 return 0,
}

Wcześniejsze wyjście

Niechęć do instrukcji skoku wynikała z pogarszania jakości programu i zaciemniania jego struktury, jednakże zwolennicy wykorzystywania instrukcji goto uważali, że użycie skoku jest znacznie lepszym rozwiązaniem niż wykorzystywanie kliku innych warunków, pętli i zmiennych mających zastąpić instrukcję goto. Obecnie zamiast instrukcji skoku wykorzystać można wiele standardowych instrukcji ułatwiających tworzenie programu jak np. instrukcję return, czy opuszczenie pętli za pomocą instrukcji break. [4]

Przerwanie pętli instrukcją break lub wybranej iteracji instrukcją continue również może być uważane za łamanie zasady jednego wyjścia. Kolejnym przykładem jest obsługa wyjątków, które są używane na przykład w bardzo popularnym języku Java. To pokazuje, że programiści skupiają się na przejrzystości kodu, jeśli stosowanie do zasady jednego wyjścia sprawiłoby, że kod byłby mniej zrozumiały i trudny do przeanalizowania[5]


Programowanie strukturalneartykuły polecane
Test driven developmentProgramowanieGanttprojectSmallTalk (język programowania)C (język programowania)Backlog produktuWebmasterEpicJava

Przypisy

  1. Bansal A.K. (2013)
  2. Morgan K.J. (1990)
  3. Dijkstra E. (1968), s. 147-148
  4. Watt D., Findlay W. (2004)
  5. Fowler M., Fields J., Harvie S. (2006)

Bibliografia

  • Bäckman K. (2012), Structured programming with C++, Department of Economy and Informatics, University West, Trollhättan
  • McBride P. (2001), Pascal - to proste, Wydawnictwo RM, Warszawa
  • Porębski W. (2008), Język C++ Standard ISO w praktyce, Wydawnictwo Naukowe PWN, Warszawa
  • Prata S. (2006), Język C++. Szkoła programowania, Helion, Gliwice
  • Schildt H. (2012), Java. Kompendium programisty, Helion, Gliwice
  • Van Roy P. (2005), Programowanie. Koncepcje, techniki i modele, Helion, Gliwice
  • Vinhas L. (2016), Fundamentals Of Structured Programming, National Institute for Space Research, Sao Jose dos Campos
  • Yu C. (2015), Error Handling and Exceptions, School of Physical Sciences, California

Autor: Jarosław Wachel, Arkadiusz Bugajski