-
Notifications
You must be signed in to change notification settings - Fork 11
/
serializacao-de-objetos.html
102 lines (89 loc) · 7.01 KB
/
serializacao-de-objetos.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en-us">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Serialização de objetos</title>
<meta name="author" content="" />
<!--- Blueprint CSS Framework -->
<link rel="stylesheet" href="css/blueprint/screen.css" type="text/css" media="screen, projection">
<link rel="stylesheet" href="css/blueprint/print.css" type="text/css" media="print">
<!--[if IE]>
<link rel="stylesheet" href="css/blueprint/ie.css" type="text/css" media="screen, projection">
<![endif]-->
<!-- CodeRay syntax highlighting CSS -->
<link rel="stylesheet" href="css/coderay.css" type="text/css" />
<!-- Homepage CSS -->
<link rel="stylesheet" href="css/site.css" type="text/css" media="screen, projection" />
</head>
<body>
<div class="container">
<div class="column span-22 prepend-1 append-1 first last" id="header">
<h1 class="title"><a href="index.html" alt="voltar para o início">Tutorial de Ruby do GURU-SP</a></h1>
<hr>
</div>
<div class="column span-17 prepend-1 first">
<p class="title">Serialização de objetos</p>
<p>A linguagem Java possui a habilidade de serializar objetos, permitindo que você os armazene em algum lugar e depois os reconstitua quando necessário. O Ruby chama esse tipo de serialização de marshaling (empacotamento).</p>
<p>Escreveremos uma classe básica (<b>p051gamecharacters.rb</b>) apenas para testar o marshaling.</p>
<div class="CodeRay">
<pre><span class="no"> 1</span> <span class="c"># p051gamecharacters.rb</span>
<span class="no"> 2</span> <span class="r">class</span> <span class="cl">PersonagemDoJogo</span>
<span class="no"> 3</span> <span class="r">def</span> <span class="fu">initialize</span>(poder, tipo, armas)
<span class="no"> 4</span> <span class="iv">@poder</span> = poder
<span class="no"> 5</span> <span class="iv">@tipo</span> = tipo
<span class="no"> 6</span> <span class="iv">@armas</span> = armas
<span class="no"> 7</span> <span class="r">end</span>
<span class="no"> 8</span> attr_reader <span class="sy">:poder</span>, <span class="sy">:tipo</span>, <span class="sy">:armas</span>
<span class="no"> 9</span> <span class="r">end</span>
</pre>
</div>
<p>O programa <b>p052dumpgc.rb</b> cria um objeto da classe acima e então usa <b>Marshal.dump</b> para salvar a versão serializada dele no disco.</p>
<div class="CodeRay">
<pre><span class="no"> 1</span> <span class="c"># p052dumpgc.rb</span>
<span class="no"> 2</span> require <span class="s"><span class="dl">'</span><span class="k">p051gamecharacters</span><span class="dl">'</span></span>
<span class="no"> 3</span> gc = <span class="co">PersonagemDoJogo</span>.new(<span class="i">120</span>, <span class="s"><span class="dl">'</span><span class="k">Mago</span><span class="dl">'</span></span>, [magias, <span class="s"><span class="dl">'</span><span class="k">invisibilidade</span><span class="dl">'</span></span>])
<span class="no"> 4</span> puts gc.poder.to_s + <span class="s"><span class="dl">'</span><span class="k"> </span><span class="dl">'</span></span> + gc.tipo + <span class="s"><span class="dl">'</span><span class="k"> </span><span class="dl">'</span></span>
<span class="no"> 5</span> gc.armas.each <span class="r">do</span> |w|
<span class="no"> 6</span> puts w + <span class="s"><span class="dl">'</span><span class="k"> </span><span class="dl">'</span></span>
<span class="no"> 7</span> <span class="r">end</span>
<span class="no"> 8</span>
<span class="no"> 9</span> <span class="co">File</span>.open(<span class="s"><span class="dl">'</span><span class="k">jogo</span><span class="dl">'</span></span>, <span class="s"><span class="dl">'</span><span class="k">w+</span><span class="dl">'</span></span>) <span class="r">do</span> |f|
<span class="no"><strong>10</strong></span> <span class="co">Marshal</span>.dump(gc, f)
<span class="no">11</span> <span class="r">end</span>
</pre>
</div>
<p>O programa <b>p053loadgc.rb</b> usa <b>Marshal.load</b> para lê-lo.</p>
<div class="CodeRay">
<pre><span class="no"> 1</span> <span class="c"># p053loadgc.rb</span>
<span class="no"> 2</span> require <span class="s"><span class="dl">'</span><span class="k">p051gamecharacters</span><span class="dl">'</span></span>
<span class="no"> 3</span> <span class="co">File</span>.open(<span class="s"><span class="dl">'</span><span class="k">joho</span><span class="dl">'</span></span>) <span class="r">do</span> |f|
<span class="no"> 4</span> <span class="iv">@gc</span> = <span class="co">Marshal</span>.load(f)
<span class="no"> 5</span> <span class="r">end</span>
<span class="no"> 6</span>
<span class="no"> 7</span> puts <span class="iv">@gc</span>.poder.to_s + <span class="s"><span class="dl">'</span><span class="k"> </span><span class="dl">'</span></span> + <span class="iv">@gc</span>.tipo + <span class="s"><span class="dl">'</span><span class="k"> </span><span class="dl">'</span></span>
<span class="no"> 8</span> <span class="iv">@gc</span>.armas.each <span class="r">do</span> |w|
<span class="no"> 9</span> puts w + <span class="s"><span class="dl">'</span><span class="k"> </span><span class="dl">'</span></span>
<span class="no"><strong>10</strong></span> <span class="r">end</span>
</pre>
</div>
<p><b>Marshal</b> apenas serializa estruturas de dados. Ele não pode serializar código Ruby (como objetos do tipo Proc), ou recursos alocados por outros processos (como tratadores de arquivo ou conexões com bancos de dados). <b>Marshal</b> apenas lhe dará um erro quando tentar serializar um arquivo.</p>
<div class="pagination"><a href="modulos-mixins.html">Módulos e Mixins ></a></div>
</div>
<div class="column span-5 append-1 last">
<p><a href="http://www.gurusp.org" title="Grupo de Usuários Ruby de SP"><img src="images/logo_guru-sp.jpg" title="Logo do GURU-SP" alt="Logo do Guru-SP" /></a></p>
<div class="box">
<p>Este material tem como base o <a href="http://www.rubylearning.com" title="Ruby Learning">tutorial do RubyLearning.com de Satish Talim</a> e foi traduzido por membros do <a href="http://www.gurusp.org" title="Grupo de Usuários Ruby de SP">GURU-SP</a> com a permissão do autor.</p>
<p class="last">Ajude o RubyLearning participando em algum dos <a href="http://www.rubylearning.org" title="cursos do Ruby Learning">cursos pagos</a> ou <a href="http://pledgie.com/campaigns/415" title="Ajude o Ruby Learning">fazendo uma doação para o projeto</a></p>
</div>
<p class="quiet"><a href="index.html" title="índice">Voltar para o índice</a></p>
<h5></h5>
<p class="incr"></p>
</div>
<div class="column span-22 prepend-1 append-1 first last" id="footer">
<hr />
<p>Tuturial de Ruby do <a href="http://www.gurusp.org" title="Grupo de Usuários Ruby de SP">GURU-SP</a>. Este site foi criado com <a href="http://webby.rubyforge.org">Webby</a></p>
</div>
</div>
</body>
</html>