tiểu luận môn Nguyên lý các ngôn ngữ lập trình. Đề tài tìm hiểu ngôn ngữ lập trình Ruby

16 776 3
tiểu luận môn Nguyên lý các ngôn ngữ lập trình. Đề tài tìm hiểu ngôn ngữ lập trình Ruby

Đ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

ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG - - BÀI TẬP LỚN MÔN : NGUYÊN LÝ CÁC NGÔN NGỮ LẬP TRÌNH Đề số 10 : Tìm hiểu ngôn ngữ lập trình Ruby Nhóm : Nhóm 12 Thành viên : Ngô Hoàng Thành (Nhóm trưởng) Luyện Thanh Tuấn Trần Hữu Thảo Lớp : Cao học 12BCNTT2 Hà Nội, 12 - 2012 Bài tập lớn nhóm 12 – Lớp cao học 12BCNTT2 Mục lục Nguyên lý ngôn ngữ lập trình Page Bài tập lớn nhóm 12 – Lớp cao học 12BCNTT2 Tổng quan ngôn ngữ lập trình Ruby 1.1 Lịch sử hình thành: (Nguồn : http://vi.wikipedia.org) Ruby ngôn ngữ lập trình hướng đối tượng, có khả reflection Cú pháp bị ảnh hưởng từ Ada Perl với đặc tính hướng đối tượng Smalltalk, chia sẻ số đặc tính với Python, Lisp, Dylan CLU Ruby ngôn ngữ thông dịch đơn giai đoạn Ruby tạo Yukihiro “Matz” Matsumoto từ 24 tháng 2, 1993 đưa thức vào năm 1995 Tháng năm 2005, phiên ổn định 1.8.3 Ruby 1.9 (với số thay đổi) trình phát triển Phiên ổn địn 1.9.2 Ruby 1.9 có nhiều thay đổi đáng kể so với dòng 1.8 Ví như: • Biến cục khối lệnh • Thêm cú pháp khai báo hàm nặc danh (fun = ->(a,b) { puts a + b }) • Chọn kiểu mã hóa ký tự cho chuỗi • Socket API (hỗ trợ IPv6) 1.2 Giới thiệu Ruby : Theo lời giới thiệu Ruby cộng đồng Ruby thì: “Ruby ngôn lập trình mã nguồn mở, linh hoạt, với bật đơn giản dễ dùng hữu ích Nó có cú pháp “tao nhã” tự nhiên dễ đọc dễ dàng để viết” Ruby chịu nhiều ảnh hưởng Perl, Smalltalk, Eiffel, Ada, Lisp tác giả Ruby – Matz – thích ngôn ngữ Do câu lênh cú pháp Ruby tương đồng với ngôn ngữ Đặc điểm bàn dễ nhận thấy Ruby : • • Ruby có cú pháp ngắn làm nhiều việc Ruby ngôn ngữ hướng đối tượng Nguyên lý ngôn ngữ lập trình Page Bài tập lớn nhóm 12 – Lớp cao học 12BCNTT2 1.3 Tính hướng đối tượng Ruby Với Ruby, thứ đối tượng Mọi bit thông tin hay code sở hữu thuộc tính hay phương thức Ruby ngôn ngữ hướng đối tượng “tinh khiết”, điều thấy việc số có phương thức Ví dụ : số coi đối tượng có phương thức times Đoạn code in lần dòng “We *love* Ruby”: 5.times{ print "We *love* Ruby" } Đa số ngôn ngữ khác, số số kiểu liệu nguyên thủy khác không coi hướng đối tượng Nhưng Ruby theo ảnh hưởng lớn ngôn ngữ Smalltalk việc đưa phương thức thực thể biến tới tất kiểu Điều tạo nên thống dế dàng sử dụng Ruby với tất đối tượng 1.4 Tính mềm dẻo Ruby Ruby coi ngôn ngữ mềm dẻo linh hoạt, từ cho phép người dùng tự sửa đổi phần cốt lõi Các phần cốt lõi Ruby rời định nghĩa lại ý muốn Các phần hữu thêm vào Ruby cố gắng không hạn chế nhà lập trình Nguyên lý ngôn ngữ lập trình Page Bài tập lớn nhóm 12 – Lớp cao học 12BCNTT2 Các thành phần Ruby 2.1 Biến ruby Biến ruby không cần khai báo kiểu Khi gán giá trị cho biến tự động nhận kiểu, nhận giá trị cho biến Ví dụ: User =”user” Puts user => user Khai báo biến ruby làm cho ngôn ngữ trở lên linh hoạt Biến toàn cục ruby: thêm @ trước biến trở thành biến toàn cục để sử dụng tác động chương trình Còn @ biến địa phương sử dụng phần chương trình Mỗi biến ruby đối tượng Nhờ vào vấn đề này, bạn tác động đến vấn đề biến : chuyển kiểu, ghép biến với Nhờ có tính chất biến ruby tương tác với cách dễ dàng Ví dụ: @u =”Ngon ngu” “{#@u} lap trinh”=> “Ngon ngu lap trinh” 2.2 Các dạng liệu ruby Ruby ngôn ngữ hướng đối tượng Ở thành phần liệu từ số, ký tự, mảng xây dựng sở class 2.2.1 Number Cấu trúc phân cấp liệu dạng số Ruby: Các dang liệu kiểu số xây dựng từ lớp Numeric Kiểu số nguyên: Integer có hai dạng Fixnum với độ dài 31 bits Bignum có độ dài tùy ý Kiểu số thực thể qua lớp Float Bên cạnh số kiểu liệu khác sẵn đinh nghĩa thư viện chuẩn Ruby Nguyên lý ngôn ngữ lập trình Page Bài tập lớn nhóm 12 – Lớp cao học 12BCNTT2 2.2.2 String String lớp dùng để thể chuỗi ký tự Khác với Java String Ruby “mutable” String Ruby khai báo dấu ngoặc đơn ngoặc kép Với dạng chuỗi đặt dấu nháy đơn ‘’ ký tự \ có ý nghĩa sau ký tự \ ‘ Bên cạnh chuỗi nháy đơn viết xuống dòng hiển thị thành nhiều dòng tương ứng Với dạng chuối dấu nháy kép “” nhiều ký tự đặc biệt hỗ trợ, ví dụ \n, \t java Bên cạnh chuối dấu nháy kép thị kết biểu thức thông qua ký tự # 2.3 Array Mảng khai báo trực tiến thông qua đối tượng Array Ví dụ: Arr= [1,2,3,4,5,6] Arr= Array.new Cách đánh số mảng Ruby đánh từ đến số phần tử -1 Ruby việc xếp thành phần mảng linh hoạt mềm dẻo Ta khai báo mảng chiều gồm 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 trích xuất subArr = arr[0,2]#subArr = [[1,2], [3,4,5,6]] Các mảng tương tác với thông qua toán tử +,-,*… Với phép + ta cộng hai mảng với nhau: ar= [1,2,3] +[4] # ar=[1,2,3,4] Với phép trừ phần tử mảng mảng trừ loại bỏ phần tử có mảng bị trừ: ar= [1,2,3] -[2] # ar=[1,3] Với phép nhân, ta nhân mảng với số kết cho ta số phần tử mảng lặp lại theo giá trị nhân: ar= [1,2,3]*2 # ar= [1,2,3,1,2,3] Các mảng đính thêm phần tử với phép toán "12BCNTT2" } persons[ten] = "Nguyen Van A" persons.each |clef,value| puts clef + "=>" + value end ta in thuộc tính persions Nguyên lý ngôn ngữ lập trình Page Bài tập lớn nhóm 12 – Lớp cao học 12BCNTT2 2.6 Class Ruby 2.6.1 Khai báo class, method : class @@ def (params) end end 2.6.2 Khởi tạo class instance = .new 2.6.3 Hàm khởi tạo class def initialize() end 2.7 Kế thừa Ruby 2.7.1 Cú pháp khai báo class Child_Class < ParentClass End 2.7.2 Đa kế thừa Ruby không hỗ trợ đa kế thừa ta đưa phương thức module khác vào lớp dẫn xuất dạng Mixins (sử dụng include, require) Ví dụ : module A def a1 end Nguyên lý ngôn ngữ lập trình Page 10 Bài tập lớn nhóm 12 – Lớp cao học 12BCNTT2 def a2 end end module B def b1 end def b2 end end class Sample include A include B def s1 end end samp=Sample.new samp.a1 samp.a2 samp.b1 samp.b2 samp.s1 class Sample có đầy đủ phương thức module A B Nguyên lý ngôn ngữ lập trình Page 11 Bài tập lớn nhóm 12 – Lớp cao học 12BCNTT2 BNF Ruby (Dựa http://docs.huihoo.com/ruby/ruby-man-1.4/yacc.html với số thay đổi) PROGRAM : COMPSTMT T : ";" | "\n" //a newline can terminate a statement COMPSTMT : STMT {T EXPR} [T] STMT : CALL ["|" [BLOCK_VAR] "|"] COMPSTMT end | undef FNAME | alias FNAME FNAME | STMT if EXPR | STMT while EXPR | STMT unless EXPR | STMT until EXPR | "BEGIN" "{" COMPSTMT "}" //object initializer | "END" "{" COMPSTMT "}" //object finalizer | LHS = COMMAND [do ["|" [BLOCK_VAR] "|"] COMPSTMT end] | EXPR EXPR : MLHS = MRHS | return CALL_ARGS | yield CALL_ARGS | EXPR and EXPR | EXPR or EXPR | not EXPR | COMMAND | ! COMMAND | ARG CALL : FUNCTION | COMMAND COMMAND : OPERATION CALL_ARGS | PRIMARY.OPERATION CALL_ARGS | PRIMARY :: OPERATION CALL_ARGS | super CALL_ARGS Nguyên lý ngôn ngữ lập trình Page 12 Bài tập lớn nhóm 12 – Lớp cao học 12BCNTT2 FUNCTION : OPERATION ["(" [CALL_ARGS] ")"] | PRIMARY.OPERATION "(" [CALL_ARGS] ")" | PRIMARY :: OPERATION "(" [CALL_ARGS] ")" | PRIMARY.OPERATION | PRIMARY :: OPERATION | super "(" [CALL_ARGS] ")" | super | for BLOCK_VAR in EXPR DO COMPSTMT end | begin COMPSTMT {rescue [ARGS] DO COMPSTMT} [else COMPSTMT] [ensure COMPSTMT] end | class IDENTIFIER [< IDENTIFIER] COMPSTMT end | module IDENTIFIER COMPSTMT end | def FNAME ARGDECL COMPSTMT end | def SINGLETON ( | ::) FNAME ARGDECL COMPSTMT end WHEN_ARGS : ARGS [, * ARG] | * ARG THEN DO : T | then | T then //"then" and "do" can go on next line : T | | T BLOCK_VAR : LHS | MLHS Nguyên lý ngôn ngữ lập trình Page 13 Bài tập lớn nhóm 12 – Lớp cao học 12BCNTT2 MLHS : MLHS_ITEM , [MLHS_ITEM (, MLHS_ITEM)*] [* [LHS]] | * LHS MLHS_ITEM : LHS | "(" MLHS ")" LHS : VARIABLE | PRIMARY "[" [ARGS] "]" | PRIMARY.IDENTIFIER MRHS : ARGS [, * ARG] | * ARG CALL_ARGS : ARGS | ARGS [, ASSOCS] [, * ARG] [, & ARG] | ASSOCS [, * ARG] [, & ARG] | * ARG [, & ARG] | & ARG | COMMAND ARGS : ARG (, ARG)* ARG : LHS = ARG | LHS OP_ASGN ARG | ARG ARG | ARG ARG | ARG + ARG | ARG - ARG | ARG * ARG | ARG / ARG | ARG % ARG | ARG ** ARG | + ARG | - ARG | ARG "|" ARG | ARG ˆ ARG | ARG & ARG | ARG ARG | ARG > ARG | ARG >= ARG | ARG < ARG | ARG ARG | ARG && ARG | ARG || ARG | defined? ARG | PRIMARY PRIMARY : "(" COMPSTMT ")" | LITERAL | VARIABLE Nguyên lý ngôn ngữ lập trình Page 14 Bài tập lớn nhóm 12 – Lớp cao học 12BCNTT2 | PRIMARY :: IDENTIFIER | :: IDENTIFIER | PRIMARY "[" [ARGS] "]" | "[" [ARGS [,]] "]" | "{" [ARGS | ASSOCS [,]] "}" | return ["(" [CALL_ARGS] ")"] | yield ["(" [CALL_ARGS] ")"] | defined? "(" ARG ")" | FUNCTION | FUNCTION "{" ["|" [BLOCK_VAR] "|"] COMPSTMT "}" | if EXPR THEN COMPSTMT {elsif EXPR THEN COMPSTMT} [else COMPSTMT] end | unless EXPR THEN COMPSTMT [else COMPSTMT] end | while EXPR DO COMPSTMT end | until EXPR DO COMPSTMT end | case COMPSTMT when WHEN_ARGS THEN COMPSTMT {when WHEN_ARGS THEN COMPSTMT} [else COMPSTMT] end ARGDECL : "(" ARGLIST ")" | ARGLIST T ARGLIST : IDENTIFIER(,IDENTIFIER)*[, *[IDENTIFIER]][,&IDENTIFIER] | *IDENTIFIER[, &IDENTIFIER] | [&IDENTIFIER] Nguyên lý ngôn ngữ lập trình Page 15 Bài tập lớn nhóm 12 – Lớp cao học 12BCNTT2 SINGLETON : VARIABLE | "(" EXPR ")" ASSOCS : ASSOC {, ASSOC} ASSOC : ARG => ARG VARIABLE : VARNAME | nil | self LITERAL : numeric | SYMBOL | STRING | STRING2 | HERE_DOC | REGEXP OP_ASGN : += | -= | *= | /= | %= | **= | &= | |= | ˆ= | = | &&= | ||= SYMBOL : :FNAME | :VARNAME FNAME : IDENTIFIER | | "|" | ˆ | & | | == | === | =˜ | > | >= | < | | ˜ | +@ | -@ | [] | []= OPERATION : IDENTIFIER [! | ?] VARNAME : GLOBAL | @IDENTIFIER | IDENTIFIER GLOBAL : $IDENTIFIER | $any_char | $-any_char STRING : " {any_char} " | ’ {any_char} ’ | ‘ {any_char} ‘ STRING2 : %(Q|q|x)char {any_char} char HERE_DOC : [...]... include B def s1 end end samp=Sample.new samp.a1 samp.a2 samp.b1 samp.b2 samp.s1 class Sample có đầy đủ phương thức của module A và B Nguyên lý các ngôn ngữ lập trình Page 11 Bài tập lớn nhóm 12 – Lớp cao học 12BCNTT2 3 BNF của Ruby (Dựa trên http://docs.huihoo.com /ruby/ ruby-man-1.4/yacc.html với một số thay đổi) PROGRAM : COMPSTMT T : ";" | "\n" //a newline can terminate a statement COMPSTMT : STMT... EXPR or EXPR | not EXPR | COMMAND | ! COMMAND | ARG CALL : FUNCTION | COMMAND COMMAND : OPERATION CALL_ARGS | PRIMARY.OPERATION CALL_ARGS | PRIMARY :: OPERATION CALL_ARGS | super CALL_ARGS Nguyên lý các ngôn ngữ lập trình Page 12 Bài tập lớn nhóm 12 – Lớp cao học 12BCNTT2 FUNCTION : OPERATION ["(" [CALL_ARGS] ")"] | PRIMARY.OPERATION "(" [CALL_ARGS] ")" | PRIMARY :: OPERATION "(" [CALL_ARGS] ")" | PRIMARY.OPERATION... def SINGLETON ( | ::) FNAME ARGDECL COMPSTMT end WHEN_ARGS : ARGS [, * ARG] | * ARG THEN DO : T | then | T then //"then" and "do" can go on next line : T | do | T do BLOCK_VAR : LHS | MLHS Nguyên lý các ngôn ngữ lập trình Page 13 Bài tập lớn nhóm 12 – Lớp cao học 12BCNTT2 MLHS : MLHS_ITEM , [MLHS_ITEM (, MLHS_ITEM)*] [* [LHS]] | * LHS MLHS_ITEM : LHS | "(" MLHS ")" LHS : VARIABLE | PRIMARY "[" [ARGS]... === ARG | ARG != ARG | ARG =˜ ARG | ARG !˜ ARG | ! ARG | ˜ ARG | ARG > ARG | ARG && ARG | ARG || ARG | defined? ARG | PRIMARY PRIMARY : "(" COMPSTMT ")" | LITERAL | VARIABLE Nguyên lý các ngôn ngữ lập trình Page 14 Bài tập lớn nhóm 12 – Lớp cao học 12BCNTT2 | PRIMARY :: IDENTIFIER | :: IDENTIFIER | PRIMARY "[" [ARGS] "]" | "[" [ARGS [,]] "]" | "{" [ARGS | ASSOCS [,]] "}" | return ["("... WHEN_ARGS THEN COMPSTMT} [else COMPSTMT] end ARGDECL : "(" ARGLIST ")" | ARGLIST T ARGLIST : IDENTIFIER(,IDENTIFIER)*[, *[IDENTIFIER]][,&IDENTIFIER] | *IDENTIFIER[, &IDENTIFIER] | [&IDENTIFIER] Nguyên lý các ngôn ngữ lập trình Page 15 Bài tập lớn nhóm 12 – Lớp cao học 12BCNTT2 SINGLETON : VARIABLE | "(" EXPR ")" ASSOCS : ASSOC {, ASSOC} ASSOC : ARG => ARG VARIABLE : VARNAME | nil | self LITERAL : numeric... %(Q|q|x)char {any_char} char HERE_DOC : ... IDENTIFIER REGEXP : / {any_char} / [i|o|p] | %r char {any_char} char IDENTIFIER : sequence in /[a-zA-Z_]{a-zA-Z 0-9 _}/ Nguyên lý ngôn ngữ lập trình Page 16 ... A B Nguyên lý ngôn ngữ lập trình Page 11 Bài tập lớn nhóm 12 – Lớp cao học 12BCNTT2 BNF Ruby (Dựa http://docs.huihoo.com/ruby/ruby-man-1.4/yacc.html với số thay đổi) PROGRAM : COMPSTMT T : ";"...Bài tập lớn nhóm 12 – Lớp cao học 12BCNTT2 Mục lục Nguyên lý ngôn ngữ lập trình Page Bài tập lớn nhóm 12 – Lớp cao học 12BCNTT2 Tổng quan ngôn ngữ lập trình Ruby 1.1

Ngày đăng: 17/04/2016, 21:25

Mục lục

  • 1. Tổng quan về ngôn ngữ lập trình Ruby

    • 1.1. Lịch sử hình thành:

    • 1.2. Giới thiệu về Ruby :

    • 1.3. Tính hướng đối tượng của Ruby

    • 1.4. Tính mềm dẻo của Ruby

    • 2.4. Cấu trúc điều khiển trong ruby

    • 2.6. Class trong Ruby

      • 2.6.1. Khai báo class, method :

      • 2.6.3. Hàm khởi tạo của class

      • 2.7. Kế thừa trong Ruby

        • 2.7.1. Cú pháp khai báo

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan