Commit 9e56830b3f25c919d796cdf5f0546b2b9636b81b

Merge commit 'tsilva/master'

Commit diff

PortugueseBook/Model/Model.tex

 
22% $Date$
33% $Revision$
44%=================================================================
5% translated by tsilva@sourcecraft.info start: (Fri, 25 Apr 2008)
6% merged with thiagoarraiss's conclusion section (unrevised)
7%% Notas:
8%% "method lookup" => busca de métodos
9%% "metaclass" => metaclasse
10%% "first-class" => primeira ordem (Fonte: wikipedia/Smalltalk)
11%% "private" => privada
12%% "slot" => slot
13%% "selector " => seletor
14%% "super-sends" => mantive como "super-sends"
15%% "self-sends" => mantive como "self-sends"
16%% "single inheritance" => herança singular
17%% "trait" => mantive como "trait"
18%% "pool variables" => variáveis de pool
19%% "stream" => mantive como "stream"
20%% "scrolling window" => "janela deslizante"
21%% "flap" => aba
22%% "to collapse" => virou "fechar"
23%% Nomes de ferramentas como Transcript, "Object Inspector", Debugger e "System Browser", foram mantidos
24%=================================================================
525\ifx\wholebook\relax\else
626% --------------------------------------------
727% Lulu:
7878 Tudo acontece por meio de envio de mensagens.
7979
8080\item{} \label{rule:lookup}
81 %NOTE: en_US("method lookup") = pt_BR(??)
82 A escolha de métodos segue a cadeia de herança.
81 A busca de métodos segue a cadeia de herança.
8382
8483\end{enumerate}
8584
1011013 + 4 --> 7 "envia '+ 4' para 3, resultando em 7"
10210220 factorial --> 2432902008176640000 !\textit{"envia factorial, resultando em um número grande"}!
103103\end{code}
104%FIXME: word wrapping da última frase está ruim
104%FIXME: visual: word wrapping da última frase está feio
105105
106106A representação de \ct{20 factorial} certamente é diferente da representação de \ct{7}, mas porque ambos
107107são objetos, nenhum código\,---\, nem mesmo a implementação de \ct{factorial}\,---\,precisa saber disso.
110110Talvez, a consequência mais fundamental desta regra seja o seguinte:
111111\important{Classes também são objetos.}
112112Além do mais, classes não são objetos de segunda ordem: elas, de fato, são objetos de primeira ordem
113%NOTE: first-class -> primeira ordem. Fonte: wikipedia/Smalltalk
114113para quem você pode enviar mensagens, inspecionar, e assim por diante.
115114Isso significa que o \squeak é um verdadeiro sistema reflexivo, que oferece um grande poder expressivo
116115aos seus desenvolvedores.
153153\subsection{Variáveis de instância}
154154
155155Variáveis de instância no \st são privadas
156%en_US(private) == pt_BR(privada)?
157156para a própria \emph{instância}. Isso está em contraste com \ind{Java} e \ind{C++}, que permitem
158157que as variáveis de instância (também conhecidas como ``campos'' ou ``variáveis membro'') sejam
159158acessadas por outras instâncias que são da mesma classe.
162162\seeindex{variável!instância}{variável de instância}
163163\seeindex{campo}{variável de instância}
164164\seeindex{attributo}{variável de instância}
165\seeindex{slot}{variável de instância} %FIXME: en_US(slot) == pt_BR(?)
165\seeindex{slot}{variável de instância}
166166\index{variável de instância}
167167
168168Em \st, uma instância de uma classe não pode acessar as variáveis de instância de outra instância da mesma classe a não ser que a classe defina ``métodos de acesso'' \footnote{\emph{accessor methods}}.
171171%, discussed in \charef{metaprog},
172172oferece, de fato, uma forma de se obter os valores
173173das variáveis de instância de um objeto; a intenção da meta-programação é escrever ferramentas como
174o \ind{inspetor} de objetos \footnote{\emph{object inspector}}, cujo único propósito é observar dentro de outros objetos.)
174o \emph{object inspector}, cujo único propósito é observar dentro de outros objetos.)
175175
176176Variáveis de instância podem ser acessadas por nome em quaisquer métodos de instância da classe que
177177os define e, também, nos métodos definidos nas subclasses. Isso significa que as variáveis
178de instância do \st são similares as variáveis \emph{protegidas} \footnote{\emph{protected}} do C++ e Java.
178de instância do \st são similares as variáveis \emph{protegidas} do C++ e Java.
179179Por outro lado, nós preferimos dizer que elas são privadas porque, em \st, acessar uma variável
180180de instância diretamente de uma subclasse é considerado mau estilo.
181181
224224Métodos podem acessar todas as variáveis de instância do objeto.
225225Alguns desenvolvedores \st preferem acessar variáveis de instância somente por métodos de acesso.
226226Esta prática tem algum valor, mas também polui a interface de suas classes,
227% en_US(clutter) == pt_BR(?)
228227e pior, expõe estados privados para o mundo.
229228
230229%---------------------------------------------------------
252252\end{center}
253253\end{figure}
254254
255Por esta razão, o navegador \index{system browser} te ajuda a navegar tanto pela classe quanto pela metaclasse
255Por esta razão, o \emph{system browser} \index{system browser} te ajuda a navegar tanto pela classe quanto pela metaclasse
256256como se elas fossem uma única coisa com dois ``lados'': o ``\subind{system browser}{lado da instância}'' e
257257o ``\subind{system browser}{lado da classe}'', como mostrado na \figref{Buttons}. Clicando
258258no botão \button{instance}, navega-se na classe \ct{Color}, isso é, você navega nos métodos que
307307Para aqueles que conhecem \ind{Java} e \ind{C++}, métodos de classe podem parecer similares aos métodos estáticos. Entretanto, a uniformidade do \st mostra que são coisas diferentes: os métodos estáticos
308308são apenas procedimentos resolvidos estaticamente em Java e, em \st, métodos de classe são métodos despachados
309309dinamicamente. Isso significa que herança, sobreposição e \emph{super-sends}
310%FIXME: en_US(super-sends) == pt_BR(?)
311310funcionam para métodos de classe
312311em \st, mas não funcionam para métodos estáticos em Java.
313312
693693
694694%=========================================================
695695\section{A busca de método segue a cadeia de herança}
696%FIXME: en_US(lookup) == pt_BR(?)
697
698696%\ruleref{lookup}
699697
700698O que exatamente acontece quando um objeto recebe uma mensagem?
929929\subsection{Mensagem não entendida}
930930
931931O que acontece se um método que nós buscamos não for encontrado?
932\index{mensagem!not understood} %FIXME: deixa "not understood" mesmo?
932\index{mensagem!not understood}
933933
934934Suponha que nós enviemos a mensagem \ct{foo} para nossa elipse.
935935Primeiro, a busca de método iria percorrer normalmente a cadeia de herança completamente até a classe
951951método \ct{doesNotUnderstand:}.
952952Acontece que \ct{Object} implementa \ct{doesNotUnderstand:}.
953953Este método irá criar um novo objeto \ct{MessageNotUnderstood} que é capaz de iniciar um \emph{Debugger}
954%FIXME: depurador??
955954no contexto de execução atual.
956955
957956Por que nós tomamos este caminho tortuoso para lidar com um erro tão óbvio?
971971\st oferece três tipos de variáveis compartilhadas: (1) variáveis compartilhadas \emph{globais};
972972(2) variáveis compartilhadas entre instâncias e classes (\emph{variáveis de classe}),
973973e (3) variáveis compartilhadas entre um grupo de classes (variáveis de \emph{pool}).
974%FIXME pool variables == pt_BR(?)
974
975975Os nomes de todas estas variáveis iniciam com uma letra maiúscula, para nos avisar de que
976976são, de fato, compartilhadas entre vários objetos.
977977
978Now we will look at an aspect of \st that is not so easily covered by our five rules: \subind{variable}{shared} variables.
978Agora nós veremos um aspecto do \st que não é facilmente tratado pelas nossas cinco regras: variáveis \subind{variável}{compartilhada}s.
979979\index{variável!global}
980\index{classe!variáveç}
980\index{classe!variável}
981981\index{variável!pool}
982982
983983%---------------------------------------------------------
989989Todas as classes são nomeadas por uma variável global; em adição, algumas poucas variáveis globais
990990são utilizadas para nomear objetos especiais ou comumente usados.
991991
992A variável \glbind{Transcript} nomea uma instância de \clsind{TranscriptStream}, um \emph{stream}
993%FIXME stream: deixar em inglês mesmo?
994que escreve em uma janela deslizante. %FIXME scrolling = pt_BR?
992A variável \glbind{Transcript} nomeia uma instância de \clsind{TranscriptStream}, um \emph{stream}
993que escreve em uma janela deslizante.
995994O código a seguir mostra alguma informação e, em seguida, vai para a próxima linha no \ct{Transcript}.
996995
997996\begin{code}{}
999999
10001000\noindent
10011001Antes que você execute o \menu{do it}, abra um \emph{transcript} arrastando um a partir da aba \emph{Tools}.
1002%FIXME: flap == aba??
10031002
10041003\hint{Escrever para o Transcript é lento, especialmente quando a janela do transcript está aberta.
10051004Portanto, se você notar uma lentidão enquanto escreve para o Transcript, considere fechá-lo.}
1006%FIXME: collapse == pt_BR(??)
10071005
10081006\subsubsection{Outras variáveis globais úteis}
10091007
11531153browser e compilados, ou quando eles são editados e re-compilados.
11541154
11551155%---------------------------------------------------------
1156\subsection{Variáveis \meph{pool}} %FIXME: mantendo "pool" em ingles
1156\subsection{Variáveis \meph{pool}}
11571157
11581158Variáveis \emph{pool} são variáveis compartilhadas entre várias classes que podem não estar relacionadas por herança.
11591159Variáveis pool eram originalmente armazenadas em dicionários pool; agora, elas são definidas como variáveis de classe
11911191\section{Resumo do capítulo}
11921192
11931193O modelos de objetos do \squeak é ao mesmo tempo simples e uniforme.
1194Tudo é um objeto, e praticamente tudo acontece por envio de mensagens.
1194Tudo é objeto, e praticamente tudo acontece por envio de mensagens.
11951195
11961196\begin{itemize}
1197 \item Tudo é um objeto.
1198 Primitivas como inteiros são objetos, mas classes também são objetos de primeira classe.
1197 \item Tudo é objeto.
1198 Entidades primitivas como inteiros são objetos, mas classes também são objetos de primeira ordem.
11991199
12001200 \item Todo objeto é instância de uma classe.
12011201 Classes definem a estrutura de suas instâncias através de variáveis de instância \emph{privativas} e o comportamente de suas instâncias através de métodos \emph{públicos}. Cada classe é a instância única de sua meta-classe. Variáveis de classe são variáveis privativas compartilhadas pela classe e por todas as instâncias da classe.
toggle raw diff