Tải bản đầy đủ (.docx) (58 trang)

WEBSITE CHIA SẺ ẢNH TRỰC TUYẾN ỨNG DỤNG NGÔN NGỮ LẬP TRÌNH SCALA

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.26 MB, 58 trang )

Page 1 of 58
MỞ ĐẦU
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 “THIẾT KÊ VÀ XÂY DỰNG
WEBSITE CHIA SẺ ẢNH TRỰC TUYẾN ỨNG DỤNG NGÔN NGỮ LẬP TRÌNH SCALA” 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.
Page 2 of 58
Page 3 of 58
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.
4 | P a g e


MỤC LỤC
5 | P a g e
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.: Bảng các chữ viết tắt
6 | P a g e
DANH MỤC CÁC BẢNG BIỂU, HÌNH VẼ, ĐỒ THỊ
DANH MỤC HÌNH
DANH MỤC BẢNG
7 | P a g e
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
8 | P a g e
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
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]
9 | P a g e

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:
/>- Scala SDK và Bundle of the Scala IDE for Eclipse. Có thể tải ở đường dẫn
sau:
/>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.
10 | P a g e
Hình .1: Tạo Project mới bằng Bundle of the Scala IDE for Eclipse
11 | P a g e
- Ứ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:
12 | P a g e
> 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.
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:
13 | P a g e
Hình 1.: 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
14 | P a g e

1.3.2 Cách khai báo phương thức/ hàm
Hình 1.: 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:
15 | P a g e
args.foreach((arg: String) => println(arg))
16 | P a g e
- 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.: 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:
17 | P a g e
class Checksum {
var sum = 0
}
- Sử dụng class:
val acc = new Checksum
- Phương thức trong class
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.
18 | P a g e
- 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.

19 | P a g e
CHƯƠNG 2 – TÌM HIỂU VỀ PLAY FRAMEWORK 2
1.1 Tổng quan về Play Framework 2
1.1.1 Khái niệm
Play là một chương trình khung dùng để tạo các ứng dụng web, được
viết bằng Scala and Java theo kiến trúc model–view–controller (MVC). Play
được tạo ra với mục đích tăng hiệu suất lập tình bằng các sử dụng quy ước
bằng cấu hình, tải lại mã nóng và hiển thị lỗi trên trình duyệt – Nguồn [2]
1.1.2 Những điểm nổi bật
Play Framework 2 là một framework để viết web bằng ngôn ngữ java và scala
với tiêu chí nhẹ, không trạng thái, thân thiện với nền tảng web các đặc điểm sau:
- Dựa trên nền tảng java JVM(Java Virtual Machine): Có thể sử dụng đa
nền.
- Thân thiện với người phát triển: Bạn chỉ cần chỉnh sửa trong text-editor
và sau đó nhấn refresh trên trình duyệt web, mọi chỉnh sửa sẽ có hiệu lực.
- Quy mô đơn giản: Bên dưới nền tảng Play sử dụng một mô hình hoàn toàn
bất đồng bộ được xây dựng trên Akka. Kết hợp với đặc điểm không trạng
thái của web, quy mô của Play trở nên đơn giản.
- Thích hợp cho cả Web và moblie: Play có thể hoạt động tốt trên cả nền
tảng web và mobile. – Nguồn [4]
20 | P a g e
1.1.3 Lịch sử phát triển kiến trúc Play Framework
1.1.1.1 Play Framework 1
Hình 1.: Lược đồ kiến trúc Play Framework 1
Nguồn [3]
Play framework 1 được tích hợp rất nhiều gói thư viện hỗ trợ, mỗi gói thư việc
hỗ trợ một số chức năng nhất định, sau đây là những gói thư viện chính:
- Netty: Netty là một framework hỗ trợ giao tiếp theo dạng NIO (Non-
Blocking I/O) giữa máy chủ và máy trạm. Điều này giúp cho việc giao tiếp
giữa máy chủ và máy trám trở nên nhanh chóng và dễ dàng hơn rất nhiều.

Nó đơn giản và phù hợp với việc lập trình socket các phương thức như TCP
và UDP ở máy chủ. Mặc dù Play được thiết kế để chạy trên máy chủ web
21 | P a g e
JBoss Netty, nhưng nó hoàn có thể đóng gói theo kiểu WAR và sử dụng
trong những máy chủ khác bằng Java EE.
- JPA and Hibernate: Đây là 2 gói thư viện hỗ trợ quản lý thực thể và truy
vấn cơ sở dữ liệu
- Groovy: Được sử dụng như một công cụ để tạo ra giao diện web. Mã nguồn
giao diện web sử dụng Groovy ở dạng text như html nhưng có thể chèn thêm
những dòng lệnh để sinh ra nội dung đọng. Cú pháp của ngôn ngữ Groovy cũng
tương tự như Java.
1.1.1.2 Play Framewrok 2
Hình 1.: Kiến trúc Play Framework 2
Nguồn [3]
22 | P a g e
Play 2 là đánh dấu một bước chuyển lớn của Play đối với ngôn ngữ Scala.
Trong Play 2 thư viện cho ngôn ngữ đã được sử dụng. Những phiên bản trước đó của
Play Framework chủ yếu viết cho ngôn ngữ Java (Scala chỉ được sử dụng như một
plug-in), nhưng trong Play 2.0 Scala đã trở thành một trong hai ngôn ngữ chính(ngang
tầm với Java).
Trong phiên bản mới của Play Framework đã có nhiều thành đổi nhằm đơn giản
và tối ưu hóa cho Play. Sau đây là những thay đổi chính:
- Scala-library: Gói thư viện cho ngôn ngữ Scala đã được chính thức thêm
vào.
- Groovy đã bị lược đi: Play 2 không còn sử dụng groovy nữa, thay vào đó là
Scala templates.
- JPA and Hibernate cũng được lược bỏ: Trong phiên bản 2.0 trở đi Play
không còn sử dụng hai gói thư viện này để hỗ trợ quản lý thực thể nữa, thay
vào đó là một lớp truy xuất dữ liệu mới tên là Anorm. Arnorm được sử dụng
để truy xuất dữ liệu từ cơ sở dữ liệu sau đó chuyển vào các thực thể một

cách rất đơn giản.
- Akka được sử dụng làm tác nhân chính để đáp ứng xu hướng mới là phát
triển một ứng dụng hiệu năng cao và đáng tin cậy
(Nguồn tham khảo [3])
1.2 Hướng dẫn cài đặt Play Framework 2
1.2.1 Những công cụ cần thiết
Để có thể sử dụng được Play Framework 2 cần có những công cụ sau
23 | P a g e
- JDK 6 hoặc mới hơn. Có thể tải về ở đường dẫn sau:
/>- Mã nguồn Play Framework 2. Có thể dùng 1 trong 2 bản sau:
o Typesafe Activator bao gồm: Activator, Akka, Play, Scala.
/>_ga=1.197492719.1758479467.1399448997
24 | P a g e
o Play standalone distribution chỉ bao bồm Play
/>(Lưu ý: Bài hướng dẫn sử dụng gói Play standalone distribution)
1.2.2 Cài đặt và kiểm tra
Bước 1: Cần đảm bảo đã cài đặt JDK. Có thể kiểm tra bằng Command
Line(CMD) bằng cú pháp java –version và javac –version
Hình 2.: Kiểm tra cài đặt JDK
Bước 2: Giải nén gói Play standalone distribution ở trên và copy vào một nơi
bất kỳ (trong ví dụ tên thư mục sẽ là play-2.2.2 đặt ở đường dẫn C:\)
25 | P a g e
Bước 3: Thêm đường dẫn thư mục chứ Play vào biến môi trường (Environment
variables). Trong ví dụ là: C:\play-2.2.2\
Hình 2.: Thêm đường dẫn vào biến môi trường

×