TÓM TẮT
Đa hình là một trong bốn tính chất đặc trưng của lập trình hướng đối tượng, đây cũng chính là tính
chất khó hiểu nhất, khó phân biệt trong khi lập trình. Trong bài báo này, tôi tập trung vào các yếu tố
tạo nên tính đa hình cho đối tượng trong lập trình. Tính đa hình thường liên quan đến kiểu dữ liệu được
truyền vào đối tượng và phương thức truyền tham số. Kiểu dữ liệu được thể hiện ở giao diện, phương
thức truyền tham số được thể hiện ở việc nạp chồng.
6 trang |
Chia sẻ: thanhle95 | Lượt xem: 526 | Lượt tải: 1
Bạn đang xem nội dung tài liệu Tính đa hình trong lập trình hướng đối tượng, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
KHCN 2 (31) - 2014 94
KHOA HỌC CÔNG NGHỆ - ĐẠI HỌC HÙNG VƯƠNG
involved in dehydration- and cold-inducible gene expression. Biochem Biophys Res Commun
290:998-1009
9. Tamura K, Peterson D, Peterson N, Stecher G, Nei M, Kumar S. 2011. MEGA5: molecular
evolutionary genetics analysis using maximum likelihood, evolutionary distance, and maximum
parsimony methods. Mol Biol Evol 28:2731-9
10. Wind JJ, Peviani A, Snel B, Hanson J, Smeekens SC. 2013. ABI4: versatile activator and
repressor. Trends in Plant Science 18:125-32
11. Wu GA, Prochnik S, Jenkins J, Salse J, Hellsten U, et al. 2014. Sequencing of diverse
mandarin, pummelo and orange genomes reveals complex history of admixture during citrus
domestication. Nat Biotech 32:656-62
12. Yamaguchi-Shinozaki K, Shinozaki K. 2006. Transcriptional regulatory networks in cellular
responses and tolerance to dehydration and cold stresses. Annu. Rev. Plant Biol. 57:781-803
13. Zhang ZW, Feng LY, Cheng J, Tang H, Xu F, et al. 2013. The roles of two transcription
factors, ABI4 and CBFA, in ABA and plastid signalling and stress responses. Plant Mol Biol 83:445-58
SUMMARY
IDENTIFICATION OF A DREB3 GENE
FROM CLEMENTINE (CITRUS CLEMENTINA) BY IN SILICO METHOD
Bui Thi Hai Yen, Nguyen Thi Anh, Cao Phi Bang
Hung Vuong University
DREB3 belong to DREB (dehydration-responsive element binding) transcription factor family which
plays an important role in plants. In this work, we identified a DREB3 gene in Clementine by using in
silico method. CclDREB3 is similarity to other DREBs belonging to A3 subgroup in many plant species.
The full-length genomic sequence of CclDREB3 gene includes 1050 pb. This gene encodes a protein
containing 349 amino acid which is weekly basic with pI value of 7.10. 3D modeling structure shows
that the AP2 conserved domain of CclDREB3 has a α helix and three-stranded antiparallel β sheet.
Keywords: Clementine, DREB3, physico-chemical properties, in silico, 3D modeling, gene
dentification.
Nguyễn Đình Như
Trường Đại học Hùng Vương
TÓM TẮT
Đa hình là một trong bốn tính chất đặc trưng của lập trình hướng đối tượng, đây cũng chính là tính
chất khó hiểu nhất, khó phân biệt trong khi lập trình. Trong bài báo này, tôi tập trung vào các yếu tố
tạo nên tính đa hình cho đối tượng trong lập trình. Tính đa hình thường liên quan đến kiểu dữ liệu được
truyền vào đối tượng và phương thức truyền tham số. Kiểu dữ liệu được thể hiện ở giao diện, phương
thức truyền tham số được thể hiện ở việc nạp chồng.
Từ khóa: Đa hình, lập trình hướng đối tượng, nạp chồng.
TÍNH ĐA HÌNH TRONG LẬP TRÌNH
HƯỚNG ĐỐI TƯỢNG
KHCN 2 (31) - 2014 95
KHOA HỌC CÔNG NGHỆ - ĐẠI HỌC HÙNG VƯƠNG
1. ĐẶT VẤN ĐỀ
Khi đề cập đến lập trình hướng đối tượng người ta hay nhắc đến bốn tính chất căn bản (hay
còn gọi là bốn nguyên lý) đó là: tính trừu tượng (Abstraction), tính kế thừa (Inheritance), tính đóng
gói (Encapsulation), tính đa hình (Polymorphism). Tuy nhiên, việc nắm rõ cả bốn tính chất này để
vận dụng linh hoạt trong việc lập trình vào các bài toán phức tạp là không hề đơn giản. Trong đó,
tính đa hình ít được chú ý hơn vì nó khó nhận biết và ít được thể hiện trong lập trình.
Đa hình: đa là nhiều, hình là hình thái. Đa hình nghĩa là có nhiều hình thái. Ở đây đang nói
đến một đối tượng nhưng lại có nhiều hình thái khác nhau. Chúng ta quan tâm đến việc khi nào, tại
sao đối tượng đó lại có nhiều hình thái.
Trong thực tế, một đối tượng có thể có những vai trò khác nhau khi đặt vào những hoàn cảnh
khác nhau. Ví dụ 1: Một đối tượng người là X khi ở trường học sẽ đóng vai trò là học sinh, sinh viên
có nhiệm vụ là học tập, thi cử. Khi về nhà lại đóng vai trò là một người con hoặc người anh, người
chị trong gia đình có nhiệm vụ giúp đỡ gia đình. Khi ra chợ lại đóng vai trò là người mua hàng và
có thể mua, bán hàng hóa. Đi làm lại đóng vai trò là nhân viên có nhiệm vụ làm việc. Với mỗi vai
trò như vậy, đối tượng X sẽ có những hành vi khác nhau phù hợp với từng vai trò của mình. Do
vậy, ta có thể hiểu tính đa hình của đối tượng là trong từng trường hợp, hoàn cảnh khác nhau, đối
tượng có khả năng thực thi các hành vi, ứng xử khác nhau.
Ví dụ 2: Một đội bóng đá gồm các cầu thủ chơi ở những vị trí khác nhau: tiền đạo, tiền vệ,
hậu vệ, thủ môn, Mỗi người có cách “đá bóng” khác nhau tùy vào vị trí của mình nhưng chung
quy lại thì các cầu thủ đều hiểu được thế nào là đá bóng. Mỗi khi có hiệu lệnh đá bóng thì các cầu
thủ đều biết phải đá như thế nào.
Đó là các ví dụ đối với con người, còn với các đối tượng (Object) trong lập trình thì sao? Liệu
các đối tượng có hiểu những hoàn cảnh khác nhau của mình để đưa ra các hành vi phù hợp hay
không? Việc này sẽ dẫn đến những thiết kế tăng cường sự đa hình cho các đối tượng khi lập trình.
Lúc này giao diện (Interface) sẽ đóng vai trò quan trọng.
Tính đa hình thường liên quan đến kiểu dữ liệu (Data Type) được truyền vào và phương thức
(Method) truyền tham số cho đối tượng. Kiểu dữ liệu được thể hiện ở giao diện, phương thức truyền
tham số được thể hiện ở việc nạp chồng (Overloading).
2. CÁC YẾU TỐ TẠO NÊN TÍNH ĐA HÌNH
2.1. Kiểu dữ liệu
Giao diện giúp ta xây dựng được tính đa hình cho đối tượng.
Ta xét ví dụ sau: Có 2 con vật là Mèo và Chó, 2 con vật này đều có hành động là Kêu nhưng
ở mỗi con thì có tiếng kêu khác nhau. Ta xây dựng một giao diện Động vật như sau:
Code:
public interface DongVat
{
void Keu();
}
public class Meo : DongVat
{
void DongVat.Keu()
{
KHCN 2 (31) - 2014 96
KHOA HỌC CÔNG NGHỆ - ĐẠI HỌC HÙNG VƯƠNG
Console.WriteLine(«Meo meo...»);
}
}
public class Cho : DongVat
{
void DongVat.Keu()
{
Console.WriteLine(«Gau gau...»);
}
}
class Program
{
static void Main(string[] args)
{
DongVat dv = new NewDongVat.Meo();
dv.Keu();
dv = new NewDongVat.Cho();
dv.Keu();
}
}
Như vậy 2 lớp Chó và Mèo khi cài đặt giao diện Động vật thì buộc phải cài đặt hành động là
Kêu và việc cài đặt cần tuân theo quy định là không tham số, kiểu dữ liệu trả về là void. Bây giờ
trên hàm Main ta chỉ cần một đoạn code sau là đã gọi được tiếng kêu của tất cả các con vật:
Code:
static void Main(string[] args)
{
DongVat[] dv = { new Cho(), new Meo()};
for (int i = 0; i < dv.Length; i++)
{
dv[i].Keu();
}
}
Quay lại với ví dụ 1 về đối tượng người X, ta xây dựng 4 giao diện tương ứng:
Code:
interface SinhVien
{
void Hoc();
void Thi();
}
interface Con
{
void Quetnha();
void Nauan();
}
interface KhachHang
{
void Mua();
void Ban();
}
interface NhanVien
KHCN 2 (31) - 2014 97
KHOA HỌC CÔNG NGHỆ - ĐẠI HỌC HÙNG VƯƠNG
{
void Lamviec();
}
Như vậy, nếu một lớp (Class) cài đặt 4 giao diện trên thì các đối tượng tạo ra từ lớp này sẽ
có được tính đa hình.
Code:
class Nguoi implement SinhVien, Con, KhachHang, NhanVien
{
void Hoc()
{
//code
}
void Thi()
{
//code
}
void NauCom()
{
//code
}
void Mua()
{
//code
}
}
Nguoi X = new Nguoi();
Đối tượng người X đã được tạo ra, tuy nhiên chưa có cách thức để thực hiện hành vi. Cách
thức thực hiện sẽ do chính lớp cài đặt quy định. Với mỗi yêu cầu về hình thái của đối tượng, X sẽ
được truyền vào tương ứng. Ví dụ chỉ chấp nhận đối tượng là Sinh viên thì khi đó X sẽ được truyền
vào.
Code:
class TruongHoc
{
void Them(SinhVien sv);
{
//code
}
}
TruongHoc sv1;
sv1.Them(X);
Khi chỉ chấp nhận đối tượng là Khách hàng, khi đó X được truyền vào.
Code:
KHCN 2 (31) - 2014 98
KHOA HỌC CÔNG NGHỆ - ĐẠI HỌC HÙNG VƯƠNG
class Cho //Chợ
{
void Them(KhachHang kh);
{
//code
}
}
Cho kh1;
kh1.Them(X);
Như vậy, đối tượng X đã thể hiện được trong những hoàn cảnh khác nhau thì đóng vai trò
khác nhau, có hành vi khác nhau. X đã có được tính đa hình.
2.2. Phương thức
Các dữ liệu và chỉ thị được kết hợp vào một đơn vị đầy đủ tạo nên một đối tượng. Đơn vị
này tương đương với một chương trình con và vì thế các đối tượng sẽ được chia thành hai bộ phận
chính: phần các phương thức và phần các thuộc tính. Trong thực tế, các phương thức của đối tượng
là các hàm và các thuộc tính của nó là các biến, các tham số hay hằng nội tại của một đối tượng.
Các phương thức là phương tiện để sử dụng một đối tượng trong khi các thuộc tính sẽ mô tả đối
tượng có những tính chất gì.
Ở đây ta quan tâm tới phương thức nên chỉ đề cập tới các yếu tố để xác định một phương thức.
Đầu tiên là yếu tố tên (Name), đương nhiên tên khác nhau thì sẽ xác định các phương thức khác
nhau (mặc dù có thể hai phương thức đều có cấu trúc như nhau).
Code:
interface SinhVien
{
void Hoc();
void Thi();
}
Tiếp đến là tham số truyền vào (Parameter), các tham số truyền vào khác nhau (không phải
là giá trị các tham số khác nhau) thì dẫn đến phương thức sẽ khác nhau.
Có 3 dạng khác nhau khi truyền tham số vào:
a. Hai phương thức cùng tên nhưng một phương thức có 3 tham số truyền vào, một phương
thức có 4 tham số truyền vào thì thì dẫn đến phương thức sẽ khác nhau. Đó là sự khác nhau đối với
số lượng tham số truyền vào. Ví dụ:
Code:
void Hoc(string a, string b, string c);
void Hoc(string a, string b, string c, string d);
b. Hai phương thức cùng tên, cùng số lượng tham số nhưng không giống nhau về kiểu dữ
liệu thì dẫn đến phương thức sẽ khác nhau. Đây là sự khác nhau đối với kiểu dữ liệu của tham số
truyền vào. Ví dụ:
KHCN 2 (31) - 2014 99
KHOA HỌC CÔNG NGHỆ - ĐẠI HỌC HÙNG VƯƠNG
Code:
void Hoc(int a, int b, int c);
void Hoc(string a, string b, string c);
Hoặc
Code:
Overload x1 = new Overload(5);
Overload x2 = new Overload((byte)5);
c. Hai phương thức cùng tên, cùng số lượng tham số, cùng kiểu dữ liệu nhưng thứ tự truyền
tham số khác nhau sẽ dẫn đến phương thức khác nhau (Lưu ý là phương thức phải có tối thiểu 2
tham số trở lên thì mới có sự phân biệt này). Đây là sự khác nhau đối với thứ tự của tham số truyền
vào.
Ví dụ:
Code:
void Hoc(string a, int b);
void Hoc(in a, string b);
Việc khai báo trong một lớp nhiều phương thức có cùng tên nhưng khác tham số (khác kiểu
dữ liệu, khác số lượng tham số, khác thứ tự truyền tham số) gọi là khai báo chồng phương thức hay
còn gọi là nạp chồng. Nạp chồng cũng chính là một kiểu đa hình của đối tượng vì nó thể hiện được
các hành vi khác nhau tùy thuộc các tham số đầu vào.
3. KẾT LUẬN
Bài báo đã minh họa và phân tích các yếu tố tạo nên tính đa hình cho đối tượng trong lập
trình, cụ thể là: kiểu dữ liệu được truyền vào và phương thức truyền tham số cho đối tượng. Từ các
yếu tố trên, ta có thể tăng cường tính đa hình trong khi thiết kế chương trình giúp cho việc thể hiện
các hình thái của đối tượng được phong phú hơn, toàn diện hơn.
Tài liệu tham khảo
1. Phạm Văn Ất (2005), C++ và Lập trình hướng đối tượng, Nhà xuất bản Giao thông vận
tải.
2. Trần Đức Quang (2005), Lập Trình Hướng Đối Tượng - Những Khái Niệm Chung, Nhà
xuất bản Thống kê.
SUMMARY
POLYMORPHISM IN OBJECT-ORIENTED PROGRAMMING
Nguyen Dinh Nhu
Hung Vuong University
Polymorphism is one of the four characteristics of object-oriented programming, it is also the most
confusing characteristic, difficult to distinguish in programming. In this paper, I focus on the elements
that create the polymorphism of object in programming. Polymorphism is often related to the data
type to be transmitted into the object and the method to transmit parameters. Data type is shown in the
interface, the method to transmit parameters is shown in the overloading.
Keyword: Polymorphism, Object-oriented Programming, Overloading.