Hoàng Đăng Hải Học Viên: Lê Đăng Phong [1-22] Vũ Anh Tuấn



tải về 0.59 Mb.
trang4/19
Chuyển đổi dữ liệu13.08.2016
Kích0.59 Mb.
#17954
1   2   3   4   5   6   7   8   9   ...   19

2.3 Lớp Tcl


Lớp Tcl bao bọc toàn bộ instance thực sự của bộ thông dịch OTcl và đưa ra các hàm giao tiếp với bộ thông dịch đó. Các hàm này cho phép thực hiện

  • Lấy tham chiếu tới Tcl instance

  • Gọi các hàm OTcl qua bộ thông dịch

  • Nhận và trả lại kết quả cho bộ thông dịch

  • Thông báo các tình huống lỗi và thoát

  • Lưu tham chiếu và tìm các đối tượng TclObject

  • Truy nhập trực tiếp tới bộ thông dịch

2.3.1 Lấy tham chiếu tới instance của lớp Tcl


Luôn tồn tại một instance duy nhất của lớp Tcl được khai báo như là một biến thành viễn tĩnh, người lập trình có thể lấy được tham chiếu tới instance này qua câu lệnh

Tcl& tcl = Tcl:instance()


2.3.2 Gọi các hàm OTcl


Có 4 hàm khác nhau để gọi một câu lệnh OTcl qua Tcl instance:

  • tcl.eval(char* s)

  • tcl.evalc(const char* s)

  • tcl.eval()

  • tcl.evalf(const char * s,..)

Những hàm này chỉ khác nhau ở tham số đầu vào, mỗi hàm sẽ chuyển câu lệnh dưới dạng chuỗi tới bộ thông dịch, bộ thông dịch sẽ kiểm tra câu lệnh đó và trả về các kết quả TCL_OK nếu câu lệnh đúng và TCL_ERROR nếu câu lệnh sai.

2.3.3 Gửi và nhận kết quả từ bộ thông dịch


Khi bộ thông dịch gọi các hàm C++, nó mong muốn kết quả được trả về trong biến thành viên riêng tcl_->result. Có hai hàm để trả kết quả vào biến này là

  • tcl.result(const char * s)

  • tcl.result(const char * fmt,...)

Khi một hàm C++ thực hiện một câu lệnh OTcl, bộ thông dịch cũng sẽ trả kết quả về trong biến thành viên riêng tcl_->result. Và để lấy được kết quả này sử dụng hàm string tcl.result(void), hàm này trả về kết quả dưới dạng chuỗi.

2.3.4 Thông báo lỗi và thoát.


Hàm tcl.error(const char * s) được sử dụng để thông báo lỗi trong mã biên dịch, nó thực hiện việc ghi chuỗi thông báo lỗi s cùng kết quả trả về tclresult ra luồng stdout và thoát ra với mã lỗi bằng 1.

2.3.5 Các hàm băm trong bộ thông dịch


NS lưu tham chiếu của tất cả các đối tượng TclObject của cây biên dịch trong một bảng băm. NS sử dụng tên của các đối tượng này để thêm vào, tìm kiếm hay xóa tham chiếu của đối tượng trong bảng băm. Có 3 hàm để làm điều này

  • tcl.enter (TclObject * o)

  • tcl.lookup(char * s)

  • tcl.remove(TclObject *o)

Các hàm trên được sử dụng trong nội tại các lớp TclObject và TclClass để quản lý các đối tượng.

2.4 Lớp TclObject


TclObject là lớp cơ sở của phần lớn các lớp còn lại trong cây biên dịch và thông dịch. Mỗi đối tượng thuộc lớp TclObject được tạo bởi người sử dụng thông qua bộ thông dịch, và sẽ có một đối tượng ánh xạ tương ứng được tạo ra trong cây biên dịch. Hai đối tượng này có quan hệ chặt chẽ với nhau. Lớp TclClass (được mô tả ở phần sau) chứa các cơ chế cho phép thực hiện việc ánh xạ này.

2.4.1 Tạo và hủy đối tượng TclObject


Khi người dùng muốn khởi tạo hay xóa bỏ một đối tượng TclObject, hai hàm new{} và delete{} sẽ được sử dụng để tạo và hủy các đối tượng này. Hai hàm new{} và delete{} được sử dụng để tạo và hủy các đối tượng của tất cả các lớp dẫn xuất từ lớp TclObject.

Tạo đối tượng TclObject: bằng cách dùng hàm new{}, người dùng sẽ tạo ra một đối tượng TclObject thông dịch, bộ thông dịch thực hiện việc khởi tạo đối tượng đó thông qua việc gọi hàm dựng init{} với các tham số nhận được từ người dùng. Sau đó NS sẽ tự động tạo ra một đối tượng biên dịch tương ứng, đối tượng ánh xạ này được tạo ra bởi hàm dựng của lớp TclObject cơ sở. Vì vậy để khởi tạo một đối tượng TclObject, trước tiên cần phải gọi hàm dựng của lớp cha trước khi thực hiện các khởi tạo đối tượng của lớp con. Hàm new{} trả về thẻ bài trỏ tới đối tượng được tạo ra.

Hủy các đối tượng TclObject: việc này nhằm xóa bỏ đối tượng thông dịch và đối tượng biên dịch ánh xạ tương ứng. Cũng giống như việc tạo đối tượng, khi hủy đối tượng phải gọi hàm hủy của lớp cha một cách tường minh ở câu lệnh cuối cùng trong hàm hủy của lớp con. Hàm hủy của đối tượng TclObject sẽ thực hiện gọi hàm delete_shadow{} để xóa bỏ đối tượng biên dịch tương ứng. Cuối cùng bộ thông dịch sẽ xóa bỏ đối tượng thông dịch

2.4.2 Kết hợp biến


Trong phần lớn các trường hợp, chúng ta không thể can thiệp trực tiếp vào các biến thành viên biên dịch và việc can thiệp tới các biến thông dịch qua mã thong dịch cũng rất hạn chế. Tuy nhiên, chúng ta có thể thiết lập nên sự kết hợp hai chiều: cả hai biến thành viên biên dịch và thông dịch cùng truy nhập tới một dữ liệu duy nhất, sự thay đổi giá trị của một trong hai biến thành viên sẽ làm thay đổi giá trị của biến thành viên còn lại. Cơ chế kết hợp này thiết lập bởi hàm dựng biên dịch khi đối tượng được khởi tạo.

NS hỗ trợ 5 loại dữ liệu khác nhau: kiểu thực, kiểu nguyên, kiểu logic, kiểu thời gian và kiểu dữ liệu giá trị băng thông (Kb, Mb..). Cú pháp để thực hiện việc gán dữ liệu cho các biến như sau



$object set realvar 1.2e3

$object set intvar 123

$object set bwvar 1.5mb

$object set timevar 1500m

$object set boolvar true

2.4.3 Theo dõi giá trị biến


Ngoài cơ chế kết hợp biến, TclObject còn hỗ trợ theo dõi giá trị của cả biến C++ và Tcl. Một biến khi được tạo ra trong C++ hoặc trong Tcl đều có thể thiết lập việc theo dõi giá trị của nó. Để theo dõi giá trị một biến ở mức Tcl, thì biến đó phải xuất hiện trong Tcl, điều đó có nghĩa là nó phải là một biến Tcl thuần túy hoặc là một biến kết hợp C++/Tcl. Ngoài ra, một đối tượng có biến thành viên được theo dõi giá trị cũng có thể yêu cầu việc theo dõi sử dụng hàm trace{} của đối tượng TclObject.Hàm trace{} có hai tham số đầu vào, tham số vào đầu tiên là tên của biến, tham số tùy chọn thứ hai chỉ ra đối tượng chịu trách nhiệm theo dõi giá trị của biến cần theo dõi, nếu đối tượng theo dõi này không được chỉ ra, thì đối tượng sở hữu biến sẽ chịu trách nhiệm theo dõi giá trị của biến.

Để một đối tượng TclObject có thể theo dõi được giá trị biến, nó phải mở rộng hàm C++ trace(), đây là một hàm ảo đã được định nghĩa trong lớp TclObject.


2.4.4 Hàm command: định nghĩa và cách gọi


Đối với mỗi đối tượng TclObject được tạo ra, NS thiết lập một hàm mẫu cmd{}, đóng vai trò như một giao tiếp để thực hiện các hàm của đối tượng biên dịch ánh xạ. Hàm cmd{} tự động gọi hàm command() của đối tượng biên dịch, và các tham số đầu vào của hàm cmd{} cho hàm command().

Người sử dụng có thể gọi hàm cmd{} theo hai cách: hoặc là gọi tường minh hàm và chỉ ra tác vụ mong muốn ở biến đầu vào thứ nhất, hoặc gọi theo cách ngầm định nếu tồn tại một hàm mẫu trùng tên với tác vụ mong muốn. Đa phần các kịch bản mô phỏng đều sử dụng cách gọi thứ hai,



Каталог: Hoc%20Tap -> Cong%20Nghe%20Wan
Hoc%20Tap -> Point to Point Protocol (ppp) ppp được xây dựng dựa trên nền tảng giao thức điều khiển truyền dữ liệu lớp cao (High-Level Data link Control (hdlc)) nó định ra các chuẩn cho việc truyền dữ liệu các giao diện dte và dce của mạng wan như V
Hoc%20Tap -> Cấu hình Application Port-Mapping với cbac mục tiêu: Cấu hình để router nhận ra các ứng dụng không sử dụng port chuẩn. Mô hình
Hoc%20Tap -> ĐẢng cộng sản việt nam đẢng ủy phưỜng 04
Hoc%20Tap -> CiR = Bc / Tc
Hoc%20Tap -> Mean command : ip ospf mtu-ignore Diagram : Problems
Hoc%20Tap -> R1# ip route 0 0 0 0 FastEthernet0/0 R2# show run
Cong%20Nghe%20Wan -> Câu hỏi về kết nối chi nhánh về Head Office dùng wan
Cong%20Nghe%20Wan -> 1/ Cáp đồng gshdsl
Cong%20Nghe%20Wan -> 1. xu hưỚng chuẩn hoá VÀ CẤu trúc giao thứC

tải về 0.59 Mb.

Chia sẻ với bạn bè của bạn:
1   2   3   4   5   6   7   8   9   ...   19




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương