Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Базарная площадь
  
О разделе

Основная страница

Группы обсуждений


Тематический каталог обсуждений

Архив

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  20:20[Войти] | [Зарегистрироваться]
Обсуждение темы:
Оберон-технология: особенности и перспективы


Тематика обсуждения: Оберон-технология. Особенности, перспективы, практическое применение. 

Количество сообщений на странице

Порядок сортировки сообщений
Новое сообщение вверху списка (сетевая хронология)
Первое сообщение вверху списка (обычная хронология)

Перейти на конкретную страницу по номеру


Всего в теме 6256 сообщений

Добавить свое сообщение

Отслеживать это обсуждение

Обсуждение из раздела
Школа ОБЕРОНА

<<<... | 5126—5117 | 5116—5107 | 5106—5097 | ...>>>
Всего сообщений в теме: 6256; страниц: 626; текущая страница: 115


№ 5116   27-08-2007 06:23 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5114« (Сергей Перовский)
___________________________

Для написания ОО программ на классическом Паскале приходилось использовать вариантные записи, по сравнению с ними расширение типа практически неотличимо от полноценной синтаксической реализации ООП :)

Поймите простую вещь. Не надо зацикливаться на ООП. И если Вы видите перед глазами нечто, что может позволить что-то написать в ОО-стиле, это не значит, что оно предназначено именно для этого и должно использоваться только так.

Большая проблема мира Оберонов (точнее, тех, кто их использует) в том, что они уперлись в ООП. Да не сошелся на нем свет клином. Как Вы там любите говорить? Давайте без фанатизма. Обероны могут и умеют работать без ООП. Только вот это их преимущество практически не используется. И совершенно напрасно.


№ 5115   27-08-2007 05:52 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5114« (Сергей Перовский)
___________________________

Почему Вирт упорно считает Record более "фундаментальным" понятием, чем Object, а не частным случаем, мне никак не понять.

Вроде бы я уже подробно тут объяснял, откуда ноги растут. Речь идет о работах Тони Хоара.

Честно говоря, сложно сейчас рыться в архивах форума. Поэтому просто дам выжимку из своей записной книжки, которая есть под рукой.


Как известно, первый препринт ETH Zurich по классическому Паскалю появился в ноябре 1970 г. Кстати, он и вышел среди прочих технических отчетов ETH за номером 1, что весьма знаменательно. Два года назад я попросил Вирта помочь его получить, но в Москве Вирт извинялся, что просьбу выполнить не удалось, и при этом выглядел несколько озадаченным. Оказалось, что в его архивах и ближайшем доступном окружении этого препринта не было. Потом его где-то раздобыли, отсканировали и выложили среди других препринтов ETH (правда, все-таки во второй редакции -- июля 1971 г.). Он доступен и на EuroProg: http://www.europrog.ru/paper/nw1970-01e.pdf

К тому моменту уже существовала система программирования Паскаля на компьютере CDC 6000 (фирмы Control Data Corp.). Вирт вообще старался придерживаться золотого инженерного правила: сначала реализовать идеи, прочувствовать их физический смысл на практике, а только потом "столбить". Компилятор (причем однопроходный) на CDC 6000 был написан на самом Паскале и реализован методом раскрутки (bootstrapping), что уже обсуждалось. Это отмечено и в препринте.

Дальше будет интересно: не поленитесь открыть этот препринт. И вы поймете, зачем я его искал (не только ради исторического интереса). На стр. 21 в пунке 6.2.5 там найдете... классы (class types), реализованные в соответствии с идеями Тони Хоара. Напомню, что, на мой взгляд, первый программный манифест ООП был озвучен Тони Хоаром в 1966 г. на Летней школе научного комитета NATO, которая прошла в Виллар-де-Ланс (Франция). Там же был Оле-Йохан Дал, который использовал выступление Хоара (и две предшествовавшие этому публикации Хоара по обработке записей) для пересмотра своей Симулы (вместе с Нигаардом).

Хоар обобщил опыт первой Симулы и ряда других языков (включая PL/I) и в докладе "Record Handling" в Виллар-де-Ланс изложил идею record class (что в несколько видоизмененном виде и под названием class вошло в Симулу-67). При этом идеи записей и их взаимосвязь со ссылками на практическом уровне детально были разобраны еще в первом языке Вирта -- Euler (1965), которым так интересовался Алан Кей (автор Smalltalk). А схема Хоара (record class) была реализована до Паскаля в виртовском языке "Algol W": см. http://www.europrog.ru/paper/nw1966-03e.pdf
и http://www.europrog.ru/paper/nw_algw.pdf

Сами же записи (record) впервые появились в языке AED-0 Дугласа Росса (кстати, основателя той самой компании SofTech, которая вошла в число 4 финалистов Ада-тендера). Он же был автором известных методологий SADT и IDEF0. Стоит вспомнить, что в начале 1970-х годов Дуглас Росс утверждал, что "80% или даже 90% информатики будет в будущем основываться на теории конечных автоматов". В AED-0 записи назывались шариками, каплями (beads). Использовалось и понятие plex (узел), которое обозначало группу записей, связанных с помощью ссылок.

Итак, Вирт в Паскале практически лоб в лоб реализовал идеи своего друга и коллеги (вот, кстати, откуда пошли вариантные записи -- от Хоара), хотя наследование (subclass) Вирта явно насторожило. Эта конструкция первого Паскаля (class type), как следует из более известного препринта ETH по пересмотренному Паскалю (ноябрь 1972 г.), из языка спустя год с небольшим была изъята (а заодно Вирт powerset переименовал в set плюс добавил упакованные записи): http://www.europrog.ru/book/panw1972e.pdf

Вирт посчитал, что просто record с указателями будет вполне достаточно и специальное слово class с дополнительной семантикой лучше не вводить. Спустя полтора десятилетия (примерно в 1986 г.) Вирт вернулся в одном из первых внутренних вариантов Оберона к корням ООП в трактовке Хоара, дополнив ее с подачи Юрга Гуткнехта конструкцией расширения типа (type extension). При этом оказался верен своему предубеждению против ООП.

В 1972 г., кстати, был опубликован второй манифест ООП: "Иерархические структуры программ" (Hierarchical Program Structures), авторами которого были Оле-Йохан Дал и Тони Хоар. Это был печатный вариант лекций Дала в Летней школе в Маркторбердорфе (Германия) в 1970 г. Его перевод на русский язык можно найти в сборнике "Структурное программирование": http://www.europrog.ru/book/spod1975r.pdf Там же был представлен механизм композиции классов, который получил название сочленения.

Выстраивается примерно такая картина.

Хоар придумал class record, т.е. записи со ссылками (не забыв упомянуть Вирта). Дал и Нигаард взяли идею Хоара (также сказав об этом) и довели в Симуле-67 до process class (или просто class), соединив универсальную структуру данных (record) с функциональностью. Т.е. предложили инкапсуляцию (не надо путать с information hiding Парнаса). Американцы в Xerox PARC ввели в язык Mesa (делался на основе Паскаля, Алгола-68 и Симулы-67 с учетом BCPL) процедурные переменные, создав основу процедурного делегирования. Вирт включил это в Modula-2, а затем оно проникло в Обероны, где базисом (помимо модулей) выступают все те же class record Хоара в виртовской интерпретации (type extension). Кстати, модули Оберона пришли из модулей Modula-2, а те, в свою очередь, из модулей Mesa. А модули Mesa делались на основе работы Парнаса (раннюю работу Наура они похоже не читали), причем за основу брали... классы Симулы-67.  :)

Одной из интересных идей Mesa был binding mechanism, т.е. динамическое связывание процедур. Ныне это называют late binding (отложенное связывание). В общем-то, процедурная коммутация на этом-то и строится.

Что касается идей применения хоаровской конструкции record в качестве основы ООП (для выражения отношений между сущностями), то в сфере искусственного интеллекта давненько в ходу были семантические сети (до первой Симулы), ну а с появлением фреймов и слотов Марвина Минского (где-то в районе 1975 г.) стало понятным (все ведущие ученые тогда варились в общем котле и активно общались друг с другом не только на конференциях), что классы-фреймы -- это сильное средство построения информационных моделей.

Надо будет выложить редкие и малоизвестные специалистам ранние работы Хоара по истокам ООП (на русском одна из них, которая была представлена на конференции NATO 1968 г., выходила в сборнике "Языки программирования" п/р Женюи, 1972). Да и стоит, наверное, облечь некоторые свои наблюдения, размышления и архивные изыскания в форму статьи о корнях и природе ООП (в трактовках Хоара, Дала, Кея), но вот все руки никак не дойдут.


№ 5114   27-08-2007 05:31 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5112« (Руслан Богатырев)
___________________________
Хотя, что есть ООП -- точки зрения разные. Поэтому в том, что имеет отношение к ООП, а что не имеет -- каждый волен судить на свой лад.
Поэтому и не следует делать провакационных утверждений типа Расширение типа -- это не ООП. :)

В классическом Паскале (если кто еще помнит) было такое понятие -- вариантные записи (предложенные Хоаром). Нужны для динамически разнородных типов данных. Расширение типа задумывалось Виртом в том числе и для их замены на более надежное средство.
Для написания ОО программ на классическом Паскале приходилось использовать вариантные записи, по сравнению с ними расширение типа практически неотличимо от полноценной синтаксической реализации ООП :)

Весьма подробно именно этот подход к использованию механизма расширения типа (type extension), без использования полей процедурного типа для имитации методов и, тем более, без связанных процедур (type-bound procedures), введенных в Обероне-2, разобран в работе проф. Вирта, где впервые была представлена им такая концепция. Очень рекомендую внимательно с ней ознакомиться.
Вы знаете, как я уважаю Остапа Ибрагимовича :)
Но на концепцию это не тянет, тем более с сылкой на Симулу.
В Симуле класс содержал единственный метод (схему поведения), все остальное было в точности по приведенной схеме.
Почему Вирт упорно считает Record более "фундаментальным" понятием, чем Object, а не частным случаем, мне никак не понять.


№ 5113   27-08-2007 05:28 Ответить на это сообщение Ответить на это сообщение с цитированием
В минувший четверг на странице исследовательской группы проф. Гуткнехта (Programming Languages and Runtime Systems Group, ETH Zurich) выложена новая версия реализации языка Composita с исходными текстами (включая исходники ран-тайма), а также с набором тестов производительности и парой примеров приложений. См. http://www.jg.inf.ethz.ch/wiki/ComponentLanguage/Front

Изменения по сравнению с вариантом двухмесячной давности затронули Component System (на уровне ядра и компилятора языка), а также Traffic Simulation Package и Benchmark Package.

Это весьма нешаблонный взгляд на компонентное программирование и его поддержку на уровне языковых конструкций, включая интерфейсы-контракты с поддержкой спецификаций протоколов взаимодействия. Подход Composita -- предмет пристального изучения в свете поддержки параллельного и компонентного программирования в рамках проекта новой ОС "Роса".


№ 5112   27-08-2007 04:52 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5111« (info21)
___________________________

Согласен. Есть полиморфизм -- есть ООП. Расширение типа без полиморфизма есть вещь маргинальная, о которой и говорить не стоит (блох и так хватает).

В классическом Паскале (если кто еще помнит) было такое понятие -- вариантные записи (предложенные Хоаром). Нужны для динамически разнородных типов данных. Расширение типа задумывалось Виртом в том числе и для их замены на более надежное средство.

Для работы с вариантными записями, как известно, совсем не обязательно использовать ООП. Есть запись, она имеет варианты, при этом эволюционирует (расширяется другими типами). Есть процедуры работы с такими родственными типами. Они не имеют никакого отношения к классам и не являются методами. Обычные процедуры.

Весьма подробно именно этот подход к использованию механизма расширения типа (type extension), без использования полей процедурного типа для имитации методов и, тем более, без связанных процедур (type-bound procedures), введенных в Обероне-2, разобран в работе проф. Вирта, где впервые была представлена им такая концепция. Очень рекомендую внимательно с ней ознакомиться.

См. N.Wirth "Extension of Record Types" // SIGSCE Bulletin, June 1987. http://www.europrog.ru/paper/nw1987-01e.pdf

Маргинальность подобного использования -- IMHO, излишняя субъективность восприятия.

Хотя, что есть ООП -- точки зрения разные. Поэтому в том, что имеет отношение к ООП, а что не имеет -- каждый волен судить на свой лад.


№ 5111   27-08-2007 04:19 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5096« (Сергей Перовский)
___________________________

Ответ на »сообщение 5092« (Руслан Богатырев)
___________________________
Расширение типа -- это не ООП. Это средства, которые позволяют как получать схему с ООП, так и строить свои схемы (generic bus как пример).
Поехали по двадцать пятому разу...
Расширение типа и ООП семантически эквивалентны.
(Это generic bus - то, не ООП?)


Согласен. Есть полиморфизм -- есть ООП. Расширение типа без полиморфизма есть вещь маргинальная, о которой и говорить не стоит (блох и так хватает).


№ 5110   27-08-2007 03:24 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5104« (pepper)
___________________________

Ответ на »сообщение 5097« (Илья Ермаков)
В "Дизайне и эволюции C++" описывается почему именно для исключений в C++ комитетом была выбрана семантика завершения (то, что ты называешь try/catch), а не семантика восстановления (то, что предлагаешь ты). Вот цитата:

Я прекрасно понимаю, почему была выбрана семантика завершения в тот момент. Речь не про то, а про то, что в параллельной системе такая семантика, завязанная на раскрутке текущего стека, уже не имеет никакого смысла. Потому что часть системы, в компетенции которой решить проблему, может не иметь никакой связи с текущим стеком.
Я не предлагаю спец. механизм восстановления, я предлагаю оставаться в рамках обычных языковых средств и использовать компонентные паттерны для выстраивания обработки исходя из особенностей задачи.


№ 5109   27-08-2007 03:21 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5104« (pepper)
___________________________
Ответ на »сообщение 5097« (Илья Ермаков)
Нет. Пример был обратный. Компонента записи DVD использует высокоуровневый интерфейс для получения данных для записи. Если я правильно понял твою мысль, то ты предлагаешь начиная с какого-то уровня превращать физические ошибки в программные (нарушения постусловия). Для компоненты записи DVD это означает невозможность нормально обработать какую-нибудь ошибку сети или ошибку чтения файла (в случае программной ошибки ты предлагаешь перезапускать всю систему).

В случае ошибки компонента DVD должна обратиться к верхнему уровню системы с запросом "что делать", на верхнем уровне может либо быть сделан запрос к пользователю (типа Ab,Ret,Ign...), либо попытка восстановить соединение, либо ожидание, после чего с верхнего уровня возвращается результат - что делать дальше... Например, отдаётся новый хэндл файла, либо говорится его пропустить... При этом клиент сервиса записи ничего даже не замечает, обратное обращение идёт по боковому callback...


№ 5108   27-08-2007 01:35 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5073« (Стэн)
___________________________

Вопрос в следующем: Какой класс задач требует реальной динамической расширяемости? Т.е. те задачи, в которых нельзя остановить программу, чтобы изменить ее часть. Подавляющее большинство клиентских приложений, которые среднестатистический пользователь использует в офисе и дома прекрасно дружат с перезапуском. Состояние между сеансами сохраняется в файлах или БД.

Динамическая расширяемость, как и любой инструмент/механизм, -- палка о двух концах. У нее есть свои плюсы и минусы. Они раскрываются применительно к задачам и тем, кто их конкретно решает.

Динамическая расширяемость хороша, когда не надо останавливать работающую систему и требуется насытить/улучшить ее (в отношении функциональности, эргономики, производительности и др.). С таким же успехом можно, правда, и обеднить/ухудшить :)

Лучше всего это смотрится там, где нужно вести постоянные эксперименты (с функциональностью, эргономикой, производительностью) -- т.е. в средствах макетирования. Ими можно считать и некоторые инструментальные средства (или их режимы). Кроме того, можно говорить и о системах с круглосуточным режимом эксплуатации (в частности, имеющих отношение к телекоммуникациям).

Яркий пример компьютера, который работает у массового потребителя круглосуточно, -- мобильный телефон. Именно он в будущем станет той самой "волшебной палочкой", которая заменит очень многое: работу с банковским счетом, покупками, управление бытовыми устройствами и электронными система помещения и многое-мнгое другое.

Но динамика (побыстрее попробовать) нередко стимулирует недостаточно тщательное доведение компонентов/модулей. Чем-то напоминает хроническую болезнь под название "отладка", которая давно поразила многих программистов. Соблазн быстро попробовать желательно все же сдерживать. И отделять испытательную компьютерную систему от эксплуатационной.


№ 5107   27-08-2007 00:36 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5104« (pepper)
___________________________

Потратив два года на споры, я вынес впечатление, что можно привести убедительные логические доводы в пользу любой точки зрения. Они имелись даже в специальной работе [Goodenough, 1975] по обработке исключений. Мы оказались в положении все тех же античных философов, которые так яростно и умно спорили о природе Вселенной, что как-то забыли о ее изучении. Поэтому я просил любого, кто имел реальный опыт работы с большими системами, представить конкретные факты.

Есть очень неплохая книга (раньше все-таки умели писать), в которой этот вопрос (стратегии "уйти"-"отметить"-"разобраться") по обработке исключений разобран довольно тщательно. Там тоже используется ссылка на работу Goodenough, но люди еще умеют и сами анализировать. Речь идет о книге Стивена Янга "Real Time Languages: Design and Development" (1982) в пер. на русский она вышла в 1986 г. -- "Алгоритмические языки реального времени: конструирование и разработка". Там вполне обосновано использование только стратегии "уйти" применительно к задачам реального времени.

Книга сегодня не только не потеряла своей ценности, но стала, пожалуй, еще более актуальной. Надо будет ее выложить в EuroProg.


<<<... | 5126—5117 | 5116—5107 | 5106—5097 | ...>>>
Всего сообщений в теме: 6256; страниц: 626; текущая страница: 115


Добавить свое сообщение

Отслеживать это обсуждение

Дополнительная навигация:
Количество сообщений на странице

Порядок сортировки сообщений
Новое сообщение вверху списка (сетевая хронология)
Первое сообщение вверху списка (обычная хронология)

Перейти на конкретную страницу по номеру
  
Время на сайте: GMT минус 5 часов

Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
Функция может не работать в некоторых версиях броузеров.

Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

 
© При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
Все используемые на сайте торговые марки являются собственностью их производителей.

Яндекс цитирования