OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 12:13

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 35 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Как правильно создавать объекты?
СообщениеДобавлено: Понедельник, 30 Ноябрь, 2009 08:06 

Зарегистрирован: Вторник, 10 Ноябрь, 2009 13:15
Сообщения: 58
Вот в Делфи если я хочу создать экземпляр класса я пишу Переменка:=Класс.Create.
А как в обероне такое делается?
Вот для создания модели я пишу:
Код:
MODULE Ev;

TYPE

Tt*=POINTER TO ABSTRACT RECORD
 Str:ARRAY(10) OF CHAR;
END;

VAR t*:Tt;

 PROCEDURE (v:Tt) Set*(IN s:ARRAY OF CHAR),NEW;
 BEGIN
  ASSERT(LEN(s)<=10);
  v.Str:=s$;
 END Set;

 PROCEDURE (v:Tt) Get*(OUT s:ARRAY OF CHAR),NEW;
 BEGIN
  ASSERT(LEN(s)<=10);
  s:="Строка+"+v.Str$;
 END Get;

PROCEDURE do*;
VAR a:Tt;
BEGIN
 t.Set("123");
END do;
 
END Ev.

Естесственно t =NIL Так вот вопрос - как этот t создать.
NEW не помогает ибо ABSTRACT.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 30 Ноябрь, 2009 08:44 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Объекты абстрактных записей создавать нельзя.
Это в любом языке. Либо уберите абстрактность, либо отнаследуйтесь от абстрактной в конкретную запись.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 30 Ноябрь, 2009 09:40 

Зарегистрирован: Вторник, 10 Ноябрь, 2009 13:15
Сообщения: 58
А-а-а.
Все ясно. Странно мне попадались примеры где почему то ABSTRACT именно создавался, может я просто не все видел...
Спасибо.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 30 Ноябрь, 2009 11:57 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
Он там не создавался, а использовался.

Создавался не он, а его потомок где-то в другом месте.

Потомок может использовться всюду, где может использоваться его родитель. Наверное, через параметры внутрь процедуры, в которой среди множества параметров указана переменная с типом = предок, передаётся потомок. Внутри процедуры работа с объектом ведётся как с предком. Даже если у предка используемые методы были абстрактными, у конечного потомка они уже оконкречены, поэтому всё работает.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 30 Ноябрь, 2009 12:02 

Зарегистрирован: Вторник, 11 Август, 2009 11:44
Сообщения: 516
Откуда: Бердск
И все это называется полиморфизм, без понимания его устройства :lol:
Бедные дети... :D


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 30 Ноябрь, 2009 12:12 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
Вот сказали Вы "полиморфизм" и сразу стало всё понятно? Нам это умное слово говорили в университете, и много чего ещё такого же бесполезного.

Смысл в этом слове появляется только после того, как объяснена вся остальная система, в которой оно используется.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 30 Ноябрь, 2009 13:19 

Зарегистрирован: Вторник, 10 Ноябрь, 2009 13:15
Сообщения: 58
Да ладно вам спорить...
про полиморфизм мне извесно настолько насколько я его использую.
Я просто думал что в обероне по другому как-то работа с объектами идет.
Вот например TextModels.dir.New()
Полез в исходники а там:
Код:
      
Directory* = POINTER TO ABSTRACT RECORD
         attr-: Attributes
      END;

И никаких New...
В общем и решил что тут по другому.
Ну это я только потом узнал что методы класса тут по другому объявляются:
Код:
   PROCEDURE (d: Directory) New* (): Model, NEW, ABSTRACT;


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 30 Ноябрь, 2009 14:34 

Зарегистрирован: Вторник, 11 Август, 2009 11:44
Сообщения: 516
Откуда: Бердск
Valery Solovey писал(а):
Вот сказали Вы "полиморфизм" и сразу стало всё понятно?

Дык я и говорю, что нет :D
Типа, если русскому человеку скажут, что надо снизить скорость, то ему это будет непонятно.
Пока не скажут ПОЧЕМУ. Ну, скажем, впереди лежачий полицейский... А кирпич - потому-что дальше мост разобран :lol:

Вспоминаю, как я тупо лбом бился об эти вопросы...
Пока не подсел на конкретику. Ну, скажем, есть подпрограмма сортировки массива из каких-нибудь объектов. Которой очень надо для работы подпрограмка сравнения двух объектов. Если объекты конкретные - все ясно, вот она подпрограммка, вставляем ее, и нет проблем.
И знание/понимание появляется после того, когда осознаешь тот факт, что основную программу можно написать не зная, где лежит эта подпрограмма сравнения, и какая она вообще. Называется косвенный функциональный вызов: кто-то поставил в какую-то ячейку нужный адрес подпрограмки, все начало работать. Подставили адрес другого алгоритма сравнения - работает уже по-другому. Ничего не подставил (это и есть абстракт) - нельзя и запускать.
После такого у меня в мозгу и произошло "просветление", установилась точная ассоциативная связь между буржуинским словом полиморфизм, и тем, что реально происходит.
И дурацкие вопросы, почему нельзя создавать абстракты - перешли из разряда священных мантр, в разряд очевидных логических выводов.

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

И жалко детей, котором дают это так же, как нам давали политэкономию социализма - на уровне священных мантр.
Так - ЗЯ, а так - НИЗЯ, потому-что противоречит некой концепции, до которой ты еще не дорос :D


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 30 Ноябрь, 2009 14:41 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Вот только сегодня объяснял связанные процедуры и виртуальные вызовы.

Параллельно и прикладным образом (показывая конкретный пример), и "технарски" - рисуя, как именно вводится косвенность вызова. (Когда указатели и структура памяти программы уже разобрана - куча, теги типов.., то всё легко).
Т.е. "переменность" вызываемой операции.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 30 Ноябрь, 2009 20:55 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Когда я проектирую абстрактный класс и его использование, я вовсе не задумываюсь о таблицах виртуальных методов, ячейках, атомах и прочих молекулах. Это уровень технической реализации, а я отталкиваюсь от словаря проблемной области. И тут абстрактный класс необходим именно как абстрактный, не имеющий "физического" воплощения. Воплощение происходит в конкретных наследниках.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 30 Ноябрь, 2009 21:02 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Не забывайте, что Вы всё это уже знаете. И об этом не думаете.
Вы же не думаете о том, как устроен холодильник или видеомагнитофон, когда ими пользуетесь.
Но имеется таки принципиальная разница - не думаете Вы, зная, или не задумывается современных школьник, не зная.
Во многих случаях эта разница даёт о себе знать.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 30 Ноябрь, 2009 21:22 

Зарегистрирован: Вторник, 11 Август, 2009 11:44
Сообщения: 516
Откуда: Бердск
Ну если уж совсем не думать про устройство холодильника, то можно предположить, что им можно охладить комнату, если открыть дверцу.

При этом, у тех кто тоже не думает (но потому-что давно знает) встают дыбом волосы от таких предположений.
Хоть и не каждый день встают, но от такого шока ведь не сразу отходишь :D

P.S. Вот, блин, написал, и стал бояться - вдруг придется разъяснять почему "комнату не охладишь"


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 30 Ноябрь, 2009 21:25 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
С точки зрения Мин. обр. это несущественно для выращивания "грамотного потребителя" (С) Фурсенко.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 30 Ноябрь, 2009 21:43 

Зарегистрирован: Вторник, 11 Август, 2009 11:44
Сообщения: 516
Откуда: Бердск
Илья, Вы хотите, чтобы я совсем застрелился с тоски ??? Не дождетесь :D


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 30 Ноябрь, 2009 21:49 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Не надо, патроны стоит поберечь. :|


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 30 Ноябрь, 2009 21:56 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
А я и не говорю, что про тонкости технической платформы не надо знать.

Я про то, что рассуждения, например, об абстрактном классе, необходимо вести с двух позиций - не токмо с "атомно-молекулярной", но и с системной.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 30 Ноябрь, 2009 22:22 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Ну так именно так. :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 01 Декабрь, 2009 14:18 

Зарегистрирован: Вторник, 11 Август, 2009 11:44
Сообщения: 516
Откуда: Бердск
Даже удивительно...

Народ почему-то считает фундаментальным некое абстрактное определение (причем оно может быть разным на разных языках).
А про этот злополучный "косвенный функциональный вызов" считается знать опасным по той причине, :idea: что его может не оказаться при смене компьютера :shock:
Не намного умнее, между прочим, чем "охладить комнату холодильником". Хоть обижайтесь, хоть нет - уровень понимания примерно один.

Ну предположим такую дикость: выпустили процессор БЕЗ возможности "косвенного функционального вызова"
((ну, скажем, прямых таких команд у проца нет, а стек лежит где-то в отдельной программно недоступной памяти, счетчик команд тоже недоступен категорически))
Что перестанет работать в языке ???
Да ВСЕ, связанное с, не побоюсь этого слова - полиморфизмом. Не только виртуальные ф-ии! Процедурные типы - на помойку, абстрактные разъемы - туда же, система сообщений, и т.д., и т.п..
И не только в КП. Сигналы, которыми Илья поименовал дельфячий procedure of object - туда же.
Т.е., одна "мелкая загогулина" рушит по половине функциональности во всех ЯВУ. И наоборот, обеспечивает любой вид полиморфизма, опять же - во всех ЯВУ.

Так кто тут фундаментальный, на самом деле-то :?:
Думаю, что опять не поверят, и будут продолжать бояться - "а вдруг при смене компьютера...." :D

___________________________________________________________________
Не знаю... может следует объяснять полиморфизм ДО всяких ООП.
Процедурный тип - вот вам самый элементарный полиморфизм (имеющий максимально прямое отражение в коды)
И громко (типа: вбейте себе в мозг!!!) заявить, что все остальные виды его - это вариации вокруг этого типа... Не более, но и не менее...
Не знаю, не педагог...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 01 Декабрь, 2009 14:33 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Я так и объясняю, как разные вариации на одну тему. Только процедурный тип - это не полиморфизм, а виртуализация. Полиморфизм - это протаскивание расширенных типов через указатель или параметр базового. (Принцип Барбары Лисков, или, как я люблю говорить студентам "принцип рыбы-селёдки").

Кстати, не знаю, Вы в курсе или нет - но в базовом Обероне Вирта не было связанных процедур. А использовались поля записей процедурного типа.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 01 Декабрь, 2009 15:03 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
Galkov писал(а):
Народ почему-то считает фундаментальным некое абстрактное определение (причем оно может быть разным на разных языках).
Вообще-то определение вполне себе конкретное. И как на русском, так и на английском звучит одинаково (с незначительной долей погрешности).

Galkov писал(а):
Так кто тут фундаментальный, на самом деле-то
А что Вы подразумеваете под фундаментальностью?

Кстати, если холодильник правильно установить, то им можно охладить комнату.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 35 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB