<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl">
	<id>https://wiki.otwartaedukacja.pl/index.php?action=history&amp;feed=atom&amp;title=R%C3%B3%C5%BCnorodno%C5%9B%C4%87_struktur_program%C3%B3w</id>
	<title>Różnorodność struktur programów - Historia wersji</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.otwartaedukacja.pl/index.php?action=history&amp;feed=atom&amp;title=R%C3%B3%C5%BCnorodno%C5%9B%C4%87_struktur_program%C3%B3w"/>
	<link rel="alternate" type="text/html" href="https://wiki.otwartaedukacja.pl/index.php?title=R%C3%B3%C5%BCnorodno%C5%9B%C4%87_struktur_program%C3%B3w&amp;action=history"/>
	<updated>2026-05-01T13:29:18Z</updated>
	<subtitle>Historia wersji tej strony wiki</subtitle>
	<generator>MediaWiki 1.38.2</generator>
	<entry>
		<id>https://wiki.otwartaedukacja.pl/index.php?title=R%C3%B3%C5%BCnorodno%C5%9B%C4%87_struktur_program%C3%B3w&amp;diff=46&amp;oldid=prev</id>
		<title>Admin: Utworzono nową stronę &quot;== Wszystko płynie ….  ==  Dwa i pół tysiąca lat temu grecki filozof [https://pl.wikipedia.org/wiki/Heraklit Heraklit] opisywał przy pomocy metafory rzeki ciągle...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.otwartaedukacja.pl/index.php?title=R%C3%B3%C5%BCnorodno%C5%9B%C4%87_struktur_program%C3%B3w&amp;diff=46&amp;oldid=prev"/>
		<updated>2017-06-26T20:28:37Z</updated>

		<summary type="html">&lt;p&gt;Utworzono nową stronę &amp;quot;== Wszystko płynie ….  ==  Dwa i pół tysiąca lat temu grecki filozof [https://pl.wikipedia.org/wiki/Heraklit Heraklit] opisywał przy pomocy metafory rzeki ciągle...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nowa strona&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Wszystko płynie ….  ==&lt;br /&gt;
&lt;br /&gt;
Dwa i pół tysiąca lat temu grecki filozof [https://pl.wikipedia.org/wiki/Heraklit Heraklit] opisywał przy pomocy metafory rzeki ciągle zmieniający się świat. Wszystko płynie i „nie można wejść dwa razy do tej samej wody”. Także czas odmierzany zegarem komputera płynie nieustannie. Czy jednak metafora rzeki pasuje do opisu działania komputera? Próba odpowiedzi na to pytanie pozwala lepiej zrozumieć strukturę programów komputerowych. &lt;br /&gt;
&lt;br /&gt;
== Przepływy w komputerze  ==&lt;br /&gt;
&lt;br /&gt;
Działanie programu jest napędzane zegarem komputera, który nigdy się nie zatrzymuje (chyba, że wskutek awarii lub wyłączenia zasilania). Nie mamy możliwości wpływania na ten proces. Raz uruchomiony program działa bez naszej ingerencji a czasem nawet wiedzy – deterministycznie i automatycznie.&lt;br /&gt;
&lt;br /&gt;
W rytm zegara następują w programach dwa rodzaje przepływów: &amp;#039;&amp;#039;&amp;#039;przepływ danych&amp;#039;&amp;#039;&amp;#039; i &amp;#039;&amp;#039;&amp;#039;przepływ sterowania&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
Upraszczając nieco problem można rzec, że przepływ sterowania wiąże się z wykonywaniem przez komputer kolejnych instrukcji programu, a przepływ danych z wykonywanymi przez ten program działaniami:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center;&amp;quot;&amp;gt;komputer → sterowanie → dane&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Czyli komputer wykonuje instrukcje, a te instrukcje powodują zmiany stanu (pamięci) komputera. Nic nie stoi na przeszkodzie, aby taki sam stan mógł pojawiać się wielokrotnie. &amp;#039;&amp;#039;&amp;#039;W odniesieniu do świata maszyn Heraklit nie miał więc racji&amp;#039;&amp;#039;&amp;#039;. Jednokierunkowość zmian w czasie jest jedną z różnic między człowiekiem a maszyną.&lt;br /&gt;
&lt;br /&gt;
Drugą istotną różnicą jest determinizm. Przepływ danych i sterowania odbywa się w sposób automatyczny. Po uruchomieniu programu komputer samodzielnie (automatycznie) wykonuje kolejne jego instrukcje. Można z góry przewidzieć kolejność wykonywania działań (na tym przecież polega programowanie maszyn). Człowiek tymczasem przed każdym działaniem podejmuje świadomą decyzję.&lt;br /&gt;
&lt;br /&gt;
Te dwa zagadnienia wyglądają paradoksalnie:&lt;br /&gt;
&lt;br /&gt;
1. Istnieje pozorna sprzeczność między trwałością a przemijaniem. Komputer może bez końca wracać do stanu początkowego (trwałość), a jednak każdy program zaczyna się i kończy (przemijanie).&lt;br /&gt;
&lt;br /&gt;
2. W przypadku większości programów następuje &amp;#039;&amp;#039;&amp;#039;interakcja z otoczeniem&amp;#039;&amp;#039;&amp;#039;. Jeśli program wydrukował raport na drukarce, to nie może już tego cofnąć. Nie ma powrotu do stanu w którym kartka była czysta! Jak to pogodzić z tezą o możliwości powrotu do stanu początkowego?&lt;br /&gt;
&lt;br /&gt;
3. Z kolei interakcja między komputerami i ludźmi (lub ludźmi za pośrednictwem komputerów) wiąże się z brakiem determinizmu, gdy tymczasem komputery działają deterministycznie (automatycznie).&lt;br /&gt;
&lt;br /&gt;
Aby wyjaśnić te paradoksy, musimy dobrze rozumieć na czym polega przepływ sterowania, co to jest stan komputera oraz jak wygląda automatyzm działania w przypadku interakcji z otoczeniem.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1. Przepływ sterowania&amp;#039;&amp;#039;&amp;#039;. Co to jest sterowanie w komputerze? Człowiek myśli sekwencyjnie (po kolei) i tak tworzy programy. Każe komputerowi wykonywać kolejne instrukcje programu. Wskazanie na aktualnie wykonywaną instrukcję nazywa się potocznie sterowaniem. Każdy program kiedyś się zaczyna i zazwyczaj kiedyś się kończy. Początek to przejście sterowania do pierwszej instrukcji. Koniec – to przejście do instrukcji zakończenia (stop). Jeśli w programie pojawi się instrukcja warunkowa (&amp;#039;&amp;#039;&amp;#039;if&amp;#039;&amp;#039;&amp;#039;) – sterowanie może zmieniać się zależnie od sprawdzanego warunku. W programie mogą też występować pętle – a więc powrót do wcześniej wykonywanych instrukcji. W pętli następuje powtarzanie bloku tych samych instrukcji dopóki nie wystąpią warunki zakończenia pętli. Programy, które nigdy się nie zatrzymują (jakaś pętla nigdy się nie kończy) zazwyczaj uważa się za błędne. &lt;br /&gt;
&lt;br /&gt;
2. &amp;#039;&amp;#039;&amp;#039;Pojęcie stanu&amp;#039;&amp;#039;&amp;#039;. Programy działają na zmiennych – czyli odczytują i zmieniają stan pamięci komputera. Stan komputera – rozumiany jako zawartość pamięci (łącznie z zapamiętanym sterowaniem) może być identyczny w różnych momentach (przynajmniej w zakresie istotnym dla programu). Skutkiem działania programu jest przejście systemu komputerowego od jednego stanu (początkowego dla programu) do drugiego (końcowego dla tego programu). Kolejne kroki tego „przechodzenia” wiążą się z wykonywaniem kolejnych instrukcji (przepływ sterowania). Ten sam program lub jego fragment może być uruchamiany wielokrotnie i zawsze będzie działał tak samo o ile uzyska takie same dane. &lt;br /&gt;
&lt;br /&gt;
3. &amp;#039;&amp;#039;&amp;#039;Interakcja z otoczeniem&amp;#039;&amp;#039;&amp;#039;. Nie da się cofnąć operacji drukowania kartki. Tak – ale stan kartki nie wyznacza stanu komputera, tylko otoczenia w którym on funkcjonuje. Powyższy opis sterowania i stanu (pamięci) dotyczył świata komputerów, a nie świata w którym komputer działa!&lt;br /&gt;
&lt;br /&gt;
4. &amp;#039;&amp;#039;&amp;#039;Automatyzm i determinizm&amp;#039;&amp;#039;&amp;#039;. Gdy dane do komputera wprowadza człowiek, komputer nie ma wpływu na to co odczytuje. Jednak programista musiał przewidzieć różne możliwości i komputer nie może znaleźć się wskutek odczytania danych w innym stanie, niż to wynika z jego konstrukcji (działania programu). Indeterminizm dotyczy wyłącznie świata zewnętrznego. Interakcja z programem nie może zmieniać zasad działania ustalonych przez programistę! To odróżnienie jest ważne i obowiązuje zawsze – nawet w przypadku systemów sterujących różnymi urządzeniami – gdy komputer odczytuje informacje na temat zewnętrznych skutków generowanych sygnałów. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border:1px solid;border-spacing:0;margin:auto;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=center | &lt;br /&gt;
| align=center | &amp;#039;&amp;#039;&amp;#039;Sterowanie&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| align=center | &amp;#039;&amp;#039;&amp;#039;Stan (dane)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1px solid;&amp;quot; | Maszyna&lt;br /&gt;
| style=&amp;quot;border:1px solid;&amp;quot; | Automatyzm / determinizm&lt;br /&gt;
| style=&amp;quot;border:1px solid;&amp;quot; | Trwałość – możliwość powrotu do stanu początkowego&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1px solid;&amp;quot; | Człowiek&lt;br /&gt;
| style=&amp;quot;border:1px solid;&amp;quot; | Wolna wola / indeterminizm&lt;br /&gt;
| style=&amp;quot;border:1px solid;&amp;quot; | Jednokierunkowe zmiany w czasie&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1px solid;&amp;quot; | Interakcja&lt;br /&gt;
| style=&amp;quot;border:1px solid;&amp;quot; | Sposób reakcji na dowolne zmiany otoczenia nie jest swobodny ale zdeterminowany strukturą programu (zdefiniowany przez programistę).&lt;br /&gt;
| style=&amp;quot;border:1px solid;&amp;quot; | Trwałe zmiany dotyczą otoczenia, a nie wnętrza komputera.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Przepływ danych i sterowania w różnych rodzajach programów  ==&lt;br /&gt;
&lt;br /&gt;
Powyższe aspekty (sterowanie, dane, interakcja) wyczerpują w całości zagadnienie przepływów w programach. Wiele idei, jakie powstały w dziedzinie tworzenia oprogramowania to realizacja różnych pomysłów na to jak sobie radzić z przepływami w tych trzech aspektach.&lt;br /&gt;
&lt;br /&gt;
A oto przegląd różnego rodzaju interakcji dla różnych typów programów.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin:auto;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=center | &lt;br /&gt;
| align=center | &amp;#039;&amp;#039;&amp;#039;Sterowanie&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| align=center | &amp;#039;&amp;#039;&amp;#039;Stan (dane)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1px solid;&amp;quot; | Konsola&lt;br /&gt;
| style=&amp;quot;border:1px solid;&amp;quot; | Program interpretera wykonuje instrukcje pojedynczo (podawane przez operatora)&lt;br /&gt;
| style=&amp;quot;border:1px solid;&amp;quot; | &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1px solid;&amp;quot; | Program wsadowy&lt;br /&gt;
| style=&amp;quot;border:1px solid;&amp;quot; | Program uruchamiany dla przetworzenia danych – zazwyczaj bez dodatkowych interakcji.&lt;br /&gt;
| style=&amp;quot;border:1px solid;&amp;quot; | Program wczytuje dane, przetwarza je i zapisuje wyniki.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1px solid;&amp;quot; | Potoki i gniazda&lt;br /&gt;
| style=&amp;quot;border:1px solid;&amp;quot; | Program obecny w pamięci (na przykład fragment systemu operacyjnego) – komunikuje się najczęściej przez tak zwane „gniazda”.&lt;br /&gt;
| style=&amp;quot;border:1px solid;&amp;quot; | Podobny do programów wsadowych, ale przetwarza dane przesłane przez inne programy i przekazuje im wyniki.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1px solid;&amp;quot; | Obiekty&lt;br /&gt;
| style=&amp;quot;border:1px solid;&amp;quot; | Funkcje (metody) obiektów wywoływane przez inne obiekty/programy.&lt;br /&gt;
| style=&amp;quot;border:1px solid;&amp;quot; | Działanie funkcji zazwyczaj ogranicza się do zmian w obrębie obiektu (zmian własności obiektu).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1px solid;&amp;quot; | Zdarzenia&lt;br /&gt;
| style=&amp;quot;border:1px solid;&amp;quot; | Program uruchamiany w reakcji na sygnały świadczące o zajściu jakiegoś zdarzenia. Może to być interakcja z użytkownikiem, lub inne zdarzenie.&lt;br /&gt;
| style=&amp;quot;border:1px solid;&amp;quot; | &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1px solid;&amp;quot; | Wyjątki&lt;br /&gt;
| style=&amp;quot;border:1px solid;&amp;quot; | Przerwanie bieżącego wątku (sekwencji sterowania) wskutek nadzwyczajnych okoliczności. Przejście do miejsca w którym przewidziano obsługę wyjątku. Jeśli nie przewidziano – wyjątek przekazywany wyżej – do programu/procedury w której aaninisjowano wątek (na przykład uruchomiono procedurę).&lt;br /&gt;
| style=&amp;quot;border:1px solid;&amp;quot; | &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border:1px solid;&amp;quot; | Obiekty rozproszone, programy wielowarstwowe i interfejsy&lt;br /&gt;
| style=&amp;quot;border:1px solid;&amp;quot; | Obiekty lub programy uruchamiane na tym samym lub innym komputerze mogą komunikować się ze sobą poprzez interfejsy.&lt;br /&gt;
| style=&amp;quot;border:1px solid;&amp;quot; | Każdy program działa autonomicznie w swoim środowisku, zmiany na zewnątrz tego środowiska zleca innym programom.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Najlepszym objaśnieniem do powyższej tabelki jest rozdział przygotowywanego podręcznika programowania w Pythonie zatytułowany „Przepływ danych i sterowania[https://leanpub.com/pyprog]&amp;quot;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>