Smalltalk в примерах/Введение
О Smalltalk
правитьSmalltalk используется уже давно. Он был создан в начале семидесятых годов, когда Алан Кей, затем в \verb|Xerox PARC|, решили создать язык, на котором могли бы программировать дети. Классическая статья Кея, \emph{The Early History of Smalltalk}, опубликованная в \potom, рассказывает об эволюции раннего Smalltalk-а и о влиянии других языков на него.
Smalltalk был первым Объектно-ориентированным (ОО) языком, и он до сих пор является чистейшим ОО языком. В отличие от гибридных языков, таких как C++, Smalltalk заставляет вас думать и программировать в ОО терминах. Когда он первоначально развивался, он запускался на своём собственном оборудовании, и был по существу операционной системой для оборудования. Возможно из-за этого наследства, он содержит набор полезных свойств для управления процессами, которые обычно относят к операционной системе, такие как разветвление процессов, семафоры и взаимно исключающие семафоры.
Большую часть своего существования, Smalltalk ассоциировался с исследовательскими задачами и прототипированием. Однако, сейчас быстрый рост ОО языков. Наступление C++ популяризовало и узаконило ОО программирование, но со временем некоторые люди разочаровались сложностью, присущей C++. Из-за современной легитимизации ОО проектирования и сложности проектирования на C++, большое количество внимания привлёк Smalltalk. В дальнейшем он был признан компанией IBM, которая сделала Smalltalk важной частью её стратегии языков разработки.
Smalltalk часто используется в деловых приложениях, но он так же используется для приложений с большей инженерной ориентацией. Texas Instruments использует Smalltalk контроля \potom, добавляя расширение позволяющие использовать распределённые объекты. Hewlett-Packard создаёт Distributed Smalltalk, расширение ParcPlace's VisualWorks, который позволяет объектам взаимодействовать через сеть. В восьмидесятых годах, Tektronix начал использовать Smalltalk для запуска их \potom.
Введение
правитьДанная книга это книга, которую я искал, когда я начал программировать на Smalltalk. Ни одна книга в магазине не оказалась подходящей; их всех было недостаточно для того чтобы сделать мою работу. Некоторые были справочными, помогающими, если ты уже понимаешь материал, но они не очень хороши, если нужны фундаментальные знания. Другие просто рассказывали о том, что я мог просто узнать, просмотрев классы с помощью Браузера. Основного чего не было в них — они не отвечали на вопрос, который я хотел знать: как использовать возможности языка, когда я пишу программу, как я могу сделать некоторые вещи, какой подход лучше, как я могу изменить инструменты разработки чтобы сделать мою работу более продуктивной? Короче, я искал информацию, которая могла указать правильное направление и ни одна из книг не давала такой информации. Эта книга написана для людей, у которых есть подобные вопросы, для тех, кто хочет продуктивно программировать на Smalltalk так быстро как это возможно.
Большая часть материала описывает стандартный Smalltalk, но некоторые примеры специфичны для VisualWorks из ParcPlace-Digitalk. Книга предполагает, что читатель использует VisualWork 2.0 или VisualWork 2.5, в соответствующих местах объясняется разница между этими двумя версиями. Все примеры были проверены на обеих версиях. В большинстве примеров, для сохранения места, я не показывал определение временных переменных, но Smalltalk тебя спросит про них, если ты попытаешься выполнить или сохранить код.
Метод изложения
править«Пример — это школа человечества, и люди не желают учиться ни на чём другом». Аналогично Edmund Burke, и аналогично большинству людей, я лучше всего учусь на примерах. Людям обычно трудно изучить теорию и применить её на практике. Им обычно легче понять конкретные примеры, поработать с ними, и экстраполировать общее поведение. Из-за этого, я включаю достаточно примеров в книгу, практические примеры которые читатель может использовать, когда пишет программы. Моей задачей является, фокусируясь на практических вещах, сделать эту книгу разносторонней, помочь разработчикам решить реальные проблемы, встающие перед ними.
Эта книга представляет информацию, в которой нуждается читатель, в порядке удобном для понимания концепций и возможностей Smalltalk. Она по порядку рассматривает практические примеры того как читатель может использовать возможности языка когда он создаёт программу. Книга начинается с основных концепций объектно-ориентированного программирования, рассматривая их в применении к Smalltalk-у. В этой части она рассказывает об управляющих структурах, Совокупностях, Потоках, и других полезных вещах. Затем она расширяет основы и показывает читателю, как использовать классы Smalltalk-а при написании программ. Например, Глава \potom, Error handling, рассматривает механизмы Сигналов и Исключений, предоставляемых Smalltalk-ом, затем показывает, как ты можешь использовать эти механизмы при написании твоих программ. Глава \potom, Тестирование, показывает, как ты можешь тестировать свои программы. Глава \potom, \potom, показывает, как ты можешь следить за изменениями, чтобы быть уверенным, что твой образ содержит последние изменения, и создавать образ из последних изменений.
Структура книги
правитьКнига разбита на пять частей: основы, основные классы, навыки и техники, пользовательский интерфейс и advance.
Первая часть, Основы, рассказывает об основах Smalltalk. Она рассказывает о \emph{объектах} и \emph{классах}, о \emph{сообщениях} и \emph{методах}, и о переменных и синтаксисе языка. Она описывает создание экземпляров класса и структуры управления выполнением программы с различными условными и циклическими структурами. Она заканчивается главой о мышлении в терминах объектов.
Вторая часть, Основные классы системы, переходит к некоторым фундаментальным классам, которые ты должен использовать. Из-за того что всё в Smalltalk-е объекты, и все объекты это экземпляры классов, мы будем говорить о классах во всех частях. Однако вторая часть даёт больше информации ориентированной на сами классы и меньше ориентированной на технику их использования, чем некоторые другие части.
Третья часть, Skills and Techniques, также много рассказывает о классах системы, но рассматривает технику их использования. Она показывает, как ты можешь использовать Процессы, как ты можешь организовать код обрабатывающий ошибки, и как отлаживать программу в Smalltalk. Эта часть рассматривает много техник и навыков, которые ты будешь использовать при разработке своих программ.
Четвёртая часть, Пользовательский интерфейс, фокусируется на вопросе пользовательского интерфейса. Она уделяет много внимания принципу Model-View-Controller, затем рассказывает, как ты можешь изменить интерфейс во время выполнения программы. Из-за того что пользовательский интерфейс сильно различается у разных вариантов Smalltalk-а, эта часть наиболее специфична для VisualWorks.
!!!
Книга включает всесторонний указатель. Я всегда разочаровываюсь, когда я знаю, что в книге есть нужная мне информация, но я не могу её в ней найти. Поэтому я надеюсь, что этот указатель не таким разочаровывающим как другие. Однако, некоторые главы, такие как Совокупности, Потоки, Объекты и Мета программирование, содержат ссылки на многие сообщения, и я не дублировал эти ссылки в указателе.
Примеры
правитьКнига содержит много примеров кода Smalltalk-а, которые иллюстрируют вопросы, рассматриваемые в главах. Есть два типа кода: код, который ты можешь набрать в рабочем пространстве, выделить, и выполнить или изучить; и код который содержит классы и методы. Архив содержит весь код содержащийся в книге. Два типа кода содержатся в файлах различного типа. Файлы с расширением .ex содержат код, который можно выделить и выполнить. Файлы с расширением .st содержат классы и методы, которые могут быть добавлены к образу. Дополнение А, исходные файлы, описывает, какие файлы относятся к какой главе.
Целевая аудитория
правитьОсновываясь на делении Smalltalk программистов на три категории — начинающие, средние и эксперты — эта книга предназначается для начинающих и средних программистов. Эксперты могут найти в книге некоторую полезную информацию, но они уже знают большую часть того, что содержится в книге. Начинающие и средние должны найти в книге ответы на большинство вопросов о программировании на Smalltalk, как использовать классы, как использовать механизмы Smalltalk-а в прикладных программах. Это книга для начинающих, потому что она объясняет основные концепции: рассказывает о классах, экземплярах, сообщениях и методах, затем рассматривает Совокупности, Потоки, Процессы и т.д. Однако она не останавливается на этих вопросах так долго как книги, полностью рассчитанные на начинающих. По моему мнению, не надо много времени, чтобы понять основы, и я нахожу, что лучше всего использовать эту книгу всего несколько недель. Это книга для средних, потому что она даёт советы как читатель может писать лучшие программы, устранять процедурный код, использовать более защищённые от ошибок механизмы, и лучше тестировать свои программы. Она также содержит много советов и подсказок, на поиск которых часто уходят годы.
Книга предполагает некоторый опыт программирования, не важно на процедурном или объектно-ориентированном языке. Совсем новички могут использовать книгу, но это потребует много усилий. Не предполагается существенного знания объектно-ориентированного программирования или Smalltalk-а, но я предполагаю, что ты знаешь основные инструменты VisualWorks, включая то, как пользоваться Браузером для определения классов и написания кода (когда книга ссылается на инструменты это ссылки на инструменты VisualWorks).
Возможности Smalltalk
правитьИнтерпретируемый язык
правитьSmalltalk концептуально это интерпретируемый язык. Это означает, что ты можешь внести изменения в код и немедленно выполнить его без компиляции и связывания. Фактически, ты можешь изменить код в программе, которая выполняется и изменения вступят в силу, когда этот код будет выполнен в следующий раз. Ты также можешь писать короткие куски кода (в любом окне) и выполнять их немедленно.
Браузеры
правитьУ Smalltalk-а есть очень хорошая среда разработки, с богатым набором браузеров. Из-за того что он разрабатывался для использования детьми, он очень лёгок в использовании. Ты можешь просмотреть классы и их методы, и ты можешь просматривать только собственные методы или ещё и наследуемые методы. Изнутри метода ты можешь посмотреть все методы, которые он вызывает (получатели сообщений), все реализации методов с одинаковым названием (полиморфизм), или ты можешь просмотреть код любого метода, которые вызывают данный метод. В любом из этих окон ты можешь изменять код.
Отладчик
правитьОтладчик позволяет тебе изучать стек, позволяя тебе просматривать любые методы в стеке и изучать любые их переменные. Возможности просмотра превосходны, они позволяют тебе легко исследовать объекты и их собственные переменные экземпляра, используя только мышь. Заодно с просмотром значений объектов, ты можешь также изменять их. Также отладчик имеет возможности браузера — он может просматривать отправителей и \potom методов. Из-за того что Smalltalk интерпретируемый язык, ты можешь выполнять участок кода в отладчике и также изменять методы которые находятся в отладчике. Возможность изменять метод и затем продолжать выполнение это одно из лучших свойств отладчика. Фактически, я часто сознательно программирую, используя отладчик. Если я точно не понимаю как запрограммировать метод, я просто вызываю отладчик при помощи \verb|сам останов|. Затем я пишу метод в отладчике, используя его для просмотра переменных и выполнения кода с того места где я его написал.
Библиотека классов
правитьБольше всего преимуществ приносит повторное использование кода. Small\-talk предоставляет библиотеку классов с примерно тысячью классами, все из которых делают жизнь программиста намного легче и более продуктивной. Хорошо иметь возможность использовать уже существующий класс для управления очередью. Хорошо иметь возможность преобразовать её в сортированную совокупность с помощью одного сообщения. Большинство классов концептуально просты — у них есть хорошо определённая роль и она выполняется хорошо — что позволяет тебе просто комбинировать и повторно использовать объекты.
Код системных классов весь доступен для детального просмотра, что даёт тебе три преимущества. \potom
В итоге ты имеешь богатую библиотеку классов, что означает для тебя доступность большого количества кода высокого качества, т.е. ты можешь создавать программы очень быстро.
Сборщик мусора
правитьОдно из свойств Smalltalk-а которое делает написание кода более легким это Сборщик мусора. Когда объект больше не нужен, ты не должен явно уничтожать его как в большинстве других объектно-ориентированных языках. Вместо этого он автоматически попадает в кучу, когда на него больше не ссылаются другие объекты. Сборщик мусора позволяет сконцентрироваться на решаемой задаче, и не заботиться о том, что произойдёт с объектом. Когда он больше будет не нужен, он просто исчезнет и освободит память.
Объектно-ориентированное мышление
правитьSmalltalk это один из чистейших ОО языков. В отличие от C++, в котором процедурный код легче писать, чем объектно-ориентированный, Smalltalk располагает к написанию именно объектно-ориентированного кода. Обычно требуется 8-12 месяцев, для знакомства с процедурным программированием, чтобы начать достаточно свободно думать в терминах объектов. При использовании языка, который не помогает этому процессу очень легко оставаться в полушизофреническом состоянии.
ОО мышление is fun и отлично от процедурного. Одним из отличий является тенденция к более итеративной разработке, чем при процедурном программировании. При ОО проектировании мы признаем, что мы не полностью понимаем наши объекты и их взаимодействие, и мы признаем, что они могут измениться и преобразоваться, когда мы в большей степени поймём проблему.
По нескольким причинам Smalltalk позволяет очень просто продвигаться по кругу итеративной разработки. Мы \potom о том, как просто писать, тестировать и изменять код. Эта простота написания позволяет откладывать реальную работу на более позднее время, таким образом, группа методов не делает ничего кроме вызова себя самих, или других объектов, или делая что-либо ещё. Это позволяет тебе думать о концепциях вместо того чтобы беспокоится о деталях. Smalltalk wonderful при работе, потому что он заставляет думать объектно-ориентировано и потому что он позволяет просто осуществлять итеративное, спиральное проектирование.
Изменение и расширение среды разработки
правитьОдной из значительных особенностей Smalltalk-а является то, что если тебе что-нибудь не нравится, то ты можешь это изменить. Если ты думаешь что нужно преобразовать букву в строку при помощи посылки ему сообщения \verb|asString|, ты можешь расширить Smalltalk, добавив новый метод в класс Буква (например, \verb|^Строка| \verb|с:| \verb|сам|). Если тебе не нравятся различные пункты меню доступные из окна Launcher или тебе не нравятся другие сочетания клавиш, легко изменить код. Ты увидишь несколько таких примеров в Главе \potom, \potom.
Smalltalk самоотражающий
правитьСистема Smalltalk может отражать саму себя — она может видеть саму себя. Из-за того что код системы доступен, ты можешь использовать системные классы чтобы узнать как они работают. Из-за того что ты имеешь возможность узнать о природе классов и объектов, ты можешь писать код который использует эту информацию. Не все программы нуждаются в этих знаниях, но некоторое знакомство с тем как классы и объекты сопоставляются, может помочь тебе создать лучшее решение.
Заключение
правитьВ заключении, реально мощь и красоту Smalltalk-а тебе могут показать не количество интеллектуальных дискуссий. Ощущения приходят с опытом, not rationalized. Поэтому, с этой книгой в руках, начинай программировать!