INTERFACE - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-7-Interface.pdf ·...
Transcript of INTERFACE - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-7-Interface.pdf ·...
Click to edit Master subtitle style
INTERFACE
1
Interface – Khái niệm Định nghĩa Interface Hiện thực Interface Hiện thực nhiều Interface và thừa kế Thực hành
NỘI DUNG
2
INTERFACE – KHÁI NIỆM
3
Interface – Khái niệm
Interface có thể xem là ranh giới (boundary) mà đối tượng thực chia sẻ với thế giới bên ngoài Nếu như Inheritance thể hiện mối quan hệ “is a” thì Interface thể hiện mối quan hệ “can do” Trong thế giới thực, ta có thể thấy Inferace xuất hiện ở nhiều nơi: ở Tivi, xe hơi, ...
4
Interface – Khái niệm
5
Người dùng sử dụng Tivi thông qua thao tác các nút điều chỉnh (chỉnh âm lượng, chỉnh kênh ...)
chứ không cần biết chính xác bên trong Tivi xử lý như thế nào các nút điều chỉnh
Interface – Khái niệm
6
Người lái xe sử dụng vô lăng, bàn đạp chân gas, bàn đạp thắng, ... để điều khiển xe hơi của mình
Interface – Khái niệm
Nhận xét: Inferface giúp định nghĩa cách thức người sử
dụng giao tiếp với sự vật/hệ thống Xác định rõ làm thế nào hệ thống phản hồi
(feedback) đến user Các sự vật có cùng interface thì thông
thường chức năng chúng cung cấp sẽ tương tự nhau về mặt tổng quan (VD: Các loại xe hơi của những hãng sản xuất khác nhau)
7
ĐỊNH NGHĨA INTERFACE
8
Định nghĩa Interface
Trong C#, ta có thể định nghĩa Interface thông qua từ khóa Interface Việc định nghĩa Interface cũng chính là viết bản hướng dẫn sử dụng một chức năng mà người dùng đang cần Trong C#, Interface bao gồm các thành viên cơ bản: thuộc tính (properties), phương thức (methods), sự kiện (events) và indexers
9
Định nghĩa Interface
Ví dụ 1: Một chương trình Khoa học đời sống đang muốn nghiên cứu hành vi “bay” của các sự vật trên trái đất
10
public interface IFlyable { void Fly(); }
Định nghĩa Interface
Ví dụ 2: Giả sử chương trình cần hỗ trợ “ghi” file và hỗ trợ nhiều loại file khác nhau
11
public interface IFileWriter { string Extension { get; } void Write(string filename); }
Định nghĩa Interface
Nhận xét: Tất cả các phương thức (methods) ở trên đều
không có phần hiện thực (implementation) Không cần từ khóa virtual trước tên phương
thức Không cần phải khai báo tầm vực (vd: public,
protected, private, ...) trước tên phương thức Mặc định tất cả members đều public/virtual Nên có từ khóa I trước tên Interface
12
HIỆN THỰC INTERFACE
13
Hiện thực Interface
Nếu chỉ định nghĩa Interface thì ta vẫn chưa sử dụng được các chức năng mong muốn Cần xây dựng các lớp “hiện thực” interface để có thể sử dụng được các thành viên trong interface tương ứng (VD: Các thiết bị linh kiện và xử lý chi tiết bên trong Tivi ứng với từng nút) Cú pháp “hiện thực” interface tương tự như khi thừa kế dùng dấu hai chấm “:” + tên Interface Hiện thực chi tiết các thành viên của Interface
14
Hiện thực Interface
Ví dụ 1: Một chương trình Khoa học đời sống đang muốn nghiên cứu hành vi “bay” của các sự vật trên trái đất cần xây dựng các lớp có đối tượng có thể thực hiện hành vi “bay” này
15
public interface IFlyable { void Fly(); }
Hiện thực Interface
16
Hiện thực Interface
17
class Bird : IFlyable { public void Fly() { Console.WriteLine("Bird Fly"); } } class Plane: IFlyable { public void Fly() { Console.WriteLine("Plane Fly"); } }
Hiện thực Interface
18
class Program { static void Main(string[] args) { //Create 2 thing that can fly IFlyable[] FlyThings = new IFlyable[2]; FlyThings[0] = new Bird(); FlyThings[1] = new Plane(); for (int i = 0; i < FlyThings.Length; i++) FlyThings[i].Fly(); } }
Định nghĩa Interface
Ví dụ 2: Giả sử chương trình cần hỗ trợ “ghi” file và hỗ trợ nhiều loại file khác nhau
19
public interface IFileWriter { string Extension { get; } void Write(string filename); }
Hiện thực Interface
20
class TextFileWriter : IFileWriter { public string Extension { get { return ".txt"; } } public void Write(string filename) { Console.WriteLine(filename); } }
Hiện thực Interface
21
class DocxFileWriter : IFileWriter { public string Extension { get { return ".docx"; } } public void Write(string filename) { Console.WriteLine(filename); } }
Hiện thực Interface
22
class Program { static void Main(string[] args) { IFileWriter[] fileWriters = new IFileWriter[2]; fileWriters[0] = new TextFileWriter(); fileWriters[1] = new DocxFileWriter(); foreach (IFileWriter fileWriter in fileWriters) { fileWriter.Write(fileWriter.Extension); } } }
NHIỀU INTERFACE – THỪA KẾ
23
Nhiều Interface – thừa kế Đặc điểm: Trong C#, khi thừa kế ta chỉ có thể thừa kế tối đa
một lớp cơ sở Nhưng khi hiện thực Interface, ta được quyền hiện
thực nhiều Interface Khi hiện thực nhiều Interface phải hiện thực tất
cả phương thức nằm trong các Interfaces đó
24
Nhiều Interface – thừa kế
25
public interface IRunnable { void Run(); } public interface ISwimmable { void Swim(); }
Giả sử ta có 2 Interfaces dành cho các đối tượng có thể chạy và bơi
Nhiều Interface – thừa kế
26
class Person : IRunnable, ISwimmable { public void Run() { Console.WriteLine("Running ... "); } public void Swim() { Console.WriteLine("Swimming ... "); } }
Lớp hiện thực 2 Interfaces trên cần phải chứa hiện thực cho tất cả các thành viên (ở đây cụ thể là 2 phương thức)
Nhiều Interface – thừa kế Đặc điểm: C# cho phép hiện thực nhiều Interface và đồng thời
thừa kế tối đa một lớp cơ sở Cú pháp: (lưu ý tên lớp cơ sở phải xuất hiện đầu
tiên trong danh sách)
27
public class SubClass : OldClass, IInterface1, IInterface2 { ... }
Giới thiệu về Interface Cách định nghĩa và hiện thực Interface Hiện thực nhiều Interface và thừa kế Bài tập
TÓM TẮT
28