1. Trang chủ
  2. » Luận Văn - Báo Cáo

Các vấn đề hiện đại Công nghệ phần mềm: Báo cáo Ruby On Rails

27 887 2
Tài liệu đã được kiểm tra trùng lặp

Đ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

Thông tin cơ bản

Định dạng
Số trang 27
Dung lượng 616,5 KB

Nội dung

Cha đẻ của Ruby là Matshumoto Yukishiro hay còn được biết đến với tên Matz. Ruby là sự kết hợp thành công của Smalltalk, Python, Perl,... Ruby mang đầy đủ các đặc điểm ưu việt của các ngôn ngữ đã có từ trước đó như: tính thông dịch (Perl, Python), hướng đối tượng (Smalltalk, Java). Phiên bản hiện tại của Ruby là 2.0.Ruby có cú pháp đơn giản. Mang đặc điểm của nhiều ngôn ngữ khác: hướng đối tượng (class, method, object…), chồng toán tử (operation overloading), Xử lý các ngoại lệ (Exception handling), trình gom và xử lí rác (garbage collection), nhập liệu tự động (dynamic loading) và độc lập trong cấu trúc, dependency injection, iterator. Ngoài các đặc điểm chung, Matz cũng đưa vào một số khái niệm khác như mixin, singleton method, renaming, closures… tính khả chuyển cao (high transportability) nên chạy được trên nhiều nên khác nhau như: Unices, Windows, DOS, OSX, OS2, Amiga… Ruby cũng hỗ trợ rất nhiều thư viện chuẩn cho lập trình viên.

Trang 1

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

KHOA CÔNG NGHỆ THÔNG TIN -

BÁO CÁO CÁC VẤN ĐỀ HIỆN ĐẠI BỘ MÔN

CÔNG NGHỆ PHẦN MỀM

ĐỀ TÀI: TÌM HIỂU NGÔN NGỮ RUBY

Giảng viên: TS Võ Đình Hiếu Các sinh viên: Phan Duy Toàn

Nguyễn Văn Nội

Trang 2

LỜI MỞ ĐẦU 3

NỘI DUNG 4

I Phân công công việc 4

II Tổng quan về Ruby 4

1 Giới thiệu chung về Ruby 4

2 Ruby cơ bản 4

a Cấu trúc một chương trình Ruby 4

b Các dạng dữ liệu và đối tượng 5

c Toán tử trong Ruby 7

d Các cấu trúc điều khiển 8

e Các cấu trúc lặp và liệt kê 10

f Cấu trúc liệt kê 11

g Ngoại lệ 13

h Các từ khóa điều khiển 13

i Methods, procs, lamdas và Closures 14

k Thừa kế trong Ruby 18

3 Ruby nâng cao 18

a Hướng đối tượng 18

b Cơ sở dữ liệu 20

c Ứng dụng Web 20

d Gửi Email 20

e Lập trình Socket 20

f Web Service 21

g Ruby/Tk 21

h Ruby/LDAP 21

i Đa luồng 22

Trang 3

4 Framework trên Ruby 22

5 Ruby vs C và Perl 23

III Cài đặt chương trình 24

1 Cài đặt Ruby 24

2 Demo ví dụ Ruby 25

IV Tổng Kết 25

Tài liệu tham khảo 26

Trang 4

LỜI MỞ ĐẦU

Trước hết, chúng em xin cảm ơn thầy Võ Đình Hiếu đã tận tình hướng dẫn và tạođiều kiện cho chúng em hoàn thành báo cáo này

Trong báo cáo này chúng em trình bày gồm 4 phần chính:

Phần I Phân công công việc của nhớm

Phần II Trình bày tổng quan về ngôn ngữ lập trình Ruby

Phần III Trình bày các cú pháp lệnh, ngữ nghĩa, cấu trúc chương trình cùng một sốcấu trúc thông dụng trong Ruby

Phần IV Các tài liệu mà chúng tôi đã tham khảo và sử dụng để hoàn thành báo cáonày

Ngoài ra, phần kết luận là tổng kết những gì chúng tôi có được sau khi tìm hiểu vềngôn ngữ lập trình Ruby

Do công việc tìm hiểu và viết báo cáo trong thời gian chúng tôi làm cùng với cácmôn khác nên có thể còn nhiều thiếu sót Vì vậy, mong thầy và các bạn góp ý chochúng tôi để chúng tôi có thể hoàn thành tốt hơn báo cáo này

Chân thành cảm ơn!

Trang 5

NỘI DUNG

I Phân công công việc

Bảng1: bảng phân công công việc

 Tìm hiểu chung về Ruby

xx

x

II Tổng quan về Ruby

1 Giới thiệu chung về Ruby

Cha đẻ của Ruby là Matshumoto Yukishiro hay còn được biết đến với tên Matz Ruby

là sự kết hợp thành công của Smalltalk, Python, Perl, Ruby mang đầy đủ các đặcđiểm ưu việt của các ngôn ngữ đã có từ trước đó như: tính thông dịch (Perl, Python),hướng đối tượng (Smalltalk, Java) Phiên bản hiện tại của Ruby là 2.0

Ruby có cú pháp đơn giản Mang đặc điểm của nhiều ngôn ngữ khác: hướng đốitượng (class, method, object…), chồng toán tử (operation overloading), Xử lý cácngoại lệ (Exception handling), trình gom và xử lí rác (garbage collection), nhập liệu

tự động (dynamic loading) và độc lập trong cấu trúc, dependency injection, iterator.Ngoài các đặc điểm chung, Matz cũng đưa vào một số khái niệm khác như mixin,singleton method, renaming, closures… tính khả chuyển cao (high transportability)nên chạy được trên nhiều nên khác nhau như: Unices, Windows, DOS, OSX, OS/2,Amiga… Ruby cũng hỗ trợ rất nhiều thư viện chuẩn cho lập trình viên

2 Ruby cơ bản

Cũng như các ngôn ngữ lập trình khác, Ruby cũng có các quy định về cú pháp, kiểu

dữ liệu, các cấu trúc điều khiển luồng, các toán tử…

a Cấu trúc một chương trình Ruby

Là một dạng của ngôn ngữ lập trình thế hệ thứ 3 (3GL: 3rd Generation Language), mộttrương trình Ruby bao gồm các thư viện liên kết và các đoạn mã được phân chia theokhối (code block) Bên cạnh đó với đặc điểm là ngôn ngữ thông dịch được viết theodạng script, chương trình không cần hàm main mà được thực thi theo thứ tự các dòngmã

Trang 6

Một chương trình có thể lưu trong nhiều tập tin mã nguồn khác nhau và được sử dụng

lại thông qua cấu trúc lệnh : require hoặc path

Khai báo trong Ruby không quá phức tạp như các ngôn ngữ khác vì không yêu cầuxác định kiểu dữ liệu trong cấu trúc khai báo

Ví dụ:

myString = 'This is my String'

myInt = 5

b Các dạng dữ liệu và đối tượng

Ruby là một ngôn ngữ hướng đối tượng 100% Ở đây các thành phần dữ liệu từ số, ký

tự, mảng… đều được xây dựng trên cơ sở các lớp

 Số

Cấu trúc phân cấp dữ liệu dạng số trong Ruby:

Các dạng dữ liệu kiểu số được xây dựng từ lớp Numeric Kiểu số nguyên :Integer có hai dạng là Fixnum với độ dài 31 bits và Bignum có độ dài tùy ý Kiểu

số thực được thể hiện qua lớp Float Bên cạnh đó một số kiểu dữ liệu khác không

có sẵn nhưng được định nghĩa trong các thư viện chuẩn của Ruby

 Ký tự

String là lớp dùng để thể hiện chuỗi ký tự Khác với Java String trong Ruby là

“mutable” String trong Ruby có thể được khai báo trong dấu ngoặc đơn hoặc

ngoặc kép Với dạng chuỗi được đặt trong dấu nháy đơn ‘’ thì ký tự \ chỉ có ýnghĩa khi sau nó là ký tự \ hoặc ‘ Bên cạnh đó chuỗi trong nháy đơn được viếtxuống dòng thì nó sẽ được hiển thị thành nhiều dòng tương ứng

Với dạng chuối trong dấu nháy kép “” thì nhiều ký tự đặc biệt được hỗ trợ, ví dụnhư \n, \t như trong java Bên cạnh đó chuỗi trong dấu nháy kép còn có thể hiệnthị kết quả của biểu thức trong nó thông qua ký tự #

Ví dụ :

string = "So PI co gia tri la #{Math::PI}"

puts string

Trang 7

Sẽ hiển thị kết quả là: So PI co gia tri la 3.14159265358979

 Mảng

Mảng có thể khai báo trực tiếp hoặc thông qua đối tượng Array:

arr = [1,2,3,4,5,6]

arr = Array.newCách đánh chỉ số mảng trong Ruby cũng tương tự như trong java tức là từ 0 đến

số phần tử -1 Tuy nhiên có một điều khác biệt ở chố các chỉ số 0 Một điểm đặcbiệt nữa là trong Ruby, việc sắp xếp các thành phần mảng khá linh hoạt và mềmdẻo Ta có thể khai báo mảng một chiều gồm các phần tử đơn: arr = [1,2,3,4,5,6].Hoặc mảng lồng: arr = [[1,2],[3,4,5,6],[7,8,9]] Hoặc mảng được tríchxuất subArr = arr[0,2] #subArr = [[1,2],[3,4,5,6]] Các mảng có thể tương tác vớinhau thông qua các toán tử như +,-,*…

Với phép + ta có thể cộng hai mảng với nhau:

c Toán tử trong Ruby

Bảng dưới đây mô tả các toán tử trong Ruby với thứ tự ưu tiên từ cao xuống thấp

Trang 8

N: Số toán hạng

A: Thứ tự thực hiện (L: trái sang phải, R: phải sang trái)

Bảng 2 Các toán tử trong Ruby

<< >> 2 L Phép dịch bit (trái, phải)

Trang 9

d Các cấu trúc điều khiển

 Các cấu trúc điều kiện

 IfCấu trúc rẽ nhánh cơ bản nhất trong Ruby

If được khai báo và sử dụng theo cấu trúc sau:

Cấu trúc khai báo:

Trang 10

Dạng lệnh rẽ nhánh với cấu trúc đa điều kiện, giúp cho việc rẽ nhiềunhánh một cách dễ dàng trong Ruby.

Cấu trúc lệnh:

case when <> then <>

Trang 11

puts "x is 1"

puts "hehe"

when x==2 then puts "x is 2"

when x<3 then "three"

end puts a

Kết quả sẽ là

x is 1hehenil

e Các cấu trúc lặp và liệt kê

 Cấu trúc lặp

 For

Cấu trúc lặp cơ bản trong Ruby, sử dụng khi biết trước số lần lặp

Cấu trúc khai báo và sử dụng:

for <<variables>> in <<collection>> do

End

begin <>

begin <<actions>>

end

Trang 12

End util <<conditions>>

f Cấu trúc liệt kê

 Với đối tượng số

 upto/downto

Sinh ra mảng các số theo thứ tự giảm dần hoặc tăng dần với tham số đầu vào

là giá trị đầu và cuối của dãy

Trang 13

82764

134

 Reject

Bỏ các giá trị thỏa mãn biểu thức điều kiện ra khỏi một mảng đầu vào

negative = [1,-2,3,4,-9].reject{|s| s>0}

puts negativeResult:

-2-9

 Blocks

Trong quá trình sử dụng các cấu trúc liệt kê, chúng ta thường thấy một nhómcác câu lệnh nằm trong cặp ngoặc nhọn hoặc trong long khối begin/end.Người ta gọi đó là block Thông thường block bao giờ cũng được thực hiệnsau lời gọi hàm

Ví dụ:

10.downto(0){|x| print x}

Trang 14

Ở đây khối |x| print x được thực hiện sau lời gọi hàm và đó là block Theo

quy ước thì với với block trong phạm vi một dòng ta nên dùng ngoặc nhọn

còn với block có nhiều dòng ta nên sử dụng do end

Chú ý là trong block, giá trị trả về được thông qua câu lệnh next chứ không phải là return (chỉ trả về giá trị cho hàm đóng).

g Ngoại lệ

Ngoại lệ và cách điều khiển ngoại lệ trong Ruby có phần khá giống với Java

với raise ~throw và try-catch~begin-rescue-end.

Bảng 2 Một số ví dụ so sánh giữa Ruby và Java

for(int i=0;i return factorial;

} public static void main(String args[]){

try{

System.out.println(factorialOf(-1));

}catch(Exception ex){System.out.println(ex.toString()); }

}

Wrong argument java.lang.Exception: Wrong argument

h Các từ khóa điều khiển

Ruby cũng cung cấp một số từ khóa hỗ trợ điều khiển cấu trúc chương trình như:return, break, next, redo, retry, throw/catch

i Methods, procs, lamdas và Closures

 Methods

Phương thức có cú pháp như sau:

Trang 15

Procs và lambdas là hai cách thức để đưa blocks vào trong đối tượng Tùy thuộc

vào cách mà đối tượng được tạo ra ta sẽ có procs haylambdas.

Trang 16

Đối với các hàm việc xác định khả năng truy cập được thông qua các từ

khóa public , private, protected giống như Java Tuy nhiên ở Java chúng ta có

Trang 17

thêm default và được coi như mặc định trong khai báo còn ở đây public được coi

là mặc định trong khai báo Public cho phép các hàm được truy nhập từ bất kỳ đâu trong khi private chỉ cho các hàm được truy nhập từ các thành phần khác trong lớp

đó và các lớp con của nó, protected giống private chỉ khác ở chỗ các hàm protected có thể được gọi bởi các thực thể của chính lớp đó hoặc với sefl.

class Test

private def myTest()

puts "test"

end protected def proTest()

puts "pro"

end public def testTest()

theTest = Test.new theTest.proTest() end

def testPrivate()

theTest = Test.new theTest.myTest() end

Trang 18

k Thừa kế trong Ruby

Là ngôn ngữ hướng đối tượng nên Ruby có đầy đủ các tính chất như tính đa hình,đóng gói… và kế thừa

class Child <>

def printOut

puts "This is Child Class"

end end

Trang 19

3 Ruby nâng cao

a Hướng đối tượng

Ruby là một ngôn ngữ lập trình thuần hướng đối tượng Mọi thứ trong Ruby đều làObject, từ các class cho đến những thứ cơ bản nhất: strings, number, true và false

Một class bản thân nó là một Object, được kế thừa từ lớp Class

Attributes (Instance variables) của Object là private với các Object khác và không thểtruy cập từ bên ngoài của class Chúng chỉ có sẵn đối với các object mà được kế thừa.Ngoài ra, từ bên ngoài class, có thể truy cập gián tiếp đến các attributes thông qua cácaccessor method và setter method (tương tự các phương thức get và set trong java)

3 level of access at instance method: private, protected, public Các level này không

áp dụng đối với instance và class variables

Inheritance: chỉ hỗ trợ đơn kế thừa, không hỗ trợ đa kế thừa Thay vào đó Ruby đưa

ra khái niệm Mixins.

Overriding: các lớp con có thể thay đổi hành vi của các method đã được định nghĩasẵn ở lớp cha

Overloading: giống nạp chồng toán tử trong C++

Gồm 4 đặc tính cơ bản:

 Đóng gói dữ liệu

Tính chất này không cho phép người sử dụng các đối tượng thay đổi trạng thái nộitại của một đối tượng Chỉ có các phương thức nội tại của đối tượng cho phép thayđổi trạng thái của nó Việc cho phép môi trường bên ngoài tác động lên các dữ liệunội tại của một đối tượng theo cách nào là hoàn toàn tùy thuộc vào người viết mã.Đây là tính chất đảm bảo sự toàn vẹn của đối tượng

 Trừu tượng hóa dữ liệu

Đây là khả năng của chương trình bỏ qua hay không chú ý đến một số khía cạnhcủa thông tin mà nó đang trực tiếp làm việc lên, nghĩa là nó có khả năng tập trungvào những cốt lõi cần thiết Mỗi đối tượng phục vụ như là một "động tử" có thểhoàn tất các công việc một cách nội bộ, báo cáo, thay đổi trạng thái của nó và liênlạc với các đối tượng khác mà không cần cho biết làm cách nào đối tượng tiến

hành được các thao tác Tính chất này thường được gọi là sự trừu tượng của dữ

liệu.

Trang 20

Tính trừu tượng còn thể hiện qua việc một đối tượng ban đầu có thể có một số đặcđiểm chung cho nhiều đối tượng khác như là sự mở rộng của nó nhưng bản thânđối tượng ban đầu này có thể không có các biện pháp thi hành Tính trừu tượng

này thường được xác định trong khái niệm gọi là lớp trừu tượng hay lớp cơ sở

trừu tượng.

 Tính đa hình

Thể hiện thông qua việc gửi các thông điệp (message) Việc gửi các thông điệp

này có thể so sánh như việc gọi các hàm bên trong của một đối tượng Các phươngthức dùng trả lời cho một thông điệp sẽ tùy theo đối tượng mà thông điệp đó đượcgửi tới sẽ có phản ứng khác nhau Người lập trình có thể định nghĩa một đặc tính(chẳng hạn thông qua tên của các phương thức) cho một loạt các đối tượng gầnnhau nhưng khi thi hành thì dùng cùng một tên gọi mà sự thi hành của mỗi đốitượng sẽ tự động xảy ra tương ứng theo đặc tính của từng đối tượng mà không bịnhầm lẫn

 Tính kế thừa

Đặc tính này cho phép một đối tượng có thể có sẵn các đặc tính mà đối tượng khác

đã có thông qua kế thừa Điều này cho phép các đối tượng chia sẻ hay mở rộng cácđặc tính sẵn có mà không phải tiến hành định nghĩa lại Tuy nhiên, không phảingôn ngữ định hướng đối tượng nào cũng có tính chất này

b Cơ sở dữ liệu

Giao tiếp với cơ sở dữ liệu thông qua DBI (database-independent interface

Các script Ruby tương tác với các database thông qua một interface độc lập với cơ sở

dữ liệu được cung cấp bởi Ruby DBI module

DBI tạo ra một lớp trừu tượng hóa giữa code Ruby và database nằm bên dưới Nóđịnh nghĩa một tập các method, các variables và các conventions mà cung cấp mộtconsistence database interface, độc lập với database đang được sử dụng Nhờ vậy, lậptrình viên có thể dễ dàng giao tác với database mà không cần quan tâm đến loạiDBMS nào đang được sử dụng

Hỗ trợ nhiều hệ cơ sở dữ liệu như: SQLLite, MySQL, Oracle, ODBC…

Trang 21

c Ứng dụng Web

Sử dụng thư viện cgi có sẵn để tạo ứng dụng web

Ngoài ra, có thể sử dụng Ruby Embedded (nhúng code Ruby vào trang HTML)

f Web Service

Sử dụng giao thức SOAP, không phụ thuộc vào RPC dựa trên XML, HTTP

Sử dụng giao thức SOAP (Simple Object Acces Protocol)

Trên Ruby, bản cài đặt SOAP có tên SOAP4R

SOAP4R hỗ trợ 2 loại SOAP server applications:

- CGI/FastCGI based (SOAP::RPC::CGIStub)

Tk là chuẩn giao diện đồ họa của Ruby

Tk cho phép tạo GUI độc lập với platform Tk chạy trên Windows, Mac, Linux, vàtrên mỗi hệ điều hành này, GUI được tạo ra sẽ có giao diện giống nhau

Ứng dụng Tk là một hệ thống phân cấp các widget Widget là component cơ bảnnhất, bất kỳ widget nào cũng được đặt trong 1 widget khác và bản thân nó cũng chứacác widget khác Widget chính trong Tk là widget root, được tạo ra bằng cách tạo mộtinstance từ TkRoot

Trang 22

Thành phần cơ bản của Tk là widget và nó được gọi từ một cửa sổ, đôi khi của sổ vàwidget có thể sử dụng thay thế cho nhau.

Ruby có thể tiến hành chạy đồng thời nhiều luồng khác nhau trong cùng một thờiđiểm một cách dễ dàng

Giúp tối ưu CPU trong quá trình xử lý các dữ liệu song song một cách gọn nhẹ vàhiệu quả

4 Framework trên Ruby

Một số framework trên Ruby:

Là một trong những framework có quy mô trung bình

Là sự phát triển logic từ Sinatra, về bản chất nó chính là Sinatra

Điểm đặc trưng hữu ích nhất trong thiết kế là khả năng “bao” một ứng dụng bêntrong một ứng dụng khác Khả năng này cho phép chúng ta có thể xây dựng nhữngứng dụng con riêng biệt chứa các hàm chức năng miền đặc trưng

Trang 23

Padrino cũng đưa ra mailer, caching, và dịch vụ logging, cũng như là form, tag,asset.

Định tuyến được tạo một cách đơn giản trong Padrino, ta có thể định nghĩa một tệpcontroller bất kỳ trong khi hệ nó đang được truy cập bởi hệ thống

 Rails

Rails là một framework ứng dụng web bao gồm tất cả mọi thứ cần thiết để tạo racác ứng dụng web cơ sở dữ liệu được hỗ trợ theo các mô hình Model- View-Controller (MVC)

Rails hỗ trợ tự động sinh code theo một bộ khung được định nghĩa sẵn giúp chúng

ta tiết kiệm thời gian và code nhanh hơn

Một số website sử dụng Rails

- https://github.com/ : Hệ thống quản lý source phân tán, được nhiều công ty lớn

sử dụng, và có hơn 1,5 triệu người đang sử dụng trang web này như một nơilưu trữ các dự án của họ

- http://basecamp.com/ : website quản lý dự án online, ra đời vào năm 2004, chođến nay đã có hơn 8 triệu dự án được quản lý trên website này

- http://twitter.com/: là trang mạng xã hội lớn thứ 2 sau facebook, rất được sửdụng phổ biến tại Mĩ và các nước châu Âu

- http://www.scribd.com/: đây là trang web chia sẻ tài liệu trực tuyến lớn và nổitiếng, có rất nhiều tài liệu hay và miễn phí được chia sẻ tại đây

Và một số website khác cũng nổi tiếng như http://hulu.com, hayhttp://slideshare.com, và nhiều trang web khác

Ngoài ra, còn nhiều framework khác hỗ trợ cho Ruby như Camping, Cramp, Cuba,Salad …

5 Ruby vs C và Perl

 Các tên bắt đầu bằng ký tự hoa được xem là hằng, vì thế biến cục bộ nên bắtđầu bằng ký tự thường

 Việc đánh giá Boolean đối với các dữ liệu không phải bool rất chặt chẽ

 Biểu diễn số thực dấu phảy động theo quy tắc dùng kí số 0 hay chuyển đổitường minh

 Thiếu một kiểu dữ liệu ký tự

Ngày đăng: 15/05/2015, 10:46

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
7. Therailsway: http://www.therailsway.com/ - Blog với nhiều bài viết và hướng 8. Ebook “The ruby programming language jan 2008” của Oreilly Sách, tạp chí
Tiêu đề: The ruby programming language jan 2008
1. Railstutorial: http://ruby.railstutorial.org/ - tutorial Web development with Rails Link
2. Tryruby http://tryruby.org/ - Các bài tập và tương với Ruby Link
3. Raincast http://railscasts.com/ - Các screencasts về Ruby on Rails, các kinh nghiệm, thủ thuật Link
4. Codeschool http://www.codeschool.com/ - Gồm các khóa học miến phí với video hướng dẫn học Ruby, kèm ví dụ Link
5. Nettust+ http://net.tutsplus.com/ - cung cấp khá nhiều bài viết về screencast về Rails khá chất lượng Link
6. Rubyonrails: http://weblog.rubyonrails.org/ - Blog chính thức của Ruby on Rail Link

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w