OberonCore
https://forum.oberoncore.ru/

ОИК "Восход"
https://forum.oberoncore.ru/viewtopic.php?f=5&t=5677
Страница 5 из 10

Автор:  prospero78 [ Пятница, 13 Май, 2016 18:41 ]
Заголовок сообщения:  Re: ОИК "Восход"

Самое логичное решение было сделать и сеттер и геттер через:
Код:
PROPERTY Ua:single read  _Ua.val write _Ua.val;

Тем более, что Ua описан статически.
НО ЭТО НЕ РАБОТАЕТ!!!!

Второй вариант с вынесенным контролем присвоения в любом случае я вынужден делать именно так. Меня интересует гарантированное изменение типа (про сложение амперов и вольтов в мегаватты написал выше).

Я понимаю, почему в сеттере только один параметр. Я не понимаю, почему во FreePascal нельзя передавать в сеттере (процедура не возвращает результат вообще, функция возвращает согласованный результат) произвольный объект. Это не ANYPTR, контроль типов не ломается!!!!

Вот и получается, что при наличии property приходится пользоваться подходом, реализованном в КП, где есть только свойства на чтение.

Поэтому property (по крайней мере во FreePascal) кривое решение.

Автор:  prospero78 [ Пятница, 13 Май, 2016 19:27 ]
Заголовок сообщения:  Re: ОИК "Восход"

В-принципе, я понимаю, почему во FreePascal сделано именно так. Попытка успешного выполнения присвоения автобуса пароходу в тексте программы будет магией 80 левела. Через запрет компилятора осуществляется попытка спасти архитектуру софта от программиста.
Ну, не самое плохое решение из тех, что попадались мне на глаза. Но это попытка справиться с искусственно созданной сложностью.
Есть в этом что-то от мягкой форма фашизма)))

Автор:  Kemet [ Пятница, 13 Май, 2016 21:18 ]
Заголовок сообщения:  Re: ОИК "Восход"

prospero78 писал(а):
Причём тут тип аргумента в процедуре, и результат присваиваемый property?????
парень, внезапно, это язык со строгой статической типизацией. В котором геттер и сеттер у свойства должны соответствовать определенному соглашению, включая типы результата/параметра. К тому же, в соответствии с этим соглашением, параметр в сеттере нельзя передавать через var - только const или по значению.
Вот рабочий код:
Код:
type
    clsKVw = class
    public
      val : SINGLE;
    end;

  T0 = class
  protected
    _Ua:clsKVw;
  public
    property Ua: SINGLE read _Ua.val write _Ua.val;
   end;

  T1 = class
  private
    _Ua:clsKVw;
    procedure _set_Ua(CONST a: SINGLE);
  public
    property Ua: SINGLE read _Ua.val write _set_Ua;
   end;

  T2 = class
  private
    _Ua:clsKVw;
    procedure _set_Ua(a: SINGLE);
  public
    property Ua: SINGLE read _Ua.val write _set_Ua;
   end;


Цитата:
Кемет, ты молодец, что имеешь что сказать, но такое ощущение складывается, что ты вообще не читаешь вопрос.
Складывается ощущение, что ты единственный не понимаешь, что такое свойства, что такое радианы, чем отличаются программные и объектные модули, чем отличается модульность в кп и "фрипаскале", что такое языки со строгой статической типизацией ююю и многое другое. Так бывает.

Цитата:
В КП нет property за ненадобностью. Имхо, это отличное подтверждение такому техническому решению.
Разработчики КП просто не осилили их реализовать за приемлемое для них время.

Цитата:
З. Ы. Я сейчас ради спортивного интереса сделал write через FUNCTION():SINGLE.
Один хрен. FreePacal упорно считает, что так делать нельзя. Да это бред.

Как можно записать значение свойства через функцию ВОЗВРАЩАЮЩУЮ нечто?

Автор:  prospero78 [ Пятница, 13 Май, 2016 21:28 ]
Заголовок сообщения:  Re: ОИК "Восход"

Спасибо.)) Не работает.
Причём выше я это старательно описал))
Нечто имеет тип single.
И не вижу даже половину способа, как это может поломать типизацию. (при чём тут модульность? Неужели я в этой теме её где-то упомянул?))))) )
А впрочем, ... Чую, отсылки на не внимательность не помогают))
Кемет, ты серьёзно? Вирт не успел в ЯЗЫК ПРОГРАММИРОВАНИЯ прикрутить модненькую фенечку?))) Не подскажешь, куда он торопился, и где в последней редакции Оберона можно найти описание property? За 16 лет-то уже наверняка Вирт прикрутил?) А то вот я тут скачал по ссылке Бориса Рюмшина http://forum.oberoncore.ru/download/file.php?id=6096 Посмотрел неподъёмные 17 страниц, поискал "propert*" и ничего там нет. Видимо, я совсем глупый?)))

Автор:  prospero78 [ Суббота, 14 Май, 2016 21:23 ]
Заголовок сообщения:  Re: ОИК "Восход"

Кемет, а я не понимаю, как вообще можно сделать свойства, не через функции, которые возвращают необходимый тип, а через процедуры????
Процедура вообще ничего не возвращает!!!
И уж тем более странное решение, передавать в свойства переменные по значению, а не по ссылке.
Я живенько так себе представил, как будет происходить передача объекта по значению, содержащий небольшенький массив. На гигабайт другой. Не больше. Ага.. ,)
Почему-то в КП передача объекта по ссылке -- это НОРМАЛЬНО. Не подскажешь, может Вирт путает программные и объектные модули? )))

Автор:  Kemet [ Воскресенье, 15 Май, 2016 05:33 ]
Заголовок сообщения:  Re: ОИК "Восход"

Тебе же Александр Ильин давал ссылки для ознакомления с базовым понятием яп, на котором ты собрался программировать. Так же вполне можно было бы погуглить на тему delphi property, найти документацию и прочитать, что же это за зверь такой таинственный - свойства. Понятное дело, что для сеттера, который устанавливает значение свойства, нельзя использовать функции - СЕТТЕР(WRITE) должен быть полем или процедурой, принимающей ОДИН параметр того же самого типа, что и тип свойства. А вот ГЕТТЕР(READ) может быть или полем или функцией БЕЗ ПАРАМЕТРОВ, возвращающей значение того же типа, что и тип свойства.
По соглашению, параметр процедуры-сеттера может передаваться по значению или по ссылке не допускающей изменения (CONST). Так сделано, чтобы избежать побочных эффектов, когда не сильно умные, но сильно злобные программисты в сеттере поменяют значение переданное по ссылке(VAR). Как передавать - по значению или по ссылке CONST решает программист. Если он не понимает, что делает, то вполне может попытаться передать гигабайтный массив. В целом же, передача массивов по значению применяется, например, в многопоточных приложениях, чтобы гарантировать, что другой поток не изменил нужные нам данные, переданные в качестве аргумента(как пример, можно посмотреть A2, в которой массивы и записи в многопоточном коде передаются по значению).

Просперо, ты всерьез считаешь, что это Вирт разработал компилятор КП и вообще ББ?

Автор:  Info21 [ Воскресенье, 15 Май, 2016 08:31 ]
Заголовок сообщения:  Re: ОИК "Восход"

Ответил на дезу в новой теме:
О диалектах Оберона
viewtopic.php?f=89&t=5705

Автор:  Ярослав Романченко [ Воскресенье, 15 Май, 2016 12:30 ]
Заголовок сообщения:  Re: ОИК "Восход"

prospero78 писал(а):
и где в последней редакции Оберона можно найти описание property?
В A2 есть property, но они не включены в язык, а включены в базовый класс (объект) для всех невизуальных и визуальных компонентов.
Причём, сделано это элегантно, property - это доступное только для чтения поле, у которого есть соответствующие методы: ГЕТТЕР и СЕТТЕР. ГЕТТЕР - функция без параметров, СЕТТЕР - процедура с одним параметром.
При желании можно подобное реализовать практически в любом диалекте Оберона.
В диссертации Томаса Фрея всё это описано http://e-collection.library.ethz.ch/ese ... 966-02.pdf

Автор:  prospero78 [ Воскресенье, 15 Май, 2016 16:25 ]
Заголовок сообщения:  Re: ОИК "Восход"

(* протягивая платок *)
Кемет, подбери слюни. )) И не плакай))
И ты не прав, если считаешь, что через сеттер обязательно должен быть передан аргумент соответствующего типа, и вообще, что параметр может быть один (как и сеттер).
Ярослав привёл ссылку на то, что свойства сделать можно (Оберон весьма прост, не пытаюсь поставить под сомнение такую возможность).
Но НИКТО этого не сделал. Потому что на практике оказывается НЕ НУЖНО. Моя практика это же подтверждает ,)
С чего это вдруг функция не может быть сеттером? А я считаю, что методически верно (в промышленном программировании) именно так и должно быть сделано!
По сути, не ответил ни на один вопрос, и даже вынудил Ткачёва ответить на твою ЛОЖЬ.
Цитату привести, или сам почитаешь?

Автор:  Ярослав Романченко [ Воскресенье, 15 Май, 2016 16:44 ]
Заголовок сообщения:  Re: ОИК "Восход"

Оберон очень прост. Тем не менее, в Обероне просто сделать property, можно даже сделать class reference, если угодно. Без привлечения лишних ключевых слов, без шума и пыли :)

Автор:  prospero78 [ Воскресенье, 15 Май, 2016 17:16 ]
Заголовок сообщения:  Re: ОИК "Восход"

Так точно, Ярослав!
О том и речь -- кому надо, тот сделает. Никому не надо, никто не делает)

Автор:  Valery Solovey [ Воскресенье, 15 Май, 2016 19:01 ]
Заголовок сообщения:  Re: ОИК "Восход"

prospero78 писал(а):
... не прав, если считаешь, что через сеттер обязательно должен быть передан аргумент соответствующего типа...
Обязательно должен. И вообще, за исключением редких случаев, которые не стоят упоминания, логика сеттера настолько проста, что реализуется одним-единственным оператором.

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

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

Автор:  prospero78 [ Воскресенье, 15 Май, 2016 21:47 ]
Заголовок сообщения:  Re: ОИК "Восход"

Не логично.
1. Мне нужен короткий путь к значению. Синоним. Ссылка. А нельзя для доступа к свойству типа single прикрутить ссылку на соответствующее поле объекта!!! (который я вообще хочу изолировать!)
2. В вызове сеттера я указываю объект, имеющий тип. Свойство тоже имеет тип. И как тут нарушается типизация? Не много ли на себя берёт компилятор, решая за меня, как я буду приводить один тип к другому?
3. VAR параметр, если что -- тоже имеет тип! И VAR :INTEGER и VAR:SINGLE присвоить друг другу невозможно! И если программист прибегает к услугам ANYPTR, то значит дело совсем плохо.
4. Ещё раз повторюсь: для property может быть несколько сеттеров, и может быть несколько параметров в каждом сеттере. Даже во FreePascal, по факту, частенько приходится в сеттерах использовать условия для выбора ветки присвоения. Это самый, что ни на есть второй/третий/ четвёртый параметр сеттера.
5. Именно из-за того, что свойства реализованы именно таким способом -- они бесполезны. Член класса на чтение + метод на контролируемую запись с любым числом и типом параметров исчерпывающе хватает для любых задач промышленного программирования.)

Автор:  Valery Solovey [ Понедельник, 16 Май, 2016 00:05 ]
Заголовок сообщения:  Re: ОИК "Восход"

prospero78 писал(а):
Не логично.
1. Мне нужен короткий путь к значению.
То есть, Вам нужен "короткий путь", а виноваты, почему-то, свойства...
Вообще-то, "короткий путь к значению" и "хочу изолировать" - взаимоисключающие вещи.
prospero78 писал(а):
2. В вызове сеттера я указываю объект, имеющий тип. Свойство тоже имеет тип. И как тут нарушается типизация? Не много ли на себя берёт компилятор, решая за меня, как я буду приводить один тип к другому?
Сомневаюсь, что в Паскале можно получить объект, который не имеет типа. Возможно, до этого Вы всегда писали на ассемблере, и потому плохо себе представляете смысл типизации. Для взаимодействия данных и переменных недостаточно, чтобы они "имели тип". Для взаимодействия нужно, чтобы типы совпадали.
prospero78 писал(а):
3. VAR параметр, если что -- тоже имеет тип!
VAR не имеет отношения к типизации. И его значение может быть в стеке, а значение свойства хранится в куче. Вы-то, может быть, и недовольны, а вот те, кто выкладывает деньги на починку сгоревших подстанций должны просто прыгать от счастья, что Ваша программа не компилируется.
prospero78 писал(а):
4. Ещё раз повторюсь: для property может быть несколько сеттеров, и может быть несколько параметров в каждом сеттере. Даже во FreePascal, по факту, частенько приходится в сеттерах использовать условия для выбора ветки присвоения. Это самый, что ни на есть второй/третий/ четвёртый параметр сеттера.
Сеттеров может быть много, но делают они одно и то же. Поэтому, все они за исключением первого должны быть удалены, чтобы не портить жизнь программисту. Если "приходится в сеттерах использовать условия для выбора ветки присвоения", то это не сеттер (почти наверняка).

Автор:  prospero78 [ Понедельник, 16 Май, 2016 00:43 ]
Заголовок сообщения:  Re: ОИК "Восход"

1. Короткий путь одного объекта к длинному свойству другого объекта. Если я непонятно выразился.
Что здесь неприличного?
2. Я где-то написал, что пытаюсь присвоить разные типы друг другу? Я написал, что в качестве параметра пытаюсь передать другой тип. Разницу улавливаете?
3. VAR имеет отношение к способу передачи параметра. Вы почитайте, что пишет Кемет: VAR в свойствах запрещён потому, что мало ли как программист захочет побаловаться с указателями? Каким образом, если VAR указывает на вполне типизированный объект! У меня всё прекрасно компилируется, и уж просто поверьте на слово: там где я приложил руки -- влезть, значит испортить.
4. Много сеттеров очень пригодится при различных контекстах, блокировках, разделяемых ресурсах. Если хотите, это своего рода полиморфизм.
Более того, использлвать условия в сеттере -- нормально. Например, установить мегаватты из суммы киловатт по отходящим линиям, или произведения киловольт и ампер в масштабе поделить на тысячу по входящей линии. Такие варианты сплошь и рядом.
Я ещё раз повторюсь, в программировании -- я дилетант. Но не идиот. И то, что некоторым тут кажется странными мои вопросы в духе "почему 2х2=4", это не от того, что я не знаю, а от того, что считаю методически не состоятельными предлагаемые мне объяснения. Я немножко человек со стороны, мне издалека получше видно, что является техничным, достаточным или обоснованным решением, а что нет.
Ну, сделали и сделали. Но у меня вот такое мнение.

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

Автор:  Александр Ильин [ Понедельник, 16 Май, 2016 02:28 ]
Заголовок сообщения:  Re: ОИК "Восход"

prospero78 писал(а):
Я уже раза 4 написал, что передать в сеттер свойства объект, отличающийся по типу от свойства никак не ломает отношения типов
И вам уже раз 5 написали, что ломает. Ломает семантику операции присваивания в части как раз-таки отношения типов.

Автор:  prospero78 [ Понедельник, 16 Май, 2016 07:21 ]
Заголовок сообщения:  Re: ОИК "Восход"

Да нет, это я написал. Первым.
Не типизацию, а именно семантику ломает такой вызов (см. выше про магию 80 левела).
А мне тут, парочка специалистов доказывает, что именно типизацию. А про запрет на VAR в сеттере я так ответа адекватного и не услышал.

Автор:  Kubanych [ Понедельник, 16 Май, 2016 08:02 ]
Заголовок сообщения:  Re: ОИК "Восход"

prospero78 писал(а):
Пришлось по работе посидеть под FreePascal.


Зачем тратите время на FreePascal? Есть же готовые оберонные инструменты.
До знакомства с оберонами в я кое-что делал на FreePascal,
появлялись недоделки компилятора.

При переходе на обероны (XDS, oo2c, BlackBox) работа пошла намного быстрей, указанные недоделки отсутствовали полностью.

Автор:  prospero78 [ Понедельник, 16 Май, 2016 08:52 ]
Заголовок сообщения:  Re: ОИК "Восход"

Кубанычбек, уважаемый!
Да не хочу я тратить время на FreePascal.
Но уже есть основной сервер, резервный сервер, архивный сервер, их софт написан на различных делфях-паскалях.
Начальство даёт вводную, приходится держать под рукой различные исходники, портируемую версию (разумеется не совсем честную) делфей, КодеТайфун, и всякое такое.
Переписываю софт под БлэкБокс, и вижу ошибки методики и просто ошибки. Да! Код проще, логичней, и надёжней!!!
Но, все мы под Аллахом ходим!,) Далеко не всегда жизнь идёт так, как этого хотим мы)

Автор:  Kemet [ Понедельник, 16 Май, 2016 09:31 ]
Заголовок сообщения:  Re: ОИК "Восход"

Kubanych писал(а):
До знакомства с оберонами в я кое-что делал на FreePascal,
появлялись недоделки компилятора.

При переходе на обероны (XDS, oo2c, BlackBox) работа пошла намного быстрей, указанные недоделки отсутствовали полностью.

Я даже не постесняюсь спросить, что это за "недоделки", которые мешают жить любителям оберона, и не мешают программистам на объектном паскале?

Страница 5 из 10 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/