Smalltalk в примерах/Объект: различия между версиями

Содержимое удалено Содержимое добавлено
м Категоризация по запросу на w:ВП:РДБ
орфография, пунктуация
Строка 1:
Смолток это система с \emph{корнем}, что означает что есть корневой класс от которовакоторого образуются все другие классы. Таким корневым суперклассоясуперклассом является \emph{Объект}. (В действительности, корневым является другой класс, и ты можэшможешь увидеть евоего просмотрев \verb|Класс| \verb|кореньМира|. Однако, для большынствабольшинства прикладных случает ты можэшможешь рассматривать Объект просто как корневой класс.)
 
<!--
Строка 5:
-->
 
Объект предоставляет поведение, которое наследуется всеми евоего подклассами, хотя некоторые из них переопределяют это поведение. Стоит познакомится со всеми протоколами и методами Объекта чтобы знать общее поведение которое наследуется всеми классами. Давай рассмотрим некоторые протоколы Объекта стороны экэмпляраэкземпляра. Мы не будетмбудем рассматривать все протоколы, или все методы в протоколе, но мы достаточно познакомимся с ними чтобы дать тебе почуствоватьпочувствовать что классы наследуют от Объекта.
 
<!--
Строка 13:
==Метод доступа==
 
Сообщение \verb|от:| возвращает объект определённый индэксоминдексом, в то время как \verb|от:поместить:| помещает объект по указанному индэксуиндексу. Сообщение \verb|размер| возвращает количество количество индэксируемыхиндексируемых полей в объекте. Эти сообщения работают только для индэксируемыхиндексируемых объектомобъектов, т.е. для совокупностей. Подобные методы, \verb|простойОт:|, \verb|простойОт:поместить:|, и \verb|простойРазмер| делают те жэже самые вещи но никогда ни должны переопределятьссяпереопределяться подклассами. Их назначение --- предоставить тебе функцыональностьфункциональность \verb|простых| методов и чтобы ты не волновался что некоторый промежуточный суперкласс мог переопределить их. \verb|тысам| возвращает получателя сообщения. Оно часто используется в каскадах чтобы быть уверенным что возвращается правильный объект. НапрмерНапример, в выражэниивыражении \verb|список| \verb|:=| \verb|Список| \verb|новый| \verb|добавить:1;| \verb|тысам|, \verb|тысам| помещает в переменную список вместо числа один.
 
<!--
Строка 21:
==Изменение==
 
Сообщения \verb|изменился|, \verb|изменился:|, и \verb|изменился:с:| все используются для тавотого, чтобы отправить извещение о зависимости. Обычным использованием этих сообщения является посылка объектом сообщения самому себе когда он изменяется, и все зависящие от невонего объектуобъекты будут проинформированы. Мы будем рассматривать механизм зависимостей в Главе \potom, \potom. Сообщение \verb|запросНаИзменение| посылается, когда программа хочет измениться и спрашываетспрашивает у зависимыезависимых объектыобъектов согласие на изменение. Твоя программа можэтможет переопределить \verb|запросНаИзменение| \potom.
 
<!--
Строка 30:
==Принадлежность классу==
 
Сообщение \verb|пренадлижитК:| овтечает принадлижытпринадлижит ли получатель к данному классу, \verb|происходитОт:| овечает принадлежытпринадлежит ли получатель к данному классу или к одному из евоего подкласов, и \verb|отвечаетНа:| овечаетотвечает, понимает ли получаетль данное сообщение. Использование всех трёх методов часто указывает на то что ты думаешдумаешь процэдурнопроцедурно, что ты не используешиспользуешь правильно полиморфизм. Эти три метода нужно как правило избегать. Сообщение \verb|класс| даёт тебе класс эзэмпляромэкземпляром которовакоторого является получатель.
 
<!--
Строка 38:
==Сравнение==
 
Сообщение \verb|==| говорит тебе, является ли получатель и параметр \emph{одним и тем жэже} объектом. Сообщение \verb|=| говорит тебе, являются ли получатель и параметр равными. Например, две строки с одинаковыми буквами это не один и тот жэже объект, но они равны, т.е. \verb|==| возвращает \emph{лож} а \verb|=| возвращает \emph{истина}. Т.к. различные классы имеют различные критэриикритерии для принятия рэшэниярешения, что объекты равны (напрмер, два объектыобъекта Сотрудник могут быть равны когда у них одинаковый номер соцыальновасоциального страхования), по умолчанию \verb|=| просто вызывает \verb|==|, оставляя подклассу переопределние \verb|=| для более подходящеваподходящего поведения. (Ты никогда не должэндолжен переопределять \verb|==|.) \verb|=| и \verb|==| соответствуют \verb|~=| и \verb|~~|, не равенство и не эквивалентность. Сообщение \verb|хэш| возвращает хэш значение объекта, и должно быть переопределно всегда, когда ты переопределяешпереопределяешь \verb|=| потому что два равных объекта должны иметь равные значения хэшэй. За дальнейшэй информацыейинформацией об этом обращайся к Главе \potom, \potom.
 
<!--
Строка 64:
==Выбор зависимостей==
 
Сообщение \verb|добавитьЗависимость:| и \verb|удалитьЗависимость:| предоставляют основной механизм для установления и разрывания отношэнияотношения зависимости к другому объекту. Сообщения \verb|!!!| и \verb|!!!| предоставляют более сложные механизмы. Более подробная информацыя об этих сообщениях имеется в Главе \potom, \potom.
 
<!--
Строка 72:
==Обработка ошибок==
 
Сообщение \verb|ответственностьПодкласса| предназначено для методов, которые должны быть переопределены подклассами. Типичным использованиеиспользованием этоваэтого метода суперклассом --- \verb|сам| \verb|ответственностьПодкласса|. Если подкласс не переопределил метод будет вызвано исключение. Противоположное сообщение, \verb|неДолжэнРеализовывать| предназначен методам подклассов чтобы показать что хотя подкласс наследует метод, он не является подходящим поведением для невонего. Сообщения \verb|останов|, \verb|останов:|, \verb|ошыбка:| и \verb|известить:| используются для генерацыигенерации исключения и открытия окна Отладчика/Уведомителя (например \verb|сам| \verb|останов|). Сообщения \verb|errorSignal| и \verb|сообщениеНеСогласованоSignal| возвращают signals которые могут быть использованы в signal handlers to trap exeptions. Сообщение \verb|неПонял:| посылается, когда получатель не понимает сообщения, и это обычное поведение для вызова окна Отладчика/Уведомителя. Переопредели этот метод, если ты хочешхочешь поймать сообщение, которое не понято если ты можэшможешь послать евоего затем другому объекту. Я использую этот механизм в Главе \potom, \potom.
 
<!--
Строка 82:
==Ввод/Вывод в файл==
 
Сообщения \verb|двоичноеПредставление| и \verb|представитьВДвоичномВидеНа:| предоставляют спецыальноеспециальное поведение для использования с BOSS facility когда сохраняются и восстанавливаются двоичные объекты. Практически, переопределив \verb|представитьВДвоичномВидеНа:| ты можэшможешь определить, как ты хочешхочешь сохранять объект. Возвращение \emph{nil} (реализацыя по умолчанию) говорит о сохранении представления получателя по умолчанию. Возвращение 0 говорит о том что объект не надо сохранять. Другое часто возвращаемое значение это \emph{MessageSend}, которое предоставляет способ для сохранения объекта в одной форме и восстановления евоего в другой форме.
 
<!--
Строка 91:
==Инициализация освобождения==
 
Сообщение \verb|освободить| разрыветразрывает все зависимости, которые могут быть установлены с данным объектом. Оно посылается, когда объект большэбольше не нужэннужен и позволяет поместить объект в кучу.
 
<!--
Строка 99:
==Обработка сообщений==
 
Группа методов \verb|выполнить:| позволяет тебе создавать имя метода во время выполнения программы и затем вызывать евоего. Это шырокошироко используется, когда ты не знаешзнаешь имени метода во время компиляцыикомпиляции и узнаёшузнаёшь евоего во время выполнения программы. Напрмер, пользовательский интэрфейсинтерфейс исползует евоего часто, т.к. имена методов доступа к переменным и меню определяются пользователем во время создания пользовательсковапользовательского интэрфейсаинтерфейса, но основной евоего код, это часть системных классов. Мы будем говорить о сообщениях \verb|выполнить:| в Главе \potom, \potom и мы будем использовать евоего в Главе \potom, \potom.
 
<!--
Строка 107:
==Печать==
 
Наиболее часто используемыми методами из протокола печати являются \verb|напечататьСтроку|, \verb|напечататьНа:| и \verb|показатьСтроку|. Ты посылаешпосылаешь \verb|напечататьСтроку| объекту, чтобы получить евоего печатное представление, которое можэтможет быть показанапоказано на Транскрипте. Сообщение \verb|напечататьСтроку| вызывает \verb|напечататьНа:|, таким образом чтобы переопределить что возвращает \verb|напечататьСтроку| ты переопределяешпереопределяешь \verb|показатьНа:|. Сообщение \verb|показатьСтроку| возвращает более подходящее представление объекта для использования в labels и list boxes (SequenceViews). Это является обычным для \verb|напечататьСтроку| но это переопределяется для таковатакого класса, как Строка.
 
<!--
Строка 124:
==Тэстирование==
 
Протокол содержытсодержит методы, которые возвращают \emph{истину} и \emph{ложложь}. БольшынствоБольшинство из методов возвращают \emph{лож}, позволяя затем переопределить их если нужно. Например, \verb|цэлоецелое?| возвращает \emph{ложложь} но оно переопределено для ЦэловаЦелого, чтобы возвращать \emph{истину}. Сообщение \verb|isBehaviour| отвечает на вопрос можэтможет ли получатель быть классом друговадругого объекта. Сообщение \verb|непостредственный?| отвечает является ли получатель непосредственным объектом таким как МалоеЦэлоеМалоеЦелое или Буква которые могут быть представлены с помощью тридцати двух битов, или получатель представляется с помощью указателя на объект. Сообщения \verb|ноль?| и \verb|неНоль?| отвечают является ли объект нулём и переопределены для НеопределённоваОбъекта. Сообщение \verb|упорядочен?| говорит является ли объект упорядоченной совокупностью --- т.е. подклассом УпорядоченнойСовокупности. Сообщение \verb|строка?| отвечает является ли объект строкой, и \verb|символ?| является ли он Символом. Сообщение \verb|respondToArithmetic| говорит принадлежыт ли объект к подклассу АрифметическойВеличены.
 
<!--
Строка 130:
-->
 
Использование тэстирующихтестирующих сообщений позволяет тебе избегать таких методов как \verb|isKindOf:| и \verb|isMemberOf:|. В твоих собственных классаклассах используй сообщения типа \verb|xxx?| если тебе надо определить имеет ли объект данный тип. НаприметНапример, допустим у тебя есть класс Ответчик с подклассами УспешныйОтветчик и НеуспешныйОтветчик. В Ответчике определи методы \verb|ответчик?|, \verb|успешныйОтветчик?| и \verb|неуспешынйОтветчик?|, первый позвращает \emph{истину} а следующие два \emph{лож}. УспешныйОтветчик должэндолжен переопределить сообщение \verb|успешныйОтветчик?| так чтобы оно возвращало \emph{истину}, и НеуспешныйОтветчик должэндолжен переопределить \verb|неуспешныйОтветчик?| так чтобы оно возвращало \emph{истину}. Если у тебя много населдуемых объектов для которых ты хочеш определить сообщение типа \verb|xxx?|, рассмотри возможность создания ОбъектаПрограммы который является подклассом Объекта, где ты определиш набор методов \verb|xxx?|, каждый из которых возвращает \emph{лож}. Затем в каждом классе наследнике ты переопределяеш соответствуюищй тэстирующийтестирующий метод так, чтобы он возвращал \emph|истину|.
 
<!--