Giao diện (interface)

Một phần của tài liệu bài giảng lập trình hướng đối tượng c (Trang 54)

CHƢƠNG IV: KẾT TẬP VÀ KẾ THỪA

2.5. Giao diện (interface)

Trong lý thuyết về lập trình hướng đối tượng, có một kỹ thuật cho phép một lớp có thể kế thừa các đặc điểm của không chỉ một lớp mà là nhiều lớp khác. Kỹ thuật này gọi là đa thừa kế. Tuy nhiên trong C# một lớp chỉ được kế thừa từ một lớp khác. Điều này có vẻ như C# bị hạn chế khả năng đa thừa kế. Hoàn toàn không phải vậy, để giải quyết yêu cầu về đa thừa kế C# đưa ra khái niệm giao diện (interface)

Giao diện (interface) là một mặt nạ định nghĩa các phương thức chung, thể hiện về mặt đặc điểm mà các lớp dẫn xuất từ giao diện đó sẽ có. Xem xét một ví dụ như sau: giả sử ta có hai lớp là Bird (Chim) và Plane (Máy bay). Cả hai lớp này đều có chung một phương thức bay là Fly(). Tuy nhiên Bird và Plane thuộc về hai lớp đối tượng khác nhau về bản chất không thể hiện sự kế thừa từ cùng một lớp trừu tượng (abstract class). Đó là Bird thuộc về lớp Animal (động vật) còn Plane thuộc về lớp Vehicle (Phương tiện). Vậy một giao diện có định nghĩa phương thức Fly() cần phải được tạo ra cho tất cả các lớp có chung một đặc điểm đó là biết bay.

Cũng giống như lớp trừu tượng (abstract class), giao diện đươc tạo ra để các lớp khác kế thừa chứ không để tạo ra đối tượng. Vì vậy không thể tạo đối tượng từ giao diện

Trong thân giao diện chỉ định nghĩa các phương thức trừu tượng không có phần thân phương thức. Lớp nào kế thừa từ giao diện này thì sẽ phải định nghĩa phần thân cho phương thức đó

Cú pháp

Để định nghĩa một giao diện người ta dùng từ khóa interface

<tính chất> interface <tên giao diện> {

//định nghĩa các phương thức trừu tượng của dao diện }

Ví dụ (IV.6) Tạo giao diện

Bước 1: Vẫn trong solution Session_IV, thêm một dự án mới tên là FlyingInterface Bước 2: Thêm lớp FlyingInterface vào dự án và viết mã như bên dưới

public interface FlyingInterface {

void Fly(); }

Bước 3: Thêm lớp Plane vào dự án và chèn mã như sau

//lớp plane kế thừa từ FlyingInterface

class Plane:FlyingInterface {

//định nghĩa thân phương thức Fly() của giao diện public void Fly()

Console.WriteLine("Plane is flying"); }

}

Bước 4: Chèn mã vào lớp Program như sau class Program

{

static void Main(string[] args) {

Plane objPlane = new Plane(); objPlane.Fly();

Console.ReadLine(); }

}

Bước 5: Thiết lập FlyingInterface là dự án mặc định bằng cách click chuột phải chọn Set as Startup Project

Bước 6: Dịch và chạy chương trình màn hình hiển thị như sau

Hình (IV.8) Màn hình hiển thị Ví dụ (IV.6)

Trên đây là ví dụ thể hiện lớp Plane kế thừa phương thức Fly() từ giao diện FlyingInterface. Ta cũng có thể định nghĩa một lớp vừa kế thừa từ lớp trừu tượng (Abstract Class) vừa kế thừa từ một hoặc một số giao diện (Interface). Cơ chế này thể hiện kỹ thuật đa thừa kế trong C#. Ví dụ sau tạo thêm lớp Bird vừa kế thừa từ lớp trừu tượng Animal vừa kế thừa giao diện FlyingInterface. Như vậy Bird vừa mang đặc điểm là một loài động vật nhưng lại vừa biết bay

Ví dụ (IV.7) Đa thừa kế trong C#

Bước 1: Thêm lớp Animal vào dự án FlyingInterface và viết mã tạo lớp trừu tượng Animal giống như đã làm trong Ví dụ (IV.5)

abstract class Animal {

public void Eat() {

Console.WriteLine("Every animal eats food"); }

abstract public void MakeSound(); }

Bước 2: Thêm lớp Bird vào dự án và định nghĩa lớp này vừa kế thừa từ lớp trừu tượng Animal vừa kế thừa giao diện FlyingInterface bằng dấu “,”

class Bird:Animal,FlyingInterface {

//định nghĩa thân phương thức trừu tượng của lớp trừu tượng Animal public override void MakeSound()

{

Console.WriteLine("Bird sounds chip chip"); }

//định nghĩa thân phương thức Fly của giao diện FlyingInterface public void Fly()

{

Console.WriteLine("Bird is flying"); }

}

Bước 3: Sửa mã của lớp Program như sau class Program

{

static void Main(string[] args) {

Plane objPlane = new Plane(); objPlane.Fly();

Bird objBird = new Bird(); objBird.Eat(); objBird.MakeSound(); objBird.Fly(); Console.ReadLine(); } }

Bước 4: Dịch và chạy chương trình màn hình hiển thị như sau

Hình (IV.9) Màn hình hiển thị Ví dụ (IV.7)

Trong ví dụ trên objBird là một đối tượng thuộc lớp Bird kế thừa từ cả Animal

FlyingInterface nên objBird vừa mang đặc điểm của Animal là có các phương thức Eat(),

Một phần của tài liệu bài giảng lập trình hướng đối tượng c (Trang 54)