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