\newcommand{\stSmalltalkSubtitle}
{ngôn ngữ lập trình\\
  thuần \textbf{hướng đối tượng}\\
  và môi trường \textbf{động}}

\newcommand{\stSmalltalkConceptsTerm}{Những khái niệm quan trọng của Smalltalk}
\newcommand{\stSmalltalkConceptsDefinition} {Smalltalk là một ngôn ngữ
  \emph{hướng đối tượng} và \emph{định kiểu động}, với cú pháp đơn giản mà có thể học được trong \emph{mười lăm phút}.
Lợi thế của nó chính là nhờ vào sự \emph{rất nhất quán}:

\begin{itemize}
\item mỗi thứ là một đối tượng: các lớp, các phương thức, các số, v.v..
\item số qui tắc thì rất ít, và không có ngoại lệ!
\end{itemize}

Smalltalk chạy trên \emph{máy ảo}.  Sự phát triển chương trình
thực hiện trên một \emph{image (ảnh)} nơi mà tất cả các đối tượng 
tồn tại và được cập nhật.}

\newcommand{\stSmalltalkSyntaxTerm}{Cú pháp Smalltalk}
\newcommand{\stReservedWordsTerm}{Các từ dành riêng}
\newcommand{\stReservedCaractersTerm}{Các ký tự dành riêng}

\newcommand{\stMessageSendingTerm}{Gửi tin nhắn}
\newcommand{\stMessageSendingDefinition}
{Một phương thức được gọi bằng cách gửi một tin nhắn đến một đối tượng, tin nhắn sẽ trả về một đối tượng. Tin nhắn được dựa trên ngôn ngữ tự nhiên, có chủ ngữ, động từ và bổ ngữ.
Có ba loại tin nhắn: nhất nguyên, nhị nguyên và từ khóa.}

\newcommand{\stUnaryMessagesTerm}{Tin nhắn nhất nguyên.}
\newcommand{\stUnaryMessagesDefinition}
{Tin nhắn nhất nguyên là tin nhắn không có đối số (argument).

\begin{displaycode}
array := Array new.

array size.
\end{displaycode}

Ví dụ đầu tiên này tạo và trả về một bản thể hiện mới của lớp Array (Mảng), 
bằng cách gửi nó tin nhắn \code{new}. Ví dụ thứ hai yêu cầu 
kích thước của mảng này, kết quả là \code{0}.}

\newcommand{\stBinaryMessagesTerm}{Tin nhắn nhị nguyên.}
\newcommand{\stBinaryMessagesDefinition}{Tin nhắn nhị nguyên chỉ có một đối
số, được đặt tên bằng một ký hiệu và thường được dùng cho
các biểu thức toán học.

\begin{displaycode}
3 + 4.

'Hello', ' World'.
\end{displaycode}

Tin nhắn \code{+} được gửi đến đối tượng \code{3} với \code{4} là tham số. Trong trường hợp thứ hai, tin nhắn \code{,} được gửi
đến chuỗi kí tự \code{'Hello'} với \code{' World'} là tham số.}

\newcommand{\stKeywordMessagesTerm}{Tin nhắn từ khóa.}
\newcommand{\stKeywordMessagesDefinition}
{
  Tin nhắn từ khóa có thể có một hay nhiều đối số. Các đối số được chèn vào giữa mỗi từ khóa, sau mỗi dấu hai chấm.

\begin{displaycode}
'Smalltalk' allButFirst: 5.

3 to: 10 by: 2.
\end{displaycode}

Ví dụ đầu gọi phương thức \code{allButFirst:} trên một chuỗi ký tự
và truyền đối số \code{5}. Trả về chuỗi ký tự 
\code{'talk'}. Ví dụ thứ hai trả về một tập hợp chứa các phần tử là 
\code{3}, \code{5}, \code{7} and \code{9}.
}

\newcommand{\stDevelopmentEnvironmentTerm}{Môi trường phát triển}
\newcommand{\stDevelopmentEnvironmentDefinition} {Hầu hết Smalltalk 
được cung cấp với một môi trường phát triển tích hợp (IDE), 
cho phép duyệt mã nguồn và tác động đến các đối tượng. Nhờ vào phản ánh API, 
nhiều công cụ được cung cấp sẵn trong Smalltalk như sau:

\begin{itemize}
\item trình duyệt lớp và phương thức (class and method browser);
\item công cụ chỉnh cấu trúc nội bộ (refactoring tools);
\item trình kiểm tra đối tượng (object inspectors);
\item trình bắt sửa lỗi (debugger);
\item công cụ quản lý phát hành và điều khiển phiên bản (release management and version control tools);
\item và còn nhiều nữa!
\end{itemize}

Mã có thể được kiểm tra và định giá trị trực tiếp trong
image (ảnh), bằng cách dùng các tổ hợp phím đơn và các
trình đơn đầy đủ.}

\newcommand{\stImplementationTerm}{Phát hành}
\newcommand{\stImplementationDefinition}
{
Có nhiều Smalltalk được phát hành:
\begin{description}
\item[Squeak \& Pharo:] miễn phí, mã nguồn mở và hỗ trợ đa nền. Được 
phát triển năng động.
\item[VisualWorks:] có chủ quyền, hỗ trợ đa nền, miễn phí cho 
ứng dụng phi thương mại.
\item[Gemstone:] phát hành có chủ quyền bao gồm cơ sở dữ liệu 
đối tượng hiệu quả cao.
\item[Và những thứ khác:] GNU Smalltalk, Smalltalk/X, SyX, VA Smalltalk, Dolphin\dots
\end{description}
}

\newcommand{\stSqueakCodeBrowserTerm}{Trình duyệt mã Pharo}

\newcommand{\stApplicationsTerm}{Chương trình ứng dụng}
\newcommand{\stApplicationsDefinition}
{
Từ khi được lập ra từ đầu những năm 1980, Smalltalk đã 
được sử dụng rộng rãi trong nghiên cứu học thuật cũng như 
trong những ứng dụng thương mại. Sau đây là những ứng 
dụng Smalltalk tiêu biểu đang được phát triển.
\begin{description}
\item[Giảng dạy:] EToys (Squeak), SqueakBot, BotsInc, Scratch\dots
\item[Đa phương tiện (Multimedia):] Sophie, OpenCroquet, Plopp\dots
\item[Phát triển Web:] Seaside, Aida, Komanche, Swazoo\dots
\item[Quản lý lưu trữ:] hệ quản lý dữ liệu hướng đối tượng (Magma, GemStone), hệ quản lý dữ liệu quan hệ (MySQL, PostgreSQL), trình ánh xạ quan hệ  đối tượng (Glorp).
\end{description}
}

\newcommand{\stApplicationScreenshotPicture}{olpc-etoys}
\newcommand{\stApplicationScreenshotPictureWidth}{.56}
\newcommand{\stApplicationScreenshotTerm}{Etoys và DrGeo trên máy Mỗi Trẻ Em Một Máy Tính (OLPC)}

\newcommand{\stImageTerm}{Image (Ảnh)}
\newcommand{\stImageDefinition}
{Môi trường Smalltalk có một đối tượng để 
lưu trữ gọi là image (ảnh). Image (ảnh) chứa mã của ứng 
dụng (gồm các lớp (classes) và các phương thức (methods)), 
chứa các đối tượng giữ trạng thái của ứng dụng và có thể 
chứa cả các công cụ phát triển ứng dụng để kiểm tra và 
tìm lỗi chương trình trong khi nó đang thi hành.}

\newcommand{\stVMTerm}{Virtual Machine (Máy ảo)}
\newcommand{\stVMDefinition}
{Máy ảo là một chương trình có 
khả năng thi hành các chương trình khác. Nó làm cho 
ứng dụng có tính uyển chuyển linh hoạt.}

\newcommand{\stReflexionTerm}{Reflection (Phản ánh)}
\newcommand{\stReflexionDefinition} {Một ngôn ngữ được cho là có tính 
phản ánh khi mà nó bao gồm cơ chế kiểm tra và cập nhật 
mã trong khi chương trình đang thi hành.}

\newcommand{\stDynamicTypingTerm}{Dynamic typing (Định kiểu động)}
\newcommand{\stDynamicTypingDefinition} {Một số ngôn ngữ buộc 
lập trình viên định rõ kiểu của từng biến (integer (số 
nguyên), string (chuỗi ký tự), \dots); được gọi là định kiểu 
cố định. Định kiểu động không buộc theo sự áp đặt này, 
vì thế làm cho chương trình dễ tái sử dụng hơn và dễ 
thay đổi hơn.}

\newcommand{\stBooksTerm}{Sách}
\newcommand{\stBooksDefinition}
{
\begin{itemize}
\item Nhiều sách miễn phí về Smalltalk có ở đây:\\
  \url{http://stephane.ducasse.free.fr/FreeBooks.html}

\item Smalltalk đại cương
  \begin{itemize}
  \item \emph{Smalltalk with Style}\\
		(Edward Klimas, Suzanne Skublics and
    David A. Thomas, miễn phí))
  \item \emph{Smalltalk by Example: the Developer's Guide} --
		(Alec Sharp, miễn phí))
  \end{itemize}

\item Squeak chi tiết
  \begin{itemize}
  \item \emph{Squeak by Example} -- (2007, miễn phí)
  \item \emph{Powerful Ideas in the Classroom}\\
		(BJ Allen-Conn and Kim Rose)
  \end{itemize}
\end{itemize}
}

\newcommand{\stSmalltalkActionsTerm}{Sự kiện}
\newcommand{\stSmalltalkActionsDefinition}
{
\begin{itemize}
\item European Smalltalk User Group conferences (ESUG) (Hội nghị nhóm người dùng 
Smalltalk châu Âu). Từ năm 1993, Những người dùng Smalltalk (Smalltalkers) trong công nghiệp và trong học thuật tổ chức họp tại châu Âu.\\
  \url{http://www.esug.org/conferences}
\item Hội nghị thường niên, được tổ chức ở Bắc Mỹ bởi STIC (\url{http://www.stic.st}), hội liên
hiệp những công ty và những nhà phát triển Smalltalk.\\
  \url{http://www.smalltalksolutions.com/}
\end{itemize}
}

\newcommand{\stInternetWebsitesDefinition}
{
\begin{itemize}
\item Trang web chính thức về Squeak:\\ \url{http://www.squeak.org}
\item Wiki (Thảo luận nhóm):\\ \url{http://wiki.squeak.org}
\item Tin tức:\\ \url{http://news.squeak.org}
\end{itemize}
}

\newcommand{\stNilDefinition}{đối tượng chưa xác định (giá trị mặc định của biến)}
\newcommand{\stTrueAndFalseDefinition}{đối tượng luận lý (boolean)}
\newcommand{\stSelfDefinition}{đối tượng hiện tại}
\newcommand{\stSuperDefinition}{đối tượng hiện tại trong ngữ cảnh của lớp cha (super class)}
\newcommand{\stThisContextDefinition}{stack (bộ nhớ chồng) tại thời điểm thực thi của phương thức}
\newcommand{\stAssignmentOperatorDefinition}{gán giá trị}
\newcommand{\stReturnOperatorDefinition}{trả về kết quả của phương thức}
\newcommand{\stTempsDeclarationOperatorDefinition}{khai báo ba biến tạm}
\newcommand{\stDollarOperatorForCharacterADefinition}{ký tự \code{a}}
\newcommand{\stLiteralArrayDefinition}{mảng chứa hai phần tử: ký hiệu (symbol) \code{\#abc} và số \code{123}}
\newcommand{\stDotOperatorDefinition}{kết thúc biểu thức}
\newcommand{\stSemiColonOperatorDefinition}{gửi tin nối tiếp (message cascade)}
\newcommand{\stBlockOperatorDefinition}{Khối mã (là một đối tượng!)}

\newcommand{\stPeriodTerm}{dấu chấm câu}
\newcommand{\stCommentTerm}{ghi chú}
\newcommand{\stStringTerm}{chuỗi ký tự}

\newcommand{\stGlossaryTerm}{Thuật ngữ}

\newcommand{\stAndTerm}{và}
\newcommand{\stOrTerm}{hoặc}

\newcommand{\stBlockTerm}{Block (Khối)}
\newcommand{\stBlockDefinition}{

  Các khối là các đối tượng chứa mã không được thực hiện
ngay. Chúng là cơ sở cho cấu trúc điều khiển như là điều
kiện rẽ nhánh hay điều khiển lặp. Đồng thời, các khối có thể
được dùng để gắn vào các xử lý tương tác, ví dụ gắn vào
các mục trình đơn.

  \begin{displaycode}
    \#('Hello ' 'World')

    \hspace{1cm}  do: [:string | Transcript show: string].
  \end{displaycode}

  Ví dụ này gửi tin nhắn \code{do:} đến một mảng các chuỗi ký tự với 
một khối là tham số. Khối được tính giá trị một lần cho mỗi
phần tử trong mảng. Tham số khối \code{string} là mỗi phần tử
của mảng, lần lượt cái này tiếp theo cái khác. Kết quả của
toàn biểu thức, lần lượt, chuỗi ký tự \code{'Hello '} rồi đến \code{'World'} 
được hiển thị trong cửa sổ theo dõi (Transcript).
   
}

\newcommand{\stSqueakCodeBrowserSize}{1}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\newcommand{\seaSubtitle}{Sườn ứng dụng để phát triển những ứng dụng web phức tạp trong Smalltalk}

%%% Local Variables:
%%% coding: utf-8-unix
%%% mode: latex
%%% TeX-master: "../flyer"
%%% TeX-PDF-mode: t
%%% ispell-local-dictionary: "english"
%%% End:

