Definicja „państwa”

15

Jaki jest dobry sposób zdefiniowania „stanu”, jak w zmiennej stanu lub maszynie stanu, dla nowego (wcześniej nie) programisty? Jakie są dobre sposoby wyjaśnienia, dlaczego ta koncepcja jest przydatna do pisania oprogramowania? Czy koncepcja państwa jest wyraźnie nauczana na początku programowania lub książek programistycznych?

hotpaw2
źródło

Odpowiedzi:

5

„stan” jest potrzebny, gdy trzeba coś zapamiętać. Funkcje (nie „metody” lub cokolwiek innego) idealnie zależą tylko od ich danych wejściowych. Jeśli zadajesz pytanie, gdzie odpowiedź może się zmieniać w czasie, nawet jeśli dane wejściowe są takie same, potrzebujesz czegoś, aby zapamiętać tę różnicę w odpowiedzi, prawda? W przeciwnym razie nie będzie można podać innej odpowiedzi, ponieważ nie zmieniły się inne czynniki (załóżmy, że odpowiedź nie zależy bezpośrednio od czasu).

Ta „rzecz / informacja”, którą musisz zapamiętać, nazywa się „stanem”.

(nie jest wymagane, aby ten „stan” zmieniał się w czasie, jest to po prostu sposób na powiedzenie „pamiętanie / wiedzieć coś”)

phant0m
źródło
1
Myślę, że to najlepsza odpowiedź, jeśli została sformułowana w taki sposób, aby była zrozumiała dla nieprogramisty. Powiedz: wszystkie działania dotyczą rzeczy i / lub informacji. Dzieje się to na trzy sposoby: 1) każda działalność może podjąć lub wykorzystania lub czytają coś: jej wejście ; 2) może wyprodukować lub napisać coś: jego wynik ; 3) w trakcie może przechowywać , przechowywać , zapamiętywać , przechowywać : stan . W przypadku większości programów komputerowych wszystkie dane wejściowe, wyjściowe i stanowe składają się z informacji, podczas gdy w przypadku innych rodzajów czynności (np. Gotowania) zwykle zaangażowane są także obiekty fizyczne.
reinierpost
8

Z Wikipedii :

Stan zwykle odnosi się do obecnego stanu systemu lub podmiotu ...

To właściwie oznacza w kontekście komputerowym: dane, które określają stan jakiegoś obiektu lub systemu.

Znaczenie „stanu” nie jest specyficzne dla programowania. Istnieją przykłady „stanu” dosłownie wszędzie, gdzie spojrzysz. Telewizor jest wyłączony. Kawa jest gorąca. Adidasy są a) niebieskie; b) śmierdzący; c) nie odkładać; d) dość zużyte. „stan” w sensie programistycznym jest taki sam jak „stan” w sensie nieprogramowym, z tym wyjątkiem, że stosujemy go do obiektów, z którymi mamy do czynienia: zmiennych, obiektów, wątków, baz danych, systemów plików itp. Jeśli masz aby to wyjaśnić, wyjaśnij je znanymi terminami - nie ma potrzeby przekształcania go w obcą, techniczną koncepcję.

Zegar jest dobrym przykładem prostego systemu, który ma pewien stan: zegar może być uruchomiony lub nie, i wskazuje czas, który może, ale nie musi, odpowiadać rzeczywistej porze dnia. Łatwo jest zobaczyć, jak te rzeczy są jak zmienne i jak zmiana stanu zegara może wpłynąć na inne rzeczy.

Porównaj to z czymś bezstanowym, na przykład stwierdzeniem: „Drzwi są czerwone”. Samo zdanie nie ma stanu. To może być prawda, że ​​drzwi są czerwone, ale sama instrukcja nie zawiera żadnego stanu. Malowanie drzwi może zmienić prawdziwość oświadczenia, ale samo oświadczenie nigdy się nie zmienia. Podobnie liczba taka jak 42 nie ma żadnego stanu: 42 to 42 i nie można nic w tym zmienić.

Zmienne mają stan, wartości nie.

Caleb
źródło
1
@ hotpaw2 Znaczenie „stan” nie jest specyficzne dla programowania. Istnieją przykłady „stanu” dosłownie wszędzie, gdzie spojrzysz. Telewizor jest wyłączony. Kawa jest gorąca. Adidasy są a) niebieskie; b) śmierdzący; c) nie odkładać; d) dość zużyte. „stan” w sensie programistycznym jest taki sam jak „stan” w sensie nieprogramowym, z tym wyjątkiem, że stosujemy go do obiektów, z którymi mamy do czynienia: zmiennych, obiektów, wątków, baz danych, systemów plików itp.
Caleb
1
Więc wytłumaczysz to studentowi programowania, używając konkretnych przykładów? To dobry pomysł. Czy skutecznie przekaże im zrozumienie stanu w swoich programach?
hotpaw2
2
@ hotpaw2 Przeniesiłem mój komentarz do odpowiedzi i nieco się rozwinąłem. Jeśli chodzi o zrozumienie, myślę, że najlepiej nie koncentrować się zbytnio na „stanie” w abstrakcji u początkującego. Większość ludzi potrzebuje konkretnych przykładów czegoś, zanim naprawdę rozpoznają bardziej ogólny wzorzec.
Caleb
1
Nie jest jasne, dlaczego „kawa jest gorąca” jest stanowa, ale „drzwi są czerwone” są bezpaństwowe? Z drugiej strony, czy to znaczy, że „kawa jest czarna” jest bezpaństwowa, a „drzwi są gorące” jest stanowcza?
Adam Hughes
1
@AdamHughes Zobacz, gdzie użyłem cytatów - w szczególności nie użyłem ich w rozmowie o kawie, ponieważ miałem na myśli prawdziwą kawę, a nie stwierdzenia o kawie. Chodzi o wyjaśnienie różnicy między zmiennymi a wartościami. Rzeczywiste drzwi w moim domu mają stan: mogą być otwarte lub zamknięte, czerwone lub niebieskie lub zielone, gorące lub zimne itp. Oświadczenie o drzwiach może wskazywać na ten stan, ale samo oświadczenie jest niezmienne.
Caleb
1

Stan to informacje, którymi program manipuluje w celu wykonania określonego zadania. Są to dane lub informacje zmieniane lub modyfikowane w trakcie działania programu. „Stan” programu w danym momencie odnosi się do migawki wszystkich danych, które program aktualnie przegląda lub analizuje, aby przejść do następnego etapu jego wykonania.

Mój uniwersytet zaczął od Scheme, więc zaczęliśmy programować w modelu bezstanowym. Następnie przełączyliśmy się na C i bardzo jasno określiliśmy, jaki jest stan, dlaczego jest on użyteczny i dlaczego sprawia, że ​​sprawy są potencjalnie bardzo skomplikowane. Tak więc niektóre uniwersytety z pewnością mówią o państwie, ale niekoniecznie o wszystkich

Oleksi
źródło
1

Możesz użyć analogii sygnalizacji świetlnej, która może znajdować się w jednym z trzech stanów: [ZIELONY], [ŻÓŁTY] lub [CZERWONY]. Może być tylko w jednym stanie na raz. Sygnalizacja świetlna to modelowana maszyna stanu rzeczywistego. Zwykle zmieni stan z [ZIELONY na ŻÓŁTY], następnie [ŻÓŁTY na CZERWONY], a następnie [CZERWONY na ZIELONY].

wprowadź opis zdjęcia tutaj

Alternatywne przejście stanu (które obowiązuje w niektórych krajach, takich jak Wielka Brytania, ma dwa przejścia [CZERWONY na ŻÓŁTY, a następnie ŻÓŁTY na ZIELONY] zamiast przejścia [CZERWONY na ZIELONY].

dodgy_coder
źródło