Định nghĩa của bang bang


15

Một cách tốt để định nghĩa "trạng thái", như trong biến trạng thái hoặc máy trạng thái, cho một lập trình viên mới (trước đây không) là gì? Một số cách tốt để giải thích tại sao khái niệm này hữu ích cho việc viết phần mềm? Là khái niệm về nhà nước được dạy rõ ràng trong các khóa học lập trình hoặc sách phổ biến?

Câu trả lời:


5

"trạng thái" là cần thiết, khi bạn cần nhớ một cái gì đó. Các hàm (không phải "phương thức" hay bất cứ thứ gì) lý tưởng chỉ phụ thuộc vào đầu vào của chúng. Nếu bạn hỏi một câu hỏi mà câu trả lời có thể thay đổi theo thời gian, ngay cả khi các đầu vào giống nhau, bạn cần một cái gì đó để ghi nhớ sự khác biệt đó trong câu trả lời, đúng không? Mặt khác, bạn không thể đưa ra một câu trả lời khác vì không có yếu tố nào khác thay đổi (giả sử câu trả lời không phụ thuộc trực tiếp vào thời gian).

"Điều / thông tin" mà bạn cần nhớ được gọi là "trạng thái".

(không có nghĩa là "trạng thái" này thay đổi theo thời gian, về cơ bản nó chỉ là một cách để nói "ghi nhớ / biết điều gì đó")


1
Tôi nghĩ rằng đây là câu trả lời tốt nhất, nếu được đánh giá lại là dễ hiểu đối với người không lập trình. Nói: tất cả các hoạt động xử lý mọi thứ và / hoặc thông tin. Điều này xảy ra theo ba cách: 1) mọi hoạt động có thể mất hoặc sử dụng hoặc đọc một cái gì đó: đầu vào của nó ; 2) nó có thể sản xuất hoặc viết một cái gì đó: đầu ra của nó ; 3) trong khi đang thực hiện, nó có thể giữ , giữ , ghi nhớ , lưu trữ một cái gì đó: trạng thái của nó. Đối với hầu hết các chương trình máy tính, tất cả các đầu vào, đầu ra và trạng thái bao gồm thông tin, trong khi đối với các loại hoạt động khác (giả sử, nấu ăn), các đối tượng vật lý cũng thường được tham gia.
rebierpost

8

Từ Wikipedia :

Trạng thái thường đề cập đến điều kiện hiện tại của một hệ thống hoặc thực thể ...

Đó là khá nhiều ý nghĩa của nó trong bối cảnh điện toán: dữ liệu xác định tình trạng của một số đối tượng hoặc hệ thống.

Ý nghĩa của 'trạng thái' không dành riêng cho lập trình. Có những ví dụ về 'trạng thái' theo nghĩa đen ở mọi nơi bạn nhìn. Ti vi đã tắt. Cà phê nóng. Giày thể thao có màu xanh dương; b) có mùi; c) không được đưa đi; d) khá hao mòn. 'trạng thái' theo nghĩa lập trình cũng giống như 'trạng thái' theo nghĩa không lập trình, ngoại trừ chúng ta áp dụng nó cho các đối tượng mà chúng ta xử lý: biến, đối tượng, luồng, cơ sở dữ liệu, hệ thống tệp, v.v. Nếu bạn có để giải thích nó, giải thích nó theo những thuật ngữ quen thuộc - không cần phải biến nó thành một khái niệm kỹ thuật xa lạ.

Đồng hồ là một ví dụ điển hình về một hệ thống đơn giản có một số trạng thái: đồng hồ có thể chạy hoặc không chạy và nó cho biết thời gian có thể hoặc không thể tương ứng với thời gian thực tế trong ngày. Thật dễ dàng để xem những thứ đó giống như các biến và cách thay đổi trạng thái của đồng hồ có thể ảnh hưởng đến những thứ khác.

So sánh điều đó với một cái gì đó không quốc tịch, như một tuyên bố: "Cánh cửa màu đỏ." Bản thân tuyên bố không có trạng thái. Có thể đúng hoặc không đúng khi cánh cửa màu đỏ, nhưng bản thân câu lệnh không chứa bất kỳ trạng thái nào. Vẽ cánh cửa có thể thay đổi sự thật của tuyên bố, nhưng bản thân tuyên bố không bao giờ thay đổi. Tương tự, một số như 42 không có bất kỳ trạng thái nào: 42 là 42 và bạn không thể thay đổi gì về nó.

Các biến có trạng thái, giá trị không.


1
@ hotpaw2 Ý nghĩa của 'trạng thái' không dành riêng cho lập trình. Có những ví dụ về 'trạng thái' theo nghĩa đen ở mọi nơi bạn nhìn. Ti vi đã tắt. Cà phê nóng. Giày thể thao có màu xanh dương; b) có mùi; c) không được đưa đi; d) khá hao mòn. 'trạng thái' theo nghĩa lập trình cũng giống như 'trạng thái' theo nghĩa không lập trình, ngoại trừ chúng ta áp dụng nó cho các đối tượng mà chúng ta xử lý: biến, đối tượng, luồng, cơ sở dữ liệu, hệ thống tệp, v.v.
Caleb

1
Vì vậy, bạn sẽ giải thích nó cho một sinh viên lập trình bằng cách sử dụng các ví dụ cụ thể? Có vẻ như là một ý kiến ​​hay. Nó sẽ chuyển giao hiệu quả để họ hiểu nhà nước trong chương trình của họ?
hotpaw2

2
@ hotpaw2 Đã chuyển nhận xét của tôi lên câu trả lời và mở rộng một chút. Về sự hiểu biết, tôi nghĩ tốt nhất là không tập trung quá nhiều vào 'trạng thái' trong bản tóm tắt với người mới bắt đầu. Hầu hết mọi người cần các ví dụ cụ thể về một cái gì đó trước khi họ thực sự có thể nhận ra một mô hình tổng quát hơn.
Caleb

1
Không rõ tại sao "cà phê nóng" là trạng thái, nhưng "cánh cửa màu đỏ" là không quốc tịch? Ngược lại, điều đó có nghĩa là "cà phê đen" là không quốc tịch và "cửa nóng" là trạng thái?
Adam Hughes

1
@AdamHughes Hãy nhìn vào nơi tôi đã sử dụng dấu ngoặc kép - cụ thể, tôi đã không sử dụng chúng khi nói về cà phê vì tôi đang đề cập đến cà phê thực tế, không phải là tuyên bố về cà phê. Vấn đề là giải thích sự khác biệt giữa các biến và giá trị. Cánh cửa thực tế trên nhà tôi có trạng thái: nó có thể mở hoặc đóng, đỏ hoặc xanh hoặc xanh, nóng hoặc lạnh, v.v ... Một tuyên bố về cánh cửa có thể chỉ ra trạng thái đó, nhưng bản thân tuyên bố là một thứ không thể thay đổi.
Caleb

1

Nhà nước là thông tin chương trình của bạn thao túng để hoàn thành một số nhiệm vụ. Đó là dữ liệu hoặc thông tin được thay đổi hoặc thao tác trong suốt thời gian chạy của chương trình. "Trạng thái" của một chương trình tại một thời điểm nhất định đề cập đến một ảnh chụp nhanh tất cả dữ liệu mà chương trình hiện đang xem hoặc phân tích để đến bước tiếp theo trong quá trình thực thi.

Trường đại học của tôi bắt đầu với Scheme, vì vậy chúng tôi bắt đầu lập trình với một mô hình không có nhà nước. Sau đó chúng tôi chuyển sang C và rất rõ ràng về trạng thái là gì, tại sao nó hữu ích và tại sao nó khiến mọi thứ trở nên rất phức tạp. Vì vậy, một số trường đại học chắc chắn nói về nhà nước, nhưng không nhất thiết là tất cả trong số họ


1

Bạn có thể sử dụng sự tương tự của đèn giao thông có thể ở một trong ba trạng thái: [XANH], [VÀNG] hoặc [ĐỎ]. Nó chỉ phải ở một trạng thái tại một thời điểm. Đèn giao thông là máy trạng thái thực tế đang được mô hình hóa. Thông thường nó sẽ chuyển trạng thái từ [XANH sang VÀNG], sau đó [VÀNG sang ĐỎ], sau đó [ĐỎ sang XANH].

nhập mô tả hình ảnh ở đây

Chuyển đổi trạng thái thay thế (có hiệu lực ở một số quốc gia như Vương quốc Anh, có hai lần chuyển đổi [ĐỎ sang VÀNG, sau đó VÀNG sang XANH] thay cho chuyển đổi [ĐỎ sang XANH].

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.