Rate this post

Một interface xác định cú pháp mà bất kỳ thực thể nào cũng phải tuân theo. Dart không có bất kỳ cú pháp riêng biệt nào để xác định interface. interface định nghĩa giống như lớp nơi bất kỳ tập hợp phương thức nào có thể được truy cập bởi một đối tượng. Khai báo Lớp có thể tự interface.

Các bài viết liên quan:

Từ khóa triển khai là cần thiết để được viết, theo sau là tên lớp để có thể sử dụng interface. Lớp thực thi phải cung cấp một định nghĩa đầy đủ về tất cả các chức năng của interface được triển khai. Chúng ta có thể nói rằng một lớp phải xác định mọi chức năng với phần thân trong interface mà chúng ta muốn đạt được.

Khái niệm về Interface trong Dart

Interface trong Dart là một khái niệm quan trọng trong lập trình hướng đối tượng. Nó định nghĩa một hợp đồng (contract) hoặc một bộ quy tắc mà các lớp khác phải tuân thủ và triển khai. Interface chỉ mô tả các phương thức, thuộc tính mà một đối tượng cần triển khai để đáp ứng yêu cầu của hợp đồng.

Một Interface không thể được khởi tạo như một đối tượng, mà nó chỉ định các hành vi mà một đối tượng phải có. Các lớp khác trong Dart có thể triển khai (implement) một hoặc nhiều Interface, từ đó đảm bảo rằng chúng tuân thủ các quy tắc và hợp đồng đã được định nghĩa.

Một số điểm quan trọng về Interface trong Dart:

  1. Interface không chứa cài đặt thực tế của phương thức, mà chỉ định tên, kiểu trả về và các tham số đầu vào của chúng.
  2. Một lớp có thể triển khai nhiều Interface cùng một lúc, cho phép nó tuân thủ nhiều quy tắc và hợp đồng khác nhau.
  3. Interface có thể kế thừa từ các Interface khác, tạo ra một cấu trúc phân cấp Interface để tăng tính mô-đun và sự linh hoạt.
  4. Một lớp triển khai Interface phải cung cấp cài đặt thực tế cho tất cả các phương thức và thuộc tính được định nghĩa trong Interface.

Việc sử dụng Interface trong Dart giúp tăng tính linh hoạt, tái sử dụng và dễ bảo trì của mã nguồn. Nó cho phép bạn định nghĩa các quy tắc và hợp đồng cho các lớp khác nhau, giúp tăng tính tương thích và khả năng mở rộng của ứng dụng.

Lưu ý rằng trong Dart, từ khóa “implements” được sử dụng để triển khai một Interface vào một lớp.

Các thành phần của Interface trong Dart

Interface trong Dart có thể chứa các thành phần sau:

  1. Phương thức (Methods): Interface có thể định nghĩa các phương thức mà các lớp triển khai nó phải cung cấp. Mỗi phương thức chỉ định tên, kiểu trả về (nếu có) và danh sách tham số. Ví dụ:
abstract class MyInterface {
  void doSomething();
  int calculateSomething(int a, int b);
}
  1. Thuộc tính (Properties): Interface cũng có thể định nghĩa các thuộc tính mà các lớp triển khai nó phải cung cấp. Các thuộc tính chỉ định tên và kiểu dữ liệu của chúng. Ví dụ:
abstract class MyInterface {
  String get name;
  set name(String value);
}
  1. Hằng số (Constants): Interface có thể khai báo các hằng số mà các lớp triển khai nó phải có. Hằng số trong Interface được xem là các thành viên tĩnh. Ví dụ:
abstract class MyInterface {
  static const int maxCount = 10;
}
  1. Lớp trừu tượng (Abstract Class): Interface có thể được triển khai dưới dạng một lớp trừu tượng chứa phương thức trừu tượng và thuộc tính trừu tượng. Ví dụ:
abstract class MyInterface {
  void doSomething();
  int calculateSomething(int a, int b);
}

abstract class MyAbstractClass implements MyInterface {
  void doSomething() {
    // Cài đặt phương thức
  }

  int calculateSomething(int a, int b) {
    // Cài đặt phương thức
  }

  // Các phương thức và thuộc tính khác
}

Lưu ý rằng Interface trong Dart được khai báo bằng từ khóa “abstract”, và các phương thức và thuộc tính trong Interface cũng được đánh dấu bằng từ khóa “abstract” mặc định. Tuy nhiên, từ khóa “abstract” không cần thiết khi triển khai Interface.

Khai báo interface

Dart không cung cấp cú pháp để khai báo interface trực tiếp. Một cách ngầm định, bản thân một khai báo lớp là một interface chứa toàn bộ thành viên thể hiện của lớp và bất kỳ interface nào mà nó triển khai.

Implements một interface

Để làm việc với các phương thức interface, interface phải được thực thi bởi một lớp khác bằng cách sử dụng từ khóa triển khai . Một lớp được triển khai interface phải cung cấp triển khai đầy đủ tất cả các phương thức thuộc về interface. Sau đây là cú pháp của interface cài đặt.

Cú pháp:

class ClassName implements InterfaceName  

Trong ví dụ sau, chúng ta đang khai báo một lớp Employee . Mặc nhiên, lớp Kỹ sư thực hiện khai báo interface cho lớp Nhân viên . Hãy hiểu ví dụ trên bằng đoạn mã sau.

Ví dụ

class Employee 
{  
   void  display () {  
         print ( "Tôi đang làm kỹ sư" );  
                            }  
}  
// Định nghĩa interface bằng cách cấy một lớp khác  
class Engineer implements Employee   
{  
          void  display () {  
                 print ( "Tôi là một kỹ sư trong công ty này" );                   
}  
}  
void  main ()   
{  
Engineer eng =  new  Engineer ();  
eng.display ();  
}  

Giải trình

Trong ví dụ trên, chúng tôi đã định nghĩa một lớp Kỹ sư là một interface triển khai lớp Kỹ sư. Sau đó, chúng tôi xác định cùng một phương thức display () trong cả hai lớp. Phương thức này ghi đè trong lớp Engineer, vì vậy chúng tôi đã tạo đối tượng của lớp Engineer trong một hàm main () gọi hàm display () . Nó in kết quả ra màn hình.

Thực hiện nhiều kế thừa

Chúng ta đã thảo luận trước đây rằng đa kế thừa không được Dart hỗ trợ, nhưng chúng ta có thể áp dụng nhiều interface. Có thể nói rằng, sử dụng nhiều interface, chúng ta có thể đạt được đa kế thừa trong Dart. Cú pháp được đưa ra dưới đây.

Cú pháp:

class ClassName implements interface1, interface2,…interface n  

Hãy hiểu ví dụ sau.

Ví dụ

class Student {
  String name = "";
  int age = 0;

  void displayName() {
    print("Tôi là ${name}");
  }

  void displayAge() {
    print("Tuổi của tôi là ${age}");
  }
}

class Faculty {
  String dep_name = "";
  int salary = 0;

  void displayDepartment() {
    print("Tôi là giáo sư của ${dep_name}");
  }

  void displaySalary() {
    print("Lương của tôi là ${salary}");
  }
}

// Định nghĩa interface bằng cách chèn một lớp khác
class College implements Student, Faculty {
  // Ghi đè các thành viên lớp Sinh viên
  String name = "";
  int age = 0;

  void displayName() {
    print("Tôi là ${name}");
  }

  void displayAge() {
    print("Tuổi của tôi là ${age}");
  }

// Ghi đè từng thành viên dữ liệu của lớp Khoa
  String dep_name = "";
  int salary = 0;

  void displayDepartment() {
    print("Tôi là nhà cung cấp của ${dep_name}");
  }

  void displaySalary() {
    print("Lương của tôi là ${salary}");
  }
}

void main() {
  College cg = new College();
  cg.name = "test1";
  cg.age = 25;
  cg.dep_name = "Cấu trúc dữ liệu";
  cg.salary = 50000;

  cg.displayName();
  cg.displayAge();
  cg.displayDepartment();
  cg.displaySalary();
}

Giải trình:

Trong ví dụ trên, chúng tôi đã triển khai nhiều interface trong lớp College. Mỗi thành viên dữ liệu của lớp Sinh viên và Khoa được ghi đè trong lớp Cao đẳng. Chúng tôi đã tạo đối tượng của lớp College và gọi các hàm ghi đè. Nó in kết quả.

Quy tắc triển khai interface

  1. Một lớp thực thi interface phải ghi đè lên mọi phương thức và biến thể hiện của một interface.
  2. Dart không cung cấp cú pháp để khai báo interface trực tiếp. Khai báo lớp có thể coi là interface của chính nó.
  3. Một lớp interface phải cung cấp việc triển khai đầy đủ tất cả các phương thức thuộc về các interface.
  4. Chúng ta có thể triển khai một hoặc nhiều interface đồng thời.
  5. Sử dụng interface, chúng ta có thể đạt được đa kế thừa.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now