1. Trang chủ
  2. » Thể loại khác

Kỹ thuật mạng :phân biệt interface và lớp abstract trong oop

4 602 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 4
Dung lượng 43 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Lớp trừu tượng đơn giản được xem như một class cha cho tất cả các Class có cùng bản chất.. Lớp này được xem như một mặt nạ cho tất cả các Class cùng cách thức hoạt động nhưng có thể kh

Trang 1

Phân biệt Interface và lớp Abstract trong OOP

Hiện nay mặc dù OOP (Object Oriented Programming) đã rất phổ biến nhưng đa số vẫn còn khá mơ hồ trong việc phân biệt và định nghĩa hai khái niệm lớp Interface và Abstract Bài viết này chúng ta sẽ tìm hiểu kỹ hơn về khái niệm và sự khác biệt giữa chúng, lưu ý ở đây là Abstract Class chứ không phải là Abstract Method nhé!

What is an Abstract Class?

Lớp trừu tượng đơn giản được xem như một class cha cho tất cả các Class có cùng bản

chất Do đó mỗi lớp dẫn xuất (lớp con) chỉ có thể kế thừa từ một lớp trừu tượng Bên cạnh

đó nó không cho phép tạo instance, nghĩa là sẽ không thể tạo được các đối tượng thuộc lớp đó

What is an Interface?

Lớp này được xem như một mặt nạ cho tất cả các Class cùng cách thức hoạt động nhưng

có thể khác nhau về bản chất Từ đó lớp dẫn xuất có thể kế thừa từ nhiều lớp Interface để

bổ sung đầy đủ cách thức hoạt động của mình (đa kế thừa - Multiple inheritance)

Ví dụ:

- Abstract class ConVat có các lớp con Chim, Ca.

- Abstract class MayMoc có các lớp con MayBay, Thuyen

- Interface: iBay, iBoi, iChay.

=> MayBay, Chim sẽ có cùng Interface là iBay Rõ ràng mặc dù MayBay, Chim có cùng cách

thức hoạt động là bay nhưng chúng khác nhau về bản chất

=> MayBay cũng có interface là iChay nhưng Chim không thể nào kế thừa thêm abstract classMayMoc

Abstract Class vs Interface

Nhìn chung cả 2 đều là "bản thiết kế" cho các lớp dẫn xuất, do đó chúng chỉ chứa các khai

báo Properties và Method mà không quan tâm bên trong thực hiện những gì Nhưng cụ thể

thì Abstract Class là "bản thiết kế" cho Class còn Interface là "bản thiết kế" cho Method

(Ở đây s dùng C# làm ngôn ngữ cho ví dụ)

//** Ví dụ 1

//** Abstract class

publicabstractclassEmployee

{

//Khai báo Properties

publicabstractString ID

{

get;

set;

}

//Khai báo Method

publicabstractString Add();

publicabstractString Update();

}

}

//** Interface

publicinterfaceIEmployee

{

//Khai báo Properties

String ID

{

Trang 2

get;

set;

}

//Khai báo Method

String Add();

String Update();

}

}

Do được xem là bản thiết kế cho toàn Class, nên ngoài những khai báo Properties hoặc Method bắt buộc thì Abstarct class vẫn có thể chứa thêm các Method đã được triển khai hoặc các biến hằng Ngược lại thì Interface hoàn toàn không thể làm được điều đó //** Ví dụ 2

//** Abstract class

publicabstractclassEmployee

{

//Khai báo biến hằng (field and constant)

publicString id;

publicString name;

//Khai báo Properties

publicabstractString ID

{

get;

set;

}

//Khai báo Method

protectedabstractString Add();

//Method đã triển khai không dùng abstract

publicString Update()

{

return"Update";

}

}

}

//** Interface

publicinterfaceIEmployee

{

//Khai báo Properties

String ID

{

get;

set;

}

//Khai báo Method

String Add();

String Update();

}

}

Trang 3

Toàn bộ những Method và Properties trong Interface không cần khai báo Access modifier vì mặc định là Public Abstract class thì phải bắt buộc khai báo (Public, Protected) và bắt buộc

có từ khóa abstract trong các Method và Properties được khai báo trừu tượng.

1 // Xem ví dụ 2

Một điểm khác biệt nữa là ở lớp dẫn xuất của Interface class bắt buộc phải thực hiện toàn

bộ những Method và Properties đã khai báo, ngược lại lớp dẫn xuất của Abstract class chỉ

cần thực hiện những Method và Properties được khai báo trừu tượng (có từ khóa abstract)

//** Sử dụng Abstract class và Interface ở ví dụ 2

//** Lớp dẫn xuất Abstract class

publicclassEmployee1 : Employee

{

//Không cần khai báo lại biến hằng

//Triển khai Properties với từ khóa override

publicoverrideString ID

{

get{ returnid; }

set{ id = value; }

}

//Triển khai Method với access modifier như ở Abstract class

protectedoverrideString Add()

{

return"Add";

}

//Không cần triển khai lại Update() mà chỉ việc sử dụng

// Phần triển khai của Employee1

}

//** Lớp dẫn xuất Interface

publicclassEmployee1 : IEmployee

{

// Biến hằng được định nghĩa ở đây

protectedString id;

protectedString name;

// Triển khai Properties

String ID

{

get{ returnid; }

set{ id = value; }

}

//Triển khai tất cả các Method có ở Interface

publicString Add()

{

return"Add";

}

publicString Update()

{

return"Update";

Trang 4

}

// Phần triển khai của Employee1

}

Ở PHP, sự phân biệt này càng rõ ràng hơn với từ khóa implement cho Interface vàextend cho Abstract class Thực vậy, lớp dẫn xuất của Abstract class chỉ là mở rộng

(extend) còn Interface thì buộc là thực hiện (implement) tất cả

Reference: www.codeproject.com

Ngày đăng: 11/03/2014, 16:03

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w