Bài viết trình bày 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.
Trang 1involved 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
Trang 21 ĐẶ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()
{
Trang 3Console.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
Trang 4void 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);
{
}
}
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:
Trang 5{
void Them(KhachHang kh);
{
}
}
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ụ:
Trang 6void 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.