1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

20 523 0

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 20
Dung lượng 341,97 KB

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

Nội dung

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.. Khái niệm: Một class mà được định nghĩa với từ khóa abstract và bao gồm n

Trang 1

- 

 -LẬP TRÌNH HƯỚNG ĐỐI

TƯỢNG

Đề tài:

INTERFACE (LỚP TRỪU

TƯỢNG)

Trang 2

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:

Trang 3

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

Nha Trang, tháng 5 năm 2016

Trang 4

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

Trang 5

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 đủ

Trang 6

Ø 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ì 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 :

Trang 7

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

{

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

Trang 8

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;

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;

Trang 9

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;

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

}

}

Trang 10

class Program

{

static void Main(string[] args)

{

GiamDoc objGiamDoc = new GiamDoc();

objGiamDoc.HoTen = "Nguyen Van A";

objGiamDoc.Tuoi = 30;

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();

Trang 11

} } }

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

Ø 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:

Trang 12

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ế

Mã lệnh:

using System;

using System.Collections.Generic;

using System.Text;

namespace Interface

{

//khai bao interface Bay

public interface IBay

{

void Bay();

}

Trang 13

//Lớp Chim thừa kế interface IBay

public class Chim : IBay

{

public void Bay()

{

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:

Trang 14

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

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()

{

Trang 15

Console.WriteLine("Chim: Chay");

}

}

//Lớp MayBay thừa kế 2 interfaces IBay, IChay

public class MayBay : IBay, IChay

{

public void Bay()

{

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:

Trang 16

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

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

Trang 17

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:

Ø 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:

- Có thể kế thừa một class và

nhiều interface

- Một abstract class có thể có

nhiều phương thức có thân bên

trong

- Các phương thức của

abstract class được thực thi sử

dụng từ khóa override

- 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 vừa khai báo các

phương thức abstract

- Chỉ có thể kế thừa nhiều interface

- Không có

- Không cần

- Thích hợp cho việc khai báo duy nhất các phương thức abstract

- Không có

Trang 18

- Có thể có hàm khởi tạo và

destructor

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

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)

Trang 19

{

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()

{

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

Trang 20

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)

{

itDoc.Read();

}

theDoc.Read();

theDoc.Talk();

}

}

}

Ngày đăng: 27/06/2016, 16:31

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w