Commit c343635babf3d57850b39f0021b86bb6ca983695

Revisão de alguns capitulos

Commit diff

.gitignore

 
2424_LaTeX_DOC
2525_REGEX_DOC.txt
2626test.*
27.DS_Store
toggle raw diff

PortugueseBook/BasicClasses/BasicClasses.tex

 
3030\chapter{Classes Básicas}
3131\label{cha:basic}
3232
33Muito da mágica do \st não está na linguagem, mas nas bibliotecas de classes. Para programar efetivamente com \st, você precisa aprender como as bibliotecas de classes suportam a linguagem e o ambiente. Essas bibliotecas são inteiramente escritas em \st e podem ser facilmente estendidas á que um pacote qualquer pode adicionar funcionalidade a uma classe mesmo que esta classe não tenha sido definida no próprio pacote.
33Muito da mágica do \st não está na linguagem, mas nas bibliotecas de classes. Para programar efetivamente com \st, você precisa aprender como as bibliotecas de classes suportam a linguagem e o ambiente. Essas bibliotecas são inteiramente escritas em \st e podem ser facilmente estendidas desde que um pacote qualquer possa adicionar funcionalidade a uma classe mesmo que esta classe não tenha sido definida no próprio pacote.
3434
3535O nosso alvo aqui não é apresentar, em detalhes tediosos, a totalidade da biblioteca de classes do \sq, mas apontar par algumas classes chaves e métodos que você precisará usar ou sobrepor para programar efetivamente. Neste capítulo, cobriremos as classes básicas que você precisará para praticamente qualquer aplicação: \ct{Object}, \ct{Number} e suas sub-classes, \ct{Character}, \ct{String}, \ct{Symbol} e \ct{Boolean}.
3636
4747Para todos os intentos e propósitos, \clsindmain{Object} é a raiz da hierarquia de classes do \sq. Na verdade, em \sq, a verdadeira classe base é \clsind{ProtoObject}, mas como ela é usada mais para definir entidade mínimas que mascaram como objetos. De qualquer forma, você pode ignorar essa classe no momento.
4848% (more on this later in the chapter on reflection).
4949
50A classe \ct{Object} pode ser encontrada na categoria \scatind{Kernel-Objects}. Surpreendentemente, há 400 métodos na classe (incluindo extensões). Em outras palavras, cada classe que você define automaticamente terá esses 400 métodos, quer você saiba o que eles fazem, quer não. Note que alguns deses métodos precisam ser removidos e novas versões do \sq podem fazer exatamente isso.
50A classe \ct{Object} pode ser encontrada na categoria \scatind{Kernel-Objects}. Surpreendentemente, há 400 métodos na classe (incluindo extensões). Em outras palavras, cada classe que você define automaticamente terá esses 400 métodos, quer você saiba o que eles fazem, quer não. Note que alguns desses métodos precisam ser removidos e novas versões do \sq podem fazer exatamente isso.
5151
5252\sd{Eu não gosto de citar algo que pode mudar e que pessoas podem encontrar simplesmente usando a imagem mas vamos deixar por agora.}
5353O comentário de classe para \ct{Object} declara (traduzido):
5555\needlines{4}
5656\begin{quote}
5757\textit{\ct{Object} é a classe base de quase todas as outras classes na hierarquia. As exceções são \ct{ProtoObject} (a superclasse de \ct{Object}) e suas sub-classes.
58A classe \ct{Object} provê comportamente padrão comum a todos os objetos normais, como acesso, cópia, comparação, tratamento de erros, envio de mensagens e \ind{reflexão}. Da mesma forma, mensagens utilitárias que todos objetos devem responder estão definidas aqui.
58A classe \ct{Object} provê comportamento padrão comum a todos os objetos normais, como acesso, cópia, comparação, tratamento de erros, envio de mensagens e \ind{reflexão}. Da mesma forma, mensagens utilitárias que todos objetos devem responder estão definidas aqui.
5959\ct{Object} não tem variáveis de instância e nenhuma deve ser adicionada. Isto se deve ao fato que que várias classes que herdam de \ct{Object} possuem implementações especiais (\ct{SmallInteger} e \ct{UndefinedObject}, por exemplo) e de que a VM conhece e depende da estrutura e \foreign{layout} de certas classes padrão.}
6060\end{quote}
6161
6464%-----------------------------------------------------------------
6565\subsection{Impressão}
6666%TODO Pensar em como traduzir método de template
67Todo objeto em \st pode retornar uma forma impressa de si próprio. Você pode selecionar qualquer expressão no \foreign{workspace} e selecionar o \foreign{menu} \menu{print it}: isto executa a expressão e pede ao objeto retornado que se imprima. Se fato, isto envia a mensagem \ct{printString} ao objeto retornado. O método \mthind{Object}{printString}, que é um \ind{método de template}, na verdade envia a mensagem \mthind{Object}{printOn:} para seu receptor. Essa mensagem é um \foreign{hook} que pode ser especializado.
67Todo objeto em \st pode retornar uma forma impressa de si próprio. Você pode selecionar qualquer expressão no \foreign{workspace} e selecionar o \foreign{menu} \menu{print it}: isto executa a expressão e pede ao objeto retornado que se imprima. De fato, isto envia a mensagem \ct{printString} ao objeto retornado. O método \mthind{Object}{printString}, que é um \ind{método de template}, na verdade envia a mensagem \mthind{Object}{printOn:} para seu receptor. Essa mensagem é um \foreign{hook} que pode ser especializado.
6868
6969\ct{Object>>>printOn:} é provavelmente o método que você irá sobrepor com maior freqüência. Este método recebe como argumento uma \clsind{Stream} no qual uma representação textual (ou seja, uma instância da classe \clsind{String}) será escrita. A implementação padrão simplesmente escreve o nome da classe precedido por um ``\ct{a}'' ou ``\ct{an}''. \ct{Object>>>printString} retorna então a \ct{String} que foi escrita.
7070
9292Note que a mensagem \ct{printOn:} não é a mesma que \mthind{Object}{storeOn:}. A mensagem \ct{storeOn:} coloca na \foreign{stream} passado como argumento uma expressão que pode ser usada para recriar o receptor da mensagem. A expressão é executada quando a \foreign{stream} é lida usando a mensagem \ct{readFrom:}. \ct{printOn:} simplesmente retorna uma versão textual do receptor. É claro que pode acontecer que a representação textual seja a mesma representação que é usada para recriar a instância.
9393
9494\paragraph{Um aviso sobre representações e representações auto-executáveis.}
95Em programação funcional, expressões retornam valores quando executadas. Em \st, mesnagens (expressões) retornam objetos (valores). Alguns objetos possuem propriedades cujos valores são os próprios. Por exemplo, o valor do objeto \ct{true} é ele mesmo \ie o objeto \ct{true}. Nós denominamos esses objetos de \emphind{objetos auto-executáveis}. Você pode ver a versão impressa do valor de um objeto quando você o imprime em um \foreign{workspace}. Abaixo estão alguns exemplos de objetos auto-executáveis:
95Em programação funcional, expressões retornam valores quando executadas. Em \st, mensagens (expressões) retornam objetos (valores). Alguns objetos possuem propriedades cujos valores são os próprios. Por exemplo, o valor do objeto \ct{true} é ele mesmo \ie o objeto \ct{true}. Nós denominamos esses objetos de \emphind{objetos auto-executáveis}. Você pode ver a versão impressa do valor de um objeto quando você o imprime em um \foreign{workspace}. Abaixo estão alguns exemplos de objetos auto-executáveis:
9696
9797\begin{code}{@TEST}
9898true --> true
101101#(1 2 3) --> #(1 2 3)
102102\end{code}
103103
104Note que alguns objetos, como \ct{arrays}, são auto-executáveis ou não dependendo dos objetos que contém. Por exemplo, um \ct{array} de \ct{booleanos} é auto-executável enquanto um \ct{array} de pessoas não é. Em \sq 3.9, um mecanismo foi introduzido (atráves da mensagem \mthind{Object}{isSelfEvaluating}) para imprimir coleções sem suas formas auto-executáveis tanto quanto possível e isso é especialmente verdaeiro para \ct{arrays} definidos por chaves. Os exemplos abaixo mostram que um \ct{array} \subind{Array}{dinâmico} é auto-executável somente se seus objetos também o são:
104Note que alguns objetos, como \ct{arrays}, são auto-executáveis ou não dependendo dos objetos que contém. Por exemplo, um \ct{array} de \ct{booleanos} é auto-executável enquanto um \ct{array} de pessoas não é. Em \sq 3.9, um mecanismo foi introduzido (atráves da mensagem \mthind{Object}{isSelfEvaluating}) para imprimir coleções sem suas formas auto-executáveis tanto quanto possível e isso é especialmente verdadeiro para \ct{arrays} definidos por chaves. Os exemplos abaixo mostram que um \ct{array} \subind{Array}{dinâmico} é auto-executável somente se seus objetos também o são:
105105\begin{code}{@TEST}
106106{10@10 . 100@100} --> {10@10 . 100@100}
107107{Browser new . 100@100} --> an Array(a Browser 100@100)
172172 ifFalse: [^ anObject adaptToComplex: self andSend: #=]
173173\end{method}
174174
175A implementação padrão de \ct{Object>>>~=} (desigualdade) simplesmente nega \ct{Object>>>=} e normalmente não precisa se mudada..
175A implementação padrão de \ct{Object>>>~=} (desigualdade) simplesmente nega \ct{Object>>>=} e normalmente não precisa ser mudada.
176176%\cmindex{Object}{\~=}
177177\index{Object!~=@\ct{~=}} % needs special treatment due to ~
178178
188188 ^ real hash bitXor: imaginary hash.
189189\end{method}
190190
191Embora você precise sobrepor \ct{=} e \ct{hash} em conjunto, você nunca deve sobrepor \ct{==}. A semântica de identidade é a mesma paa todas as classes. Inclusive, \ct{==} é um método primitivo de \clsind{ProtoObject}.
191Embora você precise sobrepor \ct{=} e \ct{hash} em conjunto, você nunca deve sobrepor \ct{==}. A semântica de identidade é a mesma para todas as classes. Inclusive, \ct{==} é um método primitivo de \clsind{ProtoObject}.
192192
193193Note que \sq possui um comportamento estranho comparado a outras versões de \st: um símbolo e uma \foreign{string} são considerados iguais. Nós consideramos isso um defeito e não uma característica.
194194
2072071 class --> SmallInteger
208208\end{code}
209209
210Em converso, voc6e pode perguntar se um objeto é uma instância de uma classe específica:
210Inversamente, você pode perguntar se um objeto é uma instância de uma classe específica:
211211\cmindex{Object}{isMemberOf:}
212212\begin{code}{@TEST}
2132131 isMemberOf: SmallInteger --> true "deve ser precisamente desta classe"
235235\ct{1/3} que é uma \clsind{Fraction} é uma espécie de \clsind{Number}, já que a classe \ct{Number} é uma superclasse da classe \ct{Fraction}, mas \ct{1/3} não é um \ct{Integer}.
236236
237237\paragraph{\ct{respondsTo:}}
238\cmind{Object}{respondsTo:} responde se o receptor entende uma dado seletor de mensagem passado como argumento.
238\cmind{Object}{respondsTo:} responde se o receptor entende um dado seletor de mensagem passado como argumento.
239239
240240\begin{code}{@TEST}
2412411 respondsTo: #, --> false
296296\end{code}
297297% NB: Not a test!
298298
299Embora seja possível sobrepor ct{deepCopy} para fazer a coisa certa certa, \cmind{Object}{copy} geralmente oferece a melhor solução:
299Embora seja possível sobrepor ct{deepCopy} para fazer a coisa certa, \cmind{Object}{copy} geralmente oferece a melhor solução:
300300
301301\begin{method}{Copiando objeto de maneira segura}
302302Object>>>copy
318318\sd{em outro capítulo haltIf:, haltOnce, inspectOnce, flagging: isThisEverCalled, }
319319
320320%TODO: Tradução de design by contract
321A próxima mensagem importante é \mthind{Object}{assert:}, que recebe um bloco como argumento. Se o bloco retornar \ct{true}, a execução continua. Caso contrário, uma exceção será criada. Se a exceção não é tratada em nenhum lugar, o \foreign{debugger} será aberto naquele ponto de execução. O método \ct{assert:} é especialmente útil para suportar \emphind{design by contract}. O uso mais típico é verificar pré-condições não-triviais para métodos públicas de uma classe. \cmind{Stack}{pop}, por exemplo, poderia ser implementado como o seguinte:
321A próxima mensagem importante é \mthind{Object}{assert:}, que recebe um bloco como argumento. Se o bloco retornar \ct{true}, a execução continua. Caso contrário, uma exceção será criada. Se a exceção não é tratada em nenhum lugar, o \foreign{debugger} será aberto naquele ponto de execução. O método \ct{assert:} é especialmente útil para suportar \emphind{design by contract}. O uso mais típico é verificar pré-condições não-triviais para métodos públicos de uma classe. \cmind{Stack}{pop}, por exemplo, poderia ser implementado como o seguinte:
322322
323323\begin{method}{Verificando uma pré-condição}
324324Stack>>>pop
327327 ^self linkedList removeFirst element
328328\end{method}
329329
330Não confunda\ct{Object>>>assert:} com \cmind{TestCase}{assert:}, que ocorre dentro do \foreign{framework} TDD SUnit (veja \charef{SUnit}). Enquanto o primeiro espera um bloco como seu argumento\footnote{Na verdade, ele aceita qualquer argumento que entende \ct{value}, incluindo \ct{Boolean}.}, o segundo espera um valor \ct{booleano}. Embora ambos seja úteis para a depuração, cada um dele serve um propósito bem diferente.
330Não confunda \ct{Object>>>assert:} com \cmind{TestCase}{assert:}, que ocorre dentro do \foreign{framework} TDD SUnit (veja \charef{SUnit}). Enquanto o primeiro espera um bloco como seu argumento\footnote{Na verdade, ele aceita qualquer argumento que entende \ct{value}, incluindo \ct{Boolean}.}, o segundo espera um valor \ct{booleano}. Embora ambos seja úteis para a depuração, cada um dele serve um propósito bem diferente.
331331
332332%-----------------------------------------------------------------
333333\subsection{Tratamento de erros}
412412%=================================================================
413413\section{Number}
414414\label{sec:Number}
415Surpreendentemente, números em \st não são tipos primitivo mas objetos reais. É claro que são implementados eficientemente na máquina virtua, mas a hierarquia da classe \clsindmain{Number} é perfeitamente acessível e extensível como qualquer outra porção da biblioteca de classes do \st. hierarchy.
415Surpreendentemente, números em \st não são tipos primitivo mas objetos reais. É claro que são implementados eficientemente na máquina virtual, mas a hierarquia da classe \clsindmain{Number} é perfeitamente acessível e extensível como qualquer outra porção da biblioteca de classes do \st. hierarchy.
416416
417417\begin{figure}[ht]
418418\centerline {\includegraphics[width=8cm]{NumberHierarchy}}
530530(SmallInteger minVal - 1) class --> LargeNegativeInteger
531531\end{code}
532532
533Inteiros grandes similarmente retornam a um \ct{SmallInteger} se necessário.
533Inteiros grandes similarmente retornam um \ct{SmallInteger} se necessário.
534534
535Como em várias linguagens de programação, inteiros podem ser úteis para definir comportamento iterativa. Há um método dedicado chamado \mthind{Integer}{timesRepeat:} para executar um bloco repetidamente:
535Como em várias linguagens de programação, inteiros podem ser úteis para definir comportamento iterativo. Há um método dedicado chamado \mthind{Integer}{timesRepeat:} para executar um bloco repetidamente:
536536Nós já vimos um exemplo similar em \charef{syntax}:
537537\begin{code}{@TEST | n |}
538538n := 2.
554554Character space = (Character value: Character space asciiValue) --> true
555555\end{code}
556556
557O método \mthind{Character}{printOn:} é inteligente o abstante para saber quais dos três métodos para gerar caracteres fornece a representacão mais apropriada:
557O método \mthind{Character}{printOn:} é inteligente o bastante para saber quais dos três métodos para gerar caracteres fornece a representacão mais apropriada:
558558
559559\begin{code}{@TEST}
560560Character value: 1 --> Character value: 1
640640\index{Bykov, Vassili}
641641\index{pacote de expressões regulares}
642642
643A classe \ct{String} suporta um número bem grande de métodos de covnersão. Muitos destes são métodos usados para construir outras classes como \mthind{String}{asDate}, \mthind{String}{asFileName} e assim por diante. Há também um número de métodos úteis para converter texto em outros tipos de texto como \mthind{String}{capitalized} e \mthind{String}{translateToLowercase}.
643A classe \ct{String} suporta um número bem grande de métodos de conversão. Muitos destes são métodos usados para construir outras classes como \mthind{String}{asDate}, \mthind{String}{asFileName} e assim por diante. Há também um número de métodos úteis para converter texto em outros tipos de texto como \mthind{String}{capitalized} e \mthind{String}{translateToLowercase}.
644644
645645Para mais informações sobre isto e coleções, veja \charef{collections}.
646646
toggle raw diff

PortugueseBook/Metaclasses/Metaclasses.tex

 
3232
3333\on{A seção sobre as responsabilidades de Class, Behavior e Metaclass estão bem fracas e precisam ser melhoradas com exemplo mais convincentes. Marcus, você pode ajudar?}
3434
35Como vimos em \charef{model}, em \st, tudo é um objeto, e cada objeto é uma instância de uma classe. As próprias classes não são exceções: classes são objetos, e objetos de classe são instâncias de outras classes.
35Como vimos no \charef{model}, em \st, tudo é um objeto, e cada objeto é uma instância de uma classe. As próprias classes não são exceções: classes são objetos, e objetos de classe são instâncias de outras classes.
3636Este modelo de objetos captura a essência da programação orientada a objetos: é compacto, elegante e uniforme.
37Entretanto, as implicações desta uniformidade pode confundir iniciantes. O objeto deste capítulo é mostrar que não há nada de complexo, ``mágico'' ou especial aqui: apenas regras simples aplicadas uniformemente.
37Entretanto, as implicações desta uniformidade pode confundir iniciantes. O objetivo deste capítulo é mostrar que não há nada de complexo, ``mágico'' ou especial aqui: apenas regras simples aplicadas uniformemente.
3838Seguindo essas regras simples, você sempre será capaz de entender porque a situação é da forma como é.
3939
4040%=================================================================
6868A classe de uma classe é chamada de \emph{metaclasse}.
6969\label{sec:metaclassIntro}
7070Uma \indmain{metaclasse} é criada automaticamente para você toda vez que você cria uma classe.
71E na maior parte do tempo, você na precisa se preocupar com metaclasses.
71E na maior parte do tempo, você não precisa se preocupar com metaclasses.
7272Entrentanto, toda vez que você usa o \foreign{system browser} para olhar o ``\subind{system browser}{lado da classe}'' de uma classe, é bom ter em mente que você está na verdade navegando por uma classe inteiramente diferente.
73Uma classe e sua metaclasse são clases diferentes, mesmo que a primeira seja uma instância da segunda.
73Uma classe e sua metaclasse são classes diferentes, mesmo que a primeira seja uma instância da segunda.
7474
75Para explicar apropriadamente classes e metaclasses, precisamos estender as regras vistas em \charef{model} com as seguintes regras adicionai:
75Para explicar apropriadamente classes e metaclasses, precisamos estender as regras vistas em \charef{model} com as seguintes regras adicionais:
7676
7777\begin{enumerate}[label={\textbf{Rule \arabic{*}}.}, ref={Rule \arabic{*}}, leftmargin=*, widest=10]
7878\setcounter{enumi}{5}
146146Tudo acontece por \ind{envios de mensagens} (\ref{rule:message}); portanto, podemos deduzir que mthind{Color class}{blue} é uma mensagem para \ct{Color}; \mthind{Object}{class} e \mthind{Color}{alpha:} são mensagens para a cor azul; \mthind{Morph}{openInWorld} é uma mensagem para a elipse; e mthind{Behavior}{superclass} é uma mensagem para \ct{TranslucentColor} e \ct{Color}.
147147O receptor em cada classe é um objeto, já que tudo é um objeto, mas alguns desses objetos também são classes.
148148
149A busca de métodos segue a cadeia de herança (\ref{rule:lookup}); sendo assim, quando enviamos a mensagem \ct{class} para o resultado de \ct{Color blue alpha: 0.4}, a mensagem é realmente tratada pelo método correspondente encontrado em \ct{Object}, como mostrando na \figref{classmessage}.
149A busca de métodos segue a cadeia de herança (\ref{rule:lookup}); sendo assim, quando enviamos a mensagem \ct{class} para o resultado de \ct{Color blue alpha: 0.4}, a mensagem é realmente tratada pelo método correspondente encontrado em \ct{Object}, como mostrado na \figref{classmessage}.
150150
151151\begin{center}
152152\begin{figure}[!ht]
175175Como mencionamos em \secref{metaclassIntro}, classes cujas instâncias são classes são chamadas de metaclasses.
176176
177177\paragraph{Metaclasses são implícitas.}
178Metaclasses são automaticamente criadas quando você define uma classes. Você pode dizer que elas são \emph{implícitas} já que com um programador você nunca terá que se preocupar com elas. Uma metaclasse \subind{metaclasse}{implícita} é criada para cada classe que você define, de modo que cada metaclasse possui uma única instância.
178Metaclasses são automaticamente criadas quando você define uma classes. Você pode dizer que elas são \emph{implícitas} já que como um programador você nunca terá que se preocupar com elas. Uma metaclasse \subind{metaclasse}{implícita} é criada para cada classe que você define, de modo que cada metaclasse possui uma única instância.
179179% At a more advanced level, this implies that sharing between metaclasses is difficult except by subclassing.
180180
181Enquanto classe normais são nomeadas por variáveis globais, metaclasse são anônimas.
182Mesmo assim você pode sempre obter uma referência às mesmas atráves da classes que são suas instâncias.
181Enquanto classes normais são nomeadas por variáveis globais, metaclasses são anônimas.
182Mesmo assim você pode sempre obter uma referência às mesmas atráves das classes que são suas instâncias.
183183A classe de \clsind{Color}, por exemplo, é \clsind{Color class}, e a classe de \ct{Object} é \clsind{Object class}:
184184\begin{code}{@TEST}
185185Color class --> Color class
264264\end{figure}
265265\end{center}
266266
267Podemos perceber então que á uma única forma de \subind{méetodos}{busca} de métodos em \st. Classes são objetos, e se comportam como quaisquer outros objetos.
267Podemos perceber então que há uma única forma de \subind{méetodos}{busca} de métodos em \st. Classes são objetos, e se comportam como quaisquer outros objetos.
268268Classes tem o poder de criar novas instâncias somente porque respondem à mensagem \ct{new} e porque este método sabe como criar novas instâncias. Normalmente, objetos normais não entendem essa mensagem, mas se você tiver uma boa razão para fazer isso, não há nada que lhe impeça de adicionar o método \ct{new} a um objeto qualquer que não seja uma metaclasse.
269269
270270E já que classes são objetos, podemos inspecioná-las normalmente:
273273\dothis{Use o \foreign{inspector} para visualizar \ct{Color blue} e \ct{Color}.}
274274
275275\noindent
276Note que em uma caso, você está inspecionando uma instância de \ct{Color} e na outra a própria classe \ct{Color}.
276Note que em um caso, você está inspecionando uma instância de \ct{Color} e na outra a própria classe \ct{Color}.
277277Isso pode ser um pouco confuso, porque o título do \foreign{inspector} mostra a \emph{classe} do objeto sendo visualizado.
278278
279279O \foreign{inspector} em \ct{Color} permite que você veja a superclasse, as variáveis de instâncias, o \subind{método}{dicionário} de métodos, e assim por diante, da classe \ct{Color}, como vista na \figref{inspectingColor}.
335335\paragraph{Responsabilidades de \lct{Behavior}, \lct{ClassDescription} e \lct{Class}.}
336336\clsind{Behavior} é responsável pelo estado mínimo de objetos que possuem instâncias: isto incluem um elo para a superclasse, um dicionário de métodos e uma descrição das instâncias (\ie representação e número).
337337\on{eu não sei se entendo o último ponto}
338\ct{Behavior} herda\ct{Object}, de modo que ela e todas suas subclasses se comportam com um objetos normais.
338\ct{Behavior} herda de \ct{Object}, de modo que ela e todas suas subclasses se comportam como objetos normais.
339339
340340\ct{Behavior} também é a interface básica para o compilador.
341341Essa classe possui métodos para criar um dicionário de métodos, compilar métodos,
354354a maior parte dos mecanismos necessários para gravar mudanças.
355355
356356\clsind{Class} representa o comportamente comum de todas as classes.
357Ela provê um nome de classes, compilação de métodos, armazenamento de métodos, e variáveis de instância.
357Ela provê um nome de classe, compilação de métodos, armazenamento de métodos, e variáveis de instância.
358358%FIXME tradução de pool variables
359Também fornece uma representam concreta de nomes de variáveis de classes e variáveis compartilhadas (\mthind{Class}{addClassVarName:}, \mthind{Class}{addSharedPool:}, \mthind{Class}{initialize}).
360\ct{Class} sabe como criar instâncias de modo que todas metaclasses deve herdar de \ct{Class} em última instância.
359Também fornece uma representação concreta de nomes de variáveis de classes e variáveis compartilhadas (\mthind{Class}{addClassVarName:}, \mthind{Class}{addSharedPool:}, \mthind{Class}{initialize}).
360\ct{Class} sabe como criar instâncias de modo que todas metaclasses devem herdar de \ct{Class} em última instância.
361361
362362%=================================================================
363363\section{Toda metaclasse é uma instância de \lct{Metaclass}}
386386\section{A metaclasse de \lct{Metaclass} é uma instância de \lct{Metaclass}}
387387% \ruleref{metaclassmetaclass}
388388
389A questão final é: qua é classe de \clsind{Metaclass class}?
389A questão final é: qual a é classe de \clsind{Metaclass class}?
390390
391391A resposta é simples: é uma metaclasse, portanto, é uma instância de \ct{Metaclass}, como todas outras metaclasses no sistema (veja a \figref{metaclassclassclass}).
392392
399399\end{figure}
400400\end{center}
401401
402A figura mostra que todas metaclasses são instâncias de \ct{Metaclass}, incluindo a metaclasse da própria \ct{Metaclass}. Se você comprar as \ref{fig:metaclassclass} e \ref{fig:metaclassclassclass}, você verá como a \subind{metaclasse}{hierarquia} de metaclasses espelha perfeitament a hieraquia de classes, até o topo em \ct{Object class}.
402A figura mostra que todas metaclasses são instâncias de \ct{Metaclass}, incluindo a metaclasse da própria \ct{Metaclass}. Se você comparar as \ref{fig:metaclassclass} e \ref{fig:metaclassclassclass}, você verá como a \subind{metaclasse}{hierarquia} de metaclasses espelha perfeitamente a hieraquia de classes, até o topo em \ct{Object class}.
403403
404O exemplo seguinte nos mostra como podemos verificar a hierarquia de classes para demonstrar que a \figref{metaclassclassclass} está correta. (Na verdade, você verá que isso é uma mentirinha\,---\,\ct{Object class superclass -->} {\clsind{ProtoObject class}, não \ct{Class}). Em \sq, precisamos subir mais uma superclasses até chegar em \ct{Class}.)
404O exemplo seguinte nos mostra como podemos verificar a hierarquia de classes para demonstrar que a \figref{metaclassclassclass} está correta. (Na verdade, você verá que isso é uma mentirinha\,---\,\ct{Object class superclass -->} {\clsind{ProtoObject class}, não \ct{Class}). Em \sq, precisamos subir mais umas superclasses até chegar em \ct{Class}.)
405405
406406\begin{example}{A hierarquia de classes}{@TEST}
407407TranslucentColor superclass --> Color
443443
444444\item Cada metaclasse herda de \ct{Class} e \ct{Behavior}.
445445 Cada classe \emph{é uma} \ct{Class}. Já que metaclasses também são classes, elas tem que herdar de \ct{Class}.
446 \ct{Behavior} provê o comportamente comum a todas entidades que possuem instâncias.
446 \ct{Behavior} provê o comportamento comum a todas entidades que possuem instâncias.
447447
448448\item Toda metaclasse é uma instância de \ct{Metaclass}.
449449 \ct{ClassDescription} provê tudo o que você precisa que é comum a \ct{Class} e \ct{Metaclass}.
toggle raw diff

PortugueseBook/Preface/Preface.tex

 
4444
4545Este livro não lhe ensinará a programar --- o leitor já deverá ter alguma familiaridade com linguagens de programação. Da mesma forma, alguma experiência com programação orientada a objetos será útil.
4646
47O livro introduzirá o ambiente de programação do \sq, e também a linguagem e ferramentas associadas. Você terá alguma exposição a idiomas e práticas comuns, mas o foco será na tecnologia e não em \foreign{design} orientado a objetos. Quanto possível, nós lhe mostraremos muitos exemplos. (Nossa inspiração foi o excelente livro de Alec Sharp sobre Smalltalk\cite{Shar97a}.)
47O livro introduzirá o ambiente de programação do \sq, e também a linguagem e ferramentas associadas. Você terá alguma exposição a idiomas e práticas comuns, mas o foco será na tecnologia e não em \foreign{design} orientado a objetos. Quando possível, nós lhe mostraremos muitos exemplos. (Nossa inspiração foi o excelente livro de Alec Sharp sobre Smalltalk\cite{Shar97a}.)
4848
4949Há vários outros livros sobre \st disponíveis gratuitamente na Web, mas nenhum deles tem seu foco específico em \sq. Veja, por exemplo:
5050\url{stephane.ducasse.free.fr/FreeBooks.html}
6060Alan Knight expressa este princípio da seguinte forma\footnote{\url{www.surfscranton.com/architecture/KnightsPrinciples.htm}}:
6161\index{Knight, Alan}
6262\important{{\bf Tente não se importar.}
63Programadores que estão começando com \st geralmente se vêem em problemas porque pensam que precisam entender todos os detalhes de como uam coisa funciona antes que possam usá-la. Isso sigfica que leva um bom tempo para que eles dominem \ct{Transcript show: 'Hello World'}.. Um dos grandes saltos em OO é poder responder a questão ``Como isto funciona?'' com ``Não me importo em absoluto''.}
63Programadores que estão começando com \st geralmente se vêem em problemas porque pensam que precisam entender todos os detalhes de como uma coisa funciona antes que possam usá-la. Isso sigfica que leva um bom tempo para que eles dominem \ct{Transcript show: 'Hello World'}.. Um dos grandes saltos em OO é poder responder a questão ``Como isto funciona?'' com ``Não me importo em absoluto''.}
6464
6565%=================================================================
6666\section*{Um livro aberto}
9393
9494\item \url{www.squeaksource.com} é o equivalente do SourceForge para projetos \sq.
9595
96\item \url{wiki.squeak.org/squeak} é um \foreign{wiki} co informações atualizadas sobre o \sq.
96\item \url{wiki.squeak.org/squeak} é um \foreign{wiki} com informações atualizadas sobre o \sq.
9797\end{itemize}
9898
9999\paragraph{Sobre as listas de discussão.} Existem várias listas de discussão sobre o \sq e algumas delas podem ser excessivamente ativas. Se você não quer ser inundado por \foreign{e-mails} mas ainda assim gostaria de participar sugerimos que você use \url{news.gmane.org} ou \url{www.nabble.com/Squeak-f14152.html} para navegar pelos arquivos das listas.
125125%=================================================================
126126\section*{Exemplos e exercícios}
127127
128Nós faemos uso de duas convenções especiais neste livro.
128Nós faremos uso de duas convenções especiais neste livro.
129129
130130Nós tentamos dar tantos exemplos quanto possível.
131Em particulr, há muitos exemplos que mostram um fragmento de código que pode ser executado. Nós usamos o símbolo \ct{-->} para indicar o resultado que você obtém quando seleciona uma expressão e \menu{a imprime}:
131Em particular, há muitos exemplos que mostram um fragmento de código que pode ser executado. Nós usamos o símbolo \ct{-->} para indicar o resultado que você obtém quando seleciona uma expressão e \menu{a imprime}:
132132
133133\begin{code}{@TEST}
1341343 + 4 --> 7 "selecionando 3 + 4 e usado o comando 'print it', imprime-se 7"
135135\end{code}
136136
137Caso você queria usar o \sq para executar esse comandos, você pode baixar um arquivo de texto com todo o código do livro do site do mesmo: \sbe.
137Caso você queria usar o \sq para executar esses comandos, você pode baixar um arquivo de texto com todo o código do livro do site do mesmo: \sbe.
138138
139A segunda conversão é mostrar o ícone \dothisicon{} para indicar algo que você precisa fazer:
139A segunda convenção é mostrar o ícone \dothisicon{} para indicar algo que você precisa fazer:
140140
141141\dothis{Leia o segundo capítulo!}
142142
147147
148148Somos especialmente gratos a Lukas Renggli e Orla Greevy pelos seus comentários durante os rascunhos da primeira versão.
149149
150Agradecemos também à Universde de Bern, Suíça, por suportar esse projeto de código livre e por hospedar o site do livro.
150Agradecemos também à Universidade de Bern, Suíça, por suportar esse projeto de código livre e por hospedar o site do livro.
151151
152152Agradecemos ainda à comunidade \sq pelo seu entusiástico suporte ao projeto e pelas informações sobre erros encontrados na primeira edição do livro.
153153
154Finalmente agradecemos ao desenvolvedores do \sq por nos darem esse incrível ambiente.
154Finalmente agradecemos aos desenvolvedores do \sq por nos darem esse incrível ambiente.
155155
156156%=============================================================
157157\ifx\wholebook\relax\else
toggle raw diff

PortugueseBook/QuickTour/QuickTour.tex

 
3939
4040Nós usaremos este ícone \dothisicon{} para marcar locais no texto onde você deve experimentar alguma coisa no \sq.
4141Em particular, você aprenderá como rodar o \sq, como diferenciar entre as várias maneiras de interagir com o mesmo, e descobrirá algumas ferramentas básicas.
42Você também aprenderá a definir um novo método, a criar m objeto e enviar mensagens para o mesmo.
42Você também aprenderá a definir um novo método, a criar um objeto e enviar mensagens para o mesmo.
4343
4444%=================================================================
4545\section{Começando}
5656
5757 \item A \emphind{máquina virtual} (VM) é a única parte do sistema que é diferente para cada processador e sistema operacional onde \sq roda. Máquinas virtuais pré-compiladas estão disponíveis para todos os principais ambientes computacionais. Na \figref{download} vemos que a VM do Mac é chamada de \textit{\sq 3.8.15beta1U.app}.
5858
59 \item O arquivo \emphind{sources} contém o código fonte para todas as partes do \sq que não mudam tão freqüentemente. Na \figref{download}, esse arquivo tem o nome de \emph{SqueakV39.sources}. Note que o arquivo SqueakV39.sources é somente para as versões 3.9 e superiores do ]sq. Para versões anteriores, use um arquivo correspondente à versão principal \eg \textit{SqueakV3.sources} para as versões de 3.0 a 3.8 do \sq.
59 \item O arquivo \emphind{sources} contém o código fonte para todas as partes do \sq que não mudam tão freqüentemente. Na \figref{download}, esse arquivo tem o nome de \emph{SqueakV39.sources}. Note que o arquivo SqueakV39.sources é somente para as versões 3.9 e superiores do \sq. Para versões anteriores, use um arquivo correspondente à versão principal \eg \textit{SqueakV3.sources} para as versões de 3.0 a 3.8 do \sq.
6060
6161 \item A \emph{\ind{imagem}} atual é um \foreign{snapshot} de um sistema \sq, congelado no tempo. Ele consiste em dois arquivos: um arquivo \emph{.}\emphind{image}, que contém o estado de todos objetos no sistema (incluindo métodos e classes, já que estes também são objetos), e um arquivo \emph{.}\emphind{changes}, que contém um \foreign{log} de todas as mudanças feitas ao código fonte do sistema. Na \figref{download}, vemos que o arquivo de imagem é \textit{Squeak3.9-final-7067.image} e o de mudanças é \textit{Squeak3.9-final-7067.changes}.
6262\end{enumerate}
6666
6767A versão do \sq que usamos para desenvolver os exemplos neste livro é a \emphind{Squeak-dev}, disponível em \url{http://damien.cassou.free.fr/squeak-dev.html}.
6868\label{sec:squeakDev}
69Nos escolhemos esta imagem porque tem uma variedade maior de ferramentas de programação instaladas, e porque pacotes adicionais podem ser instalados com um único clique. Apesar disso, a maior parte do material introdutório deste livro funcionará em qualquer versão; sendo assim, se você já tiver uma versão instalada, não há problemas em continuar a usá-la. Entretanto, se você notar alguma diferente de aparência ou comportamento entre o seu sistema e o que é descrito aqui, não fique surpreso. Por outro lado, se você estiver baixando o \sq pela primeira vez, você pode pegar a imagem \emph{Squeak-dev} mencionada anteriormente.
69Nós escolhemos esta imagem porque tem uma variedade maior de ferramentas de programação instaladas, e porque pacotes adicionais podem ser instalados com um único clique. Apesar disso, a maior parte do material introdutório deste livro funcionará em qualquer versão; sendo assim, se você já tiver uma versão instalada, não há problemas em continuar a usá-la. Entretanto, se você notar alguma diferença de aparência ou comportamento entre o seu sistema e o que é descrito aqui, não fique surpreso. Por outro lado, se você estiver baixando o \sq pela primeira vez, você pode pegar a imagem \emph{Squeak-dev} mencionada anteriormente.
7070
71À medida que você trabalha com o \sq, os arquivos da imagem e de mudança serão modificados, de modo que você precisa garantir que eles tem permissões de escrita. Sempre os mantenha juntos e nunca os edite com um editor de texto, já que o \sq armazena os objetos que você está usando e as mudanças de código feito em um formato próprio. É sempre uma boa idéia manter uma cópia dos arquivos baixados para que você smpere seja capaz de começar com uma imagem nova e simplesmente recarregar seu código.
71À medida que você trabalha com o \sq, os arquivos da imagem e de mudança serão modificados, de modo que você precisa garantir que eles tem permissões de escrita. Sempre os mantenha juntos e nunca os edite com um editor de texto, já que o \sq armazena os objetos que você está usando e as mudanças de código feito em um formato próprio. É sempre uma boa idéia manter uma cópia dos arquivos baixados para que você sempre seja capaz de começar com uma imagem nova e simplesmente recarregar seu código.
7272
7373O arquivo \emphind{sources} e a VM podem ser somente-leitura\,---\,eles podem ser compartilhados entre usuários diferentes. Todos esses arquivos podem ser colocados no mesmo diretório, mas também é possível colocar a máquina virtual e o arquivo de fontes em diretórios separados onde todos possam acessá-los. Faça o que for melhor para o seu estilo de trabalho e sistema operacional.
7474
8383\end{figure}
8484
8585\index{Rodando o \sq}
86\paragraph{Rodando.} Para rodar o \sq, faça o que o seu sistema operacional espera: arraste o arquivo da imagem, cuja extensão é \emph{.}\emphind{image}, para sobre o ícone da máquina virtual; ou dê um duplo clique na imagem; ou ainda, na linha de comando, digite o nome do executável da máquina virtual seguido pelo nome do arquivo da imagem. (Quando você possui múltiplas máquinas virtuais instaladas na sua máuina, o seu sistema operacional pode não identificar corretamente a que você deseja usar; neste caso, é mais seguro arrastar e soltar a imagem sobre a máquina virtual ou usar a linha de comando.)
86\paragraph{Rodando.} Para rodar o \sq, faça o que o seu sistema operacional espera: arraste o arquivo da imagem, cuja extensão é \emph{.}\emphind{image}, para sobre o ícone da máquina virtual; ou dê um duplo clique na imagem; ou ainda, na linha de comando, digite o nome do executável da máquina virtual seguido pelo nome do arquivo da imagem. (Quando você possui múltiplas máquinas virtuais instaladas na sua máquina, o seu sistema operacional pode não identificar corretamente a que você deseja usar; neste caso, é mais seguro arrastar e soltar a imagem sobre a máquina virtual ou usar a linha de comando.)
8787
88