‫Trong bài học này, bạn sẽ tìm hiểu sự khác biệt quan trọng giữa các lớp trừu tượng và các giao diện.
‫Khi thiết kế các ứng dụng, điều cần thiết là phải biết khi nào sử dụng một lớp trừu tượng và khi nào sử
‫dụng một giao diện và khi nào thì không sử dụng chúng.
‫Các lớp và giao diện trừu tượng có vẻ giống nhau theo một số cách, nhưng có những điểm khác biệt chính sẽ xác
‫định đâu là lựa chọn tốt nhất cho những gì bạn đang cố gắng đạt được.
‫Hiểu được sự khác biệt giữa một lớp trừu tượng và một giao diện là rất quan trọng, vì vậy chúng ta có thể
‫thiết kế các ứng dụng được kết hợp lỏng lẻo và có thể mở rộng, vì vậy các ứng dụng mà chúng ta có thể sửa đổi và
‫thay đổi dễ dàng mà không làm hỏng mọi thứ.
‫Chúng tôi sẽ thảo luận về những khác biệt đó và cách quyết định khi nào sử dụng trong video này.
‫Nhưng trước khi làm điều đó, trước tiên, hãy làm mới bộ nhớ của chúng ta về các lớp và giao diện trừu tượng.
‫Vì vậy, đầu tiên, các lớp trừu tượng.
‫Một lớp trừu tượng là một lớp không hoàn chỉnh hoặc một lớp không thể khởi tạo được, có nghĩa là chúng ta không thể tạo
‫các đối tượng từ nó.
‫Mục đích của một lớp trừu tượng là cung cấp bản thiết kế cho các lớp dẫn xuất và thiết lập một số quy tắc giống như
‫những gì mà các lớp dẫn xuất phải thực hiện.
‫Nhưng tại sao chúng ta cần một lớp được đánh dấu là một lớp trừu tượng để bắt đầu?
‫Có gì sai với các lớp học bình thường?
‫Hãy tưởng tượng chúng ta có một chiếc mô tô đẳng cấp và một chiếc ô tô đẳng cấp và chúng chia sẻ một số chức năng để giảm
‫sự dư thừa mã.
‫Chúng tôi tạo một lớp cơ bản được gọi là phương tiện để ngăn chặn việc tạo ra các trường hợp của loại phương tiện và để thực thi mọi
‫phương thức để triển khai phiên bản phương thức phương tiện của chúng.
‫Chúng ta phải đánh dấu nó là một lớp trừu tượng.
‫Chúng ta có thể tận dụng các lớp trừu tượng để thiết kế các thành phần và chỉ định một số mức chức năng
‫chung mà các lớp dẫn xuất phải thực hiện.
‫Vì vậy, hãy làm cho chiếc xe này trở nên trừu tượng và điều này sẽ ổn thôi.
‫Bây giờ chúng ta hãy xem xét các giao diện một lần nữa.
‫Vì vậy, một giao diện là một hợp đồng và nó chỉ có thể chứa các khai báo phương thức.
‫Nó không thể chứa các định nghĩa phương thức.
‫Chúng xác định khả năng mà một lớp có.
‫Hãy tưởng tượng chúng ta có ba lớp học, vì vậy chúng ta có lớp học, xe đạp, xe máy và ô tô.
‫Và sau đó chúng tôi muốn đảm bảo rằng tất cả các lớp này kế thừa từ phương tiện lớp này.
‫Và nếu bạn muốn thêm chức năng tự lái vào ô tô của chúng tôi, chẳng hạn và chúng tôi muốn bạn
‫tạo các lớp khác, chẳng hạn, có thể tạo ra thứ gì đó giống như máy bay, thì việc thêm chức năng tự
‫lái vào xe hạng cơ sở vì không phải tất cả các hạng xe con của chúng tôi đều có
‫tính năng này.
‫Sẽ thuận tiện hơn nếu thêm nó dưới dạng một giao diện có tên là Tôi tự lái.
‫Sau đó, các lớp triển khai giao diện này có thể cung cấp logic để đạt được nó.
‫Bây giờ chúng ta hãy nói về những điểm tương đồng giữa các giao diện và các lớp trừu tượng.
‫Cả hai giao diện và lớp trừu tượng đều có thể được khởi tạo.
‫Có nghĩa là chúng ta không thể tạo các đối tượng từ chúng, nhưng cả hai đều hỗ trợ tính đa hình, nghĩa là chúng ta có
‫thể lưu trữ một đối tượng kiểu cat trong một biến của lớp trừu tượng kiểu động vật.
‫Điều tương tự cũng xảy ra với các giao diện nơi chúng ta có thể lưu trữ bất kỳ bộ sưu tập nào như danh sách hoặc ngăn xếp trong một biến
‫kiểu i có thể liệt kê được.
‫Vì vậy, bây giờ chúng ta hãy xem xét sự khác biệt chính.
‫Một lớp trừu tượng được thiết kế để được kế thừa bởi các lớp con thực thi hoặc ghi đè các phương thức của nó.
‫Nói cách khác, các lớp trừu tượng hoặc được thực hiện một phần hoặc không được thực hiện ở tất cả.
‫Mặt khác, các giao diện không được thực hiện ở tất cả.
‫Sau đó, một lớp trừu tượng không thể có một phương thức khởi tạo đối lập với nó.
‫Các lớp trừu tượng có thể có các hàm tạo và các trường cũng như các định nghĩa phương thức, và
‫việc triển khai sẽ do lớp đã triển khai giao diện chịu trách nhiệm.
‫Mặt khác, một lớp trừu tượng có thể chứa phương thức, định nghĩa và trường, và vì các giao diện không có bất kỳ
‫hàm tạo nào, như chúng ta đã đề cập, chúng cũng không thể có các trường.
‫Vì vậy, bây giờ các lớp có thể triển khai nhiều giao diện, đó là một cách để đạt được một số loại đa kế thừa, vì
‫C-sharp là ngôn ngữ kế thừa đơn và không cho phép điều đó theo mặc định.
‫Vì vậy, một lớp chỉ có thể kế thừa mức độ một lớp.
‫Vì vậy, nếu một lớp triển khai một giao diện, nó phải triển khai tất cả các thành viên của nó, chẳng hạn như
‫thuộc tính, phương thức, v.v.
‫Mặt khác, khi một lớp mở rộng một lớp trừu tượng, nó chỉ phải triển khai các thành viên trừu tượng
‫của nó.
‫Vì vậy, phần không được thực hiện của lớp trừu tượng.
‫Hãy xem xét một phép loại suy ở đây.
‫Hãy tưởng tượng tôi thấy một người hướng dẫn sắc bén tại các buổi hướng dẫn ở EU, nơi người hướng dẫn không thể đạt được bất cứ điều gì trừ khi anh ta là
‫chuyên gia về một chủ đề hoặc cô ấy là chuyên gia về một chủ đề bởi vì chúng tôi không thể có các trường hợp của các lớp học trừu tượng.
‫Vì vậy, một người hướng dẫn sẽ cần phải trở thành một chuyên gia trong một chủ đề để dạy nó.
‫Vì vậy, người hướng dẫn đã trở thành một chuyên gia sắc bén, và bây giờ người đó có thể dạy C-sharp.
‫Tại một số thời điểm, người hướng dẫn của cửa hàng C đã phải chỉnh sửa video của mình.
‫Mặc dù không phải tất cả những người hướng dẫn đều cần phải làm những điều giống nhau.
‫Vì vậy, chúng tôi đã triển khai giao diện I trình chỉnh sửa video để điều này hoạt động, vì vậy không phải tất cả người hướng dẫn đều có thể
‫chỉnh sửa, nhưng những người triển khai trình chỉnh sửa video này sẽ phải làm như vậy.
‫Được rồi.
‫Bạn có nên chọn kế thừa trên một giao diện khi thiết kế thư viện lớp cửa hàng không?
‫Tốt, hãy sử dụng một lớp trừu tượng nếu bạn có một số chức năng mà bạn muốn các lớp con của nó có.
‫Ví dụ, nếu bạn có một tập hợp các hàm, bạn muốn các lớp con đặt chúng trong một lớp
‫trừu tượng.
‫Lớp trừu tượng được sử dụng khi lớp dẫn xuất chia sẻ các thuộc tính cốt lõi của nó và hành vi của lớp
‫trừu tượng, loại hành vi thực sự định nghĩa lớp.
‫Sử dụng một giao diện nếu bạn muốn một hành vi hoặc chức năng chỉ của hợp đồng chung.
‫Các giao diện thường lỏng lẻo so với các lớp trừu tượng.
‫Bạn sẽ không muốn sử dụng các giao diện trong tình huống liên tục viết cùng một mã cho tất cả
‫các phương thức giao diện.
‫Sử dụng một lớp trừu tượng và xác định từng phương thức một lần.
‫Vì vậy, một bản tóm tắt nhanh chóng.
‫Khi chúng ta nói về các lớp trừu tượng, chúng ta đã xác định các đặc điểm của một kiểu đối tượng xác định
‫đối tượng là gì.
‫Khi chúng ta nói về một giao diện và xác định các khả năng mà chúng ta hứa cung cấp, chúng ta đang nói
‫về việc thiết lập một hợp đồng về những gì đối tượng có thể làm.
‫Vì vậy, những gì đối tượng là lớp trừu tượng.
‫Những gì đối tượng có thể làm.
‫Một giao diện.
‫Được rồi.
‫Vì vậy, tôi hy vọng bạn thích và hiểu bản tóm tắt này cũng như tổng quan về hai loại phương pháp tiếp cận khác nhau này.
‫Và bây giờ chúng ta hãy tiếp tục và sử dụng những khái niệm đó trong các ví dụ khác nhau trong suốt các bài giảng tiếp theo và trong suốt
‫phần còn lại của khóa học.