1. Trang chủ
  2. » Giáo Dục - Đào Tạo

LUẬN văn báo cáo tìm HIỂU NGÔN NGỮ c và VIẾT một ỨNG DỤNG MINH họa

216 1 0

Đ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

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN KHOA CÔNG NGHỆ THÔNG TIN BỘ MÔN CÔNG NGHỆ PHẦN MỀM PHẠM VĂN VIỆT - TRƯƠNG LẬP VĨ TÌM HIỂU NGƠN NGỮ C# VÀ VIẾT MỘT ỨNG DỤNG MINH HỌA ĐỒ ÁN TỐT NGIỆP GIÁO VIÊN HƯỚNG DẪN NGUYỄN TẤN TRẦN MINH KHANG TP HCM 2002 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN KHOA CÔNG NGHỆ THÔNG TIN BỘ MÔN CÔNG NGHỆ PHẦN MỀM PHẠM VĂN VIỆT - TRƯƠNG LẬP VĨ TÌM HIỂU NGƠN NGỮ C# VÀ VIẾT MỘT ỨNG DỤNG MINH HỌA GIÁO VIÊN HƯỚNG DẪN NGUYỄN TẤN TRẦN MINH KHANG TP HCM 2002 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Lời cám ơn Để hồn tất đồ án này, trước tiên phải kể đến công sức thầy Nguyễn Tấn Trần Minh Khang Chúng em kính lời cảm ơn đến thầy tận tình hướng dẫn giúp đỡ thời gian thực đồ án Chúng em xin tỏ lòng biết ơn sâu sắc gia đình động viên, tạo điều kiện để thực tốt đồ án Xin cám ơn cha, mẹ, anh, chị, em! Chúng em xin chân thành cảm ơn đến thầy cô khoa Công nghệ thông tin trường Đại học Khoa học Tự nhiên Thành phố Hồ Chí Minh truyền đạt kiến thức, kinh nghiệm q báu cho chúng em q trình học tập trường Chúng em xin chân thành cảm ơn đến bạn bè giúp đỡ tài liệu, trao đổi học thuật thực đồ án Xin gởi lời cảm ơn đến bạn Hồ Ngọc Huy, Trần Thế Anh, Bùi Thanh Tuấn Thành phố Hồ Chí Minh, ngày 03 tháng năm 2002 Sinh viên Phạm Văn Việt Trương Lập Vĩ LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Mục lục Lời cám ơn .3 Mục lục Tóm tắt Phần Tìm hiểu ngơn ngữ C# .1 Chương C# Net Framework 1.1 Nền tảng NET 1.2 NET Framework .3 1.3 Biên dịch ngôn ngữ trung gian (MSIL) .4 1.4 Ngôn ngữ C# Chương Khởi đầu 2.1 Lớp, đối tượng kiểu .6 2.2 Phát triển “Hello World” Chương Những sở ngôn ngữ C# 12 3.1 Các kiểu 12 3.2 Biến 14 3.3 Biểu thức 16 3.4 Khoảng trắng 16 3.5 Câu lệnh 16 3.6 Toán tử .19 3.7 Tạo vùng tên 21 3.8 Chỉ thị tiền xử lý 22 Chương Lớp đối tượng .24 4.1 Định nghĩa lớp 24 4.2 Tạo đối tượng 25 4.3 Sử dụng thành viên tĩnh .27 4.4 Hủy đối tượng 29 4.5 Truyền tham số .30 4.6 Nạp chồng phương thức hàm dựng .32 4.7 Đóng gói liệu với property 33 Chương Thừa kế Đa hình 35 5.1 Đặc biệt hoá tổng quát hoá 35 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 5.2 Sự kế thừa .35 5.3 Đa hình .37 5.4 Lớp trừu tượng 38 5.5 Lớp gốc tất lớp: Object 39 5.6 Kiểu Boxing Unboxing .40 5.7 Lớp lồng 42 Chương Nạp chồng toán tử 44 6.1 Cách dùng từ khoá operator .44 6.2 Cách hổ trợ ngôn ngữ Net khác 44 6.3 Sự hữu ích toán tử .44 6.4 Các tốn tử logic hai ngơi 45 6.5 Toán tử so sánh 45 6.6 Toán tử chuyển đổi kiểu (ép kiểu) 45 Chương Cấu trúc 48 7.1 Định nghĩa cấu trúc 48 7.2 Cách tạo cấu trúc 49 Chương Giao diện 50 8.1 Cài đặt giao diện .50 8.2 Truy xuất phương thức giao diện 52 8.3 Nạp chồng phần cài đặt giao diện 54 8.4 Thực giao diện cách tường minh 55 Chương Array, Indexer, and Collection 58 9.1 Mảng (Array) 58 9.2 Câu lệnh foreach 59 9.3 Indexers 62 9.4 Các giao diện túi chứa 65 9.5 Array Lists 65 9.6 Hàng đợi 65 9.7 Stacks .66 9.8 Dictionary .66 Chương 10 Chuỗi .67 10.1 Tạo chuỗi 67 10.2 Phương thức ToString() 67 10.3 Thao tác chuỗi 68 10.4 Thao tác chuỗi động .70 Chương 11 Quản lý lỗi .72 11.1 Ném bắt biệt lệ 73 11.2 Đối tượng Exception 80 11.3 Các biệt lệ tự tạo 82 11.4 Ném biệt lệ lần 83 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Chương 12 Delegate Event 87 12.1 Delegate (ủy thác, ủy quyền) 87 12.2 Event (Sự kiện) 101 Chương 13 Lập trình với C# 109 13.1 Ứng dụng Windows với Windows Form 109 Chương 14 Truy cập liệu với ADO.NET 144 14.1 Cơ sở liệu ngôn ngữ truy vấn SQL 144 14.2 Một số loại kết nối sử dụng 144 14.3 Kiến trúc ADO.NET 145 14.4 Mơ hình đối tượng ADO.NET .146 14.5 Trình cung cấp liệu (.NET Data Providers) 148 14.6 Khởi với ADO.NET 148 14.7 Sử dụng trình cung cấp liệu quản lý 151 14.8 Làm việc với điều khiển kết buộc liệu .152 14.9 Thay đổi ghi sở liệu 161 Chương 15 Ứng dụng Web với Web Forms 173 1.1 Tìm hiểu Web Forms 173 15.1 Các kiện Web Forms 174 15.2 Hiển thị chuỗi lên trang 175 15.3 Điều khiển xác nhận hợp 178 15.4 Một số ví dụ mẫu minh họa 179 Chương 16 Các dịch vụ Web 192 Chương 17 Assemblies Versioning 196 17.1 Tập tin PE 196 17.2 Metadata .196 17.3 Ranh giới an ninh 196 17.4 Số hiệu phiên (Versioning) 196 17.5 Manifest 196 17.6 Đa Module Assembly 197 17.7 Assembly nội (private assembly) 198 17.8 Assembly chia sẻ (shared assembly) 198 Chương 18 Attributes Reflection 200 18.1 Attributes 200 18.2 Attribute mặc định (intrinsic attributes) .200 18.3 Attribute lập trình viên tạo 201 18.4 Reflection .203 Chương 19 Marshaling Remoting .204 19.1 Miền Ứng Dụng (Application Domains) .204 19.2 Context 206 19.3 Remoting 208 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Chương 20 Thread Sự Đồng Bộ 215 20.1 Thread 215 20.2 Đồng hóa (Synchronization) 216 20.3 Race condition DeadLock .221 Chương 21 Luồng liệu 223 21.1 Tập tin thư mục .223 21.2 Đọc ghi liệu 230 21.3 Bất đồng nhập xuất 235 21.4 Serialization 238 21.5 Isolate Storage 244 Chương 22 Lập trình NET COM .246 22.1 P/Invoke .246 22.2 Con trỏ 248 Phần Xây dựng ứng dụng minh họa 250 Chương 23 Website dạy học ngôn ngữ C# 251 23.1 Hiện trạng yêu cầu 251 23.2 Phân tích hướng đối tượng 258 23.3 Thiết kế hướng đối tượng 262 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Tóm tắt Đề tài tập trung tìm hiểu tồn khái niệm liên quan đến ngơn ngữ C# Bởi C# Microsoft phát triển thành phần khung ứng dụng NET Framework hướng Internet nên đề tài bao gồm hai phần sau: Phần 1: Tìm hiểu ngơn ngữ C# Việc tìm hiểu bao gồm kiến thức tảng công nghệ NET Framework, chuẩn bị cho khái niệm liên quan C# NET Framework Sau tìm hiểu cú pháp ngơn ngữ này, bao gồm tồn tập lệnh, từ khóa, khái niệm lập trình hướng đối tượng theo C#, hỗ trợ lập trình hướng component Sau cách lập trình C# với ứng dụng Window cho máy để bàn C# với công nghệ đại ASP.NET ADO.NET, XML cho lập trình Web Phần 2: Xây dựng ứng dụng Phần báo cáo ứng dụng minh họa cho việc tìm hiểu Tên ứng dụng Xây dựng Website dạy học C# Đây ứng dụng Web cài đặt ngơn ngữ C# ASP.NET Trong ASP.NET dùng để xây dựng giao diện tương tác với người dùng; cịn C# ngơn ngữ lập trình bên Ứng dụng có thao tác sở liệu (Microsoft SQL Server) thơng quan mơ hình ADO.NET LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Phần Tìm hiểu ngơn ngữ C# LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com C# Net Framework Gvhd: Nguyễn Tấn Trần Minh Khang Chương C# Net Framework Mục tiêu C# cung cấp ngơn ngữ lập trình đơn giản, an toàn, đại, hướng đối tượng, đặt trọng tâm vào Internet, có khả thực thi cao cho môi trường NET C# ngôn ngữ mới, tích hợp tinh hoa ba thập kỷ phát triển ngơn ngữ lập trình Ta dể dàng thầy C# có đặc trưng quen thuộc Java, C++, Visual Basic, … Đề tài đặt trọng tâm giới thiệu ngôn ngữ C# cách dùng cơng cụ lập trình tảng NET Với ngôn ngữ C++, học ta khơng cần quan tâm đến mơi trường thực thi Với ngôn ngữ C#, ta học để tạo ứng dụng NET, lơ ý bỏ lỡ quan điểm ngơn ngữ Do đó, đề tài xét C# tập trung ngữ cảnh cụ thể tảng NET Microsoft ứng dụng máy tính để bàn ứng dụng Internet Chương trình bày chung hai phần ngôn ngữ C# tảng NET, bao gồm khung ứng dụng NET (.NET Framework) 1.1 Nền tảng NET Khi Microsoft công bố C# vào tháng năm 2000, việc khánh thành phần số nhiều kiện mà tảng Net công công bố Nền tảng Net bô khung phát triển ứng dụng mới, cung cấp giao diện lập trình ứng dụng (Application Programming Interface - API) mẽ cho dịch vụ hệ điều hành Windows, cụ thể Windows 2000, mang lại nhiều kỹ thuật khác bật Microsoft suốt từ năm 90 Trong số có dịch vụ COM+, công nghệ ASP, XML thiết kế hướng đối tượng, hỗ trợ giao thức dịch vụ web SOAP, WSDL UDDL với trọng tâm Internet, tất tích hợp kiến trúc DNA Nền tảng NET bao gồm bốn nhóm sau: Một tập ngôn ngữ, bao gồm C# Visual Basic Net; tập công cụ phát triển bao gồm Visual Studio Net; tập đầy đủ thư viện phục vụ cho việc xây dựng ứng dụng web, dịch vụ web ứng dụng Windows; có CLR - Common Language Runtime: (ngơn ngữ thực thi dùng chung) để thực thi đối tượng xây dựng bô khung Một tập Server Xí nghiệp Net SQL Server 2000 Exchange 2000, BizTalk 2000, … chúng cung cấp chức cho việc lưu trữ liệu quan hệ, thư điện tử, thương mại điện tử B2B, … LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Các dịch vụ Web { } Gvhd: Nguyễn Tấn Trần Minh Khang if(disposing && components != null) { components.Dispose(); } base.Dispose(disposing); #endregion //4 hàm toán học dịch vụ Web, phương thức //ta cần khai báo thuộc tính [WebMethod] để //phương thức dành cho dịch vụ Web [WebMethod] public float Add(float a, float b) { return a + b; } [WebMethod] public float Subtract(float a, float b) { return a - b; } [WebMethod] public float Multiply(float a, float b) { return a * b; } } [WebMethod] public float Divide(float a, float b) { if (b==0) return -1; return a / b; } } Bây viết mã thực thi cho trang Web Trang Web gọi hàm dịch vụ tương ứng với phép cộng, trừ, nhân, chia Sau mã trang Web: float operand1 = 0; float operand2 = 0; public void Submit_Click(Object sender, EventArgs E) { try { operand1 = float.Parse(Operand1.Text); operand2 = float.Parse(Operand2.Text); } catch (Exception) { /* bỏ qua lỗi có */ } 194 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Các dịch vụ Web Gvhd: Nguyễn Tấn Trần Minh Khang //tạo đối tượng dịch vụ MathService để truy cập đến //các hàm thành viên chúng MathService service = new MathService(); switch (((Control)sender).ID) { case "Add" : Result.Text = "Result = " + service.Add(operand1, operand2).ToString(); break; case "Subtract" : Result.Text = "Result = service.Subtract(operand1, operand2).ToString(); break; " + case "Multiply" : Result.Text = "Result = service.Multiply(operand1, operand2).ToString(); break; " + case "Divide" : Result.Text = "Result = service.Divide(operand1, operand2).ToString(); break; " + } } Using a Simple Math Service Operand 1: Operand 2:

Text="5" runat="server"

195 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Assemblies Versioning Gvhd: Nguyễn Tấn Trần Minh Khang Chương 17 Assemblies Versioning Đơn vị lập trình NET Assembly Một Assembly tập hợp tập tin mà người sử dụng, họ thấy tập tin DLL hay EXE .NET định nghĩa Assembly đơn vị có khả tái sử dụng (re-use), mang số hiệu phiên (versioning), bảo mật (security) cuối khả triển khai (deployment) Asssembly chứa đựng nhiều thành phần khác ngồi mã chương trình ứng dụng tài ngun (resource, ví dụ tập tin GIF), thông tin mô tả kiểu (type definition), siêu liệu (metadata) mã liệu 17.1 Tập tin PE Assembly lưu trữ dĩa từ theo dạng thức tập tin Portable Executable (PE) Dạng thức tập tin PE NET giống tập tin PE bình thường Windows NT Dạng thức PE cài đặt thành dạng thức tập tin DLL EXE Về mặt logic, assembly chứa đựng hay nhiều module Mỗi module tổ chức thành DLL đồng thời module cấu thành assembly Các module tự thân chúng chạy được, module phải kết hợp với thành assembly làm việc hữu ích 17.2 Metadata Metadata thông tin lưu trữ bên assembly với mục đích để mơ tả kiểu liệu, phương thức thông tin khác assembly Do có chứa metadata nên assembly có khả tự mô tả 17.3 Ranh giới an ninh Assembly tạo ranh giới an ninh (security boundary) Các kiểu liệu định nghĩa bên assembly bị giới hạn phạm vi ranh giới assembly Để sử dụng chung kiểu liệu assembly, cần phải định rõ tham chiếu (reference) IDE dòng lệnh 17.4 Số hiệu phiên (Versioning) Mỗi assembly có số hiệu phiên riêng Một “phiên bản” ám toàn nội dung assembly bao gồm kiểu liệu resource 17.5 Manifest Manifest thành phần metadata Manifest mơ tả assembly chứa gì, ví dụ như: thơng tin nhận dạng (tên, phiên bản), danh sách kiểu 196 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Assemblies Versioning Gvhd: Nguyễn Tấn Trần Minh Khang liệu, danh sách resource, danh sách assembly khác assembly tham chiếu đến, … 17.5.1 Các module manifest Một assembly chứa nhiều module, manifest assembly cịn chứa mã băm (hash code) module lắp ghép thành assembly để bảo đảm thực thi, nạp module phiên Chỉ cần thay đổi rất nhỏ module mã băm thay đổi 17.5.2 Manifest module Mỗi module chứa riêng phần manifest mơ tả cho giống assembly chứa manifest mô tả cho assembly 17.5.3 Các assembly cần tham chiếu Manifest assembly chứa tham chiếu đến assembly khác Mỗi tham chiếu chứa đựng tên, phiên bản, văn hóa (culture), nguồn gốc (originator),… Thơng tin nguồn gốc chữ ký số (digital signature) lập trình viên hay cơng ty nơi cung cấp assembly mà assembly tham chiếu đến Văn hóa đối tượng chứa thơng tin ngơn ngữ, cách trình bày quốc gia Ví dụ cách thể ngày tháng: D/M/Y hay M-D-Y 17.6 Đa Module Assembly Một assembly đơn module assembly gồm module, module tập tin EXE DLL Manifest cho assembly đơn module nhúng vào module Một assembly đa module assembly bao gồm nhiều tập tin (ít tập tin EXE DLL) Manifest cho assembly đa module lưu trữ thành tập tin riêng biệt nhúng vào module 17.6.1 Lợi ích đa module assembly Nếu dự án có nhiều lập trình viên mà dự án xây dựng assembly, việc kiểm lỗi, biên dịch dự án,… “ác mộng” tất lập trình viên phải hợp tác với nhau, phải kiểm tra phiên bản, phải đồng hóa mã nguồn,… Nếu ứng dụng lớn xây dựng nhiều assembly, cần cập nhật (update) để sửa lỗi chẳng hạn, cần cập nhật / vài assembly mà Nếu ứng dụng lớn tổ chức từ nhiều assembly, có phần mã chương trình thường sử dụng / quan trọng thuộc vài assembly nạp vào nhớ, làm giảm bớt chi phí nhớ, tăng hiệu suất hệ thống 197 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Assemblies Versioning Gvhd: Nguyễn Tấn Trần Minh Khang 17.7 Assembly nội (private assembly) Có loại Assembly: nội (private) chia sẻ (shared) Assembly nội dự định dùng cho ứng dụng, cịn assembly chia sẻ ngược lại, dùng cho nhiều ứng dụng Các assembly nội ghi dĩa từ thành tập tin EXE DLL thư mục với assembly thư mục thư mục chứa assembly Để thực thi máy khác cần chép cấu trúc thư mục đủ, không cần phải đăng ký với Registry 17.8 Assembly chia sẻ (shared assembly) Khi viết assembly control chẳng hạn, tác giả control có ý định chia sẻ cho lập trình viên khác anh / chị ta phải xây dựng assembly đáp ứng u cầu sau: • Assembly phải có tên “mạnh” (strong name) Tên mạnh có nghĩa chuỗi biểu diễn tên phải (globally unique) • Phải có thơng tin phiên để tránh tượng phiên “dẫm chân lên nhau” • Để chia sẻ assembly, assembly phải đặt vào nơi gọi Global Assembly Cache (GAC) Đây nơi quy định Common Language Runtime (CLR) dùng để chứa assembly chia sẻ 17.8.1 Chấm dứt “địa ngục DLL” Giả sử bạn cài đặt ứng dụng A lên máy chạy tốt Sau bạn cài đặt ứng dụng B, nhiên ứng dụng A khơng chịu hoạt động Sau q trình tìm hiểu, cuối nguyên nhân ứng dụng B cài phiên khác đè lên tập tin DLL mà ứng dụng A sử dụng Tình gọi “địa ngục DLL” Sự đời assembly chấm dứt tình trạng 17.8.2 Phiên Assembly chia sẻ NET định vị tên (unique) phiên Phiên biểu diễn số phân cách dấu ‘:’ ví dụ 1:2:6:1246 Số Số Số Số mô tả phiên (major version) thứ mơ tả phiên phụ (minor version) thứ mô tả thứ tự xây dựng (build) cuối mô tả lần xem xét cập nhật (revision) để sửa lỗi 198 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Assemblies Versioning Gvhd: Nguyễn Tấn Trần Minh Khang 17.8.3 Tên mạnh Một tên mạnh chuỗi ký tự hexa mang thuộc tính toàn cầu (globally unique) Ngoài chuỗi cịn mã hóa thuật tốn khóa công khai để bảo đảm assembly không bị thay đổi vơ tình hay cố ý Để tạo tên mạnh, cặp khóa cơng khai-bí mật tạo cho assembly Một mã băm (hash code) tạo từ tên, nội dung tập tin bên assembly chuỗi biểu diễn khóa cơng khai Sau mã băm mã hóa khóa bí mật, kết mã hóa ghi vào manifest Quá trình gọi ký xác nhận vào assembly (signing the assembly) Khi assembly CLR nạp vào nhớ, CLR dùng khóa cơng khai manifest giải mã mã băm để xác định xem assembly có bị thay đổi không 17.8.4 Global Assembly Cache (GAC) Sau tạo tên mạnh ghi vào assembly, việc lại để thực chia sẻ assembly đặt assembly vào thư mục GAC Đó thư mục đặc biệt dùng để chứa assembly chia sẻ Trên Windows, thư mục \WinNT\assembly Mã hóa khóa cơng khai – bí mật: thuật tốn mã hóa đặc biệt, dùng thuật tốn riêng tạo khóa, khóa phổ biến rộng rãi nên gọi khóa cơng khai, khóa cịn lại chủ nhân cất nơi an tồn nên gọi bí mật Sau dùng thuật tốn mã hóa để mã hóa liệu Một liệu bị mã hóa khóa liệu giải mã khóa ngược lại 199 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Attributes Reflection Gvhd: Nguyễn Tấn Trần Minh Khang Chương 18 Attributes Reflection Xin nhắc lại ứng dụng NET bao gồm mã chương trình, liệu, metadata Metadata thơng tin liệu mà ứng dụng sử dụng kiểu liệu, mã thực thi, assembly,… Attributes chế để tạo metadata Ví dụ thị cho trình biên dịch, liệu khác liên quan đến liệu, phương thức, lớp, … Reflection trình ứng dụng đọc lại metadata để có cách thể hiện, ứng xử thích hợp cho người dùng 18.1 Attributes Một attribute đối tượng, đối tượng chứa mẩu liệu, mà lập trình viên muốn đính kèm với phần tử (element) ứng dụng Phần tử (element) mà lập trình viên muốn đính kèm attribute gọi mục tiêu (target) attribute Ví dụ attribute: [NoIDispatch] đính kèm với lớp hay giao diện để nói lớp đích (target class) nên thừa kế từ giao diện IUnknown thừa kế từ IDispatch 18.2 Attribute mặc định (intrinsic attributes) Có loại attribute: • Attribute mặc định: attribute CLR cung cấp sẵn • Attribute lập trình viên định nghĩa (custom attribute) 18.2.1 Đích Attribute Mỗi attribute ảng hưởng đến đích (target) mà khai báo Đích lớp, giao diện, phương thức … Bảng sau liệt kê tất đích Bảng 18-1 Các đích attribute Loại Ý nghĩa All Áp dụng cho tất cà loại bên Assembly Áp dụng cho assembly Class Áp dụng cho thể lớp ClassMembers Áp dụng cho loại từ sau hàng trở 200 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Attributes Reflection Gvhd: Nguyễn Tấn Trần Minh Khang Constructor Áp dụng với hàm dựng Delegate Áp dụng cho delegate Enum Áp dụng cho kiểu liệt kê Event Áp dụng cho kiện Field Áp dụng cho biến thành viên (tĩnh lẫn không tĩnh) Interface Áp dụng cho giao diện Method Áp dụng cho phương thức Module Áp dụng cho module Parameter Áp dụng cho tham số Property Áp dụng cho property ReturnValue Áp dụng cho trị trả Struct Áp dụng cho cấu trúc 18.2.2 Áp dụng Attribute Lập trình viên áp dụng attribute lên mục tiêu cách đặt attribute ngoặc vng [] liền trước mục tiêu Ví dụ attribute “Assembly” áp dụng: [assembly: AssemblyDelaySign(false)] [assembly: AssemblyKeyFile(“keyfile.snk”)] Cách sau tương đương với cách trên: [assembly: AssemblyDelaySign(false), assembly: AssemblyKeyFile(“keyfile.snk”)] Attribute thường dùng lập trình C# “Serializable” [serializable] class MySerClass Attribute báo cho compiler biết lớp MySerClass cần bảo đảm việc ghi nội dung, trạng thát xuống dĩa từ hay truyền qua mạng 18.3 Attribute lập trình viên tạo Lập trình viên hoàn toàn tự việc tạo attribute riêng đem sử dụng chúng vào nơi cảm thấy thích hợp 18.3.1 Khai báo Attribute tự tạo Đầu tiên thừa kế lớp từ lớp System.Attribute: Public class XYZ : System.Attribute Sau báo cho compiler biết attribute đem áp dụng lên mục tiêu [AttributeUsage(AttributeTargets.Class | AttributeTargets.Constructor | AttributeTargets.Field | AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = true)] 201 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Attributes Reflection Gvhd: Nguyễn Tấn Trần Minh Khang Attribute “AttributeUsage” có mục tiêu áp dụng Attribute khác: gọi meta-attribute 18.3.2 Đặt tên attribute Lập trình viên hồn tồn tự việc đặt tên cho attribute Tuy nhiên, compiler NET có thêm khả tự nối thêm chuỗi “Attribute” vào tên Điều có nghĩa lập trình viên định nghĩa attribute có tên “MyBugFix” tìm kiếm truy xuất attribute trên, lập trình viên viết tên attribute: “MyBugFix” “MyBugFixAttribute” Nếu attribute có tên “MyBugFixAttribute” lập trình viên ghi tên attribute “MyBugFix” “MyBugFixAttribute” Ví dụ: [MyBugFix(123, "Jesse Liberty", "01/01/05", Comment="Off by one")] 18.3.3 Khởi tạo Attribute Mỗi attribute phải có contructor Attribute nhận kiểu đối số: kiểu vị trí (positional) kiểu tên (named) Trong ví dụ MyBugFix phần trước, phần tên ngày tháng kiểu vị trí, phần ghi (comment) kiểu tên Các đối số kiểu vị trí phải truyền vào contructor theo thứ tự khai báo Ví dụ: public BugFixAttribute(int bugID, string programmer, string date) { this.bugID = bugID; this.programmer = programmer; this.date = date; } Đối số kiểu tên cài đặt properties: public string Comment { get { return comment; } set { comment = value; } } 18.3.4 Sử dụng Attribute Một định nghĩa attribute, lập trình viên sử dụng cách đặt trước mục tiêu (target) Ví dụ: [BugFixAttribute(121,"Jesse Liberty","01/03/05")] BugFixAttribute(107,"Jesse Liberty","01/04/05", Comment="Fixed off by one errors")] public class MyMath Ví dụ áp dụng attribute MyBugFix vào lớp MyMath 202 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Attributes Reflection Gvhd: Nguyễn Tấn Trần Minh Khang 18.4 Reflection Để cho việc lưu attribute metadata có ích, cần phải có chế truy xuất chúng vào lúc chạy Các lớp vùng tên (namespace) Reflection, với lớp System.Type System.TypeReference, cung cấp hỗ trợ truy xuất metadata Reflection khái niệm chung cho thao tác thao tác sau đây: • Xem xét metadata • Tìm hiểu kiểu liệu (type discovery): lớp, interface, phương thức, đối số phương thức, properties, event, field, … • Nối kết trễ phương thức properties (late binding to methods and properties) • Tạo kiểu liệu lúc thực thi Lập trình viên định nghĩa assembly lúc chạy, lưu xuống dĩa từ để dùng lại 203 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Marshaling Remoting Gvhd: Nguyễn Tấn Trần Minh Khang Chương 19 Marshaling Remoting Ngày nay, ứng dụng khơng cịn đơn gồm module, thực thi cần chạy process mà tập hợp nhiều thành phần (component) phức tạp Các thành phần khơng phân cách với ranh giới process mà cịn phân cách với qua ranh giới máy - mạng - máy Tiến trình di chuyển đối tượng vượt qua ranh giới (process, máy, …) gọi Remoting Tiến trình chuẩn bị để đối tượng thực remoting gọi Marshaling Giả sử đối tượng A nằm máy X muốn sử dụng dịch vụ đối tượng B nằm máy Y Để phục vụ đối tượng A, đối tượng B chuyển cho A đối tượng proxy Những yêu cầu từ đối tượng A proxy chuyển cho B, kết trả lời B gởi đến proxy, proxy gởi lại cho đối tượng A Giữa đối tượng A đối tượng B có nhiều đối tượng sink, cơng việc đối tượng sink áp đặt an ninh lên kênh liên lạc đối tượng Các thông điệp chuyển tải A B đối tượng channel Đối tượng channel lại yêu cầu giúp đỡ đối tượng formatter Công việc formatter định dạng lại thơng điệp để phía hiểu (ví dụ chuyển mã hóa endian dãy byte) 19.1 Miền Ứng Dụng (Application Domains) Theo lý thuyết, process ứng dụng thực thi (đang chạy) Mỗi application thực thi process riêng Nếu máy có Word, Excel, Visual Studio tương ứng máy có process Bên process, NET chia nhỏ thành phần nhỏ gọi miền ứng dụng (Application Domains viết tắt app domains) Có thể xem miền ứng dụng process “nhẹ cân”, miền ứng dụng hành xử y process điểm khác biệt sử dụng tài ngun process Các miền ứng dụng process khởi động (started) hay bị treo (halted) độc lập với Miền ứng dụng cung cấp khả chịu lỗi (fault tolerance); khởi động đối tượng miền ứng dụng khác với miền ứng dụng đối tượng vừa khởi động gây lỗi, làm crash miền ứng dụng khơng làm crash tồn ứng dụng Mỗi process lúc bắt đầu thực thi có miền ứng dụng ban đầu (initial app domain) tạo thêm nhiều miền ứng dụng khác lập trình viên muốn Thơng thường, ứng dụng cần miền ứng dụng đủ Tuy nhiên, ứng dụng lớn cần sử dụng thư viện người khác viết mà thư viện khơng 204 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Marshaling Remoting Gvhd: Nguyễn Tấn Trần Minh Khang tin cậy cần tạo miền ứng dụng khác dùng để chứa thư viện khơng tin cập đó, tách thư viện khỏi miền ứng dụng để lập lỗi, lỗi xảy khơng làm crash ứng dụng Miền ứng dụng khác với thread Một thread chạy bên miền ứng dụng Trong miền ứng dụng tồn nhiều thread 19.1.1 Marshaling vượt qua biên miền ứng dụng Marshaling trình chuẩn bị đối tượng để di chuyển qua ranh giới Marshaling tiến hành theo cách: giá trị (by value) tham chiếu (by reference) • Khi đối tượng marshaling giá trị, đối tượng tạo truyền đến nơi nhận Những thay đổi không làm thay đổi đối tượng gốc ban đầu • Khi đối tượng marshaling tham chiếu, đối tượng đặc biệt gọi proxy gởi đến nơi nhận Những thay đổi, lời gọi hàm đối tượng proxy chuyển cho đối tượng ban đầu xử lý 19.1.1.1 Tìm hiểu marshaling proxy Khi marshaling đối tượng reference, NET CLR cung cấp cho đối tượng thực lời gọi từ xa đối tượng proxy “trong suốt” (transparent proxy - TP) Công việc đối tượng TP nhận tất thơng tin liên quan đến việc gọi hàm (giá trị trả về, thông số nhập, …) từ stack đóng gói vào đối tượng riêng mà đối tượng cài đặt giao diện IMessage Sau đối tượng IMessage trao cho đối tượng RealProxy RealProxy lớp sở trừu tượng (abstract base class) mà từ đối tượng proxy thừa kế Lập trình viên tự tạo đối tượng proxy thừa kế từ RealProxy Đối tượng proxy mặc định hệ thống trao IMessage cho chuỗi đối tượng sink Số lượng sink phụ thuộc vào số lượng sách bảo an (policy) mà nhà quản trị muốn trì, nhiên đối tượng sink cuối đối tượng đặt IMessage vào Channel Channel chia thành channel phía client channel phía server, cơng việc channel di chuyển thông điệp (message) vượt qua ranh giới (boundary) Channel chịu trách nhiệm tìm hiểu nghi thức truyền thông (transport protocol) Định dạng thật thông điệp di chuyển qua ranh giới quản lý formatter Khung ứng dụng (framework) NET cung cấp formatter: • Simple Object Access Protocol (SOAP) dùng cho HTTP channel • Binary dùng cho TCP/IP channel Lập trình viên tạo đối tượng formatter riêng muốn tạo channel riêng 205 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Marshaling Remoting Gvhd: Nguyễn Tấn Trần Minh Khang Một message vượt qua ranh giới, nhận channel formatter phía server Channel phía server tái tạo lại đối tượng IMessage, sau channel phía server trao đối tượng IMessage cho hay nhiều đối tượng sink phía server Đối tượng sink cuối chuỗi sink đối tượng StackBuilder, công việc StackBuilder nhận IMessage tái tạo lại stack frame để thực lời gọi hàm 19.1.1.2 Chỉ định phương pháp Marshaling Một đối tượng bình thường hồn tồn khơng có khả marshaling Để marshaling đối tượng giá trị (by value), cần đánh dấu attribute Serializable lúc định nghĩa đối tượng [Serializable] public class Point Để marshaling đối tượng tham chiếu (by reference), đối tượng cần thừa kế từ MarshalByRefObject public class Shape : MarshalByRefObject 19.2 Context Miền ứng dụng (app domain) đến lượt lại chia thành context Context xem ranh giới mà đối tượng bên context có quy tắc sử dụng (usage rules) Các quy tắc sử dụng như: đồng hóa giao dịch (synchronization transaction), … 19.2.1 Đối tượng loại Context-Bound Context-Agile Các đối tượng Context-Bound Context-Agile Nếu đối tượng Context-Bound, chúng tồn context riêng, giao tiếp lẫn nhau, thông điệp chúng marshaling để vượt qua biên context Nếu đối tượng Context-Agile, chúng hoạt động bên context đối tượng yêu cầu (calling) Do đó, đối tượng A triệu gọi phương thức đối tượng B, phương thức B thực thi bên context A Vì việc marshaling không cần thiết Giả sử đối tượng A cần giao tiếp với sở liệu, giả sử đối tượng A có thiết lập giao dịch (transaction) Do A cần tạo context Tất phương thức A thực thi context transaction Giả sử có đối tượng B khác thuộc loại context-agile Giả sử đối tượng A trao tham chiếu sở liệu cho đối tượng B triệu gọi phương thức X B Lại giả sử phương thức X B mà A triệu gọi lại gọi phương thức Y khác A Bởi B thuộc loại context-agile phương thức X B thực thi context đối tượng A Vì context A có bảo vệ giao 206 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Marshaling Remoting Gvhd: Nguyễn Tấn Trần Minh Khang dịch nên A có roll-back sở liệu thay đổi mà phương thức X B lên sở liệu roll-back Giả sử đối tượng C triệu gọi phương thức Z B, phương thức Z có thực thay đổi sở liệu, B thuộc loại Context-Agile nên Z thực thi context C Vì thay đổi mà Z thực lên sở liệu roll-back Nếu B thuộc loại Context-Bound, A tạo B, context B thừa kế từ context A Khi C triệu gọi phương thức Z B, lời triệu gọi marshaling tử context C đến context B thực context B (thừa kế từ A) Do phương thức Z thực thi bảo vệ transaction Những thay đổi mà Z thực lên sở liệu rooll-back Một đối tượng có lựa chọn Context: • Context-Agile • Context-Bound khơng định attribute Thực cách thừa kế từ ContextBoundObject Phương thức đối tượng thuộc loại thực thi Context thừa kế từ Context đối tượng tạo • Context-Bound có định attribute Context Các phương thức hoạt động Context tạo riêng 19.2.2 Marshaling vượt qua ranh giới Context Khi truy cập đối tượng Context-Agile miền ứng dụng không cần proxy Khi đối tượng A context truy cập đối tượng ContextBound B context khác, đối tượng A truy cập đối tượng B thông qua proxy B Đối tượng marshaling khác vượt qua ranh giới context phụ thuộc vào cách tạo ra: • Đối tượng bình thường khơng có marshaling; bên miền ứng dụng đối tượng thuộc loại context-agile • Đối tượng có đánh dấu attribute Serializable thuộc loại context-agile marshaling giá trị (by value) vượt qua ranh giới miền ứng dụng • Đối tượng thừa kế từ MarshalByRefObject thuộc loại context-agile marshaling tham chiếu (by reference) vượt qua ranh giới miền ứng dụng • Đối tượng thừa kế từ ContextBoundObject marshaling tham chiếu vượt qua ranh gới miền ứng dụng ranh giới context 207 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Marshaling Remoting Gvhd: Nguyễn Tấn Trần Minh Khang 19.3 Remoting Cùng với việc marshaling đối tượng vượt qua ranh giới context miền ứng dụng, đối tượng marshaling vượt qua ranh giới process chí qua ranh giới máy - mạng - máy Khi đối tượng marshaling vượt qua ranh giới process hay máy - mạng – máy, gọi Remoted 19.3.1 Tìm hiểu kiểu liệu phía Server Có kiểu đối tượng phía server phục vụ cho việc Remoting NET: tiếng (well-known) client kích hoạt (client activated) Kênh liên lạc với đối tượng tiếng thiết lập client gởi thông điệp (message) Kênh liên lạc khơng giữ thường trực trường hợp đối tượng client kích hoạt Đối tượng tiếng chia thành loại nhỏ: singleton single-call • Đối tượng tiếng kiểu singleton: tất thông điệp từ client gởi đến đối tượng phân phối (dispatch) cho đối tượng chạy server Đối tượng tạo server khởi động nằm chờ server để phục vụ cho client Vì đối tượng loại phải có contructor khơng tham số • Đối tượng tiếng kiểu single-call: thông điệp từ client gởi giải đối tượng Mơ hình thường dùng để cân tải hệ thống Đối tượng client kích hoạt thường sử dụng lập trình viên có cơng việc tạo server riêng phục vụ cho việc lập trình, đối tượng client kích hoạt trì kết nối với client toàn yêu cầu client đáp ứng 19.3.2 Mô tả server Interface Sau ví dụ xây dựng lớp máy tính (calculator) với chức Tạo tập tin ICalc.cs với nội dung namespace Programming_CSharp using System; public interface ICalc { double Add(double x, double y); double Sub(double x, double y); double Mult(double x, double y); double Div(double x, double y); } Tạo project kiểu C# Class Library, mở menu Build, lệnh Build Kết tập tin Icalc.DLL 208 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ... c? ?o ứng dụng minh họa cho vi? ?c tìm hiểu Tên ứng dụng Xây dựng Website dạy h? ?c C# Đây ứng dụng Web c? ?i đặt ngơn ngữ C# ASP.NET Trong ASP.NET dùng để xây dựng giao diện tương t? ?c với người dùng; c? ??n... Basic, … Đề tài đặt trọng tâm giới thiệu ngôn ngữ C# c? ?ch dùng c? ?ng c? ?? lập trình tảng NET Với ngơn ngữ C+ +, h? ?c ta không c? ??n quan tâm đến môi trường th? ?c thi Với ngôn ngữ C# , ta h? ?c để tạo ứng dụng. .. viện ph? ?c vụ cho vi? ?c xây dựng ứng dụng web, dịch vụ web ứng dụng Windows; c? ??n c? ? CLR - Common Language Runtime: (ngôn ngữ th? ?c thi dùng chung) để th? ?c thi đối tượng xây dựng bơ khung Một tập

Ngày đăng: 01/11/2022, 16:01

Xem thêm:

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

TÀI LIỆU LIÊN QUAN

w