Tài liệu Đồ án tìm hiểu ngôn ngữ lập trình scala, xây dựng website chia sẻ ảnh trực tuyến

  • Số trang: 53 |
  • Loại file: PDF |
  • Lượt xem: 1348 |
  • Lượt tải: 0
tranphuong

Tham gia: 04/08/2015

Mô tả:

TỔNG LIÊN ĐOÀN LAO ĐỘNG VIỆT NAM TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG KHOA CÔNG NGHỆ THÔNG TIN ĐỒ ÁN 1 TÌM HIỂU NGÔN NGỮ LẬP TRÌNH SCALA, XÂY DỰNG WEBSITE CHIA SẺ ẢNH TRỰC TUYẾN Người hướng dẫn: Th.S PHẠM VĂN SIM ANH Người thực hiện: ĐÀO THÀNH ĐẠT LÊ NGỌC NAM Lớp : 11050302 Khoá : 15 THÀNH PHỐ HỒ CHÍ MINH, NĂM 2014 TỔNG LIÊN ĐOÀN LAO ĐỘNG VIỆT NAM TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG KHOA CÔNG NGHỆ THÔNG TIN ĐỒ ÁN 1 TÌM HIỂU NGÔN NGỮ LẬP TRÌNH SCALA, XÂY DỰNG WEBSITE CHIA SẺ ẢNH TRỰC TUYẾN Người hướng dẫn: Th.S PHẠM VĂN SIM ANH Người thực hiện: ĐÀO THÀNH ĐẠT LÊ NGỌC NAM Lớp : 11050302 Khoá : 15 THÀNH PHỐ HỒ CHÍ MINH, NĂM 2014 LỜI CẢM ƠN Sau một thời gian thực hiện Đồ án 1 đến nay, mọi công việc đã hoàn thành. Trong quá trình thực hiện đồ án chúng em đã nhận được nhiều sự giúp đỡ từ mọi người. Em xin chân thành gửi lời cám ơn đến những người chúng em vô cùng biết ơn: Đầu tiên, chúng em rất cám ơn đến thầy Sim Anh đã tận tình hướng dẫn, chỉ bảo và để xuất hướng giải quyết khi chúng em gặp khó khăn trong suốt quá trình hoàn thành đồ án. Để đạt được kết quả này, chúng em cũng rất chân thành gửi lời cám ơn đến toàn thể thầy cô khoa Công Nghệ Thông Tin đã tận tình giảng dạy, trang bị cho chúng em kiến thức trong thời gian học tại trường. Chúng em cũng đồng gửi lời cảm ơn đến các anh chị, bạn bè đã cùng trao đổi, hỗ trợ, chia sẻ giúp chúng em hoàn thành để tài. Mặc dù đã cố gắng hoàn thành đề tài trong phạm vi cho phép, nhưng đây là ngôn ngữ mới, khá xa lạ với chúng em nên không thể tránh khỏi sai sót, chúng em rất mong nhận được sự đóng góp phê bình của các thầy cô để để được những kinh nghiệm khi ra trường và công việc sau này. ii ĐỒ ÁN ĐƯỢC HOÀN THÀNH TẠI TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG Tôi xin cam đoan đây là sản phẩm đồ án của chúng tôi và được sự hướng dẫn của Th.S Phạm Văn Sim Anh. Các nội dung nghiên cứu, kết quả trong đề tài này là trung thực và chưa công bố dưới bất kỳ hình thức nào trước đây. Những số liệu trong các bảng biểu phục vụ cho việc phân tích, nhận xét, đánh giá được chính tác giả thu thập từ các nguồn khác nhau có ghi rõ trong phần tài liệu tham khảo. Ngoài ra, trong đồ án còn sử dụng một số nhận xét, đánh giá cũng như số liệu của các tác giả khác, cơ quan tổ chức khác đều có trích dẫn và chú thích nguồn gốc. Nếu phát hiện có bất kỳ sự gian lận nào tôi xin hoàn toàn chịu trách nhiệm về nội dung đồ án của mình. Trường đại học Tôn Đức Thắng không liên quan đến những vi phạm tác quyền, bản quyền do tôi gây ra trong quá trình thực hiện (nếu có). TP. Hồ Chí Minh, ngày tháng năm Tác giả (ký tên và ghi rõ họ tên) Đào Thành Đạt Lê Ngọc Nam iii PHẦN XÁC NHẬN VÀ ĐÁNH GIÁ CỦA GIẢNG VIÊN Phần xác nhận của GV hướng dẫn ______________________________________________________ ______________________________________________________ ______________________________________________________ ______________________________________________________ ______________________________________________________ ______________________________________________________ ______________________________________________________ _____________________ Tp. Hồ Chí Minh, ngày tháng năm (kí và ghi họ tên) Phần đánh giá của GV chấm bài ______________________________________________________ ______________________________________________________ ______________________________________________________ ______________________________________________________ ______________________________________________________ ______________________________________________________ ______________________________________________________ _____________________ Tp. Hồ Chí Minh, ngày tháng năm (kí và ghi họ tên) iv TÓM TẮT Ngôn ngữ scala là một ngôn ngữ lập trình còn khá mới lạ đối với Việt Nam, nhất là đối tượng sinh viên đang còn trên ghế giảng đường. Trên cơ sở đang mê lập trình và thích tìm kiếm những điều mới lạ chúng tôi đã quyết định chọn đề tài “TÌM HIỂU NGÔN NGỮ LẬP TRÌNH SCALA, XÂY DỰNG WEBSITE CHIA SẺ ẢNH TRƯC TUYẾN” làm đề tài nghiên cứu cho nhóm chúng tôi. Bởi vì đây là một ngôn ngữ khá mới mẽ nên hiện nay những tài liệu hoàn chỉnh về ngôn ngữ còn rất hạn chế, đặc biệt là tài liệu Tiếng Việt. Cho nên chúng tôi đã quyết định sử dụng tài liệu Tiếng Anh và các bài thảo luận trên các diễn đàn nước ngoài làm nguồn hỗ trợ chính. Ban đầu cách tiếp cận này có thể gặp nhiều khó khăn, nhất là đối với những thuật ngữ riêng trong ngành, ngôn ngữ lập trình. Tuy nhiên, sau khi đã nắm được những đặc điểm cơ bản thì việc tìm hiểu sẽ trở nên dễ dàng hơn nhiều. Sau đề tài chúng tôi nhận ra rằng nghiên cứu những tài liệu tiếng nước ngoài và thông qua các diễn đàn sẽ mang lại một lượng kiến thức lớn và nhanh chóng hơn cách cổ điển với những cuốn sách rất nhiều. Tự nghiên cứu sẽ giúp chúng ta nhớ kiến thức tìm kiếm được lâu hơn và tạo một thói quen tốt sau này. Sau khi nghiên cứu đề tài chúng tôi đã quyết định chia thời gian nghiên cứu làm hai giai đoạn: Giai đoạn một, tập trung nghiên cứu về những vấn đề cơ bản của ngôn ngữ, những khái niệm cơ bản của một ngôn ngữ lập trình phải có, công cụ để hỗ trợ biên dịch làm sao có thể chạy được một chương trình đơn giản ví dụ như “Hello World” . Tiếp đến giai đoạn hai, sẽ tập trung nghiên cứu về framework hỗ trợ cho việc viết web trên ngôn ngữ được giao, từ đó xây dựng trang web theo yêu cầu của đề tài Đồ án. v Trên cơ sở nỗ lực của nhóm và sự định hướng, giúp đỡ nhiệt tình của người hướng dẫn Th.S Phạm Văn Sim Anh , chúng tôi đã đạt được những thành quả bước đầu trong việc tìm hiểu và sử dụng một ngôn ngữ lập trình mới để giải quyết yêu cầu được đặt ra. Không những thế còn nâng cao khả năng tìm hiểu và kỹ năng lập trình cho mỗi thành viên của nhóm. Mang lại những kinh nghiệm quý báu cho sau này. 1 MỤC LỤC LỜI CẢM ƠN ........................................................................................................... iii PHẦN XÁC NHẬN VÀ ĐÁNH GIÁ CỦA GIẢNG VIÊN .................................... iii TÓM TẮT ................................................................................................................. iv MỤC LỤC ...................................................................................................................1 DANH MỤC CÁC BẢNG BIỂU, HÌNH VẼ, ĐỒ THỊ .............................................4 CHƯƠNG 1 – TÌM HIỂU VỀ NGÔN NGỮ SCALA................................................6 1.1 Tổng quan về ngôn ngữ Scala ...............................................................6 1.1.1 Giới thiệu ...................................................................................6 1.1.2 Nền tảng .....................................................................................6 1.1.3 Khả năng mở rộng .....................................................................6 1.1.4 Lập trình hàm.............................................................................6 1.1.5 Lập trình hướng đối tượng.........................................................6 1.1.6 Những đặc điểu nổi bật khác .....................................................7 1.2 Giới thiệu công cụ hỗ trợ và biên dịch một chương trình đơn giản ......8 1.2.1 Công cụ hỗ trợ ...........................................................................8 1.2.2 Tạo Project và viết ứng dụng “Hello World” ............................8 1.2.3 Biên dịch ....................................................................................9 1.2.4 Biên dịch và thực thi Scala source bằng Command Line ........10 1.3 Những khái niệm cơ bản trong ngôn ngữ Scala..................................10 1.3.1 Khai báo biến ...........................................................................10 1.3.2 Cách khai báo phương thức/ hàm ............................................11 1.3.3 Cấu trúc lặp, rẽ nhánh và điều kiện .........................................11 1.3.4 Kiểu dữ liệu .............................................................................12 1.3.5 Class.........................................................................................12 1.3.6 Một số gói thư viện cơ bản trong ngôn ngữ scala ...................13 CHƯƠNG 2 – TÌM HIỂU VỀ PLAY FRAMEWORK 2 .........................................14 1.1 Tổng quan về Play Framework 2 ........................................................14 1.1.1 Khái niệm ................................................................................14 2 1.1.2 Những điểm nổi bật .................................................................14 1.1.3 Lịch sử phát triển kiến trúc Play Framework ..........................15 1.2 Hướng dẫn cài đặt Play Framework 2 ................................................17 1.2.1 Những công cụ cần thiết ..........................................................17 1.2.2 Cài đặt và kiểm tra ...................................................................18 1.2.3 Tạo mới một chương trình sử dụng Play Framework .............20 CHƯƠNG 3 – DEMO WEB CHIA SẺ ẢNH...........................................................22 1.2 Khảo sát và phân tích hệ thống ...........................................................22 1.2.1 Phân tích yêu cầu .....................................................................22 1.2.2 Lược đồ usecase ......................................................................23 1.2.3 Phân tích và thiết kế hệ thống..................................................28 1.3 GIAO DIỆN VÀ CHỨC NĂNG ........................................................32 1.3.1 Tổng quan về giao diện ...........................................................32 1.3.2 Tổng quan về giao diện Giao diện chi tiết và chức năng ........34 CHƯƠNG 4 – TỔNG KẾT.......................................................................................43 1.1 Kết quả đạt được .................................................................................43 1.1.1 Về công nghệ ...........................................................................43 1.1.2 Về kỹ năng ...............................................................................44 1.2 Đánh giá chung ...................................................................................44 1.2.1 Ưu điểm ...................................................................................44 1.2.2 Nhược điểm .............................................................................44 1.3 Hướng phát triển .................................................................................44 3 DANH MỤC KÍ HIỆU VÀ CHỮ VIẾT TẮT CÁC CHỮ VIẾT TẮT STT Chữ viết tắt Chữ viết đầy đủ 1 CMD Command line 2 JDK Java Development Kit 3 DSLs Domain Specific Languages 4 JVM Java Virtual Machine 5 E-RD Entity–relationship Diagrams 6 NIO Non-Blocking I/O 7 Java EE Java Platform, Enterprise Edition Bảng 0.1: Bảng các chữ viết tắt 4 DANH MỤC CÁC BẢNG BIỂU, HÌNH VẼ, ĐỒ THỊ DANH MỤC HÌNH Hình 1.1: Tạo Project mới bằng Bundle of the Scala IDE for Eclipse .......................8 Hình 1.2: Biên dịch và thực thi bằng Command Line ...............................................10 Hình 1.3: Khai báo hàm – [1, pp. 69] .......................................................................11 Hình 1.4: Kiểu dữ liệu và phạm vi [1, pp.108] .........................................................12 Hình 1.5: Lược đồ kiến trúc Play Framework 1 .......................................................15 Hình 1.6: Kiến trúc Play Framework 2 .....................................................................16 Hình 2.7: Kiểm tra cài đặt JDK ................................................................................18 Hình 2.8: Thêm đường dẫn vào biến môi trường ......................................................19 Hình 2.9: Kiểm tra tồn tại của Play Framework 2 ...................................................20 Hình 2.10: Tạo project mới trong Play Framework ..................................................20 Hình 2.11: Chọn ngôn ngữ cho project sẽ tạo ...........................................................21 Hình 2.12: Chạy project web mới được tạo trên trình duyệt ....................................21 Hình 3.13: Usecase tổng quát....................................................................................23 Hình 3.14: Usecase đăng nhập ..................................................................................24 Hình 3.15: Usecase theo tác người dùng...................................................................24 Hình 3.16: Usecase quản lý dữ liệu cá nhân .............................................................25 Hình 3.17: Usecase đăng ký ......................................................................................26 Hình 3.18: Usecase quản lý website .........................................................................26 Hình 3.19: Lược đồ tuần tự .......................................................................................28 Hình 3.20 Mô hình ER-D ..........................................................................................31 Hình 3.21: Giao diện chính .......................................................................................32 Hình 3.22: Giao diện phần trên .................................................................................32 Hình 3.23: Giao diện phần giữa ................................................................................33 Hình 24: Guao diện phần cuối ..................................................................................34 Hình 3.25: Giao diện hình ảnh theo danh mục .........................................................35 Hình 3.26: Giao diện tìm kiếm ..................................................................................36 Hình 3.27: Giao diện chi tiết hình ảnh ......................................................................36 5 Hình 3.28: Hình ảnh phóng lớn khi rê chuột vào ......................................................37 Hình 3.29: Hình cùng người đăng .............................................................................37 Hình 3.30: Giao diện đăng ký thành viên .................................................................38 Hình 3.31: Thanh menu khi chưa đăng nhập ............................................................38 Hình 3.32: Giao diện đăng nhập ...............................................................................39 Hình 3.33: Thanh menu sau khi đã đăng nhập ..........................................................39 Hình 3.34: Thông tin tài khoản .................................................................................40 DANH MỤC BẢNG Bảng 0.1: Bảng các chữ viết tắt ..................................................................................3 Bảng 3.2: Mô tả hoạt động usecase ...........................................................................27 6 CHƯƠNG 1 – TÌM HIỂU VỀ NGÔN NGỮ SCALA 1.1 Tổng quan về ngôn ngữ Scala 1.1.1 Giới thiệu Scala là tên viết tắt của Scalable Language (Ngôn ngữ có khả năng mở rộng). Được phát triển dựa trên những nhu cầu sử dụng các tính năng mở rộng của nó. Scala được thiết kế để tích hợp các tính năng của lập trình hướng đối tượng và lập trình hàm.[2] 1.1.2 Nền tảng Scala chạy trên nền máy ảo java và tương thích với chương trình java. Cũng có thể chạy trên android. Nó cũng có thể chạy trên nền tảng .NET nhưng mà chưa ổn định. Scala có kiểu biên dịch giống như Java và C#, nên Scala code có thể đọc được thư viện Java (hoặc thư viện.NET).[2] 1.1.3 Khả năng mở rộng Trong thực tế, các ứng dụng luôn phải thay đổi để đáp ứng các yêu cầu cụ thể, Scala được thiết kế để phục vụ mục đích đó. Scala cung cấp một dạng ngôn ngữ máy độc đáo giúp hỗ trợ lập trình dựa tên các thư viện hàm có sẵn: - Mọi phương thức (hàm) đều có thể dùng như là một toán tử - Đánh dấu kết thúc cú pháp tự động.[2] 1.1.4 Lập trình hàm Scala hỗ trợ lập trình hàm. Nó hỗ trợ cú pháp ngắn gọn cho việc định nghĩa các hàm, cho phép hàm lồng vào nhau. Dùng từ khóa lazy để trì hoãn sử dụng một biến cho đến khi cần sử dụng nó.[2] 1.1.5 Lập trình hướng đối tượng Giống Java, Scala là ngôn ngữ hướng đối tượng. Scala là ngôn ngữ thuần lập trình hướng đối tượng trong cú pháp theo quy tắc tất cả giá trị biến đều là một đối tượng. Kiểu dữ liệu và hành vi của một đối tượng được mô tả bằng các lớp. Các lớp 7 trừu tượng được mở rộng bằng các lớp con và hạn chế các khó khăn trong đa kế thừa.[2] 1.1.6 Những đặc điểu nổi bật khác Nhờ suy luận kiểu của nó và các tính năng khác, Scala là một ngôn ngữ súc tích, điển hình là cho phép các nhà phát triển để giảm kích thước của mã nguồn ít nhất ai hoặc ba lần, so với Java. Scala đi kèm với một tập hợp phong phú các công cụ phát triển, vì vậy hiệu suất tương đương với các ngôn ngữ như Ruby hay Python, trong khi giữ lại những ưu điểm hiệu suất của Java Scala được trang bị hệ thống phát hiện và tránh nhiều lỗi ứng dụng tại thời gian biên dịch. Scala cung cấp một sự kết hợp độc đáo của các cơ chế ngôn ngữ khiến nó dễ dàng để thêm các cấu trúc ngôn ngữ mới theo hình thức thư viện, hoặc để tạo ra ngôn ngữ miền đặc trưng (DSLs).[2] 8 1.2 Giới thiệu công cụ hỗ trợ và biên dịch một chương trình đơn giản 1.2.1 Công cụ hỗ trợ Để có thể viết và biên dịch được chương trình được viết bằng ngôn ngữ Scala cần có những công cụ sau - Java Developer Kit (JDK) phiên bản 5 trở lên. Có thể tải ở đường dẫn sau: http://www.oracle.com/technetwork/java/javase/downloads/ - Scala SDK và Bundle of the Scala IDE for Eclipse. Có thể tải ở đường dẫn sau: http://scala-ide.org/download/ 1.2.2 Tạo Project và viết ứng dụng “Hello World” Sau khi khởi đông Bundle of the Scala IDE for Eclipse, hoàn toàn tương tự như Java, tạo project ta chọn: File ->New ->Scala Project. Hình 1.1: Tạo Project mới bằng Bundle of the Scala IDE for Eclipse 9 Ứng dụng “Hello World: - object HelloWorld{ def main(args:Array[String]){ println("Hello, World! ") } } Cấu trúc chương trình cũng giống như ở Java. Nó bao gồm một phương thức gọi hàm main, với các đối số dòng lệnh, một mảng các chuỗi như một tham số. Thân phương thức bao gồm một lời gọi duy nhất lệnh println với đối số Hello, Word!. Phương thức main không trả về giá trị, vì thế không cần thiết phải khai báo kiểu trả về . Điều khác biệt nhất với người lập trình Java là từ khóa Object bao gồm phương thức main chứa trong nó. Từ khóa Object ngầm định là tạo một thể hiện đơn của một lớp trong Scala. Ta có thể thấy rằng, phương thức main không được khai báo static. Trong Scala, các thành viên tĩnh (phương thức, trường) không tồn tại. 1.2.3 Biên dịch Để biên dịch chương trình chúng ta sử dụng scalac(scala compiler), Trình biên dịch Java. Scalac hoạt động giống như hầu hết các trình biên dịch khác. Nó có một file nguồn giống như đối số, có thể có vài tùy chọn và tạo ra một hoặc vài file đối tượng. Chúng ta có thể lưu chương trình trên thành file với tên HelloWord.scala và có thể thực hiện biên dịch nó bằng sử dụng lệnh (command line) bên dưới: > scalac HelloWorld.scala Sau khi gọi lệnh trên nó sẽ tạo ra vài file class trong cùng thư mục với file HelloWord.scala. Một trong số đó sẽ có HelloWorld.class, và chứa một class có thể được thực thi trực tiếp bằng cách sử dụng lệnh scala, như các chương trình phần tiếp theo. 10 1.2.4 Biên dịch và thực thi Scala source bằng Command Line Chương trình trên ta lưu thành file HelloWord.scala tại D:\test Đầu tiên ta gọi lệnh: >D: Tiếp theo trỏ đến thư mục test bằng lệnh: >cd test Để biên dịch ta xài lệnh: > scalac HelloWorld.scala Nếu không có lỗi sẽ không có thông báo gì, tiếp theo để thực thi chương trình ta dùng lệnh: >scala HelloWord Chượng trình sẽ in ra kết quả là: Hello, Word! Chi tiết được hiển thị như hình dưới: Hình 1.2: Biên dịch và thực thi bằng Command Line 1.3 Những khái niệm cơ bản trong ngôn ngữ Scala 1.3.1 Khai báo biến Có 2 loại biến trong Scala: biến val và biến var. Biến val tương tự như biến final trong java, sau khi được khai báo thì không thể thay đổi giá trị. Còn biến var thì ngược lại, sau khi khi báo vẫn có thể thay đổi giá trị. Ví dụ về khai báo một biến: Val count : Int 11 1.3.2 Cách khai báo phương thức/ hàm Hình 1.3: Khai báo hàm – [1, pp. 69] Khai báo một hàm/phương thức bắt đầu bằng từ khóa def sau đó tới tên hàm/phương thức, các giá trị đầu vào nằm trong dấu ngoặc đơn. Tiếp sau đó là dấu : và kiểu dữ liệu trả về. Nội dung hàm/phương thức nằm trong cặp dấu ngoặc nhọn {} 1.3.3 Cấu trúc lặp, rẽ nhánh và điều kiện - While: var i = 0 while (i < args.length) { println(args(i)) i += 1 } - foreach: args.foreach((arg: String) => println(arg)) 12 - for: for (arg <- args) println(arg) ví dụ: for (i <- 0 to 2) print(greetStrings(i)) - if: if (i != 0) print(" ") 1.3.4 Kiểu dữ liệu Hình 1.4: Kiểu dữ liệu và phạm vi [1, pp.108] Trong ngôn ngữ Scala cũng kiểu dữ liệu cơ bản như mọi ngôn ngữ lập trình khác. 1.3.5 Class - Định nghĩa 1 class: class Checksum { var sum = 0 } - Sử dụng class: val acc = new Checksum - Phương thức trong class 13 class ChecksumAccumulator { private var sum = 0 def add(b: Byte): Unit = { sum += b } def checksum(): Int = { return ~(sum & 0xFF) + 1 } } 1.3.6 Một số gói thư viện cơ bản trong ngôn ngữ scala Scala đây là gói chứa các thành phần cốt lõi của ngôn ngữ scala ngoài ra còn có các gói con sau: - scala.collection và các gói con của nó có chứa bộ sưu tập framework với các chức năng bậc cao cho các thao tác. - scala.io : Quản lý nhập xuất. - scala.math : các hàm toán học cơ bản và các kiểu số học bổ sung. - scala.sys : Tương tác với các tiến trình khác và hệ điều hành. - scala.util.matching - mẫu kiểm tra tính phù hợp bằng chữ sử dụng biểu thức thông thường. - scala.util.parsing.combinator : sử dụng để phân tích cú pháp - scala.xml : phân tích cú pháp XML, thao tác, và tuần tự hóa.
- Xem thêm -