Xem mẫu
- PHẦN B: TỔNG QUAN – Giới thiệu Bioinformatics – Vài công cụ 31
II.3. Vài công cụ Bioinformatics hiện nay
Vì không có cách nào mô tả hết các công cụ có sẵn, dƣới đây chỉ trích một vài
công cụ phổ biến dùng trong phân tích trình tự sinh học.
II.3.1. Readseq
Readseq là một phần mềm cũ, ra đời từ năm 1989. Đƣợc phát triển bởi Don
Gilbert, chƣơng trình này đọc và viết trình tự nucleotide và protein sang nhiều định
dạng hữu dụng. Công cụ này đƣợc viết bằng ngôn ngữ Java.
II.3.2. BLAST
BLAST (Basic Local Alignment Search Tools) là công cụ đƣợc biết tốt nhất
trong phân tích trình tự. Nó so sánh hai trình tự bởi cố gắng gióng (align) chúng, và
cũng đƣợc dùng để tìm kiếm trình tự trong cơ sở dữ liệu. Thuật toán bắt đầu bởi tìm
kiếm sự so khớp chính xác, sau đó mở rộng vùng đã đƣợc gióng bởi những so khớp
không chính xác (mismatches).
blastall cho phép sử dụng tất cả các chƣơng trình BLAST (blastn, blastp,
blastx, và tblastn). Bảng sau đây tóm tắt trình tự dùng truy vấn (Query sequence), trình
tự cơ sở dữ liệu (Database sequence), và loại gióng trình tự (Alignment sequence) đối
với lệnh BLAST khác nhau.
Query Database Alignment
Program
sequence type sequence type sequence type
blastn nucleotide Nucleotide nucleotide
blastp protein Protein protein
blastx nucleotide Protein protein
tblastn protein Nucleotide protein
tblastx nucleotide Nucleotide protein
Bảng 2.1: Bảng liệt kê một số chƣơng trình BLAST
megablast sử dụng thuật toán gióng trình tự nucleotide tìm kiếm và nối nhiều
trình tự truy vấn để giảm thời gian quét (scanning) qua cơ sở dữ liệu.
NGUYỄN KỲ TRUNG – LÊ THÀNH TRUNG
- PHẦN B: TỔNG QUAN – Giới thiệu Bioinformatics – Vài công cụ 32
blastpgp thực hiện blastp có khe (gap) và có thể đƣợc dùng để thực hiện lặp đi
lặp lại tìm kiếm ở chế độ psi-blast và phi-blast.
PSI-BLAST (Position-Specific Iterated BLAST) là sự tìm kiếm lặp lại trong đó
các trình tự tìm thấy trong một vòng tìm kiếm đƣợc dùng để xây dựng mô hình tính
điểm cho vòng tìm kiếm kế tiếp.
PHI-BLAST (Pattern-Hit Initiated BLAST) là chƣơng trình tìm kiếm kết hợp sự
so khớp của regular expression với sự gióng khu vực xung quanh sự so khớp.
bl2seq (BLAST 2 Sequences) cho phép gióng trình tự hai trình tự đƣợc nhận.
II.3.3. BLAT
BLAT là công cụ gióng trình tự rất nhanh tƣơng tự nhƣ BLAST. Nó tƣơng đối
mới so với BLAST, nhƣng nó đã trở nên rất phổ biến. BLAT thì chính xác hơn và
nhanh hơn hàng trăm lần so với BLAST. Tốc độ của BLAT xuất phát từ thời gian chạy
các phần tử là các trình tự nhỏ không trùng lắp từ chiều dài đƣợc cho. Phần tử này đủ
nhỏ phù hợp với bộ nhớ máy tính và đƣợc tính toán điển hình chỉ một lần đối với mỗi
tập hợp genome. Jim Kent phát triển BLAT đặc biệt trợ giúp xử lý tập hợp bộ gene
trong quá trình làm việc với bộ gene ngƣời.
II.3.4. ClustalW
ClustalW là chƣơng trình gióng đa trình tự dùng cho trình tự nucleotide và trình
tự protein. Sự gióng có thể là toàn bộ (global) (toàn trình tự) hay khu vực (local) (giới
hạn đoạn trình tự con). ClustalW tính toán sự khớp tốt nhất cho trình tự đƣợc chọn lựa,
và sắp chúng thành hàng để xác định, những sự tƣơng đồng và sự khác biệt có thể
đƣợc thấy.
II.3.5. HMMER
HMMER là tập hợp các chƣơng trình tạo ra mô hình Markov ẩn (hidden Markov
model-HMM) của họ trình tự đƣợc dùng nhƣ trình tự truy vấn đối với cơ sở dữ liệu để
xác định thêm sự tƣơng đồng (homologs) của họ trình tự. HMMER đƣợc phát triển bởi
Sean Eddy tại đại học Washington.
NGUYỄN KỲ TRUNG – LÊ THÀNH TRUNG
- PHẦN B: TỔNG QUAN – Giới thiệu Bioinformatics – Vài công cụ 33
II.3.6. MEME/MAST
Hệ thống MEME/MAST cho phép bạn:
Khám phá motif (vùng có tính bảo tồn cao) trong nhóm trình tự DNA hay
protein sử dụng MEME.
Tìm kiếm trình tự cơ sở dữ liệu bằng motif dùng MAST.
MEME và MAST đƣợc phát triển bởi Timothy Bailey, Charles và Bill Grundy tại
phòng kỹ thuật và khoa học máy tính tại trung tâm San Diego Supercomputer.
II.3.7. EMBOSS
EMBOSS (European Molecular Biology Open Software Suite) là công cụ phân
tích trình tự với mã nguồn mở. Phần mềm này bao gồm nhiều chức năng và có thể xử
lý dữ liệu với nhiều dạng format. Thƣ viện mở rộng đƣợc cung cấp với gói, cho phép
ngƣời dùng phát triển và đƣa ra phần mềm riêng của họ. EMBOSS cũng tích hợp các
gói và công cụ có sẵn dùng cho phân tích trình tự, nhƣ BLAST và ClustalW.
EMBOSS chứa khoảng 150 chƣơng trình. Chúng xử lý một số lĩnh vực sau:
o Gióng trình tự
o Tìm kiếm nhanh chóng trình tự với trình tự ban đầu.
o Xác định motif protein.
o Phân tích trình tự, ví dụ xác định vùng CpG hay trình tự lặp lại.
o Xác định nhanh chóng trình tự trong tập trình tự lớn.
o Trình bày các công cụ đã đƣợc công bố…
NGUYỄN KỲ TRUNG – LÊ THÀNH TRUNG
- PHẦN B: TỔNG QUAN – Giới thiệu Bioinformatics – Ngôn ngữ 34
II.4. Ngôn ngữ dùng trong Bioinformatics
Cuộc cách mạng về bộ gene đã thay đổi diện mạo của sinh học. Bất cứ ai làm
việc trong lĩnh vực này đều sử dụng phần lớn thời gian trên máy tính và duyệt qua các
cơ sở dữ liệu lớn về genes, proteins, các bài báo đã công bố trên các cơ sở dữ liệu lớn
trên mạng. Ví dụ danh sách toàn bộ gene ngƣời có sẵn, đã thay đổi cách làm việc của
mọi ngƣời trong lĩnh vực nghiên cứu di truyền. Theo phƣơng cách truyền thống, một
nhà sinh học trải qua nhiều ngày suy nghĩ chiến lƣợc cho việc xác định một gene và
hàng tháng trời làm việc trong phòng thí nghiệm để tạo dòng. Ngày nay, anh ta chỉ
phải mất vài ngày suy nghĩ chiến lƣợc phù hợp cho ý nghĩa của gene từ cơ sở dữ liệu
bộ gene, tiếp theo thực hiện truy vấn (query), và vài phút để sắp xếp trật tự các dòng
phù hợp từ nguồn dữ liệu.
Để tạo thuận lợi trong sinh học mới, các nhà sinh học phải làm quen với máy
tính. Truy xuất dữ liệu từ trang web dữ liệu sinh học và những công cụ phân tích
chúng thì thƣờng không đủ. Để thật sự tạo ra cuộc cách mạng thông tin trong sinh học,
các nhà sinh học phải có thể quản lý và phân tích lƣợng lớn dữ liệu sinh học thu đƣợc
từ nhiều nguồn khác nhau. Điều này có nghĩa là viết phần mềm và Perl là ngôn ngữ ƣa
thích cho Bioinformatics. Khả năng tạo ra Perl script tự động quản lý thông tin là một
thuận lợi.
Mặc dù Perl là ngôn ngữ rất phù hợp đối với bioinformatics, nó không phải là
chọn lựa duy nhất và cũng không phải là chọn lựa tốt nhất. Các ngôn ngữ khác nhƣ
Java, C++, Python… cũng đƣợc dùng trong bioinformatics. Chọn lựa ngôn ngữ nào
phụ thuộc vào vấn đề cần đƣợc lập trình, kỹ năng của ngƣời lập trình và hệ thống có
sẵn.
NGUYỄN KỲ TRUNG – LÊ THÀNH TRUNG
- PHẦN B: TỔNG QUAN – Cơ sở tin học – Lập trình hướng đối tượng 35
III. Cơ sở tin học cho việc xây dựng cơ sở dữ liệu trình tự
III.1. Khái niệm về lập trình
Hiện nay lập trình thƣờng đƣợc phân chia thành hai trƣờng phái:
+ Lập trình cấu trúc hay còn gọi là “lập trình thủ tục”, “lập trình truyền
thống” (Structured Programming).
+ Lập trình hƣớng đối tƣợng (Object -Oriented Programming).
Để hiểu rõ hơn sự khác biệt cũng nhƣ ƣu khuyết điểm của hai trƣờng phái này, ta
hãy xét một yêu cầu đơn giản: Hãy hiển thị thông tin miêu tả các hình trong CSDL ra
màn hình.
Ta có thể dễ dàng phân tích vấn đề theo thứ tự các bƣớc sau:
1. Định vị các hình trong cơ sở dữ liệu.
2. Tạo danh sách hình.
3. Sắp xếp danh sách hình theo một thứ tự nhất định.
4. Biễu diễn từng hình riêng ra màn hình.
Mỗi một bƣớc trong bốn bƣớc ở trên có thể phân rã thành những đơn vị nhỏ hơn
để có thể dễ dàng hơn trong việc thực hiện. Ví dụ ta có thể chia bƣớc 4 thành các bƣớc
sau (sử dụng vòng lặp):
- Lấy từng hình trong danh sách bắt đầu từ vị trí đầu tiên cho đến vị trí cuối cùng.
- Gọi hàm hiển thị từng hình ra màn hình.
Cách nhìn nhận và phân tích vấn đề nhƣ thế đƣợc gọi là phân rã chức năng
(functionnal decomposition). Phân rã chức năng là cách tiếp cận bằng cách chia nhỏ
vấn đề đến mức mà ngƣời lập trình có thể sử dụng tập lệnh của một ngôn ngữ lập trình
để thực hiện chúng. Bằng cách này, ta có thể dễ dàng giải quyết và quản lý những vấn
đề lớn thông qua từng công việc nhỏ.
Cách tiếp cận trên là tƣ tƣởng chủ đạo của lập trình cấu trúc. Đây cũng là điểm
giống nhau giữa lập trình cấu trúc và lập trình hƣớng đối tƣợng. Tuy nhiên, nếu chỉ
dừng lại ở đây thì việc giải quyết một số vấn đề phức tạp ta sẽ gặp khó khăn vì những
lý do sau:
+ Phân rã chức năng thƣờng có một chƣơng trình chính chịu trách n hiệm về các
chƣơng trình con và ta không hề gặp khó khăn trong việc chia nhỏ các chức năng. Tuy
nhiên khi đó chƣơng trình chính phải gánh rất nhiều nhiệm vụ: đảm bảo mọi thứ đều
hoạt động tốt, liên kết và quản lý trình tự thực hiện các chức năng. Do đó, khi yêu cầu
NGUYỄN KỲ TRUNG – LÊ THÀNH TRUNG
- PHẦN B: TỔNG QUAN – Cơ sở tin học – Lập trình hướng đối tượng 36
ngày càng nhiều, độ phức tạp của các yêu cầu ngày càng cao, thì chƣơng trình viết
theo kiểu cấu trúc sẽ ngày càng phức tạp, gây khó khăn trong việc quản lý, bảo trì và
phát triển chƣơng trình về sau. Mọi thứ đều phát triển và thay đổi theo thời g ian,
không có gì là bất biến. Và một chƣơng trình ứng dụng cũng không nằm ngoài quy
luật đó, nó luôn luôn thay đổi để ngày càng phù hợp với yêu cầu của thực tế. Tính khó
thích nghi khi có những thay đổi là nhƣợc điểm quan trọng nhất của lập trình thủ tục.
+ Trong một chƣơng trình có cấu trúc nhiều phần khác nhau có thể truy cập cùng
một dữ liệu. Điều này nghĩa là nếu một chƣơng trình cần thay đổi cách tổ chức dữ liệu,
ta phải tìm tất cả các chức năng hoặc các lệnh truy cập dữ liệu đó để có những thay đổi
tƣơng ứng. Nếu sót một trong các chức năng hoặc lệnh này thì chƣơng trình có thể vẫn
hoạt động nhƣng sẽ cho ra kết quả sai.
+ Một nhƣợc điểm khác của lập trình thủ tục là ta không thể kế thừa hiệu quả
cũng nhƣ tái sử dụng hiệu quả các chức năng đã viết, trong nhiều tình huống phải viết
lại gần nhƣ toàn bộ.
Lập trình hƣớng đối tƣợng đƣợc đƣa ra để khắc phục các nhƣợc điểm của lập
trình có cấu trúc. Lập trình hƣớng đối tƣợng giúp ta tƣ duy và giải quyết vấn đề nhƣ
cách ta thực hiện ngoài đời, do đó giúp ta tiếp cận các vấn đề một cách dễ dàng. Nói
cách khác lập trình hƣớng đối tƣợng chính là mô hình thu nhỏ của thế giới thực dƣới
góc độ nhìn nhận của con ngƣời.
Trọng tâm của lập trình hƣớng đối tƣợng là ở khái niệm về đối tƣợng (object)
chứ không phải là khái niệm chức năng. Tất cả mọi vật, hiện tƣợng tồn tại xung quanh
ta khi đƣa vào chƣơng trình đều đƣợc gọi chung là đối tƣợng. Ví dụ, ta có đối tƣợng
sinh viên, đối tƣợng sách khoa học, trong vấn đề sinh học đối tƣợng có thể là gene,
record, báo cáo khoa học …
Nhƣ đã nói trên, đối tƣợng chính là các sự vật hiện tƣợng thật trong cuộc sống, do
đó, nó có các đặc điểm, tính chất để phân biệt với các đối tƣợng khác và trong lập trình
hƣớng đối tƣợng nó đƣợc gọi là thuộc tính (attribute). Để làm rõ ta có thể có các ví dụ
về thuộc tính của một số đối tƣợng nhƣ sau:
Đối tƣợng Thuộc tính
* Sinh viên - họ tên
- lớp
- mã số sinh viên
NGUYỄN KỲ TRUNG – LÊ THÀNH TRUNG
- PHẦN B: TỔNG QUAN – Cơ sở tin học – Lập trình hướng đối tượng 37
* Xe hơi - nhà sản xuất
- màu
- tốc độ tối đa
- tên gene
* Gene
- số accession
- tác giả …
Thuận lợi của dùng đối tƣợng là ta có thể gắn kết thuộc tính với nhiệm vụ / chức
năng riêng (behavior) của đối tƣợng đó. Đây là khác biệt quan trọng giữa lập trình cấu
trúc (dữ liệu không gắn kết chặt chẽ với hành vi) và lập trình hƣớng đối tƣợng.
Đối tƣợng nào có thuộc tính nào thì chỉ thực hiện các hành vi phù hợp với thuộc
tính mà nó có. Những hành vi không phù hợp phải thuộc về một đối tƣợng nào khác
mà có thuộc tính phù hợp để thực hiện nhiệm vụ đó. Nhƣ sách chỉ dùng để đọc và xe
dùng để lái mà không thể làm ngƣợc lại nghĩa là ta chỉ có thể thực hiện “đọc sách lái
xe” chứ không thể “lái sách đọc xe”. Trong lập trình hƣớng đối tƣợng các chức năng,
nhiệm vụ này gọi là hàm.
Ví dụ:
Đối tƣợng Student có các hàm :
// đi học
gotoSchool()
// học bài
learn()
Thay vì xem mỗi sinh viên là một object điều này sẽ giúp ta dễ dàng xác định
chính xác đó là sinh viên nào và nó hoàn toàn độc lập với các object khác.
Tóm lại, lập trình hƣớng đối tƣợng đã bổ sung đƣợc những điều mà lập trình cấu
trúc còn hạn chế, nó giúp ta quản lý và tiếp tục phát triển chƣơng trình cho phù hợp
với các yêu cầu mới phát sinh một cách dễ dàng. Hơn thế nữa các nhà phát triển phần
mềm có thể hoàn toàn không biết về nhau nhƣng điều đó không hề gây khó khăn bởi
lập trình hƣớng đối tƣợng là mô hình thu nhỏ của thế giới và nó nhìn nhận cũng nhƣ
phân tích vấn đề xảy ra nhƣ bộ não con ngƣời. Vì thế muốn chƣơng trình của mình có
thể phù hợp và phát triển bền vững thì lập trình hƣớng đối tƣợng là chọn lựa tốt nhất
hiện nay.
NGUYỄN KỲ TRUNG – LÊ THÀNH TRUNG
- PHẦN B: TỔNG QUAN – Cơ sở tin học – Lập trình hướng đối tượng 38
Ví dụ: Xác định chức năng f() của ký tự A trong sinh học
- Đối với lập trình cấu trúc
define f() {
if (A of DNA) then
f stabilize the structure of DNA
else if (A of RNA) then
f stabilize the structure of RNA
else # A of Protein
f stabilize the structure of Protein
}
- Đối với lập trình hƣớng đối tƣợng
Ta có 3 đối tƣợng DNA, RNA, và Protein. Ba đối tƣợng này có thể gọi chung là
một đại-phân-tử. Cho trƣớc một đại-phân-tử bất kỳ, muốn gọi thi hành một chức
năng f nào đó, ta không cần kiểm tra xem đó là DNA, RNA hay Protein. Ta chỉ cần gọi
đại-phân-tử.f() thì đối tƣợng đại-phân-tử sẽ cho ra kết quả phù hợp với bản chất của
nó.
đại-phân-tử.f()
Cách tiếp cận này sẽ trở nên đơn giản nếu chúng ta phải thực hiện nhiều hàm
khác nhau trên đối tƣợng đại-phân-tử, chẳng hạn g(), h(), … Khi đó, ta không
phải mất sức nhớ và kiểm tra xem đại-phân-tử đó là DNA, RNA, hay Protein. Điều
này giải phóng phần nào năng lực tƣ duy của ngƣời lập trình.
NGUYỄN KỲ TRUNG – LÊ THÀNH TRUNG
- PHẦN B: TỔNG QUAN – Cơ sở tin học – Lập trình Perl 39
III.2. Ngôn ngữ lập trình Perl dùng trong Bioinformatics
III.2.1. Giới thiệu Perl
Perl (Pratical Extraction and Reporting Language) là ngôn ngữ đa năng, hữu
dụng. Perl đƣợc dùng xử lý các tập tin, CGI, …đặc biệt hỗ trợ rất mạnh trong việc xử
lý chuỗi.
Perl đƣợc đƣa vào sử dụng đầu tiên vào năm 1987 do Larry Wall. Tiếp theo đó là
các phiên bản 2.0, 3.0, 4.0, 5.0. Hiện nay phiên bản Perl mới nhất 5.8.
Perl có thể cài đƣợc trên các hệ điều hành khác nhau. Mỗi hệ điều hành khác
nhau sẽ có phiên bản Perl khác nhau. Trên hệ điều hành Windows ta dùng phiên bản
ActivePerl 5.6 (hay 5.8) cho Win.
Để soạn thảo ngôn ngữ Perl, ta có thể dùng các phần mềm soạn thảo nhƣ:
UltraEdit, Notepad, EditPlus, Perl Builder, …
Để chạy chƣơng trình Perl, ta dùng các dòng lệnh trên MS-DOS.
III.2.2 Thành phần cơ bản trong Perl
1. Kiểu dữ liệu vô hƣớng (Scalar data)
Kiểu số:
a.
Ví dụ: 1, 109, 1.5e5….
Kiểu chuỗi:
b.
Chuỗi là một loạt các ký tự liên tiếp từ bộ 256 ký tự ASCII có sẵn.
Ví dụ: „Đây là chuỗi trình tự DNA‟, hay ta có thể viết “Đây là chuỗi trình tự
DNA”. Chuỗi có thể đặt trong dấu „‟ hay “”.
Biến vô hƣớng:
c.
Biến vô hƣớng dùng để lƣu giá trị dữ liệu vô hƣớng trong quá trình tính toán,
thực hiện chƣơng trình.
Biến vô hƣớng phải bắt đầu tên biến với ký tự “$”.
Sau ký tự “$” phải có ít nhất một mẫu tự, và mẫu tự bắt đầu không đƣợc
là ký tự số.
Tên biến có sự phân biệt giữa chữ hoa và chữ thƣờng.
Ví dụ: $a, $A, $DNA, $number2…
NGUYỄN KỲ TRUNG – LÊ THÀNH TRUNG
- PHẦN B: TỔNG QUAN – Cơ sở tin học – Lập trình Perl 40
Các toán tử:
d.
Toán tử tính toán cơ bản:
Toán tử Ý nghĩa Ví dụ
= Gán $DNA=„actacacagt‟
+ Cộng 2+3
- Trừ 5-6
* Nhân 4*2
/ Chia 10/5
** Lũy thừa 5**3
Toán tử một ngôi:
Toán tử Ví dụ Ý nghĩa
+= $x += 5 $x = $x +5
-= $x -=5 $x = $x –5
*= $x *=5 $x = $x *5
/= $x /=5 $x = $x /5
++ $x++ Biến $x tự tăng một đơn vị
-- $x-- Biến $x tự giảm một đơn vị
Các toán tử so sánh: kết quả trả về là true hay false
Áp dụng Áp dụng Ý nghĩa
đối với số đối với chuỗi
< lt Nhỏ hơn
> gt Lớn hơn
== eq Bằng
= ge Lớn hơn hoặc bằng
!= ne Không bằng
Các toán tử luận lý
Toán tử Cách dùng tương đương
&& and
|| or
^ xor
! not
NGUYỄN KỲ TRUNG – LÊ THÀNH TRUNG
- PHẦN B: TỔNG QUAN – Cơ sở tin học – Lập trình Perl 41
Một số toán tử thông dụng khác
Toán tử Chức năng
hoặc Nhập input từ bàn phím
chomp Cắt bỏ ký tự newline ở cuối chuỗi
chop Cắt bỏ ký tự bất kỳ ở cuối chuỗi
length Tính chiều dài của chuỗi
2. Các cấu trúc điều khiển
a. Câu lệnh điều kiện:
If:
If (biểu thức) {
Khối lệnh cần thực hiện;
}
Nếu biểu thức là đúng thì khối lệnh đƣợc thực hiện, nếu không khối lệnh đƣợc bỏ
qua.
If – else:
If (biểu thức) {
Khối lệnh 1 cần thực hiện;
} else {
Khối lệnh 2 cần thực hiện;
}
Nếu biểu thức là đúng thì khối lệnh 1 đƣợc thực hiện, nếu không khối lệnh hai
đƣợc thực hiện.
If – elsif - else:
If (biểu thức 1) {
Khối lệnh 1 cần thực hiện;
} elsif (biểu thức 2) {
Khối lệnh 2 cần thực hiện;
}.....
.
.
} else {
NGUYỄN KỲ TRUNG – LÊ THÀNH TRUNG
- PHẦN B: TỔNG QUAN – Cơ sở tin học – Lập trình Perl 42
Khối lệnh cần thực hiện;
}
Nếu biểu thức 1 là đúng thì khối lệnh 1 đƣợc thực hiện, nếu không sẽ kiểm tra
biểu thức 2. Nếu biểu thức 2 đúng thì khối lệnh 2 đƣợc thực hiện…Nếu không biểu
thức nào đƣợc thỏa mãn, khối lệnh trong biểu thức else đƣợc thực hiện.
Unless:
unless (biểu thức) {
Khối lệnh cần thực hiện;
}
Nếu biểu thức sai thì khối lệnh sẽ đƣợc thực hiện.
Unless - else:
unless (biểu thức) {
Khối lệnh 1 cần thực hiện;
} else {
Khối lệnh 2 cần thực hiện;
}
Nếu biểu thức là sai thì khối lệnh thứ 1 sẽ đƣợc thực hiện, nếu không thì khối
lệnh 2 đƣợc thực hiện.
b. Vòng lặp “while”:
while (biểu thức) {
Khối lệnh cần thực hiện;
}
Đầu tiên, biểu thức sẽ đƣợc kiểm tra. Nếu biểu thức là đúng thì khối lệnh sẽ đƣợc
thực hiện. Việc thực hiện khối lệnh sẽ đƣợc lặp đi lặp lại và sẽ dừng lại khi biểu thức
sai. Khối lệnh có thể sẽ không thực hiện lần nào nêu biểu thức sai ngay từ đầu.
do {
Khối lệnh cần thực hiện;
}while (biểu thức);
Đầu tiên sẽ thực hiện khối lệnh cho dù biểu thức là đúng hay sai. Sau đó, biểu
thức sẽ đƣợc kiểm tra, nếu đúng thì sẽ lặp lại khối lệnh. Vòng lặp sẽ dừng khi biểu
thức là sai.
NGUYỄN KỲ TRUNG – LÊ THÀNH TRUNG
- PHẦN B: TỔNG QUAN – Cơ sở tin học – Lập trình Perl 43
c. Vòng lặp “for”:
Vòng lặp for thƣờng dùng để xác định số lần mà khối lệnh muốn thực hiện
for (biểu thức 1; biểu thức điều kiện; biểu thức 2){
khối lệnh cần thực hiện;
}
Vòng lặp sẽ dừng lại khi “biểu thức điều kiện” là sai.
3. Mảng và Bảng băm (Array and Hash)
3.1 Mảng
a) Giới thiệu:
Biến mảng giống nhƣ biến vô hƣớng, nó đƣợc tạo ra để lƣu dữ liệu. Tuy nhiên dữ
liệu là một danh sách (list) (danh sách là một nhóm dữ liệu vô hƣớng đƣợc sắp xếp
theo thứ tự).
Mở đầu biến mảng là ký tự “@”, và các quy tắc đặt tên cho biến mảng cũng
tƣơng tự nhƣ đặt tên cho biến vô hƣớng.
Ví dụ:
@a;
@a = (1, 2, 3, $x, $y);
Các phần tử của mảng đƣợc đánh số từ 0, nhƣ mảng trên 1 ở vị trí 0, 2 là vị trí
1…
Truy cập đến một phần tử trong mảng: $a[0] truy cập đến phần tử thứ 0,
$a[1] truy cập đến phần tử thứ 1 của mảng.
Nhập phần tử vào mảng từ bàn phím: @array = ;
b) Một số hàm thao tác trên mảng:
Tìm chiều dài mảng:
$chieudai = scalar (@a);
Hoặc $chieudai = ($#a +1);
Tìm chỉ số phần tử cuối cùng của mảng:
$chisophantucuoi = $#a;
Hàm sort, sắp xếp thứ tự:
@b = sort (@a);
NGUYỄN KỲ TRUNG – LÊ THÀNH TRUNG
- PHẦN B: TỔNG QUAN – Cơ sở tin học – Lập trình Perl 44
Hàm này sắp xếp thứ tự các phần tử trong mảng theo thứ tự bảng mã ASCII,
không sắp xếp theo thứ tự số.
Hàm push, thêm phần tử mới vào mảng:
push (@a, $new_element);
Phần tử mới đƣợc thêm vào vị trí cuối cùng.
Hàm pop, lấy đi phần tử cuối cùng:
$x = pop (@a);
Sau dòng lệnh này, mảng @a sẽ mất đi phần tử cuối cùng sẽ đƣợc gán vào biến
$x.
Hàm unshift, thêm phần tử mới vào đầu mảng:
unshif (@a, „new_element‟);
Phần tử new_element đƣợc thêm vào đầu mảng.
Hàm shift, lấy đi phần tử đầu tiên của mảng:
$x = shift (@a);
Sau dòng lệnh này, mảng @a sẽ mất đi phần tử đầu tiên của mảng và phần tử này
đƣợc gán tới biến $x.
Hàm reverse, đảo ngƣợc các phần tử trong mảng:
@b = reverse (@a);
Hàm join, nối các phần tử trong mảng thành một chuỗi:
$string = join (“separator”, @a);
Separator là ký tự hay chuỗi ký tự phân cách giữa hai phần tử mảng.
Hàm split, tách một chuỗi thành một bảng các phần tử:
@a = split (“separator”, $string);
c) Mảng con:
Mảng con chỉ chứa một số phần tử trong mảng cho trƣớc
@a = (a, b, c, d, e, f);
@b = @a[1..3]; mảng @b chứa các phần tử thứ 1, 2, 3 trong mảng @a, cụ
thể là các phần tử b, c, d.
@c = @a[1,4,5]; mảng @c chứa các phần tử thứ 1, 4, 5 trong mảng @a, cụ
thể là các phần tử b, e, f.
a. Vòng lặp dành cho mảng:
Vòng lặp foreach đƣợc áp dụng cho mảng.
NGUYỄN KỲ TRUNG – LÊ THÀNH TRUNG
- PHẦN B: TỔNG QUAN – Cơ sở tin học – Lập trình Perl 45
foreach $a (@array) {
khối lệnh cần thực hiện;
}
Các phần tử trong mảng lần lƣợt đƣợc gán cho biến $a qua mỗi vòng lặp. Biến $a
chỉ có hiệu lực cục bộ trong vòng lặp foreach.
3.2 Bảng băm (Hash)
a) Giới thiệu:
Hash là một loại biến dùng để lƣu trữ danh sách dữ liệu vô hƣớng tƣơng tự nhƣ
mảng. Tuy nhiên, các phần tử trong mảng đƣợc chỉ mục (index) tự động còn trong
Hash thì không đƣợc tạo chỉ mục một cách tự động. Các phần tử trong Hash đi thành
từng cặp key/ value, trong đó phần tử key dùng làm chỉ mục cho phần tử value.
Mở đầu biến hash là ký tự “%” và qui tắc đặt tên cho hash tƣơng tự nhƣ mảng.
Có hai cách khai báo:
%hash = (key1, value1, key2, value2, key3,
value3);
%hash = ( key1 => value 1,
key2 => value 2,
key3 => value 3);
Truy cập một phần tử của hash:
$a = $hash {$key};
Thêm phần tử mới vào hash:
$hash{$key} = $value; cặp giá trị key/ value đƣợc thêm vào hash.
b) Một số hàm thao tác trên hash:
Hàm delete, xóa phần tử trong hash:
delete $hash{$key}; xóa cặp giá trị key/value tƣơng ứng với nhau.
Hàm keys, trích các keys và lƣu các keys này vào mảng:
@keys = keys (%hash);
Hàm values, trích các values và lƣu các values này vào mảng:
@values = values (%hash);
NGUYỄN KỲ TRUNG – LÊ THÀNH TRUNG
- PHẦN B: TỔNG QUAN – Cơ sở tin học – Lập trình Perl 46
4. Thao tác với tập tin
a) Mở tập tin:
Cú pháp:
Open (Filehandle, “đường dẫn đến tập tin cần mở”)
or die (“Không mở được tập tin”);
FileHandle sẽ là tham chiếu đến tập tin cần mở suốt chƣơng trình. Nếu không mở
đƣợc tập tin với lý do nào đó, hàm die đƣợc thực thi và chƣơng trình bị ngắt.
Khi mở một tập tin, chúng ta có thể mở ở ba chế độ khác nhau: đọc (read), viết
(write), chèn (append). Một tập tin đƣợc mở thì mặc định trong chế độ đọc.
Mở tập tin trong chế độ viết (write), ta thêm dấu “>”trƣớc đƣờng dẫn. Chú ý khi
mở tập tin trong chế độ Write thì nội dung của toàn bộ tập tin sẽ bị xóa và nộ i dung
mới sẽ đƣợc ghi thêm vào, nếu không đƣợc thêm vào tập tin sẽ là rỗng.
Cú pháp:
Open (FileHandle, “>đường dẫn tới tập tin cần
ghi”) or die (“Không thể mở tập tin”);
Mở tập tin trong chế độ chèn (append) ta thêm dấu “>>” vào trƣớc đƣờng dẫn.
Khi mở tập tin trong chế độ này ta có thể thêm nội dung vào tập tin.
Mở tập tin để đọc và thêm nội dung vào (read/write) ta thêm dấu “ + vào trƣớc đƣờng dẫn.
b) Đóng tập tin:
Cú pháp:
close (FileHandle);
c) Đọc tập tin:
Sau lệnh mở tập tin, nội dung của tập tin có thể đƣợc đọc nhƣ sau:
Open (THU, “D:/Perl/thu.txt”) or die (“Không mở
được tập tin”);
$thu = ;
print “dòng đầu tiên của tập tin là: $thu”;
NGUYỄN KỲ TRUNG – LÊ THÀNH TRUNG
- PHẦN B: TỔNG QUAN – Cơ sở tin học – Lập trình Perl 47
Nếu tập tin thu.txt có nhiều dòng, mỗi dòng trong tập tin thu.txt tƣơng ứng với
một phần tử trong mảng. Do đó khi gán $thu = , $thu chỉ chứa dòng đầu
tiên của tập tin. Để in hết nội dung của tập tin thu.txt, ta phải dùng vòng lặp:
open (THU, “D:/Perl/thu.txt”) or die (“Không mở được tập
tin”);
$thu = ;
while ($thu) {
print “$thu \n”;
$thu = ;
}
exit;
Ngoài ra ta có thể dùng mảng chứa nội dung tập tin, trong đó mỗi dòng trong tập
tin ứng với mỗi phần tử trong mảng. Ta thực hiện nhƣ sau:
open (THU, “D:/Perl/thu.txt”) or die (“Không mở được tập
tin”);
@thu = ;
print “@thu”;
exit;
d) Viết nội dung vào tập tin:
Cú pháp:
print FileHandle “nội dung cần ghi vào”;
Có thể viết nội dung cho tập tin từ bàn phím:
$thu = ;
print FileHandle “$text”;
5. Chƣơng trình con
a) Giới thiệu:
Chƣơng trình con là các đoạn mã thể hiện các chức năng khác nhau trong chƣơng
trình chính. Khi viết các chƣơng trình con chúng ta có thể tái sử dụng thay vì viết lại
tất cả. Và việc dùng chƣơng trình con làm cho việc tổ chức chƣơng trình tốt hơn, làm
cho chƣơng trình dễ đọc và dễ kiểm soát hơn.
Khai báo:
Sub TenChuongTrinhCon {
Đoạn mã cần thực hiện;
}
NGUYỄN KỲ TRUNG – LÊ THÀNH TRUNG
- PHẦN B: TỔNG QUAN – Cơ sở tin học – Lập trình Perl 48
b) Sử dụng chƣơng trình con:
Gọi chƣơng trình con:
&TenChuongTrinhCon ( );
Ta có thể bỏ đi dấu “&”.
c) Ví dụ cách dùng chƣơng trình con:
# !/usr/bin/perl –w
print “Nhap vao trinh tu DNA thứ 1: ” ;
my $dna1 = ;
Chomp $dna1 ;
Print “Nhap vao trinh tu DNA thứ 2: ”;
my $dna2 = ;
chomp $dna2;
my $dna3 = &noiDNA ($dna1, $dna2);
print “Đây là chuỗi DNA nối: $dna3 \n”;
exit;
#################################
sub noiDNA {
my ($dna1,$dna2) = @_;
my $dna3 = $dna1. $dna2;
return $dna3;
}
Đầu tiên chƣơng trình nhận vào hai trình tự DNA nhập từ bàn phím và lƣu chúng
lần lƣợt vào hai biến vô hƣớng $dna1, $dna2. Biến đƣợc khai báo với my qui định
phạm vi hoạt động của biến và đảm bảo không có hiện tƣợng trùng tên biến xảy ra.
Hai biến $dna1 và $dna2 đƣợc xem nhƣ tham số và đƣợc truyền vào chƣơng trình
con để xử lý. Lúc này mọi hoạt động sẽ diễn ra trong chƣơng trình con. Chƣơng trình
con nhận vào hai biến $dna1, $dna2 thông qua biến đặc biệt @_ và gán cho hai
biến $dna1 và $dna2 trong chƣơng trình con. Chƣơng trình con thực hiện nối nội
dung hai biến lại, gán cho biến $dna3 cuối cùng trả giá trị lại cho chƣơng trình chính
qua chức năng return. Biến $dna3 trong chƣơng trình chính sẽ nhận giá trị trả về
này, sau đó đƣợc xuất ra màn hình bởi dòng lệnh print.
NGUYỄN KỲ TRUNG – LÊ THÀNH TRUNG
- PHẦN B: TỔNG QUAN – Cơ sở tin học – Lập trình Perl 49
6. Regular Expression
a) Giới thiệu:
Regular expression là một đặc tả cho một nhóm ký tự ta muốn tìm trong một
chuỗi.
Pattern là một chuỗi ký tự nhất định mà ta có thể tìm kiếm trong một chuỗi.
Vậy, regular expression sẽ đặc tả một pattern và patern này sẽ là khuôn mẫu có
thể so khớp với chuỗi ký tự đã cho.
b) Ví dụ cách dùng regular expression:
Ta viết chƣơng trình tìm đoạn nhỏ DNA trong một chuỗi trình tự DNA cho trƣớc
#!/usr/bin/perl –w
my $dna = „ACTGTGATGCGTACGTTTAC‟;
my $subdna = „ATGC‟;
if ($dna =~ /$subdna/){
print “Tìm thấy $subdna trong chuỗi DNA $dna \n”;
}else {
print “Không tìm thấy $subdna trong chuỗi DNA $dna \n”;
}
exit;
Trong chƣơng trình này, ta dùng regular expression ở dòng lệnh $dna =~
/$subdna/. Mục đích chƣơng trình là kiểm tra „ATGC‟ có trong chuỗi DNA ban
đầu hay không. Pattern ở đây là $subdna, mang nội dung là đoạn trình tự gắn
„ACTG‟ đƣợc thể hiện thành regular expression khi đặt pattern này vào giữa hai dấu
“//”. Regular expression này sẽ tìm $subdna trong chuỗi DNA ban đầu thông qua
toán tử kết nối =~ (binding operator). Kết quả tìm kiếm sẽ trả lại giá trị true, nếu tìm
thấy và false nếu không tìm thấy.
Regular expession là một trong những đặc tính rất mạnh trong Perl, chi tiết vấn
đề này và để hiểu rõ hơn về Perl xem liệt kê trong phần tài liệu tham khảo. Tại đây sẽ
giới thiệu những tài liệu Perl tốt cho ứng dụng vào bioinformatics.
NGUYỄN KỲ TRUNG – LÊ THÀNH TRUNG
- PHẦN B: TỔNG QUAN – Cơ sở tin học – Ngôn ngữ Java 50
III.3. Công nghệ Java ứng dụng trong xử lý dữ liệu Bioinformatics
III.3.1. Biojava
a) Tại sao dùng Java cho Bioinformatics?
Java có những ƣu điểm chính nhƣ:
Một chƣơng trình Java chạy trên nền tảng Windows sẽ chạy đƣợc trên các nền
tảng khác (chẳng hạn Linux, Unix) mà không phải sửa đổi gì cả.
Đƣợc chấp nhận rộng rãi theo tiêu chuẩn công nghiệp.
Có khả năng mở rộng rất lớn.
Lập trình theo hƣớng đối tƣợng.
b) Biojava là gì?
Tập hợp các đối tƣợng Java trình bày và thao tác dữ liệu sinh học.
Mã nguồn mở cho tất cả các phát triển.
Tập hợp các đối tƣợng hỗ trợ cho nghiên cứu bioinformatics.
Đƣợc bắt đầu tại EBI/Sanger năm 1998 bởi Matthew Pocock và Thomas Down.
III.3.2. Biojava và CSDL
Java tƣơng tác với CSDL thông qua cái gọi là JDBC API, một phần giao tiếp
giữa chƣơng trình Java và CSDL. Đâ y là cách tiếp cận truyền thống, tƣơng tự nhƣ
nhiều ngôn ngữ khác, chẳng hạn nhƣ Perl. Chƣơng trình sẽ nhìn dữ liệu trên các dòng
và cột của bảng cơ sở dữ liệu, chứ không cho ta một cách nhìn hƣớng đối tƣợng. Cách
nhìn này tạo ra một hố ngăn cách thế giới đối tƣợng (rất phù hợp cho việc lập trình)
với thế giới CSDL quan hệ (rất phù hợp cho việc lƣu trữ và truy xuất dữ liệu).
Với tiến bộ về công nghệ hiện nay, chúng ta đã đƣợc trang bị một cầu nối giữa
hai thế giới, điển hình là Hibernate. Hibernate là một ánh xạ đối tượng/quan hệ
(Object/Relational Mapping - ORM) và cơ sở dữ liệu cấu trúc/phục vụ mà liên quan
các đối tƣợng Java với bảng cơ sở dữ liệu dùng file XML. Nhiệm vụ nối giữa hai thế
giới rất khác biệt này thì rất phức tạp và ngao ngán.
Hibernate cho phép chúng ta dễ dàng thực hiện tạo, lấy, cập nhật, xóa (Create,
Retrieve, Update, Delete – CRUD) trên các đối tƣợng. Nó giảm thiểu sức lực để
chuyển đổi giữa tập kết quả cơ sở dữ liệu quan hệ và các đối tƣợng Java trừu tƣợng.
Hibernate cho phép phục vụ truy vấn và lấy dữ liệu trên đối tƣợng Java (hơn là
trên các bảng) mà có thể tối ƣu sức lực phát triển môi trƣờng SQL và JDBC.
NGUYỄN KỲ TRUNG – LÊ THÀNH TRUNG
nguon tai.lieu . vn