初品BioPerl(第七篇:对象的类型)

一月 16, 2011

时常听到有人说,XXX语言是面向过程的,而XXX语言是面向对象的……我认为这种说法不是很妥当,面向过程和面向对象只是一种编程的思路而已,和具体的编程语言无关。Perl应该算是一种面向过程的语言(它可以写得很像C的风格,虽然我不大喜欢),但如果你大量调用了BioPerl的模块,它就是一种不折不扣的面向对象的思路。
      因为我们是在调用别人编写的(标准的)BioPerl模块,所以里面使用到的各种对象的结构都是别人已经定义好的,我们无须了解内部的细节。但是了解一下这个对象的类型却是很有必要的,因为它关系到你能够调用这个对象的哪些属性和方法。比如,一写出 $seq_obj,可以想到它能调用 ->seq这样的方法;而一写出 $seqio_obj,可以想到它能调用 ->next_seq 这样的方法。如何查看一个对象的类型呢?很简单,用ref函数。
      下面可以来复习下之前提过的各种对象。
(1)构建一条fasta序列:

$seq_obj = Bio::Seq->new( -display_name => "gi|147605|gb|J01673.1|ECORHO",
-desc => "E.coli rho gene coding for transcription termination factor",
-seq => "AACCCTAGCACTGCGCCGAAATATGGCATCCGTGGTATCCCGACTCTGCTGCTGTTCAAAAACGGTGAAG"
);

      我们只需写这么一条语句:

print ref($seq_obj),"\n";

      就可以查出 $seq_obj 这个对象究竟是什么“类型”的对象,结果是  Bio::Seq 类型的对象
(2)从文件中获取fasta序列:

$catchseq = Bio::SeqIO->new(-file=>'ecorho.fasta', -format=>'fasta');
$seq_obj = $catchseq->next_seq;

      查一下类型,发现 $catch_seq 是 Bio::SeqIO::fasta 类型, 而调用它的next_seq方法得到的 $seq_obj 则是 Bio::Seq 类型,正好与(1)中提到的  $seq_obj 一样,所以(1)中提到的 $seq_obj 能调用什么方法,它这里就能调用什么方法!
(3)从文件中获取genbank序列:

$catchseq = Bio::SeqIO->new(-file=>'ecorho.gbk', -format=>'genbank');
$seq_obj = $catchseq->next_seq;

      查一下类型,发现 $catch_seq 是 Bio::SeqIO::genbank 类型,其实应该不用说大家也猜出来了。
      但是,查一下 $seq_obj,我们猜也应该是 Bio::Seq 类型。错了!其实是 Bio::Seq::RichSeq 类型。为什么呢?很简单,因为GenBank格式拥有比fasta格式更丰富的信息,所以叫做 RichSeq 呗!它不仅拥有 Bio::Seq 对象所拥有的全部方法(比如,->display_id, ->seq, ->desc),还有其它的方法,用来获取其它额外的序列信息。(其实我们更加关系这些信息才对,只不过具体操作步骤要以后再说了,因为真的很复杂哎!)
(4)从远程数据库中下载序列:

$db_obj = Bio::DB::GenBank -> new;
$seq_obj = $db_obj -> get_Seq_by_acc('J01673'); 
$filename = $seq_obj -> accession;
$output_seq = Bio::SeqIO -> new(-file => ">$filename.gbk", -format => 'genbank');
$output_seq -> write_seq($seq_obj);

      查一下类型,发现 $db_obj 是 Bio::DB::GenBank 类型,而 $seq_obj 是 Bio::Seq::RichSeq 类型。这是理所当然的,因为 $seq_obj 里面放的是GenBnak序列。
      现在我们就可以认为,表面上看起来都是写成 $seq_obj,其实里面的含义大有不同哦!

posted in Perl by billzt

Follow comments via the RSS Feed | Leave a comment | Trackback URL

说点什么

8 评论 在 "初品BioPerl(第七篇:对象的类型)"

提醒
排序:   最新 | 最旧 | 得票最多
游客

这个是啥语言,我只能看得懂C和用C封装的GTK+

游客

@婉秋, 这是Perl语言,现在算是一种“脚本语言”

游客

BioPerl应该怎么翻译?“生化Perl”?很前沿的感觉耶!

游客

@bob, 应该是Perl的生物学模块

游客

bioperl内容的确很多,你讲的可操作性强,易懂,期待你更多的阐释bioperl 😛

游客

@strong, 以后不再博客中写了,敬请关注http://bioperl.bnuzhutao.cn,在博客首页点击“BioPerl”选项卡也可以进入

游客

我把你的Bioperl系列转载了一下。http://yixf.name/2011/05/15/%E3%80%90%E8%BD%AC%E8%BD%BD%E3%80%91%E5%88%9D%E5%93%81bioperl/

写的不错,期待续篇!

游客

@yixf, OK!关于续篇,请关注 http://bioperl.bnuzhutao.cn

wpDiscuz
 

Copyright © 2010-2017 | Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org