Tải bản đầy đủ (.docx) (20 trang)

đề tài nguyên cứu interface môn Lập Trình hướng đối tượng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (283.01 KB, 20 trang )

TRƯỜNG ĐẠI HỌC THÔNG TIN LIÊN LẠC
KHOA CÔNG NGHỆ THÔNG TIN
-----  -----

LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Đề tài:

INTERFACE (LỚP TRỪU TƯỢNG)


INTERFACE

Nha Trang, tháng 5 năm 2016

TRƯỜNG ĐẠI HỌC THÔNG TIN LIÊN LẠC
KHOA CÔNG NGHỆ THÔNG TIN

ĐỀ TÀI

Interface (Lớp trừu tượng)
GVHD: Ngoan

Lớp: ĐHCN1A
Nhóm sinh viên thực hiện:






Huỳnh Quốc Đạt (nhóm


trưởng)
Triệu Nam Dương
Lê Văn Cường
Nguyễn Duy Thanh Tùng

2


INTERFACE

Nha Trang, tháng 5 năm 2016

3


INTERFACE

NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................

..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................

4


INTERFACE

Lớp trừu tượng (Abstract Class) là lớp dùng để định
nghĩa những thuộc tính và hành vi chung của những
lớp khác.. Hay nói cách khác: Lớp trừu tượng là lớp
dùng để khai báo thuộc tính và phương thức cho các
lớp khác sử dụng.
Ø (Lớp trừu tượng không cho phép khởi tạo tham số,
chỉ khai báo mà thôi).

Ø Lớp trừu tượng được dùng như một lớp cha (base
class) của các lớp có cùng bản chất.
Ø Bản chất ở đây được hiểu là kiểu, loại, nhiệm vụ
của class.
Ø Mỗi lớp dẫn xuất (derived class - lớp con) có thể
thừa kế từ một lớp trừu tượng.
Ø Từ khóa abstract được dùng để định nghĩa một Lớp
trừu tượng.
Ø Những lớp được định nghĩa bằng cách dùng từ
khóa abstract thì không cho phép khởi tạo đối tượng
(instance) của lớp ấy.
1. Khái niệm:
Một class mà được định nghĩa với từ khóa abstract
và bao gồm nhiều hơn một phương thức mà không có
thân bên trong khi đó ta gọi là abtract class. Nó có thể
bao gồm nhiều phương thức khác có thể thực thi trong
nó.
Một abstract class cũng tương tự abstract class cũng
có thể khai báo các phương thức abstract trong nó.
Nhưng khác một chỗ là một interface không thể thực thi
bất cứ một phương thức nào trong nó.
2. Mục đích:
Ø Một abstract class có thể coi là một class cơ sở
không đầy đủ .
Ø Abstract class có thể coi như một quy tắc chung cho
các sub class lấy từ nó. Khi các class lấy từ nó thì

5



INTERFACE

bắt buộc phải có đầy đủ các phương thức abstract
đã được khai báo trong clas abstract.
3. Định nghĩa :
Ø Một astract class thực thi các phương thức tương
đối giống nhau với các class con của nó. Thêm vào
đó nó có thể có thêm các phương thức khác mà các
class con đề thực thi chúng các phương thức này
được gọi là các phương thức abstract .
Ø Một class mà có từ khóa abstract và có nhều hơn
một phương thức mà không được thực thi bên trong
nó được gọi là abstract class.
Ø Trong trường hợp một class mà có nhiều hơn một
phương thức không có thân bên trong bạn không thể
sư dụng với từ khóa new.
Ø Một abstract class không phải là bắt buộc có duy
nhất các phương thức abstract .Và các abstract
class thì không thể ngăn chặn việc kế thừa. Không
thể khóa.4. Sự thực thi:
Ø Một abstract class có thể được thực thi theo cách
tương tự class cơ sở bình thường .Các subclass kể
thừa từ abstract class có thể nạp chồng và thực thi
các method. Thêm vào đó các subclass thực thi các
phương thức được thực thi với tên và các tham số
giống hệt nhau.
Ø Nếu các sắp class không thực một trong số các
phương thức là abstract trong class abstract thì trình
biên diẹc sẽ báo lỗi. Chương trình sẽ không thể chạy
được.

Ví dụ 1 :
using System;
using System.Collections.Generic;
using System.Text;
namespace Abstract_Class
{
6


INTERFACE

//Định nghĩa 1 lớp trừu tượng
abstract class NhanVien
{
protected string HoTen;
protected int Tuoi;
protected bool GioiTinh;
}
class Program
{
static void Main(string[] args)
{
NhanVien objPerson = new NhanVien();
}
}
}
5. Các acbtract Method:
Ø Các phương thức được khai báo trong abstract
class mà không có thân bên trong được gọi là
abstract class. Nó được thực thi trong class kế thừa.

Ø Tương tự như một quy tắc của phương thức . Với
một kiểu truy suất , kiểu trả về ,và dâu hiệu một
abstract class không có thân và các phương thức
được khai báo kết thúc với từ khóa.
Ví dụ 2: Định nghĩa 1 lớp trừu tượng có các thuộc
tính & phương thức chung cho các lớp dẫn xuất sử
dụng.
o Chúng ta nhận thấy, mối Nhân viên đều có
các thuộc tính như: HoTen, Tuoi, GioiTinh.
Nhưng ChucVu thì khác nhau.
o Ví dụ: Giám đốc có ChucVu là Giám đốc, Kế
toán có ChucVu là Kế toán...
o Nên thuộc tính ChucVu ta khai báo trong lớp
dẫn xuất - lớp con/derived class.
using System;
7


INTERFACE

using System.Collections.Generic;
using System.Text;
namespace Abstract_Class
{
//Định nghĩa 1 lớp trừu tượng
abstract class NhanVien
{
protected string HoTen;
protected int Tuoi;
protected bool GioiTinh;

//Khai báo 1 phương thức trừu tượng
bằng từ khoá abstract
public abstract void CongViec();
}
class Program
{
static void Main(string[] args)
{
}
}
}
Định nghĩa các lớp dẫn xuất GiamDoc và
KeToan như sau:
using System;
using System.Collections.Generic;
using System.Text;
namespace Abstract_Class
{
//Định nghĩa 1 lớp trừu tượng
abstract class NhanVien
{
public string HoTen;
8


INTERFACE

public int Tuoi;
public bool GioiTinh;
//Khai báo 1 phương thức trừu tượng

bằng từ khoá abstract
public abstract void CongViec();
}
//Định nghĩa lớp Dẫn xuất GiamDoc
class GiamDoc : NhanVien
{
public string ChucVu;
public override void CongViec()
{
//Code here
}
}
//Định nghĩa lớp Dẫn xuất KeToan
class KeToan : NhanVien
{
public string ChucVu;
public override void CongViec()
{
//Code here
}
}
class Program
{
static void Main(string[] args)
{
GiamDoc objGiamDoc = new
GiamDoc();
objGiamDoc.HoTen = "Nguyen Van A";
objGiamDoc.Tuoi = 30;
9



INTERFACE

objGiamDoc.GioiTinh = true;
objGiamDoc.ChucVu = "Giam Doc";
System.Console.WriteLine("Lop Dan
xuat 'GiamDoc': {0}, {1}, {2}, {3}",
objGiamDoc.HoTen,
objGiamDoc.Tuoi,
objGiamDoc.GioiTinh,
objGiamDoc.ChucVu);
KeToan objKeToan = new KeToan();
objKeToan.HoTen = "Nguyen Van B";
objKeToan.Tuoi = 26;
objKeToan.GioiTinh = true;
objKeToan.ChucVu = "Ke Toan";
System.Console.WriteLine("Lop Dan
xuat 'Ke Toan': {0}, {1}, {2}, {3}",
objKeToan.HoTen, objKeToan.Tuoi,
objKeToan.GioiTinh, objKeToan.ChucVu);
System.Console.ReadLine();
}
}
}
6. Lớp Interface và thực thi nhiều interfaces:
Các subclass trong C# không thể kế thừa nhiều hơn
một class. Chính bởi điều này C# không hỗ trợ đa kế
thừa. Từ hạn chế này interface được giới thiệu. Một class
trong C# thực thi được nhiều interface.

Một vài định nghĩa:
Ø Giao diện (Interface): là một chức năng mà ta có thể
thêm và bất kì class nào. Chức năng ở đây không
đồng nghĩa với phương thức (hoặc hàm). Interface
có thể bao gồm nhiều hàm/phương thức và tất cả
chúng cùng phục vụ cho một chức năng.

10


INTERFACE

Ø Như vậy, Interface được dùng để mô tả một "bản
thiết kế" cho một chức năng của class. Nếu muốn
tạo một bản thiết kế, hãy sử dụng abstract class. Một
bản thiết kế tất nhiên sẽ có những thứ đã được dựng
sẵn và có những thứ là abstract.
Ø Interface không phải là lớp. Các lớp dẫn xuất từ 1
Interface đều phải định nghĩa đầy đủ các phương
thức và thuộc tính kế thừa từ Interface.
Ø Mục đích của một Interface là để định nghĩa những
khả năng mà chúng ta muốn có trong một lớp.
Cài đặt một Giao diện:
Ø Để hiểu rõ về Interface hơn, chúng ta tìm hiểu ví dụ
sau:
Giả sử có 2 lớp: Lớp Máy bay & Lớp Chim. Ta thấy
Máy bay có chức năng bay. Chim cũng có khả năng
bay.
Ví dụ 1: Tạo Interface: Bay (IBay) cho lớp May bay &
Lớp Chim thừa kế.


11


INTERFACE

Mã lệnh:
using System;
using System.Collections.Generic;
using System.Text;
namespace Interface
{
//khai bao interface Bay
public interface IBay
{
void Bay();
}
//Lớp Chim thừa kế interface IBay
public class Chim : IBay
{
public void Bay()
12


INTERFACE

{
Console.WriteLine("Chim: Bay");
}
}

//Lớp MayBay thừa kế interface IBay
public class MayBay : IBay
{
public void Bay()
{
Console.WriteLine("May Bay: Bay");
}
}
class Program
{
static void Main(string[] args)
{
Chim chim = new Chim();
chim.Bay();
MayBay maybay = new MayBay();
maybay.Bay();
System.Console.ReadLine();
}
}
}
Cài đặt nhiều Giao diện:
Trong ngôn ngữ C# cho phép chúng ta thực thi nhiều
hơn một giao diện. Các giao diện cách nhau bằng dấu
phẩy ",".
Ở ví dụ trên, chúng ta thấy rằng: Chim & Máy bay
đều có khả năng Bay. Nhưng đồng thời Chim & Máy bay
cũng có khả năng Chạy. Nên ta khai báo thêm 1 Interface
Chạy có tên IChay.
13



INTERFACE

Ví dụ 2: Cách C# thực thi nhiều giao diện.
using System;
using System.Collections.Generic;
using System.Text;
namespace Interface
{
//khai báo interface Bay
public interface IBay
{
void Bay();
}
//khai báo interface Chạy
public interface IChay
{
void Chay();
}
//Lớp Chim thừa kế 2 interfaces IBay, IChay
public class Chim : IBay, IChay
{
public void Bay()
{
Console.WriteLine("Chim: Bay");
}
public void Chay()
{
Console.WriteLine("Chim: Chay");
}

}
//Lớp MayBay thừa kế 2 interfaces IBay, IChay
public class MayBay : IBay, IChay
{
public void Bay()
14


INTERFACE

{
Console.WriteLine("May Bay: Bay");
}
public void Chay()
{
Console.WriteLine("May Bay: Chay");
}
}
class Program
{
static void Main(string[] args)
{
Chim chim = new Chim();
chim.Bay();
chim.Chay();
MayBay maybay = new MayBay();
maybay.Bay();
maybay.Chay();
System.Console.ReadLine();
}

}
}
7. Định nghĩa dẫn xuất:
Một interface chỉ bao gồm duy nhất các thành phần
abstract. Khác với abstract class một interface không
thực thi bất kỳ một phương thức nào. Nhưng giống với
abstract class là một interace không thể new một đối
tượng mới. Một interface có thể được thực thi duy nhất
từ một class hoặc từ các interface khác.

15


INTERFACE

Một interface được khai báo dử dụng từ khóa
“interface”. Mặc định các phần tử trong interface là public
với quyền truy suất.
Một interface không bao gồm hằng số, biến,
destructer, các thành phần static.
8. Thực thi interface:
Ø Một thực thi được thực hiện từ một class tương tự
việc kế thừa. Khi thực hiện việc thực thi một
interface trong một cass bạn cần thiết phải thực thi
tất cả các thành phần trong interface. Nếu tất cả các
phần tử không được thực thi chương trình không thể
chạy. Trình biên dịch sẽ báo lỗi.
Ø Các phương thức được thực thi trong các class sẽ
với tên và dấu hiệu giống như đã được khai báo
trong interface.

9. Các interface và việc thực thi nhiều interface:
Ø Nhiều interface có thể được thực thi trong một class
đơn. Bạn có thể thực thi nhiều interface bằng cách
giữa tên các interface bạn thêm vào dấu phẩy.
Ø Một class thực thi nhiều interface bắt buộc phải thực
hiện toàn bộ các phương thức được khai báo là
abstract trong các interface. Không cần phải sử dụng
từ khóa override.
10.Thực thi interface một cách rõ ràng:
Một class có thể thực thi các interface một cách
đúng đắn nếu các interface có các phương thức đặt tên
chính xác.
11. Interface kế thừa interface:
Một inerface có thể kế thừa nhiều interface nhưng
không có thể thực thi chúng. Sự thực thi đó có thể phải
nhờ một class.
12. Điểm giống nhau của abstract class và interface:
16


INTERFACE

Ø Cả hai đều không thể khởi tạo đối tượng.
Ø Cả hai đều khai báo các phương thức nhưng không
thực hiện chúng.
Ø Cả hai đều bao gồm các phương thức abstract.
Ø Cả hai đều được thực thi từ các class kế thừa.
Ø Cả hai đều có thể kế thừa từ nhiều interface.
13. Sự khác nhau:
Abstract class

Interfaces
- Có thể kế thừa một class và nhiều
interface
- Một abstract class có thể có nhiều- Chỉ có thể kế thừa nhiều
phương thức có thân bên trong.
interface.
- Các phương thức của abstract- Không có.
class được thực thi sử dụng từ khóa
override.
- Không cần.
- Là lựa chọn thích hợp khi vừa khai
báo các phương thức thông thường - Thích hợp cho việc khai
vừa khai báo các phương thứcbáo duy nhất các phương
abstract.
thức abstract.
- Có thể có hàm khởi tạo và
destructor
- Không có.
14. Cài đặt Giao diện một cách tường minh:
Một lớp có thể cài đặt nhiều giao diện nên có thể xảy
ra trường hợp đụng độ về tên khi hai giao diện có cùng
một tên hàm. Để giải quyết xung đột này ta khai báo cài
đặt một cách tường minh hơn.
Ví dụ: Nếu ta có hai giao diện IStorable và ITalk đều cùng
có phương thức Read (). Lớp Document sẽ cài đặt hai
giao diện này. Khi đó ta ta phải thêm tên giao diện vào
trước tên phương thức.
17



INTERFACE

Mã lệnh :
using System;
using System.Collections.Generic;
using System.Text;
namespace Interface_Test
{
interface IStorable
{
void Read();
void Write();
}
interface ITalk
{
void Read();
void Talk();
}
public class Document : IStorable, ITalk
{
// document constructor
public Document(string s)
{
Console.WriteLine("Creating document with:
{0}", s);
}
// tạo read của IStorable
public virtual void Read()
{
Console.WriteLine("Implementing

IStorable.Read");
}
public void Write()
{

18


INTERFACE

Console.WriteLine("Implementing
IStorable.Write");
}
// cài đặt phương thức Read của ITalk
void ITalk.Read()
{
Console.WriteLine("Implementing
ITalk.Read");
}
public void Talk()
{
Console.WriteLine("Implementing ITalk.Talk");
}
}
class Program
{
static void Main(string[] args)
{
// create a document object
Document theDoc = new Document("Test

Document");
// Ép kiểu để có thể gọi IStorable.Read()
IStorable isDoc = theDoc as IStorable;
if (isDoc != null)
{
isDoc.Read();
}
// Ép kiểu để có thể gọi ITalk.Read()
ITalk itDoc = theDoc as ITalk;
if (itDoc != null)
19


INTERFACE

{
itDoc.Read();
}
theDoc.Read();
theDoc.Talk();
}
}
}

20



×