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

Содержимое удалено Содержимое добавлено
оторвать бы автору руки за нежелание пользоваться spellchecker-ами
Строка 1:
==Введение==
 
Данная книга это книга, которую я искал, когда я начал программировать на Smalltalk. Ни одна книга в магазине не оказалась подходящей; их всех было недостаточно для того чтобы сделать мою работу. Некоторые были справочными, помогающими, если ты уже понимаешь материал, но они не очень хороши, если нужны фундаментальные знания. Другие просто рассказывали о том, что я мог просто узнать, просмотрев классы с помощью Браузера. Основного чего не было в них --- они не отвечали на вопрос, который я хотел знать: как использовать возможности языка, когда я пишу программу, как я могу сделать некоторые вещи, какой подход лучше, как я могу изменить инструменты разработки чтобы сделать мою работу более продуктивной? Короче, я искал информацыюинформацию, которая могла указать правильное направление и ни одна из книхкниг не давала такой информацыиинформации. Эта книга написана для людей, у которых есть подобные вопросы, для тех, кто хочет продуктивно программировать на Smalltalk так быстро как это возможно.
 
Большая часть материала описывает стандартный Smalltalk, но некоторые примеры спецИфичныспецифичны для VisualWorks из ParcPlace-Digitalk. Книга предполагает, что читатель использует VisualWork 2.0 или VisualWork 2.5, в соответствующих местах объясняется разница между этими двумя версиями. Все примеры были проверены на обеих версиях. В большинстве примеров, для сохранения места, я не показывал определение временных переменных, но Smalltalk тебя спросит про них, если ты попытаешЬсяпопытаешься выполнить или сохранить код.
(Комментарий случайного прохожего: орфографические ошибки в таком количестве сделаны специально, или автор действительно знает Smalltalk лучше русского языка? Ответ на комментарий случайного прохожего: мы признаём, что мы не полностью понимаем текст, который пишем, и его смысл, и мы признаём, что они могут измениться и преобразоваться, когда мы в большей степени поймём, зачем мы пишем эту книгу
)
 
==Метод изложэнияизложения==
 
``«Пример это школа человечества, и люди не желают учиться ни на чём другом''». Аналогично Edmund Burke, и аналогично большинству людей, я лучше вyu iytuityu iyсеговсего учусь на примерах. Людям обычно трудно изучить теорию и применить её на практике. Им обычно легче понять huuiконкретные yuiпримеры, yuпоработать iytuiс tyuними, ityuи iytuэкстраполировать ityuобщее ityuповедение. ityuИз-за iyuiytuiyэтого, tuiя включаю достаточно примеров в книгу, практические примеры которые читатель может использовать, когда пишет программы. Моей задачей является, фокусируясь на практических вещах, сделать эту книгу разносторонней, помочь разработчикам решить реальные проблемы, встающие перед ними.
 
Эта книга представляет информацию, в которой нуждается читатель, в порядке удобном для понимания концепций и возможностей 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 программистов на три категории --- начинающие, средние и эксперты --- эта книга предназначается для начинающих и intermediate программистов. Эксперты могут найти в книге некоторую полезную информацыюинформацию, но они уже знают большую часть содержащегосятого, что содержится в книге. Начинающие и средние должны найти в книге ответы на большынствобольшинство вопросов о программировании на Smalltalk, как использовать классы, как использовать механизмы Smalltalk'-а в прикладных программах. Это книга для начинающих, потому что она объясняет основные концэпцыиконцепции: рассказывает о классах, экзэмплярахэкземплярах, сообщениях и методах, затем рассматривает Совокупности, Потоки, ПроцэссыПроцессы и т.д. Однако, она не останавливается на этих вопросах так долго как книги, полностью рассчитанные на начинающих. По моему мнению, не надо много времени, чтобы понять основы, и я нахожу, что лучшэлучше всего использовать эту книгу всевовсего несколько недель. Это книга для средних, потому что она даёт советы как читатель может писать лучшыелучшие программы, устранять процэдурныйпроцедурный код, использовать более защищённые от ошыбокошибок механизмы, и лучшэлучше тестировать свои программы. Она такжэтакже содержытсодержит много советов и подсказок, на поиск которых часто уходят годы.
 
Книга предполагает некоторый опыт программирования, не важно на процэдурномпроцедурном или объектно-ориентированном языке. Совсем начинающиеновички могут использовать книгу, но это потребует много усилий. Не предполагается существенного знания объектно ориентированнова-ориентированного программирования или Smalltalk'-а, но я предполагаю, что ты знаешзнаешь основные инструменты VisualWorks, включая то, как пользоваться Браузером для определения классов и написания кода (когда книга ссылается на инструменты это ссылки на инструменты VisualWorks).
 
==О 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 это замечательный язык to work with --- фактически, трудно найти серьёзный язык программирования, который более интересен, чем Smalltalk. Естественно, я \potom более интересное программирование на Smalltalk'-е чем на любом другом языке, с которым я работал; \potom. Если Smalltalk настолько хорош, шточто делает его таким? Я думаю, это набор свойств. Далее рассматриваются некоторые из них, in no particular order.
 
===Интерпретируемый язык===
 
Smalltalk концептуально это интерпретируемый язык. Это означает, что ты можeшьможешь внести изменения в код и немедленно выполнить его без компиляции и связывания. Фактически, ты можешь изменить код в программе, которая выполняется и изменения вступят в силу, когда этот код будет выполнен в следующий раз. Ты также можешь писать короткие куски кода (в любом окне) и выполнять их немедленно\footnote{ожфдло}.
 
===Браузеры===
 
У Smalltalk'-а есть очень хорошая среда разработки, с богатым набором браузеров. Из-за того, что он разрабатывался для использования детьми, он очень лёгок в использовании. Ты можешможешь просмотреть классы и их методы, и ты можешможешь просматривать только собственные методы или ещё и наследуемые методы. Изнутри метода ты можешможешь посмотреть все методы, которые он вызывает (получатели сообщений), все реализацыиреализации методов с одинаковым названием (полиморфизм), или ты можешможешь просмотреть код любовалюбого метода, которыйкоторые вызывают данный метод вызывает. В любом из этих окон ты можэшможешь изменять код.
 
===Отладчик===
 
Отладчик позволяет тебе изучать стек, позволяя тебе просматривать любые методы в стеэкестеке и изучать любые их переменные. Возможности просмотра превосходны, они позволяют тебе простолегко исследовать объекты и их собственные переменные экзэмпляраэкземпляра, используя только мышь. Заодно с просмотром значений объктовобъектов, ты можэшможешь так жетакже изменять их. Так жеТакже отладчик имеет возможности браузера --- он может просматривать отправителей и \potom методов. Из-за того, что Smalltalk интерпретируемый язык, ты можешможешь выполнять участок кода в отладчике и так жетакже изменять методы, которые находятся в отладчике. Возможность изменять метод и затем продолжать выполнение это одно из лучшыхлучших свойств отладчика. Фактически, я часто сознательно программирую, используя отладчик. Если я точно не понимаю как запрограммировать метод, я просто вызываю отладчик при помощи \verb|сам останов|. Затем я пишу метод в отладчике, используя евоего для просмотра переменных и выполнения кода с тавотого места где я евоего написал.
 
===Библиотека классов===
 
СамаяБольше большаявсего выгодапреимуществ получаетсяприносит отповторное повторнова использованияиспользование кода. Small\-talk предоставляет библиотеку классов с прмернопримерно тысячью классами, все из которых делают жызньжизнь программиста намноганамного лехчелегче и более продуктивной. Хорошо иметь возможность использовать ужэуже существующий класс для управления очередью. Хорошо иметь возможность преобразовать её в сортировануюсортированную совокупность с помощью однавоодного сообщения. БольшынствоБольшинство классов концэптуальноконцептуально просты --- у них есть хорошо определённая роль и она выполняется хорошо --- что позволяет тебе просто комбинировать и повторно использовать объекты.
 
Код системных классов весь доступен для детальновадетального просмотра, что даёт тебе три преимущества. \potom
 
В итоге ты имеешимеешь богатую библиотеку классов, что означает для тебя доступность большовабольшого количества кода высоковавысокого качества, т.е. ты можэшможешь сздаватьсоздавать программы очень быстро.
 
===Сборщик мусора===
 
Одно из свойств Smalltalk'-а которое делает написание кода более лёхкимлегким это Сборщик мусора. Когда объект большэбольше не нужэннужен, ты не должэндолжен явно уничтожать евоего как в большынствебольшинстве других объектно -ориентированных языках. Вместо этоваэтого он автоматически попадает в кучу, когда на невонего большэбольше не ссылаются другие объекты. Сборщик мусора позволяет сконцэнтрироватьсясконцентрироваться на решаемой задаче, и не заботиться о том, что произойдёт с объектом. Когда он большэбольше будет не нужэннужен, он просто исчезнитисчезнет и освободит память.
 
===Объектно-ориентированное мышление===
 
Smalltalk это один из чистейших ОО языков. В отличииотличие от C++, в котором относительно легко писать процедурный код, в Smalltalk'-е трудно писать процедурный код. Обычно требуется $8$--$12$ месяцев, для знакомых с процэдурнымпроцедурным программированием, чтобы начать достаточно свободно думать в терминах объектов. При использовании языка, который не помогает этому процессу очень легко оставаться в полушизофреническом состоянии.
 
ОО мышление is fun и отлично от процедурного. Одним из отличий является тенденцiятенденция к более итеративной разработке, чем при процедурном программировании. При ОО проектировании мы признаёмпризнаем, что мы не полностью понимаем наши объекты и их взаимодействие, и мы признаёмпризнаем, что они могут измениться и преобразоваться, когда мы в большей степени поймём проблему.
 
По нескольким причинам Smalltalk позволяет очень просто продвигаться по кругу итеративной разработки. Мы \potom о том, как просто писать, тестировать и изменять код. Эта простота написания позволяет откладывать реальную работу на более позднее время, таким образом, группа методов не делает ничевоничего кроме вызова себя самих, или других объектов, или делая что-либо ещё. Это позволяет тебе думать о концепциях вместо того, чтобы беспокоится о деталях. Smalltalk wonderful при работе, потому что он заставляет думать объектноориентированообъектно-ориентировано и потому, что он позволяет просто осуществлять итеративное, спиральное проектирование.
 
===Изменение и расширение среды разработки===
 
Одной из значительных особенностей Smalltalk'-а является то, что если тебе что-нибудь не нравится, то ты можэшможешь это изменить. Если ты думаешдумаешь что нужно преобразовать букву в строку при помощи посылки ему сообщения \verb|какСтрокаasString|, ты можэшможешь расшыритьрасширить Smalltalk, добавив новый метод в класс Буква (например, \verb|^Строка| \verb|с:| \verb|сам|). Если тебе нане нравятся различные пункты меню доступные из окна Launcher или тебе нане нравятся другие сочетания клавиш, лехколегко изменить код. Ты увидишь несколько таких примеров в Главе \potom, \potom.
 
===Smalltalk самоотражающий===
 
Система Smalltalk можeтможет отражать саму себя --- она можэтможет видеть саму себя. Из -за тваотого что код системы доступен, ты можэшможешь использовать системные классы чтобучтобы узнать как они работуютработают. Из -за тавотого что ты имеешимеешь возможность узнать о природе классов и объектов, ты можэшможешь писать код который использует эту информацыюинформацию. Не все программы нужнаютсянуждаются в этих знаниях, но некоторое знакомство с тем как классы и объекты сопоставляются, можэтможет помочь тебе создать лучшее решение.
 
==РезюмэРезюме==
 
В заключении, реально мощь и красоту Smalltalk'-а тебе могут показать не количество интеллектуальных дисскусийдискуссий. Ощущенья приходят с опытом, not rationalized. Поэтому, с этой книгой в руках, начинай программировать!