Không thể là một sealed class, vì sealed class không cho lớp khác kế thừa nó. Và không được khai báo với từ khóa static. Cung cấp một phương thức giống nhau cho tất cả các lớp con. Phương thức khuôn mẫu để các lớp kế thừa nó tuân theo, được gọi là abstract method. Các lớp con kế thừa abstract class bắt buộc phải override các abstract method của lớp cha, tức là sẽ phải định nghĩa cho phương thức (ở lớp cha chỉ mới khai báo prototype). Phải chứa ít nhất một abstract method, nếu chúng ta khai báo abstract class mà không có abstract method nào thì chương trình cũng không có lỗi gì xảy ra, nhưng như vậy thì không đúng với tư tưởng của abstract class, khi đó thì chúng ta chỉ cần khai báo như một class thông thường không cần dùng từ khóa abstract.
Bài Interface Abstract class Module: BOOTCAMP WEB-BACKEND DEVELOPMENT Kiểm tra trước Hỏi trao đổi khó khăn gặp phải “Inheritance" Tóm tắt lại phần học từ “Inheritance” Mục tiêu • Trình bày đuợc Interface • Trình bày Abstract Class • Trình bày Abstract Method • Khai báo Interface • Khai báo Abstract class • Khai báo lớp triển khai từ Interface • Khai báo lớp kế thừa từ Abstract class • Thiết kế giải pháp có sử dụng Interface Abstract Class • Trình bày sử dụng Anonymous Class Thảo luận Từ khoá abstract Abstract class Abstract method Abstract class • Trong kế thừa, lớp cha định nghĩa phương thức chung cho lớp • Lớp cụ thể lớp cha, lớp cha ”chung chung” lớp • Trong hệ kế thừa, lên cao tính cụ thể đi, tính trừu tượng tăng lên • Những lớp có tính trừu tượng cao, đến mức tạo đối tượng lớp gọi lớp trừu tượng (abstract class) • Ví dụ: Lớp Geometric lớp trừu tượng, phù hợp để trở thành lớp abstract Abstract method • Abstract method (phương thức trừu tượng) phương thức khai báo (declare) khơng có phần thân (khơng implement) • Ví dụ: • Lớp Geometric khai báo phương thức GetArea() GetPerimeter() khơng có phần thân hai phương thức • Tất “Hình” tính diện tích chu vi • Khơng thể tính diện tích chu vi bên lớp Geometric chưa xác định rõ “Hình” hình • Phương thức trừu tượng bổ sung phần thân (tức implement) lớp Từ khố abstract • Từ khố abstract sử dụng để khai báo lớp trừu tượng phương thức trừu tượng • Ví dụ: public abstract class Geometric { private String name; protected Geometric(String name) { this.name = name; } public String Name() { get=>name; } public abstract double GetArea(); } public abstract double GetPerimeter(); Các tính chất lớp abstract • Khơng thể một sealed class, sealed class khơng cho lớp khác kế thừa Và khơng khai báo với từ khóa static • Cung cấp phương thức giống cho tất lớp Phương thức khuôn mẫu để lớp kế thừa tn theo, gọi là abstract method • Các lớp kế thừa abstract class bắt buộc phải override các abstract method của lớp cha, tức phải định nghĩa cho phương thức (ở lớp cha khai báo prototype) • Phải chứa một abstract method, khai báo abstract class mà khơng có abstract method nào chương trình khơng có lỗi xảy ra, khơng với tư tưởng của abstract class, cần khai báo class thông thường không cần dùng từ khóa abstract Các tính chất lớp abstract • Trong một abstract class thì có loại phương thức: abstract method, virtual method, normal method • Khơng thể tạo đối tượng (object instance) từ một abstract class, mà phải tạo thơng qua lớp kế thừa từ • Abstract method chỉ khai báo trong abstract class, khai báo prototype Còn class bình thường tất phương thức không khai báo prototype mà phải định nghĩa • Abstract method là phương thức phép khai báo prototype (ngun mẫu hàm), mà khơng có nội dung, khơng định nghĩa Và phải có phạm vi truy cập là public hoặc protected để lớp override, khơng là private Các tính chất lớp abstract • Phạm vi truy cập của abstract method phải giống phần khai báo lớp cha lẫn lớp Nếu bạn khai báo phạm vi truy cập protected cho abstract method ở lớp cha lớp bạn phải sử dụng phạm vi truy cập protected khi override Nếu phạm vi truy cập không giống trình biên dịch báo lỗi • Abstract method khơng khai báo sử dụng từ khóa virtual Bởi thân abstract method đã bao hàm khái niệm virtual • Abstract method khơng thể phương thức static Interface • Interface cấu trúc tương tự lớp, chứa số abstract method • Interface quy định hành vi chung cho lớp triển khai • Sử dụng từ khoá interface để định nghĩa interface • Cú pháp: • Ví dụ: modifier interface InterfaceName { /** Constant declarations */ /** Abstract method signatures */ } public interface Flyable{ } Các tính chất Định nghĩa interface tạo kiểu liệu Không thể tạo đối tượng interface Interface chứa phương thức không abstract Khi lớp triển khai interface cần triển khai tất phương thức khai báo interface • Interface thiết kế để khai báo phương thức chung cho lớp không liên quan với (khác với abstract class, kế thừa lớp có liên quan với nhau) • Interface bổ sung cho việc C# khơng hỗ trợ ”đa kế thừa” • Một interface trong CSharp có thể khai báo modifier là public hoặc internal, khơng khai báo mặc định hiểu là internal Interface có modifier là public có thể sử dụng nơi, interface có modifier là internal chỉ sử dụng nội Assembly • • • • Triển khai interface • Một lớp triển khai interface cách sử dụng từ khố implements • Cú pháp: class ClassName : IntefaceName{ } • Ví dụ: interface Flyable{ String Fly(); } public class Bird : Flyable{ public String Fly() { return "Flying with wings"; } } Kế thừa interface • Một interface kế thừa interface khác • Interface thừa hưởng phương thức số khai báo interface cha • Interface khai báo thêm thành phần • Từ khoá : sử dụng để kế thừa interface • Ví dụ: interface Flyable{ String Fly(); } interface AnimalFlyable : Flyable{} interface EngineFlyable : Flyable{} Demo Interface Thảo luận Anonymous class Thảo luận Cohesion Consistency Encapsulation Clarity Cohesion • Cohesion (tính gắn kết) có nghĩa lớp nên đại diện cho thực thể định • Tất phương thức lớp cần phối hợp hợp lý để hỗ trợ cho tính chất cohesion • Ví dụ • Tính cohesion thấp: • Định nghĩa lớp Student (sinh viên) thực thêm chức Staff (nhân viên) • Tính cohesion cao: • Định nghĩa lớp Student lớp Staff để thực nhiệm vụ riêng phù hợp • Có thể định nghĩa thêm lớp User để thực nhiệm vụ chung hai thực thể Consistency • Consistency (tính đồng nhất) tuân thủ tiêu chuẩn C# quy ước đặt tên • Chọn tên phù hợp cho lớp, thuộc tính phương thức • Cấu trúc lớp là: Các trường liệu, constructor, phương thức • Nên định nghĩa constructor khơng có tham số cho lớp Encapsulation • Nên sử dụng từ khố private trường liệu • Định nghĩa phương thức getter muốn lấy giá trị thuộc tính • Định nghĩa phương thức setter muốn thay đổi giá trị thuộc tính Clarity • Clarity (tính rõ ràng) có nghĩa nhiệm vụ lớp, phương thức cần phải dễ hiểu, dễ giải thích • Các lớp, phương thức sử dụng kết hợp với theo nhiều cách khác nhau, rõ ràng cần thiết • Các thuộc tính lớp nên độc lập với nhau, tránh thừa liệu • Ví dụ, lớp Person: class Person{ private Date birthDay; private int age; } • Thuộc tính age tính dựa vào thuộc tính birthDay Lựa chọn Inheritance hay Aggregation • Trong nhiều trường hợp, chuyển đổi qua lại việc sử dụng inheritance (kế thừa) aggregation (tập hợp) • Inheritance thể mối quan hệ is-a • Aggregation thể mối quan hệ has-a • Ví dụ: • Lớp Apple lớp Fruit: Mối quan hệ is-a • Lớp Customer lớp Address: Mối quan hệ has-a Lựa chọn Interface hay Abstract class • Trong nhiều trường hợp, chuyển đổi việc sử dụng Interface Abstract class • Nếu có gần gũi, rõ ràng lớp mối quan hệ chacon nên sử dụng lớp (mối quan hệ is-a) • Ví dụ: Apple is a Fruit (Táo Quả) • Nếu khơng có mối quan hệ gần gũi nên chọn interface (mối quan hệ can-do) • Ví dụ: Bird can fly (Chim bay) Tổng kết • Abstract method phương thức có phần khai báo mà khơng có phần thân • Abstract class lớp có tính chất trừu tượng, khơng tạo đối tượng • Lớp có phương thức abstract bắt buộc phải abstract • Lớp kế thừa lớp abstract phải triển khai tồn phương thức abstract • Interface chứa số phương thức abstract • Từ khố implement sử dụng để triển khai interface • Interface kế thừa interface khác • Thiết kế lớp cần tn thủ: Tính gắn kết, tính bao gói, tính đồng nhất, tính rõ ràng Hướng dẫn Hướng dẫn làm thực hành tập Chuẩn bị tiếp theo: Cấu trúc liệu giải thuật ... nghĩa Chỉ sử dụng abstract class Có thể sử dụng abstract class normal class Abstract: ví dụ Demo Từ khố abstract Abstract class Abstract method Thảo luận Interface Interface • Interface cấu trúc... • Thiết kế giải pháp có sử dụng Interface Abstract Class • Trình bày sử dụng Anonymous Class Thảo luận Từ khoá abstract Abstract class Abstract method Abstract class • Trong kế thừa, lớp cha định... đuợc Interface • Trình bày Abstract Class • Trình bày Abstract Method • Khai báo Interface • Khai báo Abstract class • Khai báo lớp triển khai từ Interface • Khai báo lớp kế thừa từ Abstract class