Nghiên cứu lập trình phản ứng với ngôn ngữ ELM

79 616 0
Nghiên cứu lập trình phản ứng với ngôn ngữ ELM

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ NGUYỄN NHƢ MINH NGHIÊN CỨU LẬP TRÌNH PHẢN ỨNG VỚI NGÔN NGỮ ELM LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN Hà Nội - 2015 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ NGUYỄN NHƢ MINH NGHIÊN CỨU LẬP TRÌNH PHẢN ỨNG VỚI NGÔN NGỮ ELM Ngành: Công nghệ thông tin Chuyên ngành: Kỹ thuật phần mềm Mã số: 60480103 LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN NGƢỜI HƢỚNG DẪN KHOA HỌC: PGS TS TRƢƠNG ANH HOÀNG Hà Nội - 2015 LỜI CẢM ƠN Trƣớc tiên xin chân thành cảm ơn PGS.TS Trƣơng Anh Hoàng tận tình hƣớng dẫn, giúp đỡ suốt trình thực luận văn tốt nghiệp Tôi xin chân thành cảm ơn thầy cô giáo khoa Công nghệ Thông tin, trƣờng Đại học Công nghệ, Đại học Quốc gia Hà Nội, ngƣời tận tình truyền đạt kiến thức, quan tâm, động viên suốt thời gian học tập nghiên cứu Trƣờng Nhân cho phép gửi lời cảm ơn tới nhóm bạn học lớp K20CNPM, lớp chuyên ngành công nghệ phần mềm thƣờng xuyên quan tâm, giúp đỡ, chia sẻ kinh nghiệm, cung cấp tài liệu hữu ích suốt thời gian học tập trƣờng Hà Nội, tháng 12 năm 2015 Tác giả luận văn Nguyễn Như Minh LỜI CAM ĐOAN Tôi xin cam đoan luận văn “Nghiên cứu lập trình phản ứng với ngôn ngữ Elm” công trình nghiên cứu dƣới hƣớng dẫn khoa học PGS.TS Trƣơng Anh Hoàng, tham khảo nguồn tài liệu rõ trích dẫn danh mục tài liệu tham khảo Các nội dung công bố kết trình bày luận văn trung thực chƣa đƣợc công bố công trình Hà Nội, tháng 12 năm 2015 Tác giả luận văn Nguyễn Như Minh MỤC LỤC LỜI CẢM ƠN LỜI CAM ĐOAN MỤC LỤC DANH SÁCH HÌNH VẼ MỞ ĐẦU Lý chọn đề tài Mục đích nghiên cứu Đối tƣợng phạm vi nghiên cứu Kết cấu luận văn 10 CHƢƠNG 1-GIỚI THIỆU VỀ LẬP TRÌNH PHẢN ỨNG 11 1.1 Giới thiệu lập trình phản ứng 11 1.2 Lập trình phản ứng luồng liệu 13 1.3 Đặc điểm lập trình phản ứng 17 1.4 Lập trình hàm phản ứng 19 1.4.1 Classical FRP 19 1.4.2 Real-time FRP & Event-Driven FRP 20 1.4.3 Arrowized FRP 21 CHƢƠNG – LẬP TRÌNH PHẢN ỨNG VỚI NGÔN NGỮ ELM 23 2.1 Khái quát ngôn ngữ lập trình hàm 23 2.1.1 Định nghĩa 23 2.1.2 Tính khai báo ngôn ngữ hàm 23 2.1.3 Một số khái niệm ngôn ngữ hàm 25 2.2 Cơ ngôn ngữ Elm 29 2.2.1 Các cú pháp 29 2.2.2 Ví dụ giao diện đồ họa Elm 33 2.2.3 Các tín hiệu tƣơng tác Elm 36 2.3 Các ƣu điểm ngôn ngữ Elm 41 2.4 Các thao tác với tín hiệu Elm 43 2.5 Lập trình tƣơng tác 47 2.6 Gỡ lỗi Elm 49 2.7 Kiến trúc Elm lập trình trò chơi 51 CHƢƠNG – XÂY DỰNG ỨNG DỤNG TRÒ CHƠI HOCKEY 53 3.1 Mô tả trò chơi 53 3.2 Phân tích trò chơi 55 3.3 Xây dựng code chƣơng trình với ngôn ngữ Elm 58 3.3.1 Xây dựng giao diện 58 3.3.2 Xây dựng mô hình liệu 62 3.3.3 Xây dựng tín hiệu đầu vào 64 3.3.4 Cập nhật liệu chƣơng trình 64 3.3.5 Thực thi chạy chƣơng trình 70 3.4 Nhận xét, đánh giá thảo luận 71 3.4.1 Ƣu điểm lập trình phản ứng 71 3.4.2 Một số khó khăn lập trình phản ứng 72 3.4.3 Ƣu điểm ngôn ngữ Elm 73 3.4.4 Nhƣợc điểm ngôn ngữ Elm 75 KẾT LUẬN 76 TÀI LIỆU THAM KHẢO 78 DANH SÁCH HÌNH VẼ Hình 1.1: Sự truyển đổi giá trị liên tục dòng theo tín hiệu chuột 16 Hình 1.2: Sơ đồ đặc điểm lập trình phản ứng 18 Hình 2.1: Hiển thị văn Elm 32 Hình 2.2: Các Forms đồ họa đƣợc tạo 34 Hình 2.3: Tạo kết hợp hình dạng thành thành phần 36 Hình 2.4: Bảng tín hiệu đầu vào Elm 37 Hình 2.5: Theo dõi chuyển động trỏ chuột [5] 38 Hình 2.6: Di chuyển đối tƣợng hình tròn phím mũi tên 41 Hình 2.7: Mô tả trình hoạt động tín hiệu 44 Hình 2.8: Elm’s Time Traveling Debugger 51 Hình 3.1: Ca sử ngƣời chơi 54 Hình 3.2: Ca sử dụng sân bóng 55 Hình 3.3: Mô hình kiểu liệu trò chơi 57 Hình 3.4: Giao diện trò chơi 60 Hình 3.5: Văn hƣớng dẫn trò chơi 61 Hình 3.6: Giao diện trò chơi kết thúc 62 Hình 3.7: Giao diện Degbug chƣơng trình 70 MỞ ĐẦU Lý chọn đề tài Ngày Internet kết nối hàng tỷ ngƣời khắp giới ứng dụng phổ biến nhƣ mạng xã hội, công cụ tìm kiếm, dịch vụ blog cá nhân… đƣợc sử dụng hàng triệu chí hàng tỷ ngƣời sử dụng máy tính Điều thể thay đổi phạm vi quy mô mong đợi máy tính làm cho ngƣời Với lợi ích ứng dụng web đại ứng dụng di động có tính tƣơng tác cao với vô số kiện liên quan đến tƣơng tác ngƣời dùng Các ứng dụng ngày phát triển phong phú cho phép tƣơng tác cao với ngƣời sử dụng thời gian thực Để làm đƣợc điều cần phải nghiên cứu thiết kế ứng dụng phổ biến để thực kỹ thuật Điều cung cấp cho máy tính nhiệm vụ muốn phản ứng lại nhanh Nói cách khác máy tính phải phản ứng với ngƣời sử dụng đáp ứng đƣợc yêu cầu cách xác Ví dụ gửi email thông qua Gmail bạn muốn xác nhận đƣợc gửi ta xóa email biến khỏi danh sách hiển thị, tất thao tác ngƣời sử dụng đƣợc hiển thị trình duyệt web Hoặc chơi trò chơi tƣơng tác với nhân vật trò chơi phải đƣợc phản ứng theo ý thời gian định để đạt mục đích Để làm đƣợc điều lập trình phản ứng câu trả lời Lập trình phản ứng kết hợp hệ thống đồng thời hệ thống hƣớng kiện cho phép xử lý luồng liệu không đồng nhƣng trì phong cách ngôn ngữ lập trình thông thƣờng Lập trình phản ứng làm tăng mức độ trừu tƣợng mã giúp ngƣời lập trình tập trung vào kiện có liên quan tới giải logic phức tạp Mã lập trình phản ứng thƣờng ngắn gọn, rõ dàng dễ trì Tƣ lập trình phản ứng thƣờng thiên việc truyển đổi từ liệu đầu vào tƣơng tác với liệu chƣơng trình để thị liệu đầu Ở giới lập trình phản ứng xu hƣớng đƣợc dựa luồng chảy liệu (dataflow) giá trị chúng đƣợc thay đổi cách tự động nhƣ có tác động từ môi trƣờng bên vào Với phổ biến hƣớng kiện, khả mở rộng kiến trúc tƣơng tác máy chủ máy trạm khái niệm "reactiveness" ngày đƣợc ý Nó ứng dụng cao để viết ứng dụng web hệ thống liên quan tới sở liệu lớn phƣơng pháp tạo nhiều hệ thống đồng thời có tính hiệu cao Mục đích nghiên cứu Mục đích nghiên cứu luận văn nhằm tìm hiểu đặc điểm lập trình phản ứng, cụ thể nghiên cứu lập trình phản ứng ngôn ngữ Elm, ngôn ngữ giới trình phát triển Từ nắm vững đƣợc đặc điểm lập trình phản ứng nhƣ cách vận dụng chúng ngôn ngữ Elm để tạo ứng dụng mang tích tƣơng tác với ngƣời sử dụng có tính hiệu cao Mục đích thứ hiểu rõ đƣợc cú pháp nhƣ phƣơng thức hoạt động động ngôn ngữ Elm từ áp dụng vào để xây dựng lên chƣơng trình cụ thể Đối tƣợng phạm vi nghiên cứu Đầu tiên ta nghiên cứu đặc điểm phƣơng thức hoạt động lập trình phản ứng xem chúng có điểm tƣơng đồng với luồng liệu Tiếp theo tập chung nghiên cứu sâu ngôn ngữ Elm để làm bật đƣợc đặc điểm lập trình phản ứng Ngôn ngữ Elm ngôn ngữ đƣợc phát triển hoạt động dựa thao tác với giá trị đầu vào đƣợc gọi tín hiệu (Signal) Tín hiệu giá trị dòng chảy thay đổi theo thời gian đƣợc thiết lập xử lý để thay đổi giá trị luồng liệu chƣơng trình Các thƣ viện Elm đơn giản đầy đủ cho phép tối ƣu hóa mã lập trình tạo giao diện tƣơng tác ngƣời dùng cách dễ dàng Elm hoàn toàn hƣớng kiện việc tính toán lại giá trị trừ kiện xảy hỗ trợ việc xử lý luồng liệu không đồng Cuối xây đựng trò chơi ngôn ngữ Elm để thể rõ đƣợc đặc điểm lập trình phản ứng Kết cấu luận văn Luận văn trình bày phần mở đầu, mục lục, danh mục tài liệu tham khảo, kết đạt đƣợc nội dung luận văn gồm chƣơng Chƣơng nghiên cứu lập trình phản ứng, nội dung chƣơng nêu đặc điểm lập trình phản ứng, đặc điểm luồng liệu xem chúng có đặc điểm tƣơng đồng hay không Chƣơng nghiên cứu đôi nét lập trình hàm từ sâu cú pháp ngôn ngữ lập trình hàm Elm cách tạo giao diện đồ họa tìm hiểu tín hiệu đầu vào tƣơng tác với chƣơng trình Sau sâu vào chế vận hành ngôn ngữ Elm với tín hiệu để thấy rõ đƣợc điểm mạnh của lập trình hàm phản ứng Cũng chƣơng ta nghiên cứu trình gỡ lỗi lập trình tƣơng tác Elm Chƣơng áp dụng ngôn ngữ Elm vào để xây dựng trò chơi nhỏ thể rõ đặc điểm lập trình hàm phản ứng Qua ứng dụng trò chơi nhƣ nghiên cứu luận văn đƣa số nhận xét, đánh giá, thảo luận ƣu nhƣợc điểm lập trình phản ứng chƣơng Nhờ đánh giá mà nhà nghiên cứu ngƣời lập trình tiếp tục phát triển ngôn ngữ Elm dùng làm công cụ để tạo ứng dụng mang tính tƣơng tác cao với ngƣời sử dụng 10 82 83 84 Within : Ball -> Player -> Bool within ball player = near player.x 40 ball.x && near player.y 40 ball.y Hàm within kiểm tra đụng độ xem bóng có gần cầu thủ không 72 73 74 75 76 stepv : Float -> Bool -> Bool -> Float stepv v bottom up = if | bottom -> abs v | up -> -(abs v) | otherwise -> v Hàm stepv thay đổi vận tốc thông qua kiện va chạm bóng với cạnh biên sân bóng Nếu bóng va trạm với biên thay đổi với hàm trị tuyệt đối (abs v) ngƣợc lại va chạm biên dƣới vận tốc có giá trị phủ định với hàm -(abs v) Nếu va chạm bóng giữ vận tốc di chuyển mà thay đổi Quá trình cập nhật vị trí vận tốc bóng đƣợc lập lập lại 118 119 120 121 122 distance t ({x,y,vx,vy} as obj) = { obj | x Player -> Player -> Ball updateBall t ({x,y,vx,vy} as ball) p1 p2 = if (ball `within` p1) && ball.shoot1 == False then {ball | vx currentPlayer.y + 40 134 | otherwise -> currentPlayer.y 135 } Hàm near kiểm tra xem hai cầu thủ cách khoảng x = 40 y = 40 ngƣời chơi bị đẩy văng khoảng 40 Còn va 67 chạm cầu thủ đƣợc cập nhật tọa độ khoảng cách, hƣớng di chuyển nhƣ đoạn mã dƣới 139 140 141 142 143 144 145 146 147 148 149 else distance t { currentPlayer| vx Left | keys.y < -> Down | keys.y > -> Up | otherwise -> currentPlayer.dir } Trong biểu thức in ta có hàm clamp giới hạn tọa độ cầu thủ với biên sân sân bóng không cho khỏi sân bóng Việc cập nhật điểm đội chơi đƣợc cập nhật nhƣ cầu thủ đội ghi bàn thắng 151 152 153 154 155 { p | x halfWidth then else 38 score2 = 39 if ball.x < -halfWidth then else 41 42 newState = if | space -> 68 43 then Pause 44 45 46 48 49 50 51 if img1.score >= gameOver || img2.score >= gameOver else Play | score1 /= score2 -> Pause | otherwise -> state newBall = if state == Pause then ball else updateBall delta ball img1 img2 Trong hàm ta tiếp tục sử dụng biểu thức let để định nghĩa hàm giá trị đối tƣợng Hàm Score1 Score2 thực việc tính điểm cho đội chơi nhƣ bóng vào khung thành Hàm newState thực trạng thái trò chơi, nhƣ bấm phím space tiếp tục chơi với điều kiện điểm đội chơi không điểm Còn đội chơi điểm trò chơi kết thúc Hàm newBall cập nhật giá trị bóng trạng thái chơi Ta xét tiếp trình xử lý biểu thức in chức cập nhật tiếp giá trị đối tƣợng nhƣ trạng thái trò chơi 52 in 53 if isDown then defaultGame 54 else if enter then 55 {game | 56 ball [...]... đến làm chậm toàn bộ chƣơng trình Ngôn ngữ Elm sử dụng mô hình này và trách đƣợc 2 nhƣợc điểm là chậm trễ toàn cục và thiếu bộ nhớ Ta sẽ tìm hiểu kỹ hơn về cơ chế lập trình hàm phản ứng trong ngôn ngữ Elm trong chƣơng 2 22 CHƢƠNG 2 – LẬP TRÌNH PHẢN ỨNG VỚI NGÔN NGỮ ELM Ở trong chƣơng này đầu tiên tôi sẽ khái quát chung về lập trình hàm vì ngôn ngữ Elm là một ngôn ngữ lập trình hàm Tiếp theo tôi đƣa... cấu trúc lập trình hàm có trong thƣ viện, ở đó các luồng dữ liệu đƣợc xây dựng từ các cấu trúc ngôn ngữ giống nhƣ lập trình truyền thống hay lập trình hàm Ví dụ lập trình hàm phản ứng (functional reactive programming) là mô hình lập trình hàm với phong cách lập trình phản ứng đƣợc thực thi bởi một nút trong một đồ thị luồng dữ liệu đã đƣợc cấu trúc Thƣ viện lập trình phản ứng dành cho các ngôn ngữ khá... tín hiệu đầu vào trong Elm Sau đó tôi tiếp tục đi sâu vào cơ chế hoạt động của ngôn ngữ Elm trong lập trình phản ứng để thấy đƣợc cách hoạt động của các tín hiệu, các ƣu điểm nổi bật của ngôn ngữ lập trình hàm phản ứng 2.1 Khái quát về ngôn ngữ lập trình hàm 2.1.1 Định nghĩa Lập trình hàm là phong cách lập trình dựa trên định nghĩa hàm sử dụng phép tính lambda (X-calculus) Lập trình hàm không sử dụng... 1-GIỚI THIỆU VỀ LẬP TRÌNH PHẢN ỨNG 1.1 Giới thiệu lập trình phản ứng Lập trình phản ứng là một mô hình lập trình tập trung vào các luồng (flow) dữ liệu và sự lan truyền thay đổi của dữ liệu Điều này có nghĩa chúng ta có thể biểu diễn các dòng dữ liệu tĩnh hoặc động trong ngôn ngữ lập trình và mô hình lập trình sẽ tự động lan truyền các thay đổi thông qua luồng dữ liệu này [13] Ví dụ trong lập trình truyền... trị mới nhất Lập trình phản ứng luôn mang tính hƣớng sự kiện và dữ liệu đƣợc mô hình thành các tín hiệu chứa giá trị hiện tại, thay đổi một cách rời rạc gọi là sự kiện Các sự kiện này trên thực thực tế là một dòng sự kiện bất đồng bộ, hay cũng có thể nói lập trình phản ứng là lập trình với dòng dữ liệu bất đồng bộ 12 1.2 Lập trình phản ứng là luồng dữ liệu Lập trình phản ứng là một thuật ngữ đã trở nên... ra hiệu ứng phụ nhƣ vẫn gặp trong lập trình mệnh lệnh Trong các ngôn ngữ lập trình hàm, hàm (thủ tục, chƣơng trình con) đóng vai trò trung tâm, thay vì thực hiện lệnh, máy tính tính biểu thức Đã có rất nhiều ngôn ngữ hàm đƣợc phát triển và ứng dụng nhƣ Miranda, Haskell, Elm, ML, các ngôn ngữ họ Lisp: Scheme, Common Lisp [1] 2.1.2 Tính khai báo của ngôn ngữ hàm Các ngôn ngữ hàm là cũng các ngôn ngữ bậc... trong đó bao gồm các hệ thống phản ứng Vì vậy ta xem xét lập trình phản ứng là một tập hợp con của luồng dữ liệu nhƣng là một nhóm khá lớn Trong trƣờng hợp bình thƣờng lập trình phản ứng đƣợc coi nhƣ là một từ đồng nghĩa với luồng dữ liệu [2] Luồng dữ liệu nhƣ là một mô hình kết nối giữa các đối tƣợng trong một ứng dụng, trong chƣơng trình nó sẽ phản ứng một cách khá hiệu quả với những thay đổi dữ liệu... 16 1.3 Đặc điểm của lập trình phản ứng Lập trình phản ứng có những đặc điểm sau: [15,16,17]  React to events: Phản ứng hƣớng sự kiện là mô hình lập trình dựa trên các sự kiện đầu vào hoặc các thông điệp (message) từ bên ngoài Do đó ngƣời lập trình có thể viết sẵn các hàm xử lý sự kiện có thể xảy ra khi ngƣời dùng tƣơng tác Thay vì phải chờ chƣơng trình xử lý thì ngƣợc lại chƣơng trình chờ tƣơng tác... sắp xếp, giám sát hàng đợi tin nhắn trong hệ thống và gọi lại khi cần thiết Hình 1.2: Sơ đồ các đặc điểm của lập trình phản ứng 18 1.4 Lập trình hàm phản ứng Lập trình hàm phản ứng (Functional Reactive Programming) là mô hình lập trình hàm làm việc với các giá trị thay đổi FRP tính toán lại với các giá trị thay đổi khi giá trị thời gian thay đổi Giá trị thời gian khác nhau đƣợc gọi là tín hiệu (signal)... hơn so với các ngôn ngữ mệnh lệnh Những ngƣời lập trình hàm thƣờng tránh sử dụng các biến toàn cục, trong khi đó hầu hết những ngƣời lập trình mệnh lệnh đều phải sử dụng đến biến toàn cục Khi lập trình với các ngôn ngữ hàm ngƣời lập trình phải định nghĩa các hàm toán học dễ suy luận, dễ hiểu mà không cần quan tâm chúng đƣợc cài đặt nhƣ thế nào trong máy 23 Những ngƣời theo khuynh hƣớng lập trình hàm ... Ta tìm hiểu kỹ chế lập trình hàm phản ứng ngôn ngữ Elm chƣơng 22 CHƢƠNG – LẬP TRÌNH PHẢN ỨNG VỚI NGÔN NGỮ ELM Ở chƣơng khái quát chung lập trình hàm ngôn ngữ Elm ngôn ngữ lập trình hàm Tiếp theo... tính hiệu cao Mục đích nghiên cứu Mục đích nghiên cứu luận văn nhằm tìm hiểu đặc điểm lập trình phản ứng, cụ thể nghiên cứu lập trình phản ứng ngôn ngữ Elm, ngôn ngữ giới trình phát triển Từ nắm... đầu vào Elm Sau tiếp tục sâu vào chế hoạt động ngôn ngữ Elm lập trình phản ứng để thấy đƣợc cách hoạt động tín hiệu, ƣu điểm bật ngôn ngữ lập trình hàm phản ứng 2.1 Khái quát ngôn ngữ lập trình

Ngày đăng: 29/03/2016, 21:34

Từ khóa liên quan

Mục lục

  • LỜI CẢM ƠN

  • LỜI CAM ĐOAN

  • MỤC LỤC

  • DANH SÁCH HÌNH VẼ

  • MỞ ĐẦU

    • Lý do chọn đề tài

    • Mục đích nghiên cứu

    • Đối tượng và phạm vi nghiên cứu

    • Kết cấu của luận văn

    • CHƯƠNG 1-GIỚI THIỆU VỀ LẬP TRÌNH PHẢN ỨNG

      • 1.1 Giới thiệu lập trình phản ứng

      • 1.2 Lập trình phản ứng là luồng dữ liệu

      • 1.3 Đặc điểm của lập trình phản ứng

      • 1.4 Lập trình hàm phản ứng

        • 1.4.1 Classical FRP

        • 1.4.2 Real-time FRP & Event-Driven FRP

        • 1.4.3 Arrowized FRP

        • CHƯƠNG 2 – LẬP TRÌNH PHẢN ỨNG VỚI NGÔN NGỮ ELM

          • 2.1 Khái quát về ngôn ngữ lập trình hàm

            • 2.1.1 Định nghĩa

            • 2.1.2 Tính khai báo của ngôn ngữ hàm

            • 2.1.3 Một số khái niệm cơ bản trong ngôn ngữ hàm

            • 2.2 Cơ bản về ngôn ngữ Elm

              • 2.2.1 Các cú pháp cơ bản

              • 2.2.2 Ví dụ về giao diện đồ họa trong Elm

              • 2.2.3 Các tín hiệu tương tác trong Elm

Tài liệu cùng người dùng

Tài liệu liên quan