Bài giảng Lập trình hướng sự kiện - Bài 3: Giao diện và tập hợp được biên soạn nhằm cung cấp các kiến thức cho người học bao gồm phân biệt được namespace và interface; liệt kê được các tính chất cơ bản của collection; vận dụng ngôn ngữ C# vào triển khai namespace và interface; sử dụng được các lớp đối tượng cơ bản trong thư viện collection để xây dựng một số ứng dụng đơn giản.
GIỚI THIỆU MƠN HỌC LẬP TRÌNH HƯỚNG SỰ KIỆN Giảng viên: ThS Phan Thanh Toàn v1.0015102206 BÀI GIAO DIỆN VÀ TẬP HỢP Giảng viên: ThS Phan Thanh Toàn v1.0015102206 MỤC TIÊU BÀI HỌC • Phân biệt namespace interface • Liệt kê tính chất collection • Vận dụng ngơn ngữ C# vào triển khai namespace interface • Sử dụng lớp đối tượng thư viện collection để xây dựng số ứng dụng đơn giản v1.0015102206 CÁC KIẾN THỨC CẦN CĨ Để học mơn học này, sinh viên phải học xong mơn học: • Cơ sở lập trình; • Lập trình hướng đối tượng; • Cơ sở liệu; • Hệ quản trị sở liệu SQL Server v1.0015102206 HƯỚNG DẪN HỌC • Đọc tài liệu tham khảo • Thảo luận với giáo viên sinh viên khác vấn đề chưa hiểu rõ • Trả lời câu hỏi học v1.0015102206 CẤU TRÚC NỘI DUNG v1.0015102206 3.1 Giao diện (Interface) 3.2 Collections 3.3 Namespace 3.1 GIAO DIỆN (INTERFACE) 3.1.1 Khái niệm 3.1.2 Khai báo khởi tạo lớp interface v1.0015102206 3.1.1 KHÁI NIỆM • Giao diện (interface) cung cấp hình thức trừu tượng hóa cho việc phát triển ứng dụng theo phương pháp xây dựng thành phần sở • Giao diện cung cấp thỏa thuận chung cho phép thành phần làm việc với • Ví dụ: Một đồng hồ báo thức cung cấp thành phần giao diện khác Alarm, Clock, Radio Alarm Alarm Clock Clock Radio v1.0015102206 3.1.1 KHÁI NIỆM (tiếp theo) Giao diện lớp, triển khai cụ thể giao diện Giao diện tạo ràng buộc mà lớp thực thi từ giao diện phải tuân thủ theo v1.0015102206 3.1.1 KHÁI NIỆM (tiếp theo) • Giao diện khai báo tập thành phần Các lớp thực thi giao diện cung cấp định nghĩa thành phần khai báo giao diện • Giao diện kiểu tham chiếu • Khi lớp thực thi từ interface phải cài đặt tất thành phần khai báo interface v1.0015102206 10 3.2.1 KHÁI NIỆM VỀ COLLECTIONS • Collections tập hợp lớp hỗ trợ thu thập quản lý đối tượng cách tuần tự, hỗ trợ tìm kiếm, lưu trữ duyệt đối tượng tập hợp • Trong C# lớp đối tượng tập hợp đặt thư viện System Collections • Một số lớp đối tượng Collections gồm: ArrayList; Queue; Stack; Hashable; Dictionary v1.0015102206 19 3.2.2 THAO TÁC VỚI CÁC LỚP ĐỐI TƯỢNG TRONG COLLECTIONS a Lớp ArrayList • Là lớp tổ chức theo cấu trúc mảng • Sử dụng để lưu trữ phần tử • Số lượng phần tử ArrayList không bị cố định mảng (Array), số phần tử tự tăng/giảm thêm/xóa phần ArrayList • ArrayList cung cấp nhiều phương thức cho phép xử lí phần tử cách dễ dàng • ArrayList chứa đối tượng thuộc class khác v1.0015102206 20 3.2.2 THAO TÁC VỚI CÁC LỚP ĐỐI TƯỢNG TRONG COLLECTIONS • Cú pháp khai báo tạo lập ArrayList: ArrayList = new ArrayList(); Hoặc: ArrayList = new ArrayList(num); //num số nguyên, xác định số phần tử ArrayList • Một số phương thức lớp ArrayList: Phương thức Add: Thêm phần tử vào cuối danh sách ArrayList .Add(object value); Ví dụ: Giả sử tạo lớp Person Staff, tạo ArrayList staffs để chứa danh sách nhân viên ArrayList staffs = new ArrayList(20); Person p = new Person("Hung", 20); staffs.Add(p); Staff s = new Staff("Nam", 22, 3, 1.33F); staffs.Add(s); Phương thức: Insert chèn thêm phần tử vào vị trí ArrayList Insert(int index, object value); v1.0015102206 21 3.2.2 THAO TÁC VỚI CÁC LỚP ĐỐI TƯỢNG TRONG COLLECTIONS (tiếp theo) Ví dụ: Chèn thêm nhân viên vào vị trí số Staff s1 = new Staff("Bao", 25, 4, 2.33F); staffs.Insert(1, s1); Truy cập phần tử ArrayList [Chỉ số]; Ví dụ: Chương trình khởi tạo mảng nhân viên duyệt để in thông tin nhân viên ArrayList staffs = new ArrayList(); Staff s = null; s = new Staff("Hung", 32, 8, 3.33F); staffs.Add(s); s = new Staff("Nam", 25, 3, 1.86F); staffs.Add(s); for (int i = 0; i < staffs.Count; i++) { s =(Staff) staffs[i]; s.Show(); } Thuộc tính Count cho biết số phần tử ArrayList v1.0015102206 22 3.2.2 THAO TÁC VỚI CÁC LỚP ĐỐI TƯỢNG TRONG COLLECTIONS (tiếp theo) Phương thức Remove: Loại bỏ phần tử khỏi ArrayList .Remove(object value); Phương thức RemoveAt: Loại bỏ phần tử vị trí index khỏi ArrayList .RemoveAt(int index); Phương thức Clear: Loại bỏ tất phần tử khỏi ArrayList .Clear() Phương thức IndexOf: Trả vị trí phần tử value ArrayList .IndexOf(object value); Phương thức Contains: Kiểm tra xem có tồn phần tử value ArrayList hay khơng? Contains(object value); v1.0015102206 23 3.2.2 THAO TÁC VỚI CÁC LỚP ĐỐI TƯỢNG TRONG COLLECTIONS (tiếp theo) b Lớp Queue • Là cấu trúc danh sách cho phép truy xuất phần tử theo phương thức First – in, First – out (thêm phần tử vào cuối danh sách, lấy phần tử đầu danh sách) • Cách tạo Queue: Queue = new Queue(); • Thuộc tính: Count cho biết số phần tử Queue • Phương thức: EnQueue: Thêm phần tử vào cuối danh sách; DeQueue: Loại bỏ phần tư khỏi danh sách; Peek: Lấy phần tử đầu danh sách • Ví dụ: Sử dụng Queue lưu danh sách nhân viên sau duyệt Queue để đọc thông tin nhân viên danh sách v1.0015102206 24 3.2.2 THAO TÁC VỚI CÁC LỚP ĐỐI TƯỢNG TRONG COLLECTIONS (tiếp theo) Queue staffs= new Queue(); Staff s1 = new Staff("Hung", 32, 8, 3.33F); Staff s2 = new Staff("Nam", 25, 3, 1.86F); Staff s3 = new Staff("Bao", 28, 5, 1.86F); staffs.Enqueue(s1); staffs.Enqueue(s2); staffs.Enqueue(s3); foreach (Staff s in staffs) { s.Show(); } v1.0015102206 25 3.2.2 THAO TÁC VỚI CÁC LỚP ĐỐI TƯỢNG TRONG COLLECTIONS (tiếp theo) c Lớp Stack • Là cấu trúc danh sách cho phép truy xuất phần tử theo phương thức Last – in, First – out (thêm lấy phần tử thực đỉnh Stack) • Cách tạo Stack: Stack = new Stack(); • Thuộc tính: Count cho biết số phần tử Stack • Phương thức: Push: Thêm phần tử vào Stack; Pop: Lấy phần tử khỏi Stack (và loại bỏ phần tử khỏi Stack); Peek: Lấy phần khỏi Stack (không loại bỏ phần tử khỏi Stack) v1.0015102206 26 3.2.2 THAO TÁC VỚI CÁC LỚP ĐỐI TƯỢNG TRONG COLLECTIONS (tiếp theo) d Lớp Hashtable • Là cấu trúc bảng băm sử dụng để ánh xạ khóa (key) vào giá trị (value) • Mỗi phần tử danh sách có key • Cách khai báo tạo đối tượng Hashtable: Hashtable = new Hashtable(); • Thuộc tính: Count cho biết số phần tử Hashtable • Phương thức: Add: Thêm phần tử với khóa key giá trị value vào Hashtable .Add(object key, object value); Remove: Loại bỏ phần tử với khóa key khỏi Hashtable .Remove(object key); Clear: Loại bỏ tất phần tử khỏi Hashtable .Clear(); Contains: Kiểm tra xem có phần tử với khóa key Hashtable hay không Contains(object key); ContainsValue: Kiểm tra xem có tồn phần tử với giá trị value Hashtable hay không? ContainsValue(object value); GetEnumerator: Trả giá trị kiểu IDictionaryEnumerator, tập tất phần 27 v1.0015102206 tử Hashtable 3.2.2 THAO TÁC VỚI CÁC LỚP ĐỐI TƯỢNG TRONG COLLECTIONS (tiếp theo) • Ví dụ: Chương trình lưu danh sách nhân viên vào bảng băm Hashtable duyệt bảng băm để in thông tin nhân viên Hashtable staffs = new Hashtable(); Staff s1 = new Staff("Hung", 32, 8, 3.33F); Staff s2 = new Staff("Nam", 25, 3, 1.86F); Staff s3 = new Staff("Bao", 28, 5, 1.86F); staffs.Add(1, s1); staffs.Add(2, s2); staffs.Add(3, s3); IDictionaryEnumerator enumerator = staffs.GetEnumerator(); while (enumerator.MoveNext()) { int key =(int) enumerator.Key; Staff s = (Staff)enumerator.Value; Console.WriteLine("ID:" + key); s.Show(); } v1.0015102206 28 3.3 NAMESPACE • Namespace giúp quản lí class, interface, structure • Namespace tránh việc trùng lặp class, interface • Trong namespace có class hay interface trùng tên • Các thành phần namespace: interface, structure, class, enumeration • Đặc trưng lợi ích namespace: Cung cấp cấu trúc thứ bậc, tạo điều kiện thuận tiện quản lý sử dụng lớp; Cho phép có nhiều lớp trùng tên namespace khác nhau; Tạo nên hệ thống phận tháo rời • Một số namespace hệ thống: System.Data: Chứa lớp tạo lên kiểu cấu trúc ADO.NET, cho phép truy xuất đến nguồn liệu khác System.IO: Bao gồm class cho phép đọc viết từ luồng liệu lên tệp tin System.NET: Bao gồm class cho phép tạo ứng dụng Web sở v1.0015102206 29 3.3 NAMESPACE • Cú pháp khai báo namespace: namespace { //khai báo interface //Khai báo class } • Ví dụ: Tạo namespace BankTypes ClubTypes, namespace chứa lớp id v1.0015102206 30 3.3 NAMESPACE (tiếp theo) namespace BankTypes { public class Id { string _identifier; public Id(string Identifier) { _identifier = Identifier; } string GetId() { return _identifier; } } } v1.0015102206 31 3.3 NAMESPACE (tiếp theo) namespace ClubTypes { public class Id { string _identifier; public Id(string Identifier) { _identifier = Identifier; } string GetId() { return _identifier; } } } • Truy xuất đến thành phần namespace .; Ví dụ: BankTypes.Id bank = new BankTypes.Id("09-887-667"); v1.0015102206 32 TÓM LƯỢC CUỐI BÀI Trong này, nghiên cứu nội dung sau: v1.0015102206 • Interface cách triển khai interface C#; • Namespace cách triển khai namespace C#; • Collections số lớp đối tượng collections 33 ... NỘI DUNG v1.0015102206 3. 1 Giao diện (Interface) 3. 2 Collections 3. 3 Namespace 3. 1 GIAO DIỆN (INTERFACE) 3. 1.1 Khái niệm 3. 1.2 Khai báo khởi tạo lớp interface v1.0015102206 3. 1.1 KHÁI NIỆM • Giao... new Staff("Hung", 32 , 8, 3. 33F); Staff s2 = new Staff("Nam", 25, 3, 1.86F); Staff s3 = new Staff("Bao", 28, 5, 1.86F); staffs.Add(1, s1); staffs.Add(2, s2); staffs.Add (3, s3); IDictionaryEnumerator... 24 3. 2.2 THAO TÁC VỚI CÁC LỚP ĐỐI TƯỢNG TRONG COLLECTIONS (tiếp theo) Queue staffs= new Queue(); Staff s1 = new Staff("Hung", 32 , 8, 3. 33F); Staff s2 = new Staff("Nam", 25, 3, 1.86F); Staff s3