+ Attributes là một thành phần thêm vào được dùng để khai báo thêm thông tin về các lớp, phương thức, thuộc tính, kiểu … + Attributes có thể được áp dụng nên các phần tử khác nhau của ch
Trang 1BỘ MÔN DUYỆT
Chủ nhiệm Bộ môn
Phan Nguyên Hải
ĐỀ CƯƠNG CHI TIẾT BÀI
GIẢNG
(Dùng cho 45 tiết giảng)
Học phần: Lập trình nâng cao – DotNet
Nhóm môn học: Cơ sở ngành (Kỹ thuật lập trình)
Bộ môn: Công nghệ phần mềmKhoa (Viện): Công nghệ Thông tin
Thay mặt nhóm môn
học
Phan Việt Anh
Thông tin về nhóm môn học
TT Họ tên giáo viên Học hàm Học vị Đơn vị công tác (Bộ môn)
Thời gian, địa điểm làm việc: Bộ môn Công nghệ phần mềm, khoa Công nghệThông tin
Điện thoại, email: 069 515 338 bmcnpmmta@yahoo.com
Bài giảng 1: Sử dụng Attributes trong lập trình NET
- Hình thức tổ chức dạy học: Lý thuyết, thảo luận, tự học, tự nghiên cứu
- Thời gian: Lý thuyết, thảo luận: 3 tiết; Tự học, tự nghiên cứu: 1 tiết
- Địa điểm: Giảng đường do P2 phân công.
- Nội dung chính:
Sử dụng Attributes trong lập trình NET
1.1 Tìm hiểu về Attribute
Trang 2+ Attributes là một thành phần thêm vào được dùng để khai báo thêm thông tin
về các lớp, phương thức, thuộc tính, kiểu …
+ Attributes có thể được áp dụng nên các phần tử khác nhau của chương trình Các phần tử đó bao gồm: assemblies, modules, classes, structs, enums,
constructors, methods, properties, fields, return values, và delegates
- Có 2 loại Attributes là
+ Built – in attributes (attributes của hệ thống) là những attributes định nghĩa trước trong Net Framework, một vài attributes được định nghĩa trước là
STAThread, DLLImport, Conditional, Obsolete
+ Custom attributes (attributes do người dùng định nghĩa) Tên gọi của nó cũng cho biết attributes này do người dùng tạo ra Khi gặp trường hợp các built – in attributes không đáp ứng đủ yêu cầu của người lập trình thì các custom attributes
có thể được tạo ra để giải quyết vấn đề này
+ Để áp dụng một attribute cho một phần tử ta sử dụng dấu ngoặc vuông bên trong là tên attribute đi kèm với các tham số đi kèm nếu có, được đứng trước phần tử được áp dụng
+ Một số built – in attributes thông dụng: Conditional, DllImport, Obsolete
- Conditional
+ Đánh dấu bất kì phương thức với attribute Conditional sẽ ngăn ngừa trình biên dịch từ việc biên dịch phương thức đó hay bất kì câu lệnh mà tham khảo đến nó nếu tên biểu tượng không được định nghĩa
+ Có thể được dùng cho điều kiện biên dịch
+ using namespace System.Diagnostics vào đầu chương trình
+ Ví dụ:
- DllImport
+ Dllimport attribute có thể được sử dụng để gọi các “mã không được quản lý” (unmanaged code) trong một chương trình C#
+ Unmanaged code là code được phát triển bên ngoài Net Framework
+ Phải using namespace System.Runtime.InteropServices phải
+ Ví dụ
- Obsolete
Trang 3+ Obsolete - attribute được dùng để đánh dấu 1 phương thức được xem như obsolete ( không dùng nữa)
+ Tuỳ thuộc vào việc thiết lập trên attribute này, trình biên dịch sẽ sinh ra 1 cảnh báo hay lỗi nếu nó gặp bất kì mã nào cố gắng dùng phương thức này.+ Các trường hợp sử dụng Obsolete attribute
+ Ví dụ
1.2 Sử dụng các Attribute hệ thống
- Debug
- Release
1.3 Tùy biến các Attribute
+ các lớp custom Attributes phải được kế thừa trực tiếp hoặc gián tiếp từ lớp System.Attribute và được đánh dấu với thuộc tính AttributeUsage
+ Các lớp Attributes phải được khai báo là public vào có ít nhất 1 constructor+ Ví dụ minh họa
1.4 Tạo các lớp Attribute
+ Tạo và sử dụng lớp attribute dùng để comment code
- Yêu cầu SV chuẩn bị:
+ Tìm hiểu ý nghĩa và các trường hợp sử dụng attribute
+ Nắm được cách sử dụng 3 attribute cơ bản
+ Tạo các lớp tùy biến attribute
Bài giảng 2: Sử dụng Assembly trong NET
+ Nắm được 2 kiểu assembly: riêng tư và chia sẻ
+ Cách sử dụng một số file tài nguyên thông dụng: audio, image, text trong chương trình C#
+ Cách xác định phiên bản
Trang 4- Hình thức tổ chức dạy học: Lý thuyết, thảo luận, tự học, tự nghiên cứu
- Thời gian: Lý thuyết, thảo luận: 3 tiết; Tự học, tự nghiên cứu: 1 tiết
- Địa điểm: Giảng đường do P2 phân công.
- Nội dung chính:
2.1 Tìm hiểu cấu trúc của một assembly
- Khái niệm: Assembly là các khối trong NET framework, sử dụng để giải quyết các vấn đề về xác định phiên bản và triển khai ứng dụng hoặc DLL Một Assembly là một tập các thông tin yêu cầu trong thời điểu chạy để thực thi một ứng dụng Các thông tin này được xem như siêu dữ liệu, nó có thể là một file DLL hoặc một file thực thi exe
- Có 2 loại assembly trong NET Framework
+ Private (riêng tư): assembly chỉ được triển khai cho một ứng dụng, không có khả năng chia sẻ với các ứng dụng khác
+ Shared (Chia sẻ): Có thể được truy cập bởi ứng dụng khác
- Tìm hiểu các đặc điểm của Assembly
- Cấu trúc của Assembly
+ Siêu dữ liệu assembly
+ Siêu dữ liệu Type
+ Mã MSIL
+ Các tài nguyên
Trang 5- Tạo assembly
+ Tạo assembly trong một file
+ Tạo assembly lưu trữ trong nhiều file
2.2 Tìm hiểu các Module
2.3 Làm việc với file Resource
- File tài nguyên như các file audio, image, text, … có thể thêm vào các
assembly
- Các file tài nguyên được lưu theo cặp khóa – giá trị (key - value) Khóa xác định tài nguyên theo tên, giá trị trỏ đến nội dung file tài nguyên (lưu dạng bảng băm)
- Tạo và sử dụng file tài nguyên
2.4 Tìm hiểu về GAC (Global Assembly Cache)
- Các assembly chia sẻ được lưu trữ trong một vùng nhớ đệm – Global
Assembly Cache(GAC) Thư mục cache được lưu trữ trong ổ cứng máy tính nhưsau:
Trang 6- Khi một assembly cần chia sẻ giữa các ứng dụng được cài đặt trong GAC Khi NET Framework cài đặt vào một hệ thống, global assembly cache sẽ được
tự động tạo trên ổ đĩa C của máy tính GAC có thể được đặt theo đường dẫn C:\WINDOWS\assembly trong windows XP hoặc C:\WINNT\assembly trong windows 2000
- Các bản sao của một assembly có thể được duy trì ở trong GAC với các thông tin về phiên bản khác nhau Công cụ gacutil.exe có thể được sử dụng để cải đặt hoặc gở bỏ các assembly trong GAC
- Tạo một tên mạnh cho assembly
+ Ký assembly với chữ ký số
+ Tạo một cặp khóa
+ Sử dụng tên mạnh
+ Tham chiếu một assembly
2.5 Tạo các assembly chia sẻ
2.6 Cài đặt các Assembly chia sẻ trong GAC
- Tìm hiểu 3 phương pháp triển khai assembly trong GAC
- Hiển thị toàn bộ các assembly
2.7 Xác định phiên bản (Versioning)
Trang 7- Yêu cầu SV chuẩn bị:
+ Đọc chương 3 p78 - 104 tài liệu [1]
+ Nắm được cách sử dụng một file tài nguyên thường dùng: audio, image, text
Bài giảng 3: Đa luồng (Multithreading)
Chương 3: 3.1 + 3.2 + 3.3 + 3.4 + 3.5
Tiết thứ: 1 - 3 Tuần thứ: 3
- Mục đích, yêu cầu:
+ Nắm được cách thực thi một tiểu trình sử dụng thread-pool
- Hình thức tổ chức dạy học: Lý thuyết, thảo luận, tự học, tự nghiên cứu
- Thời gian: Lý thuyết, thảo luận: 3 tiết; Tự học, tự nghiên cứu: 1 tiết
- Địa điểm: Giảng đường do P2 phân công.
- Nội dung chính:
3.1 Thực thi phương thức với thread – pool
Các bược thực thi phương thức bằng một tiểu trình trong thread-pool của
+ Gọi phương thức tĩnh QueueUserWorkItem của lớp
System.Threading.ThreadPool, và truyền thể hiện ủy nhiệm đã tạo làm đối số
Bộ thực thi sẽ xếp thể hiện ủy nhiệm này vào hàng đợi và thực thi nó khi một tiểu trình trong thread-pool sẵn sàng
Việc sử dụng thread-pool của bộ thực thi giúp đơn giản hóa việc lập trình hỗ-trợ-đa-tiểu-trình Tuy nhiên trước khi quyết định sử dụng Thread-pool cần lưu ý các vấn đề sau:
+ Bộ thực thi quy định số tiểu trình tối đa cho thread-pool; tối đa 25 tiểu trình cho mỗi CPU hệ thống
Trang 8+ Thread-pool còn được sử dụng để thực thi phương thức một cách bất đồng
bộ hoặc các sự kiện định thời Do đó có thể dẫn đến sự tranh chấp giữa các tiểu trình trong thread-pool, hàng đợi có thể trở nên rất dài
+ Không nên sử dụng thread-pool để thực thi các tiến trình chạy trong một thời gian dài
+ Không nên đặt các tiểu trình trong thread-pool vào trạng thái đợi trong mộtthời gian quá dài
+ Không thể điều khiển lịch trình của các tiểu trình
+ Một khi công việc đã đặt vào hàng đợi thì không thể hủy hoặc dừng nó
- Ví dụ
3.2 Thực thi phương thức một cách bất đồng bộ
Thực thi phương thức bất đồng bộ: là tính huống khi đang thực thi một phương thức và tiếp tục thực hiện các công việc khác trong khi phương thức này vẫn chạy trong một tiểu trình riêng biệt Sau khi phương thức đã hoàn tất, bạn cần lấy trị trả về của nó
Phương pháp:
- Khai báo một ủy nhiệm có chữ ký giống như phương thức cần thực thi
- Tạo một thể hiện của ủy nhiệm tham chiếu đến phương thức này
- Gọi phương thức BeginInvoke của thể hiện ủy nhiệm để thực thi phương thức
- Sử dụng phương thức EndInvoke để kiểm tra trạng thái của phương thứccũng như thu lấy trị trả về của nó nếu đã hoàn tất
- Phương thức EndInvoke cho phép bạn lấy trị trả về của phương thức thực thi bất đồng bộ, nhưng trước hết phải xác định khi nào nó kết thúc Có 4 kỹ thuậtdùng để xác định một phương thức thực thi bất đồng bộ đã kết thúc hay chưa:+ Blocking
+ Polling
+ Waiting
+ Callbacks
3.3 Thực thi phương thức bằng tiểu trình mới
Là trường hợp thực thi mã lệnh trong một tiểu trình riêng, và muốn kiểm soát hoàn toàn quá trình thực thi và trạng thái của tiểu trình đó
Trang 9Phương pháp:
+ Khai báo một phương thức trả về void và không có đối số
+ Tạo một thể hiện ủy nhiệm System.Threading.ThreadStart tham chiếu đến phương thức này
+ Tạo một đối tượng System.Threading.Thread mới, và truyền thể hiện ủy nhiệm cho phương thức khởi dựng của nó
+ Kế đến, gọi phương thức Thread.Start để bắt đầu thực thi phương thức
3.4 Điều khiển quá trình thực thi của một tiểu trình
Sử dụng các phương thức Abort, Interrupt, Resume, Start, và Suspend của Thread cần điều khiển để kiểm soát tiểu trình chạy, tạm dừng hoặc dừng quá trình thực thi của nó
3.5 Nhận biết khi nào một tiểu trình kết thúc
Để kiểm tra một tiểu trình đã kết thúc hay chưa là kiểm tra thuộc tính Thread.IsAlive Thuộc tính này trả về true nếu tiểu trình đã được khởi chạy nhưng chưa kết thúc hay bị hủy
Ví dụ
- Yêu cầu SV chuẩn bị:
+ Đọc p106 – 129 chương 4 tài liệu [1]
Bài giảng 4: Đa luồng (Multithreading) – tiếp
+ Sử dụng timer để thực thi công việc một cách tự động
+ Điều khiển quá trình thực thi của một tiểu trình
- Hình thức tổ chức dạy học: Lý thuyết, thảo luận, tự học, tự nghiên cứu
- Thời gian: Lý thuyết, thảo luận: 3 tiết; Tự học, tự nghiên cứu:1 tiết
- Địa điểm: Giảng đường do P2 phân công.
- Nội dung chính:
3.6 Đồng bộ hóa quá trình thực thi của nhiều tiểu trình
Trang 10Thách thức lớn nhất trong việc viết một ứng dụng hỗ trợ đa tiểu trình là bảo đảm các tiểu trình làm việc trong sự hòa hợp Việc này thường được gọi là
“đồng bộ hóa tiểu trình” và bao gồm:
- Bảo đảm các tiểu trình truy xuất các đối tượng và dữ liệu dùng chung một cách phù hợp để không gây ra sai lạc
- Bảo đảm các tiểu trình chỉ thực thi khi thật sự cần thiết và phải đảm bảo rằng chúng chỉ được thực thi với chi phí tối thiểu khi chúng rỗi
Để giải quyết vấn đề này có thể dùng một số lớp thuộc không gian tên
System.Threading như sau:
+ Monitor
+ AutoResetEvent
+ ManualResetEvent
+ Mutex
3.7 Thực thi phương thức bằng timer
3.8 Tạo tiểu trình mới bằng cách sử dụng BackgroundWorker
- Yêu cầu SV chuẩn bị:
+ Đọc p129 – 141 chương 4 tài liệu [1]
+ Biết cách sử dụng timer để thực thi công việc một cách tự động
+ Sử dụng BackgroundWorker để tạo và điều khiển quá trình thực thi của một tiểu trình
Bài giảng 5: Mô hình đối tượng thành phần (Component Object Model –
COM)
Chương 4: 4.1 + 4.2 + 4.3
Tiết thứ: 1 - 3 Tuần thứ: 5
- Mục đích, yêu cầu:
+ Nắm được các kỹ thuật kết hợp giữa COM và NET, bao gồm:
- Hình thức tổ chức dạy học: Lý thuyết, thảo luận, tự học, tự nghiên cứu
- Thời gian: Lý thuyết, thảo luận: 3 tiết; Tự học, tự nghiên cứu: 1 tiết
- Địa điểm: Giảng đường do P2 phân công.
- Nội dung chính:
4.1 Chuyển từ COM sang NET
Trang 11- Tìm hiểu về COM
Component Object Model (COM) là một công nghệ phần mềm được phát triển bởi Microsoft năm 1993 COM gồm có các công nghệ như OLE, OLE Automation, ActiveX, COM+, và DCOM
Tầm quan trọng của COM là sử dụng các đối tượng qua các môi trường và máy móc khác nhau Nghĩa là, COM cho phép sử dụng lại các đối tượng mà không cần biết về sự thực thi bên trong của chúng
COM là một phương thức mà mã nhị phân được chia sẻ giữa các ứng dụng vàngôn ngữ khác nhau thông qua các giao diện
Đặc trưng:
- COM tách các hệ thống lớn thành các hệ thống con trong pha thiết kế
- Nó giúp xây dựng mỗi hệ thống con với một thành phần mà được tạo sử dụng công cụ COM
Sự cần thiết phải kết hợp giữa COM và NET:
- Sự kết hợp được thể hiện qua 2 cách sau:
+ Các thành phần của NET có thể gọi các thành phần của COM
+ Các thành phần của COM có thể gọi các thành phần NET
Xây dựng khả năng kết hợp với COM, có thể được thực hiện bằng 2 cách:+ Tạo Runtime Callable Wrapper (RCW) cho một thành phần COM
+ Thao chiếu siêu dữ liệu từ DLL và sử dụng các thuộc tính và phương thức của nó
- Sử dụng các thành phần COM trong NET
+ Thêm một tham chiếu vào project, sử dụng Project → Add Reference + Click vào bảng COM trong hộp thoại Add Reference
+ Chọn thành phần COM từ trong danh sách
+ Click OK để tạo các RCW cho các đối tượng trong kiểu thư viện đã chọn.4.2 Bộ đóng gói lời gọi lúc thực thi (RCW)
Mã được quản lý giao tiếp với các đối tượng COM thông qua một ủy nhiệu
là Runtime Callable Wrapper(RCW) Chức năng chính của RCW là kết nối lời gọi giữa một NET client và một đối tượng COM
RCW có thể được tạo bằng cách sử dụng tiện ích Tlbimp hoặc Visual
Studio
Trang 12Các giao diện COM và RCW
Tương tác giữa các thành phần COM object và NET client sử dụng RCWMột số giao diện của COM callable wrapper (CCW)
- Tạo một thư viện có phần mở rộng tlb, cho phép COM client xác định vị trí các lớp, phương thức, thuộc tính và sự kiện
- Sử dụng công cụ Assembly Registration Tool (regasm) để tạo thư viện và đăng ký nó
Trang 13- Cài đặt NET assembly vào trong GAC (global assembly cache), tạo một cặpkhóa tên mạnh.
- Yêu cầu SV chuẩn bị:
+ Đọc tài liệu và làm các bài tập ví dụ
Bài giảng 6: Mô hình đối tượng thành phần (Component Object Model –
- Hình thức tổ chức dạy học: Lý thuyết, thảo luận, tự học, tự nghiên cứu
- Thời gian: Lý thuyết, thảo luận: 3 tiết; Tự học, tự nghiên cứu: 1 tiết
- Địa điểm: Giảng đường do P2 phân công.
- Nội dung chính:
4.4 Gọi các hàm API trong NET
- Sự cần thiết của thừa kế mã và các hàm API
- Lời gọi
+ Platform Invocation Services (PInvoke) là một công nghệ cho phép các mã được quản lý gọi các hàm không được quản lý trong DLL
Trang 14- Gọi các mã lệnh không được quản lý (hàm, phương thức)
+ Gọi một hàm trực tiếp từ một DLL
+ Gọi một phương thức trên một đối tượng COM
- Quá trình làm việc của lời gọi mã lệnh
PInvoke phụ thuộc vào siêu dữ liệu để định vị các hàm và dữ liệu trong thời điểm chạy Các bước thực hiện như sau:
- Yêu cầu SV chuẩn bị:
+ Đọc tài liệu và làm các ví dụ theo yêu cầu của giáo viên
Bài giảng 7: Cơ chế ủy quyền và sự kiện.
Chương 5: 5.1
Trang 15Tiết thứ: 1 - 3 Tuần thứ: 7
- Mục đích, yêu cầu:
+ Cung cấp cho sinh viên các kiến thức về cơ chế ủy quyền
+ Sau khi học xong sinh viên phải thành thạo và phân biệt được cơ chế đơn ủy quyền và đa ủy quyền
- Hình thức tổ chức dạy học: Lý thuyết, thảo luận, tự học, tự nghiên cứu
- Thời gian: Lý thuyết, thảo luận: 3 tiết; Tự học, tự nghiên cứu: 1 tiết
- Địa điểm: Giảng đường do P2 phân công.
- Nội dung chính:
5.1 Ủy quyền
Ủy quyền là kiểu dữ liệu tham chiếu được dùng để đóng gói một phươngthức với tham số và kiểu trả về xác định Chúng ta có thể đóng gói bất cứphương thức thích hợp nào vào trong một đối tượng ủy quyền Trong ngôn ngữC++ và những ngôn ngữ khác, chúng ta có thể làm được điều này bằng cách sửdụng con trỏ hàm (function pointer) và con trỏ đến hàm thành viên Khônggiống như con trỏ hàm như trong C/C++, ủy quyền là hướng đối tượng, kiểu dữliệu an toàn (type-safe) và bảo mật
Một điều thú vị và hữu dụng của ủy quyền là nó không cần biết và cũngkhông quan tâm đến những lớp đối tượng mà nó tham chiếu tới Điều cần quantâm đến những đối tượng đó là các đối mục của phương thức và kiểu trả về phảiphù hợp với đối tượng ủy quyền khai báo
Để tạo một ủy quyền ta dùng từ khóa delegate theo sau là kiểu trả về tênphương thức được ủy quyền và các đối mục cần thiết Ví dụ
private delegate double FX(double x)
Khai báo trên định nghĩa một ủy quyền tên là FX, nó sẽ đóng gói bất cứphương thức nào lấy một tham số kiểu double và trả về giá trị double
- Sử dụng ủy quyền xác nhận phương thức lúc thực thi
Ủ y quyền được dùng để xác định những loại phương thức có thể được dùng
để xử lý các sự kiện và để thực hiện callback trong chương trình ứng dụng.Chúng cũng có thể được sử dụng để xác định các phương thức tĩnh và cácinstance của phương thức mà chúng ta không biết trước cho đến khi chươngtrình thực hiện