Mục lụcChương 1: Ngôn ngữ lập trình Ruby 41. Lịch sử hình thành .42. Giới thiệu về ngôn ngữ ruby .43. Xem mọi thứ như hướng đối tượng 44. Ruby là một ngôn ngữ mềm dẻo và linh hoạt .5Chương 2: Ngôn ngữ Ruby . 61. Biến trong ruby .62. Các dạng dữ liệu trong ruby 62.1. Số 62.2. Ký tự .63. Mảng trong ruby 74. Cấu trúc điều khiển trong ruby .75. Vòng lặp trong ruby 95.1. While .95.2. Util 95.3. For .95.4. Cấu trúc liệt kê .95.5. Hash 105.6. Có một vấn đề trong đây là Blocks 116. Lớp và modules .127. Thừa kế trong Ruby 14Chương 3: Framework Rails . 161. Thế nào là framework .162. Mô hình MVC .162.1. Khái quát về mô hình MVC .162.2. Các thành phần của mô hình MVC 162.3. Ưu và nhược điểm của mô hình MVC .173. Ruby on Rails 183.1. Nguồn gốc của Rails 183.2. Mô hình MVC với Rails 183.3. Tự động sinh code trong Rails .193.4. Vòng đời phát triển một ứng dụng trong Rails 193.5. So sánh Ruby on Rails với Java và PHP .20Chương 4: Cài đặt và phát triển môi trường Rails 221. Các môi trường cụ thể để phát triển Ruby on Rails 222. Cách cài đặt môi trường phát triển Ruby on Rails 223. Cài đặt công cụ hỗ trợ code .22Chương 5: Những vấn đề cụ thể của Rails 241. Bộ công cụ để phát triển .242. Đặc điểm cơ bản với cơ sở dữ liệu của Ruby on Rails .252.1. Giới thiệu Active Record .262.2. Đánh giá Active Record với các hệ csdl khác .262.3. Thao tác sử dụng Active Record .26Chương cuối: Tổng kết . 28Phụ Lục 28Tài liệu tham khảo 28Tieu Luan Tong quan ve ngon ngu Ruby - cac van de hien dai cua cong nghe phan mem
Trang 1CÁC VẤN ĐỀ HIỆN ĐẠI CỦA CÔNG NGHỆ PHẦN MỀM
Giảng viên: TS Trương Anh Hoàng
Thành viên:
Nhữ Tuấn AnhĐào Đức ThịnhĐàm Thái Nhiên
Hà Nội 01/10/2012
Trang 2Mục lục
Chương 1: Ngôn ngữ lập trình Ruby 4
1 Lịch sử hình thành 4
2 Giới thiệu về ngôn ngữ ruby 4
3 Xem mọi thứ như hướng đối tượng 4
4 Ruby là một ngôn ngữ mềm dẻo và linh hoạt 5
Chương 2: Ngôn ngữ Ruby 6
1 Biến trong ruby 6
2 Các dạng dữ liệu trong ruby 6
2.1 Số 6
2.2 Ký tự 6
3 Mảng trong ruby 7
4 Cấu trúc điều khiển trong ruby 7
5 Vòng lặp trong ruby 9
5.1 While 9
5.2 Util 9
5.3 For 9
5.4 Cấu trúc liệt kê 9
5.5 Hash 10
5.6 Có một vấn đề trong đây là Blocks 11
6 Lớp và modules 12
7 Thừa kế trong Ruby 14
Chương 3: Framework Rails 16
1 Thế nào là framework 16
2 Mô hình MVC 16
2.1 Khái quát về mô hình MVC 16
2.2 Các thành phần của mô hình MVC 16
2.3 Ưu và nhược điểm của mô hình MVC 17
3 Ruby on Rails 18
3.1 Nguồn gốc của Rails 18
3.2 Mô hình MVC với Rails 18
3.3 Tự động sinh code trong Rails 19
3.4 Vòng đời phát triển một ứng dụng trong Rails 19
Trang 33.5 So sánh Ruby on Rails với Java và PHP 20
Chương 4: Cài đặt và phát triển môi trường Rails 22
1 Các môi trường cụ thể để phát triển Ruby on Rails 22
2 Cách cài đặt môi trường phát triển Ruby on Rails 22
3 Cài đặt công cụ hỗ trợ code 22
Chương 5: Những vấn đề cụ thể của Rails 24
1 Bộ công cụ để phát triển 24
2 Đặc điểm cơ bản với cơ sở dữ liệu của Ruby on Rails 25
2.1 Giới thiệu Active Record 26
2.2 Đánh giá Active Record với các hệ csdl khác 26
2.3 Thao tác sử dụng Active Record 26
Chương cuối: Tổng kết 28
Phụ Lục 28
Tài liệu tham khảo 28
Trang 4Chương 1: Ngôn ngữ lập trình Ruby
1 Lịch sử hình thành
Ruby là một ngôn ngữ lập trình hướng đối tượng, có khả năng reflection Cú pháp bị ảnh hưởng
từ Ada và Perl với các đặc tính hướng đối tượng của Smalltalk, và cũng chia sẻ một số đặc tínhvới Python, Lisp, Dylan và CLU
Ruby được tạo ra bởi Yukihiro “Matz” Matsumoto từ 24 tháng 2, 1993 và đưa ra bản chính thứcvào năm 1995
Ruby chịu nhiều ảnh hưởng từ Perl, và khi hoàn tất ngôn ngữ này, anh đã đùa với một
người bạn rằng nên đặt tên thế nào nghe cho nó giống một thứ đá quý nào đó (Perl lúc đầu cũngđược đặt tên là Pearl - ngọc trai) Và bạn của anh đã gợi ý cái tên Ruby Sau này Matz cũng bất
ngờ khi phát hiện ra Pearl là viên đá quý tượng trưng cho những người sinh tháng 6, còn Rubythì tượng trưng cho những người sinh tháng 7 Anh cho rằng cái tên Ruby như thế là phù hợp vìRuby kế thừa và phát triển nhiều đặc tính từ Perl
Tháng 9 năm 2005, phiên bản ổn định mới nhất là 1.8.3 Ruby 1.9 (với một số thay đổi)
cũng đang trong quá trình phát triển
2 Giới thiệu về ngôn ngữ ruby
Thay vì định nghĩa về Ruby tôi xin trích nguyên văn lời giới thiệu về Ruby của cộng đồngRuby như sau: “Ruby là một ngôn lập trình mã nguồn mở, linh hoạt, với một sự nổi bật về sự
đơn giản dễ dùng và hữu ích Nó có cú pháp “tao nhã” và tự nhiên dễ đọc và dễ dàng để
viết”
Và theo như tác giả của ngôn ngữ Ruby, anh Yukihiro “matz” Matsumoto người Nhật, thì tácgiả là một người rất ưa thích các ngôn ngữ như: Perl, Smalltalk, Eiffel, Ada, và Lisp Tác giả
đã cố gắng kết hợp một cách thận trọng các ngôn ngữ này với nhau từ đó tạo ra Ruby Có lẽ
chính vì vậy mà Ruby là một ngôn ngữ với các câu lệnh và cú pháp khá quen thuộc khi đượchọc
Một vài đặc điểm nhận thấy ở ngôn ngữ Ruby là:
Ruby có cú pháp ngắn nhưng có thể làm được nhiều việc
Ruby là ngôn ngữ rất hướng đối tượng
3 Xem mọi thứ như hướng đối tượng
Với Ruby, mọi thứ đều là một đối tượng Mọi bit thông tin hay code đều có thể được đưa racho chính chúng việc sở hữu các thuộc tính hay hành động Trong lập trình hướng đốitượng thì các thuộc tính gọi là các biến thực thể (instance variables) và các hành động gọi
là các phương thức Ruby là một hướng đối tượng “tinh khiết”, điều này có thể thấy bằngmột bit của code mà thực hiện một hành động với một con số Số 5 cũng được coi là một đối
Trang 5tượng và có phương thức làm times Đoạn code dưới sẽ in ra 5 lần dòng “We *love* Ruby”:5.times{ print "We *love* Ruby" }
Đa số các ngôn ngữ khác, con số và một số kiểu dữ liệu nguyên thủy khác thì không được coi
là hướng đối tượng Nhưng Ruby theo sự ảnh hưởng lớn của ngôn ngữ Smalltalk bằng việc
đưa ra các phương thức và thực thể biến tới tất cả các kiểu của nó Điều này tạo nên sự thống
nhất và dế dàng khi sử dụng Ruby với tất cả các đối tượng
4 Ruby là một ngôn ngữ mềm dẻo và linh hoạt
Ruby được coi là một ngôn ngữ mềm dẻo và linh hoạt, từ khi nó cho phép người dùng tự dosửa đổi cả phần cốt lõi của nó Các phần cốt lõi của Ruby có thể được rời đi hoặc định nghĩalại như ý muốn Các phần hiện hữu có thể được thêm vào Ruby cố gắng không hạn chế cácnhà lập trình
Trang 6Chương 2: Ngôn ngữ Ruby
Trong chương này sẽ nói qua tổng thể những vấn đề cơ bản với Ruby Các bạn sẽ hiểu nhữngcái cơ bản nhất về Ruby Và các bạn có thể thao tác cơ bản với những vấn đề của ngôn ngữ
Ruby
1 Biến trong ruby
Biến của ruby không cần khai báo kiểu Khi gán giá trị cho biến nó sẽ tự động nhận kiểu, nhậncác giá trị cho biến
Ví dụ:
User =”user”
Puts user => user
Khai báo biến của ruby làm cho ngôn ngữ trở lên linh hoạt hơn
Biến toàn cục của ruby: khi thêm @ trước biến thì nó trở thành biến toàn cục để sử dụng khi tác
“{#@u} lap trinh”=> “Ngon ngu lap trinh”
Cũng có thể đảo ngược chuỗi hoặc viết hoa …
2 Các dạng dữ liệu trong ruby
Ruby là một ngôn ngữ hướng đối tượng Ở đâ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
2.1 Số
Cấu trúc phân cấp dữ liệu dạng số trong Ruby: Các dang dữ liệu kiểu số được xây dựng từ lớpNumeric 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áckhông có sẵn nhưng được đinh nghĩa trong thư viện chuẩn của Ruby
2.2 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
Trang 7đó chuỗi trong nháy đơn được viết xuố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ện thị kết quả của biểu thứctrong nó thông qua ký tự #
Cách đánh chỉ số mảng trong Ruby được đánh từ 0 đến số phần tử -1
Ruby việc sắp xếp các thành phần mảng khá linh hoạt và mềm dẻ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ích xuất subArr = arr[0,2]#subArr = [[1,2],[3,4,5,6]].
Các mảng có thể tương tác với nhau thông qua các toán tử như +,-,*…
Với phép + ta có thể cộng hai mảng với nhau: ar= [1,2,3] +[4]# ar=[1,2,3,4]
Với phép trừ các phần tử mảng ở mảng trừ sẽ loại bỏ các phần tử có trong mảng bị trừ
ar= [1,2,3] -[2]# ar=[1,3]
Với phép nhân, ta có thể nhân một mảng với một số và kết quả cho ta số phần tử mảng được lặp
lại theo giá trị được nhân: ar= [1,2,3]*2# ar= [1,2,3,1,2,3]
Các mảng có thể đính thêm phần tử với phép toán <<: ar= [1,2,3]<<4# ar= [1,2,3,4]
Và các phép so sánh: |, & Với | các giá trị trùng lặp của hai mảng sẽ được bỏ đi ( kể cả các
phần tử trùng lặp trong 1 mảng ar = [1,2,2,4,3,4] | []# ar[1,2,4,3] Trong khi đó với phép toán
& các phần tử trùng nhau được giữ lại ( và không lặp) ar = [1,2,2,4,3,4] & [4,4]# ar[4]
4 Cấu trúc điều khiển trong ruby
Trang 8when x==2 then puts "x is 2"
when x<3 then "three"
end
puts a
Kết quả sẽ là
x is 1
Trang 95.4 Cấu trúc liệt kê
+ Với đối tượng số
Trang 10persons = ["Ho Chi Minh","Nhan vat lich su","yeu nuoc"]
Giả sử nếu muốn biết chính xác tên nhân vật là gì, xếp loại nhân vật, tính cách là gì ,… thì phảicần tới class Hash
persons = {
"ten"=>"Ho Chi Minh",
"xep loai"=>"Nhan vat lich su",
"tinh cach"=>"yeu nuoc"
}
Với mảng Hash, ta có persons[xep loai] = "Nhan vat lich su"
Mảng Hash không sử dụng chỉ số (index) để truy vấn dữ liệu mà sử dụng từ khóa (clef) để liênkết với dữ liệu liên quan
Mảng Hash cũng giống như mảng Array nên được thừa hưởng phương thức each
persons = {
Trang 11"ten" => "Ho Chi Minh",
"xep loai" => "Nhan vat lich su",
"tinh cach" => "yeu nuoc"
}
persons.each do |clef,value|
puts clef + "=>" + value
end
5.6 Có một vấn đề trong đây là 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óm các câu lệnh nằmtrong 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ện sau lời gọi hàm
Ví dụ:
10.downto(0){|x| print x}
Ở đâ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ử
Trang 12procs 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.
Closures là một khái niệm chỉ một hàm sử dụng một biến giới hạn Thông thường closures dùng
để nói đến hàm lồng Ở đó hàm bên trong sử dụng biến được khai báo bởi hàm chứa nó Ở
Ruby, khái niệm này thường được thể hiện bởi các khối lambdas hoặc procs
Là một ngôn ngữ hướng đối tượng, khái niệm lớp là thành phần cơ bản trong Ruby Lớp được
khai báo như sau:
class <<name_of_class>>
<<body_of_class>>
end
Trang 13Khới tạo class
Đố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ó 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.
Trang 14HelloWorld.rb:20:in `testPrivate': private method `myTest' called for #(NoMethodError)
from HelloWorld.rb:28
Bên cạnh đó ở Ruby các biến trong lớp đều được đặt là private, trong khi các hằng số đều
là public.
7 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…
Trang 15Một chương trình có thế gồm nhiều file, và với ngôn ngữ script như Ruby thì việc phân chia
chương trình thành các file chứa các module khác nhau.Các file này sau đó có thể được sử dụng
thông qua lời gọi require hoặc load trong chương trình chính.
Trang 16Chương 3: Framework Rails
Đến với chương này các bạn có thể biết được thế nào là một framework, mô hình kiến trúc của
nó, những đặc điểm của framework Rails và những đánh giá của nó với các framework khác
2 Mô hình MVC
Ngày này các framework về thiết kế website hầu như đều sử dụng mô hình MVC để phát triển.vậy mô hình này có những đặc điểm gì mà các framework được sử dụng nó để phát triển nhưvậy?
2.1 Khái quát về mô hình MVC
MVC là viết tắt của Model – View – Controller Nó là một kiến trúc phần mêm hay mô hìnhthiết kế được sử dụng trong kỹ thuật phần mềm, giúp cho người lập trình tách ứng dụng của họthành ba thành phần khác nhau Model, View và Controller Mỗi thành phần có một nhiệm vụriêng biệt và độc lập với thành phần khác
2.2 Các thành phần của mô hình MVC
Dưới đây là sơ đồ của mô hình MVC:
Trang 17Các thành phần trong mô hình MVC có mỗi quan hệ chặt chẽ với nhau Các thao tác của nó
được lặp lại mỗi khi tiếp nhận yêu cầu của người dùng
Như hình trên có thể thấy mô hình MVC gồm 3 thành phần chính: Model, View và Controller
Controller
Controller chịu trách nhiệm phân phối ứng dụng Nó nhận sự kiện từ bên ngoài, rồi tương tácvới Model để xử lý thông tin Sau khi xử lý tác động liên quan đến hệ thống thì nó truyền đến
View để hiển thị với người dùng
Như vậy dễ dàng thấy rằng sự tương tác giữa các thành phần trong mô hình đều thông qua
controller Controller là cầu lối giữa View và Model Nó điều khiển dữ liệu rồi sau đó đưa ranhững thông tin cần thiết cho người dùng
2.3 Ưu và nhược điểm của mô hình MVC
Ưu điểm của mô hình MVC:
Mô hình MVC làm tăng khả năng phát triển và mở rộng ứng dụng
Mô hình MVC khiến cho việc bảo trì trở lên dễ dàng hơn: vì các thành phần phụ thuộcthấp với nhau, vì vậy khi thay đổi một cái thì không ảnh hưởng đến cái khác
Trang 18 Các thành phần trong mô hình MVC được sử dụng lại: ví dụ một model có thể sử dụngcho nhiều phần hiển thị và ngược lại cũng vậy.
Mô hình MVC có thể phân tán: sự chia sẽ cách biệt về code giữa các thành phần có ýnghĩa là mỗi thành phần trong chúng có thể ở trên một máy tính riêng, nếu thấy cần thiết
Nhược điểm của mô hình MVC: Đối với dự án nhỏ áp dụng mô hình MVC gây cồng
kềnh, tốn thời gian trong quá trình phát triển và tốn thời gian luân chuyển qua các tầng
3 Ruby on Rails
3.1 Nguồn gốc của Rails
Đầu tiên, tôi muốn giới thiệu với các bạn nguồn gốc hình thành framework Ruby on Rails
Rails ra mắt công chúng lần đầu tiên vào năm 2004, Rails thoạt đầu được dùng như là nềntảng cho một công cụ quản lý dự án được đặt tên là Basecamp và được tạo ra bởi nhàphát triển web David Heinemeier Hansson, một nhân viên của công ty phát triển web37signals (Mỹ) Ban đầu họ xây dựng Rails không phải với mục đích là xây dựng ra mộtframework riêng, chủ tâm ban đầu là dùng nó để xây dựng các ứng dụng khác của 37signals.Sau đó Heinemeier Hansson thấy tiềm năng của nó giúp cho anh ấy làm các công việc dễ dànghơn bằng cách rút ra các tính năng phổ biến như trừu tượng cơ sở dữ liệu và khuônmẫu(template) bên trong, và sau đó nó trở thành phiên bản đầu tiên được tung ra của Ruby onRails
Trên thực tế Rails được rút trích từ Basecamp, một chương trình mà được cộng đồng Railscho là trong quá trình làm chương trình đó thì đã gặp và giải quyết được rất nhiều các vấn đềphức tạp Và Rails, một framework bắt nguồn từ chương trình đó thì nó đã thừa kế đượcnhững sức mạnh từ dự án đó Vì vậy Rails luôn sẵn sàng có thể giải quyết được các vấn đềthực tế tồn tại trong quá trình phát triển web Ngoài ra, ban đầu Rails được xây dựng ra còn vớimục đích là để xây dựng các ứng dụng khác từ nó, bởi vậy Rails trước khi xuất hiện trênthế giới thì nó đã chứng minh được bản thân nó là một framework rất hữu dụng, chặt chẽ vàtoàn diện
Sau khi phiên bản đầu tiên được tung ra thì cộng đồng Rails cũng đã đóng góp bổ sunghàng mở rộng nó, và sửa các lỗi được tìm thấy Và phiên bản mới nhất của Rails bây giờ làphiên bản 2.0.2
3.2 Mô hình MVC với Rails
Hiện nay mô hình MVC đang được sử dụng hầu hết các framework phát triển ứng dụng web.Rails cũng không là ngoại lệ Rails dự trên mô hình MVC để phát triển framework của mình.Cấu trúc của mô hình MVC rất rõ ràng Điều này làm cho người lập trình đẽ dàng phát triển
ứng dụng của mình
Hiện tại chương này giới thiệu những vấn đề cơ bản của Rails nên mình chỉ nói sơ qua phần này