|
||||
Меню:
Главная
Форум
Литература: Программирование и ремонт Импульсные блоки питания Неисправности и замена Радиоэлектронная аппаратура Микросхема в ТА Рубрикатор ТА Кабельные линии Обмотки и изоляция Радиоаппаратура Гибкие диски часть 2 часть 3 часть 4 часть 5 Ремонт компьютера часть 2 Аналитика: Монтаж Справочник Электроника Мощные высокочастотные транзисторы 200 микросхем Полупроводники ч.1 Часть 2 Алгоритмические проблемы 500 микросхем 500 микросхем Сортировка и поиск Монады Передача сигнала Электроника Прием сигнала Телевидиние Проектирование Эвм Оптимизация Автомобильная электроника Поляковтрансиверы Форт Тензодатчик Силовые полевые транзисторы Распределение частот Резисторные и термопарные Оберон Открытые системы шифрования Удк |
[4] (number \\ 2) = 0 ifTrue: [parity - 0] ifFalse: [parity - 1] Предыдущий пример можно записать и по другому: parity - (number \\ 2) = 0 ifTrue: [0] ifFalse: [1] Для того, чтобы некоторые непоследовательные управляющие структуры, было легче реализовать, блоки могут иметь один или более аргументов. Аргументы определяются включением в начало блока идентификаторов, каждому из которых прошествует двоеточие. Аргументы блока отделяются от выражений, составляющих блок, вертикальной чертой. Следующий пример описывает блок с одним аргументом: [:array total - total + array size] Типичное использование блоков с аргументами - реализация функций, применяемых ко всем элементам некоторой структуры данных. Например, многие объекты, представляющие собой различные виды структур данных отвечают на сообщение do: (выполнить:), которое имеет аргументом блок с одной переменной. Объект-получатель, получив сообщение do: , выполняет блок-аргумент один раз для каждого своего элемента. Каждый элемент из получателя становится значением аргумента блока в течении одного выполнения блока. Следующий пример вычисляет сумму квадратов первых пяти простых чисел. Результатом будет значением переменной sum. sum sum - 0. #(2 3 5 7 11) do: [:prime sum - sum + (prime * prime)] Объекты, которые реализуют подобные управляющие структуры, поставляют значения аргументам блока, посылая блоку сообщение value: anObject, с аргументом anObject, значение которого присваивается параметру блока. Например, выполнение следующих выражений приведет к тому, что переменная total будет иметь значение 7: sizeAdder total sizeAdder - [:array total - total + array size]. total - 0. sizeAdder value: #(a b c). sizeAdder value: #(1 2). sizeAdder value: #(e f) Блоки могут иметь и более одного аргумента. Все аргументы блока локальны по отношению к блоку и его выполнению. Например, [:x :y (x * x) + (y * y)] Приведенный блок может быть выполнен посредством посылки ему сообщения с именем value:value:. Два аргумента этого сообщения по порядку задают значения двум аргументам блока-получателя. Если блок получает сообщение с количеством ключевых слов value: отличным от числами аргументов блока, то будет выдано сообщение об ошибке. О том, что еще интересного есть в Голубой Книге "Есть три рода невежества: не знать ничего, знать дурно то, что знаешь, и знать не то, что следовало бы знать." Пьер Эмиль Дюкло Можно сказать, что мы завершили наше краткое описание идеологии, структуры и синтаксиса языка, которые не очень то и сложны. Тем не менее, система является чрезвычайно мощной благодаря количеству и разнообразию содержащихся в ней объектов. В системе Smalltalk-80 восемь важнейших категорий классов: ядро системы и его поддержка, линейные величины, числа, наборы, потоки, классы, независимые процессы и графика (см. приведенную выше часть иерархии классов). Детальные описания протокола каждого системного класса рассматриваются в двенадцати главах второй части книги. Здесь содержится энциклопедическая информация о протоколе класса: определяются категории сообщений, каждое сообщение комментируется, приводятся примеры. В представляемом протоколе класса описываются только те сообщения, которые вводятся самим классом. Полный протокол сообщений определяется просмотром протокола класса и всех его суперклассов. Поэтому полезно начать изучение с класса Object и продолжать его, спускаясь по иерархии классов вниз, с тем, чтобы наследуемый протокол изучался совместно с собственным протоколом класса. Еще в трех главах приводятся примеры использования базовых классов системы для построения небольших приложений. Но знать - это еще не все, главное - научиться думать о решаемой задаче в терминах объектов, классов, методов, уметь выделить их и "запрограммировать"! Именно этому и посвящена последняя часть книги, описывающая примеры построения компьютерных моделей для дискретных, управляемых событиями процессов. Моделирование здесь - это представление множества объектов из реального или воображаемого мира в виде объектов некоторых классов. А цель создания компьютерной модели - предоставление рабочей среды для изучения моделируемой ситуации. Прежде чем создавать модели, в книге описывается иерархия классов, представляющих распределения вероятностей. Для определения, например, времени прибытия в модель объектов (клиентов в банк!) применяются различные виды распределения вероятностей. Они же используются и при случайном выборе времени ответа или времени обслуживания клиентов в модели. Класс SimulationObject (ОбъектМодели) представляет любой вид объекта, который вводится в модель для того, чтобы выполнить в ней одну или более задач; класс Simulation (Модель) представляет саму модель и обеспечивает управляющие структуры для ввода и формулировки задач каждому новому объекту модели. Объекты, которые участвуют в управляемой событиями модели, действуют более или менее независимо друг от друга, используя имеющиеся в модели ресурсы. Поэтому необходимо решать проблему координации и синхронизации их действий. В системе Smalltalk-80 существуют средства синхронизации независимых событий, которые обеспечиваются классами Process (Процесс), Semaphore (Семафор) и SharedQueue (РазделяемаяОчередь). Классы, поддерживающие создание моделей, описывают использование объектами модели расходуемых, не расходуемых и/или возобновляемых ресурсов и предоставляют несколько способов сбора статистической информации о действующих моделях. Для особенно любопытных, в первой главе третьей части описываются особенности системы с точки зрения разработчика, и объясняется как работает виртуальная машина Smalltalk. Простой пример нового класса "Не довольствуйся поверхностным взглядом!" Марк Аврелий Чтобы продемонстрировать то, о чем рассказывалось выше и отметить еще некоторые особенности, приведем простой пример, взятый из той же книги и слегка измененный нами далеко не лучшим образом только для того, чтобы в одном примере охватить побольше деталей (все равно не все!). Сначала, ничего не объясняя, приведем полное определение нового класса. class nameFinancialHistory superclassObject instance variable namesalllncomes incomes allExpenditures expenditures class variable namesTaxRate class methods initialize initialize TaxRate - 0.12 instance creation initialBalance: amount tsuper new setlnitialBalance: amount new tsuper new setlnitialBalance: 0 instance methods transaction recording receive: amount from: source incomes at: source put: (self totalReceivedFrom: source) + amount. alllncomes - alllncomes + amount spend: amount for: reason expenditures at: reason put: (self totalReceivedFrom: source) + amount. allExpenditures - allExpenditures - amount inquiries cashOnHand t alllncomes - allExpenditures |
Среды: Smalltalk80 MicroCap Local bus Bios Pci 12С ML Микроконтроллеры: Atmel Intel Holtek AVR MSP430 Microchip Книги: Емкостный датчик 500 схем для радиолюбителей часть 2 (4) Структура компьютерных программ Автоматическая коммутация Кондиционирование и вентиляция Ошибки при монтаже Схемы звуковоспроизведения Дроссели для питания Блоки питания Детекторы перемещения Теория электропривода Адаптивное управление Измерение параметров Печатная плата pcad pcb Физика цвета Управлении софтверными проектами Математический аппарат Битовые строки Микроконтроллер nios Команды управления выполнением программы Перехода от ahdl к vhdl Холодный спай Усилители hi-fi Электронные часы Сердечники из распылённого железа Анализ алгоритмов 8-разрядные КМОП Классификация МПК История Устройства автоматики Системы и сети Частотность Справочник микросхем Вторичного электропитания Типы видеомониторов Радиобиблиотека Электронные системы Бесконтекстный язык Управление техническими системами Монтаж печатных плат Работа с коммуникациями Создание библиотечного компонента Нейрокомпьютерная техника Parser Пи-регулятор ч.1 ПИ-регулятор ч.2 Обработка списков Интегральные схемы Шина ISAВ Шина PCI Прикладная криптография Нетематическое: Взрывной автогидролиз Нечеткая логика Бытовые установки (укр) Автоматизация проектирования Сбор и защита Дискретная математика Kb радиостанция Энергетика Ретро: Прием в автомобиле Управление шаговым двигателем Магнитная запись Ремонт микроволновки Дискретные системы часть 2 | ||