Smalltalk в примерах/Основы: различия между версиями

Содержимое удалено Содержимое добавлено
→‎Класс как хранилище кода: Выкинул неработающий Latex код для рисунка
→‎Инкапсуляция: Выкинул неработающий Latex код для вставки картинки
Строка 20:
 
Когда ты посылаешь сообщение <tt>покупка: количествоАкций цена: цена</tt> конкретному объекту акция, он обновляет переменные экземпляра ''цена, последняяСделка'' и ''объёмСделок''. Не существует ''другого'' пути для изменения этих переменных. Ни один другой объект не может прочитать или изменить данные объекта XYZ. Это можно сделать только посылая объекту <tt>XYZ</tt> сообщение. Некоторые сообщения обновляют данные объекта акция, и некоторые сообщения возвращают значения. Но ни один объект не может получить доступ к данным напрямую. Данные ''инкапсулированы'' в объекте. Рисунок~\ref{incapsulxcyx} показывает представление данной инкапсуляции.
 
\begin{figure}[!htb]
\begin{center}
\includegraphics{encapsulation.eps}
\end{center}
\caption{Инкапсуляция}
\label{incapsulxcyx}
\end{figure}
 
Тот факт что данные инкапсулированы означает что мы можем изменить способ их хранения. Так долго как мы сохраняем общедоступный интерфейс который мы определили — сообщения на которые объект отвечает, мы можем делать всё что захотим внутри объекта. В один день мы можем решить хранить цену в долларах и центах, в следующий день в центах, в следующий день в восьмёрках долларов, и т. д. Так долго как мы также меняем способ которым метод <tt>цена</tt> манипулирует данными до их возвращения, мы поддерживаем общедоступный интерфейс несмотря на то что объект внутренне изменяется.