OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 29 Март, 2024 02:45

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




Начать новую тему Ответить на тему  [ Сообщений: 185 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7, 8 ... 10  След.
Автор Сообщение
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Пятница, 13 Май, 2016 18:41 
Аватара пользователя

Зарегистрирован: Воскресенье, 12 Апрель, 2015 18:12
Сообщения: 1134
Откуда: СССР v2.0 rc 1
Самое логичное решение было сделать и сеттер и геттер через:
Код:
PROPERTY Ua:single read  _Ua.val write _Ua.val;

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

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

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Пятница, 13 Май, 2016 19:27 
Аватара пользователя

Зарегистрирован: Воскресенье, 12 Апрель, 2015 18:12
Сообщения: 1134
Откуда: СССР v2.0 rc 1
В-принципе, я понимаю, почему во FreePascal сделано именно так. Попытка успешного выполнения присвоения автобуса пароходу в тексте программы будет магией 80 левела. Через запрет компилятора осуществляется попытка спасти архитектуру софта от программиста.
Ну, не самое плохое решение из тех, что попадались мне на глаза. Но это попытка справиться с искусственно созданной сложностью.
Есть в этом что-то от мягкой форма фашизма)))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Пятница, 13 Май, 2016 21:18 

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 717
Откуда: Барнаул
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 упорно считает, что так делать нельзя. Да это бред.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Пятница, 13 Май, 2016 21:28 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Суббота, 14 Май, 2016 21:23 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Воскресенье, 15 Май, 2016 05:33 

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Воскресенье, 15 Май, 2016 08:31 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Ответил на дезу в новой теме:
О диалектах Оберона
viewtopic.php?f=89&t=5705


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Воскресенье, 15 Май, 2016 12:30 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Воскресенье, 15 Май, 2016 16:25 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Воскресенье, 15 Май, 2016 16:44 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1488
Откуда: Украина, Киев
Оберон очень прост. Тем не менее, в Обероне просто сделать property, можно даже сделать class reference, если угодно. Без привлечения лишних ключевых слов, без шума и пыли :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Воскресенье, 15 Май, 2016 17:16 
Аватара пользователя

Зарегистрирован: Воскресенье, 12 Апрель, 2015 18:12
Сообщения: 1134
Откуда: СССР v2.0 rc 1
Так точно, Ярослав!
О том и речь -- кому надо, тот сделает. Никому не надо, никто не делает)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Воскресенье, 15 Май, 2016 19:01 

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Воскресенье, 15 Май, 2016 21:47 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Понедельник, 16 Май, 2016 00:05 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Понедельник, 16 Май, 2016 00:43 
Аватара пользователя

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Понедельник, 16 Май, 2016 02:28 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
prospero78 писал(а):
Я уже раза 4 написал, что передать в сеттер свойства объект, отличающийся по типу от свойства никак не ломает отношения типов
И вам уже раз 5 написали, что ломает. Ломает семантику операции присваивания в части как раз-таки отношения типов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Понедельник, 16 Май, 2016 07:21 
Аватара пользователя

Зарегистрирован: Воскресенье, 12 Апрель, 2015 18:12
Сообщения: 1134
Откуда: СССР v2.0 rc 1
Да нет, это я написал. Первым.
Не типизацию, а именно семантику ломает такой вызов (см. выше про магию 80 левела).
А мне тут, парочка специалистов доказывает, что именно типизацию. А про запрет на VAR в сеттере я так ответа адекватного и не услышал.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Понедельник, 16 Май, 2016 08:02 

Зарегистрирован: Суббота, 04 Март, 2006 15:13
Сообщения: 674
Откуда: СССР
prospero78 писал(а):
Пришлось по работе посидеть под FreePascal.


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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Понедельник, 16 Май, 2016 08:52 
Аватара пользователя

Зарегистрирован: Воскресенье, 12 Апрель, 2015 18:12
Сообщения: 1134
Откуда: СССР v2.0 rc 1
Кубанычбек, уважаемый!
Да не хочу я тратить время на FreePascal.
Но уже есть основной сервер, резервный сервер, архивный сервер, их софт написан на различных делфях-паскалях.
Начальство даёт вводную, приходится держать под рукой различные исходники, портируемую версию (разумеется не совсем честную) делфей, КодеТайфун, и всякое такое.
Переписываю софт под БлэкБокс, и вижу ошибки методики и просто ошибки. Да! Код проще, логичней, и надёжней!!!
Но, все мы под Аллахом ходим!,) Далеко не всегда жизнь идёт так, как этого хотим мы)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОИК "Восход"
СообщениеДобавлено: Понедельник, 16 Май, 2016 09:31 

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 717
Откуда: Барнаул
Kubanych писал(а):
До знакомства с оберонами в я кое-что делал на FreePascal,
появлялись недоделки компилятора.

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

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


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

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


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

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


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

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