Xem mẫu

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. 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
  14. 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
  15. 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
  16. 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
  17. 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
  18. 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
  19. 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
  20. 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