Giao tiếp được thiết kế để hỗ trợ quyết định phương thức động lỳc thời gian chạy. Phương thức của giao tiếp sẽ được cài đặt bởi lớp
hay struct hiện thực giao tiếp.
Thụng thường, để gọi phương thức của một lớp, phương thức
cần hiện diện lỳc thời gian dịch, gọi là liờn kết sớm. Điều này làm cho mụi trường lớp trở nờn tĩnh và khụng cú khả năng mở rộng. Trong một hệ thống như vậy cõy phõn cấp càng ngày càng bị đẩy lờn cao.
Vỡ vậy, giao tiếp được định nghĩa để hạn chế việc ngày càng nhiều lớp con. Nú tỏch định nghĩa cỏc phương thức ra khỏi cõy phõn cấp kế thừa. Do đú cỏc lớp khụng cú quan hệ trong cõy phõn cấp cũng cú thể hiện thực cựng một giao tiếp. Ta cú thể thấy đõy thực sự là thế mạnh giao tiếp. Giao tiếp giải quyết tớnh phức tạp của đa kế thừa, một
lớp cú thể hiện thực nhiều giao tiếp. Và nhiều lớp cú thể hiện thực
cựng một giao tiếp, cú cài đặt cỏc phương thức khỏc nhau, thể hiện đặc điểm “một giao tiếp, nhiều phương thức” của tớnh đa hỡnh. Chỉ
khi chạy chương trỡnh, tựy thuộc vào đối tượng gọi phương thức, mới
biết phương thức trong lớp hiện thực giao tiếp tương ứng được gọi,
đú là liờn kết muộn.
Cỏc lớp hay struct hiện thực giao tiếp, phải cài đặt đầy đủ cỏc
phương thức của giao tiếp. Nếu chỉ cài đặt một số phương thức, thỡ lớp hay struct phải khai bỏo trừu tượng (abstract). Những phương
thức hiện thực giao tiếp phải khai bỏo public và non-static. Hỡnh thức khai bỏo của phương thức hiện thực phải giống hệt khi nú được đặc tả
trong khai bỏo giao tiếp.
Khai bỏo lớp và struct hiện thực giao tiếp tương tự như khai bỏo lớp kế thừa lớp cơ sở:
[public/internal] [abstract] class TờnLớp:
TờnGiaoDiện1,… TờnGiaoDiệnn {
public Kiểu TờnThuộcTớnh
{
get { } set { } }
public Kiểu TờnPhươngThức1(DanhSỏchThamĐối) {
//Thõn phương thức
}
Một giao tiếp cú thể khai bỏo một thuộc tớnh với phương thức get, nhưng lớp cài đặt giao tiếp cú thể khai bỏo thuộc tớnh này với cả hai phương thức get và set.
Một lớp A kế thừa lớp B và hiện thực giao tiếp C và D, khai bỏo
như sau:
class A : B, C, D { }
Chỳ ý rằng, lớp B được đặt trước giao tiếp C, D trong danh sỏch. Giao tiếp cú thể kế thừa một giao tiếp khỏc. Cỳ phỏp khai bỏo kế thừa tương tự lớp.
Vớ dụ: Hỡnh chữ nhật, hỡnh tam giỏc, hỡnh vuụng… đều là những
hỡnh phẳng cơ bản và đều cú ớt nhất một thuộc tớnh là một cạnh, cỏc phương thức như diện tớch, chu vi… Vỡ vậy, cần xõy dựng một giao
tiếp IHỡnh phẳng, và cỏc lớp HinhChuNhat, HinhVuong… sẽ hiện
thực cỏc phương thức khai bỏo trong giao tiếp. using System;
interface IHinhPhang {
int Canh1 { get; set; } int DienTich(); int ChuVi(); }
class HinhChuNhat : IHinhPhang {
public int Canh1 { get; set; } public int Canh2 { get; set; }
public HinhChuNhat(int ChieuDai, int ChieuRong) {
this.Canh1 = ChieuDai; this.Canh2 = ChieuRong; }
public int DienTich() {
}
public int ChuVi() {
return (Canh1 + Canh2) * 2; }
}
class MainClass {
public static void Main() {
IHinhPhang HCN = new HinhChuNhat(2, 3);
Console.WriteLine("Hinh chu nhat co chieu dai la {0} va chieu rong la {1}", HCN.Canh1, ((HinhChuNhat)HCN).Canh2); Console.WriteLine("Dien tich la {0}", HCN.DienTich());
Console.WriteLine("Chu vi la {0}", HCN.ChuVi()); }
}
CÂU HỎI CHƯƠNG 3
Cõu 1. Mối liờn quan giữa đối tượng và lớp?
Cõu 2. Sự khỏc nhau giữa biến tĩnh và biến đối tượng, phương thức tĩnh và phương thức đối tượng?
Cõu 3. Sự khỏc nhau giữa biến cục bộ và biến thành viờn?
Cõu 4. Phương thức tĩnh cú thể truy cập được thành viờn nào và khụng truy cập được thành viờn nào trong một lớp?
Cõu 5. Cỏc điều khiển truy cập biến thành viờn và phương thức trong C#
Cõu 6. Thế nào là thuộc tớnh (property)?
Cõu 7. So sỏnh delegate và event?
Cõu 8. Cỏc chức năng nào của C# thể hiện tớnh đúng gúi?
Cõu 9. Phương thức khởi tạo là gỡ? Cú thể gọi phương thức khởi
Cõu 10. Nạp chồng phương thức là gỡ? Cú thể nạp chồng phương
thức khởi tạo?
Cõu 11. Sự khỏc nhau giữa tham đối thực sự và tham đối hỡnh thức
của một phương thức?
Cõu 12. Cỏc kiểu truyền tham đối trong C#?
Cõu 13. Sự khỏc nhau giữa từ khúa base và từ khúa this?
Cõu 14. Khỏi niệm, định nghĩa và sử dụng khụng gian tờn?
Cõu 15. í nghĩa của lệnh using?
Cõu 16. So sỏnh lớp trừu tượng và giao tiếp?
Cõu 17. Từ khúa sealed sử dụng cho khai bỏo cỏc thành phần nào?
Cõu 18. Từ khúa abstract sử dụng cho khai bỏo cỏc thành phần nào?
Cõu 19. Viết chồng phương thức là gỡ?
Cõu 20. Tham đối kiểu tổng quỏt sử dụng trong trường hợp nào?
Cõu 21. Khai bỏo giao tiếp gồm cỏc thành viờn nào?
Cõu 22. So sỏnh giữa khai bỏo lớp kế thừa lớp cha, và khai bỏo lớp cài đặt giao tiếp?
Cõu 23. Cỏc tớnh năng nào của C# thể hiện tớnh đa hỡnh?
BÀI TẬP CHƯƠNG 3
Bài 1. Xõy dựng phương thức cho lớp ngõn hàng. Ngõn hàng này chỉ
chấp nhận tiền lẻ là tờ 500 đồng
Thuộc tớnh của lớp ngõn hàng: số tờ 500 đồng cú trong
ngõn hàng
Phương thức trả về số tờ 500 đồng cú trong ngõn hàng
Phương thức thay đổi số tờ 500 đồng trong ngõn hàng với
Phương thức trả về true nếu cú đủ tiền trong ngõn hàng để
mua một mặt hàng. Giỏ tiền của mặt hàng là tham đối
truyền vào phương thức, và tớnh bằng ngàn đồng. Phương
thức sẽ trả về false nếu khụng đủ tiền trả cho mặt hàng. Vớ dụ, nếu giỏ là 50 ngàn đồng, tham đối sẽ là 50
Phương thức xúa tất cả tiền trong ngõn hàng và trả về số
tiền trong ngõn hàng tớnh bằng ngàn đồng. Vớ dụ, nếu ngõn
hàng chứa 7 tờ 500 đồng, phương thức trả về 3.5
Phương thức xúa đủ số tiền để trả cho mặt hàng cú giỏ tớnh bằng ngàn đồng. Vớ dụ, nếu mặt hàng cú giỏ 12.3 ngàn
đồng, phương thức sẽ xúa 24 tờ 500 đồng trong ngõn hàng. Nếu khụng cú đủ số tiền để trả cho mặt hàng, rồi thỡ khụng xúa bất kỳ số tiền nào từ ngõn hàng và hiển thị một thụng
bỏo lỗi
Cho trước một đối tượng ngõn hàng khỏc và một số tờ 500 đồng nào đú, phương thức này chuyển số tờ 500 đồng này từ ngõn hàng khỏc đến ngõn hàng này. Nếu khụng đủ số tờ 500 đồng trong ngõn hàng khỏc để chuyển, phương thức sẽ
chuyển tất cả số tờ trong ngõn hàng khỏc đến ngõn hàng này
Bài 2. Xõy dựng lớp Tam giỏc gồm:
Thuộc tớnh độ dài cạnh thứ nhất, độ dài cạnh thứ hai, độ dài cạnh thứ ba
Phương thức nhập độ dài 3 cạnh Phương thức tớnh chu vi tam giỏc Phương thức tớnh diện tớch tam giỏc
Phương thức kiểm tra ba cạnh đỳng của tam giỏc khụng Phương thức xỏc định loại tam giỏc
Bài 3. Tạo lớp số phức bao gồm:
Phương thức khởi tạo số phức Phương thức in số phức Phương thức nạp chồng phộp cộng 2 số phức Phương thức nạp chồng phộp trừ 2 số phức Phương thức nạp chồng phộp nhõn 2 số phức Phương thức nạp chồng phộp chia 2 số phức
Hướng dẫn: Viết lớp SoPhuc gồm cỏc thuộc tớnh phần thực r, phần ảo
i và cỏc phương thức theo yờu cầu, với cỏch tớnh như sau:
Cộng, trừ 2 số phức: r = r1 r2 i = i1 i2 Nhõn 2 số phức: r = r1*r2 – i1*i2 i = r1*i2 + r2*i1 Chia 2 số phức: r = (r1*r2 + i1*i2) / (r2*r2 + i2*i2) i = (i1*r2 – r1*i2) / (r2*r2 + i2*i2)
Bài 4. Tạo lớp phõn số bao gồm: Thuộc tớnh: tử số, mẫu số Phương thức khởi tạo phõn số Phương thức in phõn số
Phương thức tớnh ước số chung lớn nhất Phương thức rỳt gọn phõn số
Phương thức nạp chồng phộp cộng 2 phõn số Phương thức nạp chồng phộp trừ 2 phõn số Phương thức nạp chồng phộp nhõn 2 phõn số
Phương thức nạp chồng phộp chia 2 phõn số Phương thức nạp chồng phộp so sỏnh hai phõn số
Phương thức nạp chồng phộp chuyển kiểu phõn số thành số thực
Bài 5. Xõy dựng ứng dụng quản lý sinh viờn. Lớp SinhVien gồm: Thuộc tớnh: mó sinh viờn, họ tờn sinh viờn, năm sinh, lớp,
địa chỉ, điểm tổng kết
Phương thức khởi tạo cỏc thuộc tớnh của lớp SinhVien
Cỏc phương thức get và set để nhận và thiết lập cỏc giỏ trị
thuộc tớnh cần thiết
Phương thức trả về xếp loại của sinh viờn, biết rằng sinh
viờn xếp loại Điểm tổng kết Xếp loại 9 - 10 Xuất sắc 8 - <9 Giỏi 7 - <8 Khỏ 5 - <7 Trung bỡnh <5 Khụng đạt Xõy dựng lớp DSSV bao gồm:
Thuộc tớnh: Mảng cỏc đối tượng sinh viờn, số phần tử
sinh viờn hiện cú trong mảng
Phương thức thờm một sinh viờn vào mảng Phương thức thống kờ số lượng sinh viờn đạt
Phương thức tỡm sinh viờn tương ứng với mó sinh viờn chỉ rừ
Phương thức xúa sinh viờn tương ứng với mó sinh viờn
Phương thức kiểm tra sinh viờn cú thuộc lớp nào đú khụng Phương thức tỡm sinh viờn cú điểm tổng kết lớn nhất
Bài 6. Xõy dựng ứng dụng quản lý danh sỏch cỏc sỏch trong thư viện. Xõy dựng lớp Sach gồm:
Thuộc tớnh: mó sỏch, tờn sỏch, năm xuất bản, đơn giỏ, số lượng
Phương thức khởi tạo cỏc thuộc tớnh của lớp Sach
Cỏc phương thức get và set để nhận và thiết lập cỏc giỏ trị
thuộc tớnh cần thiết
Phương thức tớnh giỏ sỏch = số lượng x đơn giỏ Phương thức tớnh giỏ tiền vận chuyển biết rằng:
Giỏ vận chuyển
Nếu số lượng <=50 0
Ngược lại, nếu số lượng <=500 2% của giỏ sỏch
Ngược lại 5% của giỏ sỏch
Xõy dựng lớp DMSach, để quản lý danh sỏch cỏc sỏch trong thư viện
bao gồm:
Thuộc tớnh: mảng cỏc đối tượng sỏch, số lượng sỏch hiện cú
trong mảng
Phương thức thờm một sỏch vào mảng
Phương thức tớnh tổng giỏ sỏch (kể cả giỏ vận chuyển)
trong mảng
Phương thức xúa sỏch tương ứng với mó sỏch chỉ rừ
Phương thức tỡm sỏch cú số lượng lớn nhất trong thư viện Phương thức tỡm sỏch cú mó sỏch chỉ rừ
Phương thức đếm cỏc sỏch cú số lượng từ 50 đến 100
Bài 7. Để quản lý nhõn viờn trong cụng ty, cỏc thụng tin chung của nhõn viờn lưu trữ là:
Mó nhõn viờn, họ tờn, năm sinh
Cú hai loại nhõn viờn: biờn chế và hợp đồng. Nhõn viờn biờn chế, bổ sung thụng tin: hệ số lương, lương cơ bản.
Nhõn viờn hợp đồng, bổ sung thụng tin: mức lương
Yờu cầu: Tạo lớp trừu tượng NhanVien bao gồm cỏc thuộc tớnh và
phương thức:
Thuộc tớnh: Mó nhõn viờn, Họ tờn, Năm sinh Phương thức khởi tạo cỏc thuộc tớnh nhõn viờn
Phương thức ảo (virtual) hiển thị thụng tin nhõn viờn
Phương thức trừu tượng (abstract) tớnh lương
Tạo lớp NVBC kế thừa lớp NhanVien bao gồm cỏc thuộc tớnh và
phương thức:
Thuộc tớnh: Hệ số lương, Lương cơ bản
Phương thức khởi tạo cỏc thuộc tớnh nhõn viờn biờn chế Viết chồng phương thức hiển thị thụng tin nhõn viờn
Cài đặt phương thức tớnh lương
Tạo lớp NVHD kế thừa lớp NhanVien gồm cỏc thuộc tớnh và
phương thức:
Thuộc tớnh: Mức lương
Phương thức khởi tạo cỏc thuộc tớnh của nhõn viờn hợp đồng Viết chồng phương thức hiển thị thụng tin nhõn viờn
Cài đặt phương thức tớnh lương
Tạo lớp DSNV bao gồm cỏc thuộc tớnh và phương thức:
Phương thức khởi tạo danh sỏch nhõn viờn vừa biờn chế vừa
hợp đồng
Phương thức thờm một nhõn viờn vào cuối danh sỏch Phương thức in danh sỏch nhõn viờn
Phương thức sắp xếp danh sỏch nhõn viờn theo lương giảm dần Phương thức đếm số nhõn viờn biờn chế
Phương thức tỡm nhõn viờn cú mó nhõn viờn chỉ rừ
Phương thức tỡm nhõn viờn cú lương nhỏ nhất đầu tiờn trong mảng
Phương thức tớnh tổng quỹ lương phải trả
TÀI LIỆU THAM KHẢO
[1] Nguyễn Ngọc Bỡnh Phương, Thỏi Thanh Phong, Cỏc giải
phỏp lập trỡnh C#, NXB Giao thụng vận tải, 2006
[2] Erik brown, Windows Forms Programming with C#, Manning Publications Co., 2002
[3] Eric Gunnerson, A Programmer's Introduction to C#, Apress publisher, 2000
[4] Jack Xu, Ph.D, Practical C# Charts and Graphics, UniCAD Publishing, 2007
[5] James W. Cooper, C# Design Patterns, Addison-Wesley publisher, 2006
[6] Joseph Albahari, C# 4.0 in a Nutshell, O’Reilly Media Inc., 2006
[7] Matthew MacDonald, Pro .NET 2.0 Windows Forms and Custom Controls in C#, Apress publisher, 2006
Chịu trỏch nhiệm xuất bản
NGUYỄN THỊ THU HÀ
Biờn tập : NGUYỄN TIẾN SỸ
Trỡnh bày sỏch : THANH HƯƠNG
Sửa bản in : NGUYỄN TIẾN SỸ
Thiết kế bỡa : TRẦN HỒNG MINH
Nhà xuất bản thông tin và truyền thông Trụ sở chính: Số 9, ngõ 90, Ngụy Như Kon Tum, Thanh Xuân, Hà Nội
ĐT Biên tập: 04.35772143 ĐT Phát hành: 04.35772138
E-mail: nxb.tttt@mic.gov.vn Fax: 04.35772037
Website: www.nxbthongtintruyenthong.vn
Chi nhánh TP. Hồ Chí Minh: 8A đường D2, Phường 25, Q. Bình Thạnh, TP. Hồ Chí Minh
Điện thoại: 08.35127750, 08.35127751 Fax: 08.35127751
E-mail: cnsg.nxbtttt@mic.gov.vn
Chi nhánh TP. Đà Nẵng: 42 Trần Quốc Toản, quận Hải Châu, TP. Đà Nẵng
Điện thoại: 0511.3897467 Fax: 0511.3843359
______________________________________________________________________ In 1.000 bản, khổ 16ì24 cm tại Cụng ty In Hải Nam
Số đăng ký kế hoạch xuất bản: 247-2012/CXB/1-46/TTTT Số quyết định xuất bản: 202/QĐ-NXB TTTT ngày 07/8/2012 In xong nộp lưu chiểu thỏng 8 năm 2012