LỜI MỞ ĐẦUCuối thế kỷ 20 mở ra một thời đại mới , thời đại khoa học công nghệ đòi hỏi con người luôn luôn không ngừng tìm tòi học tập để tiến bộ .Với sự nhảy vọt của khoa học, các kỹ thu
Trang 1MỤC LỤC
LỜI MỞ ĐẦU 2
Chương 1: Ngôn ngữ lập trình Ruby 3
1 Lịch sử hình thành 3
2 Giới thiệu về ngôn ngữ ruby 3
3 Xem mọi thứ như hướng đối tượng 3
4 Ruby là một ngôn ngữ mềm dẻo và linh hoạt 4
Chương 2: Ngôn ngữ Ruby 5
1 Biến trong Ruby 5
2 Các dạng dữ liệu trong ruby 5
2.1 Số 5
2.2 Ký tự 5
3 Mảng trong ruby 5
4 Cấu trúc điều khiển trong ruby 6
5 Vòng lặp trong ruby 7
5.1 While 7
5.2 Util 7
5.3 For 8
5.4 Cấu trúc liệt kê 8
5.5 Hash 8
5.6 Có một vấn đề trong đây là Blocks 9
6 Lớp và modules 10
7 Thừa kế trong Ruby 12
Chương 3: Framework Rails 14
1 Thế nào là framework 14
2 Mô hình MVC 14
2.1 Khái quát về mô hình MVC 14
2.2 Các thành phần của mô hình MVC 14
2.3 Ưu và nhược điểm của mô hình MVC 15
3 Ruby on Rails 15
3.1 Nguồn gốc của Rails 15
3.2 Mô hình MVC với Rails 16
3.3 Tự động sinh code trong Rails 16
3.4 Vòng đời phát triển một ứng dụng trong Rails 16
3.5 So sánh Ruby on Rails với Java và PHP 17
Chương 4: Cài đặt và phát triển môi trường Rails 19
1 Các môi trường cụ thể để phát triển Ruby on Rails 19
2 Cách cài đặt môi trường phát triển Ruby on Rails 19
3 Cài đặt công cụ hỗ trợ code 19
Chương 5: Những vấn đề cụ thể của Rails 20
1 Bộ công cụ để phát triển 20
2 Đặc điểm cơ bản với cơ sở dữ liệu của Ruby on Rails 22
2.1 Giới thiệu Active Record 22
2.2 Đánh giá Active Record với các hệ csdl khác 22
2.3 Thao tác sử dụng Active Record 22
Chương 6: Tổng kết 24
Phụ Lục 24
Tài liệu tham khảo 24
Trang 2LỜI MỞ ĐẦU
Cuối thế kỷ 20 mở ra một thời đại mới , thời đại khoa học công nghệ đòi hỏi con người luôn luôn không ngừng tìm tòi học tập để tiến bộ Với sự nhảy vọt của khoa học, các kỹ thuật thực hiện trong ngành Công nghệ thông tin nói chung và các ngôn ngữ lâp trình nói riêng ngày càng phát triển chỉ trong thời gian ngắn nó đã đạt được những thành tựu to lớn ở hầu hết các lĩnh vực khác nhau trong đời sống xã hội Một trong những ngôn ngữ lập trình ra đời trong thời kỳ đó là ngôn ngữ lập trình Ruby Ruby là một ngôn ngữ lập trình hướng đối tượng cung cấp nhiều mẫu hình lập trình như lập trình hàm, hướng đối tượng, mệnh lệnh, phản xạ nó sử dụng
hệ thống kiểu biến động và tự động quản ký bộ nhớ Để tìm hiểu sâu hơn về cú pháp, ưu điểm của ngôn ngữ lập trình Ruby Trong bài tiểu luận này, nhóm em xin
trình bày về “Tìm hiểu về ngôn ngữ lập trình Ruby”
Em xin trân thành cảm ơn thầy TS.Nguyễn Hữu Đức đã hướng dẫn và tạo
mọi điều kiện tốt nhất để em hoàn thành tốt bài tiểu luận này.
Trang 3Chươ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ính vớ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ínhthức và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ớimộ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 Và bạncủa anh đã gợi ý cái tên Ruby 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ủacộng đồng Ruby 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 tự nhiên dễ đọc và dễ dàng
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 ra cho chính chúng việc sở hữu các thuộc tính hay hành động Trong lập trìnhhướng đối tượng thì các thuộc tính gọi là các biến thực thể (instance variables) và cáchà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ằng mộ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 tượ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 đượccoi là hướng đối tượng Nhưng Ruby theo sự ảnh hưởng lớn của ngôn ngữ Smalltalk bằngviệ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
Trang 44 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ườidùng tự do sử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 đihoặc định nghĩa lại như ý muốn Các phần hiện hữu có thể được thêm vào Ruby cố gắngkhông hạn chế các nhà lập trình
Trang 5Chương 2: 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ận cá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 động trongchương trình
Còn khi không có @ thì nó là biến địa phương chỉ được sử dụng trong một phần nào đócủa chương trình
Mỗi biến của ruby là một đối tượng Nhờ vào vấn đề này, bạn có thể tác động đến từngvấn đề của biến: như chuyển kiểu, ghép các biến với nhau
Nhờ có tính chất trên các biến trong ruby có thể tương tác với nhau một cách dễ dàng
Ví dụ:
@u =”Ngon ngu”
“{#@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âydự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 đinh nghĩa trong thư viện chuẩn của Ruby
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, \tnhư 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ểuthức trong nó thông qua ký tự #
3 Mảng trong ruby
Trang 6Mảng có thể khai báo trực tiến hoặc thông qua đối tượng Array.
Ví dụ:
Arr = [1,2,3,4,5,6]
Arr = Array.new
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: arr = [1,2,3] +[4] # arr =[1,2,3,4]
Với phép - 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ừ
Arr = [1,2,3] -[2] # arr =[1,3]
Với phép * 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: arr = [1,2,3]*2 # arr = [1,2,3,1,2,3]
Các mảng có thể đính thêm phần tử với phép toán <<: arr = [1,2,3]<<4 # arr= [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 arr = [1,2,2,4,3,4] | [] # arr [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) arr = [1,2,2,4,3,4] & [4,4] # arr[4]
4 Cấu trúc điều khiển trong ruby
Trang 7unless cũng có thể được sử dụng với else như trường hợp của
if.
case
Case trong Ruby không lằng nhằng như trong java ( quên break là cả một vấn đề rồi) Ởđây có thể sử dụng cấu trúc elseif để đưa ra khối điều khiển giống như trong khối điềukhiển case, tuy nhiên cú pháp case vấn thường được sử dụng nhiều hơn
when x==2 then puts "x is 2"
when x<3 then "three"
Trang 85.3 For
for <<variables>> in <<collection>> do
<<actions>>
end
5.4 Cấu trúc liệt kê
Với đối tượng số
Trang 9mảng Array chỉ chấp nhận các chỉ số (index) là dạng Integer thì mảng Hash chấp nhận bất
kỳ Object nào vẫn được xem như một chỉ số
Ví dụ: với mảng Array
persons = ["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ải cầ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ên kế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 = {
"ten" => "Ho Chi Minh",
"xep loai" => "Nhan vat lich su",
"tinh cach" => "yeu nuoc"
}persons.each do |clef,value|
puts clef + "=>" + valueend
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áccâ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ệ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
Trang 10Một điểm đặc biệt ở đây là nhiều giá trị có thể đồng thời được trả về trong một phươngthức.
Các giá trị trả về sẽ được tập hợp trong một mảng
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.
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ởihà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ặcprocs
Trang 11Đố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 12là 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…và kế thừa
Child <>def printOut
puts "This is Child Class"
Trang 13Chươ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ếntrúc của nó, những đặc điểm của framework Rails và những đánh giá của nó với cácframework khác
1 Thế nào là framework
Framework là những thư viện code, được thiết kế để giúp đỡ trong việc phát triểnphần mềm Framework tạo ra một bộ ứng dụng thiết kế dựa vào những thư viện phát triểntheo ngôn ngữ để tạo người lập trình dễ dàng để phát triển những phần mềm một cáchnhanh nhóng và hiệu quả
Khi phát triển một phần mềm dựa vào một framework nào đó thì việc phát triển nó trở lênthuận lợi với người lập trình bởi vì nó giảm bớt thời gian tập trung vào việc code hơn để
có thể tập trung vào việc giải quyết những vấn đề liên quan đến logic điều đó làm tănghiệu quả của người lập trình
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êmhay mô hình thiết kế được sử dụng trong kỹ thuật phần mềm, giúp cho người lập trìnhtách ứng dụng của họ thành ba thành phần khác nhau Model, View và Controller Mỗithà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 14Cá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
Model:
Gồm mọi hoạt động liên quan đến cơ sở dữ liệu, các thao tác với cơ sở dữ liệu đều đượcthực hiện ở đây gồm: chuẩn hóa, phân tích đánh giá…
View:
Phần này liên quan đến người dùng Nó là phần hiển thị với người dùng Nó đưa thông tin
cụ thể đến với người dùng một cách cụ thể nhất Và nó cũng nh ận tương tác giữa ngườidùng và hệ thống
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ươngtác vớ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 quacontroller Controller là cầu lối giữa View và Model Nó điều khiển dữ liệu rồi sau đó đưa
ra nhữ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ộc thấp với nhau, vì vậy khi thay đổi một cái thì không ảnh hưởng đến cáikhác
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ụng cho 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ếuthấ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
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ền tảng cho một công cụ quản lý dự án được đặt tên là Basecamp và được tạo ra bởinhà 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ủa37signals Sau đó Heinemeier Hansson thấy tiềm năng của nó giúp cho anh ấy làm cáccông việc dễ dàng hơ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ôn mẫu(template) bên trong, và sau đó nó trở thành phiên bản đầu tiên đượctung ra của Ruby on Rails