OberonCore
https://forum.oberoncore.ru/

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

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

prospero78 писал(а):
Если считать, что радиан есть величина безразмерная, то технически можно разделить 180 на pi.
Даже если и не считать, то 180 разделить на pi=3.14159... можно.

Затрудняюсь порекомендовать литературу.
Какой-нибудь начальный курс общей физики.

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

prospero78 писал(а):
Получим отмасштабированные градусы, но не радианы. Количество полученных градусов будет в точности соответствовать 1 радиану, но от этого они не перестанут быть градусами.

Откуда это "отмасштабированные" появилось? Пи - это не коэффициент масштабирования.

Градусы не являются производными от радианов, а радианы не являются производными от градусов.

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

Решения у такой задачи простые. Одно из них я привёл в предыдущем посте (надеюсь, нигде не ошибся).

И ещё раз: формулы не делают из радиан градусы. Формулы находят соответствие заданному количеству радиан в альтернативной системе.

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

На минуточку. pi -- величина безразмерная! И означает она ДЛИНУ окружности к ДЛИНЕ единичного вектора этой окружности с коэффициентом -- 2*pi.

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

Цитата:
И ещё раз: формулы не делают из радиан градусы. Формулы находят соответствие заданному количеству радиан в альтернативной системе.

Да уж тогда скорее радианы -- это альтернативная система градусам. По крайней мере, я понимаю, почему 6.28. И с трудом понимаю, почему pi.
Я с трудом понимаю почему градусов 360, а не 100 (привет Вавилону с его 60-ричной системой?)

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

prospero78 писал(а):
Я с трудом понимаю почему градусов 360, а не 100 (привет Вавилону с его 60-ричной системой?)


эта система была введена до калькуляторов.
Удобно нацело делить на 2,3,4,5,6,8,9,10,12,15,20,30,40,60.

А 100 нацело делится только на 2,4,5,10,20,50.

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

Пришлось по работе посидеть под FreePascal.
Постоянно ловил себя на мысли, что меня бесит отсутствие пространства имён, и выпадающая подсказка по членам класса нужна именно поэтому.
Может, я что-то делаю не так, но передать объект по ссылке в качестве сеттера для property в классе -- НЕЛЬЗЯ!!!
И определить статический объект в процедуре в виде класса (и уж тем более инициализировать его) тоже не можно. Сидел, плевался)

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

prospero78 писал(а):
Может, я что-то делаю не так, но передать объект по ссылке в качестве сеттера для property в классе -- НЕЛЬЗЯ!!!
Что за кошмар вы там наворотили? Зачем вам оъект в качестве сеттера? Сеттер - это же процедура, а никакой не объект.

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

Совершенно верно. И объявление в форме:
Код:
PROTECTED
    _Ua:clsKVw;
    PROCEDURE _set_Ua(VAR a:clsKVw);
PUBLIC
    PROPERTY Ua:SINGLE read _Ua.val write _set_Ua

Вот это во FreePascal сделать невозможно.
И упреждающее объявление методов бесит.

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

Я не понял, почему у вас property имеет тип single, а в сеттер вы хотите передать переменную другого типа? Что за концептуальную кашу вы там пытаетесь завариь? Сделайте просто. Компилятор прав, что не даёт вам устроить нетипизированный балаган.

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

Где же не типизированный???
Я же прописал тип аргумента!
Затея такая, чтобы не передавать только Ua.val (а там ещё и масштабный коэффициент, достоверность, метка времени обновления и всё-такое).
Кучу параметров в сеттере невозможно передать, а передача ссылки на объект просто просится.

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

prospero78 писал(а):
Затея такая, что не передавать Ua.val (а там ещё и масштабный коэффициент, достоверность, метка времени обновления и всё-такое).
Кучу параметров в сеттере невозможно передать, а передача ссылки на объект просто просится.
Ну, так и сделайте property типа clsKVw, в чём проблема?

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

Так вот в том и проблема, что я хочу получать тип напряжение в киловольтах, а отдавать просто число (например для ГИП). Но в операциях, на присвоение я не хочу получать что попало (амперы или ватты). А именно то, что мне надо.
Видимо, придётся ковырять в сторону перегрузки операций. Что не очень хорошо.

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

Я вообще не понимаю: ну какая разница компилятору, какого типа аргумент на присвоение?! Связи никакой.

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

prospero78 писал(а):
Так вот в том и проблема, что я хочу получать тип напряжение в киловольтах, а отдавать просто число (например для ГИП). Но в операциях, на присвоение я не хочу получать что попало (амперы или ватты). А именно то, что мне надо.
Видимо, придётся ковырять в сторону перегрузки операций. Что не очень хорошо.
Налицо непонимание смысла языковой конструкции property.
http://wiki.freepascal.org/Property

prospero78 писал(а):
Я вообще не понимаю: ну какая разница компилятору, какого типа аргумент на присвоение?! Связи никакой.
Вы хотите объявить переменную одного типа, а присваивать ей значения другого типа, и не видите проблемы? Вы хотите, чтобы что угодно можно было присвоить чему угодно? С этим в Basic, пожалуйста.

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

Цитата:
Налицо непонимание смысла языковой конструкции property.

Почитал. Ничего нового не узнал. Именно так я property и понимаю.

Цитата:
Вы хотите объявить переменную одного типа, а присваивать ей значения другого типа, и не видите проблемы? Вы хотите, чтобы что угодно можно было присвоить чему угодно? С этим в Basic, пожалуйста.

В каком месте я пытаюсь присвоить другой тип? Что-то я у себя такого не вижу.

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

Это язык со строгой статической типизацией. Свойство имеет некий тип, и результат геттера и аргумент сеттера этого свойства должны иметь тот же самый тип. Что здесь непонятного?
Если хочется использовать разные типы, нужно реализовать операторы преобразования Implicit/Explicit.
ЗЫ: А потом эти люди начинают с придыханием вещать: язык ХХХ полная лажа, а вот Оберон, это да, сила. И люди начинают сомневаться в адекватности любителей оберона.

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

Причём тут тип аргумента в процедуре, и результат присваиваемый property?????
Кемет, ты опять пишешь не по теме.
Я может во write вызов процедуры вообще как чекпоинт использую, без какого-либо присвоения?!
Какое дело компилятору, какого типа АРГУМЕНТ я передаю в ПРОЦЕДУРУ?!!!
ПРОЦЕДУРА ОНА ВООБЩЕ НИЧЕГО НЕ ВОЗВРАЩАЕТ!!!
Кемет, ты молодец, что имеешь что сказать, но такое ощущение складывается, что ты вообще не читаешь вопрос.

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

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

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

prospero78 писал(а):
сделал write через FUNCTION():SINGLE... Да это бред.
Вот так правильно.

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

Дать, что ли, азы понимания property вам?

По приведённый ранее ссылке из вики есть пример:
Код:
  TCar = class
  private
    FColor: string;
    procedure SetColor(CarColor: string);
  public
    property Color: string read FColor write SetColor;
  end;

Все элементы property: его тип, тип, возвращаемый геттером, и тип параметра сеттера должны быть одинаковыми. Геттер и сеттер не должны иметь дополнительных параметров, у них чётко оговоренный формат.

Что сделает компилятор? Если у нас есть объект car типа TCar, то при чтении car.Color будет вызван геттер, в данном случае будет подставлено выражение car.FColor. Например, вызов
file.Write(car.Color) будет заменён на file.Write(car.FColor).

При присвоении значения свойству Color компилятор заменит car.Color := "red" на вызов car.SetColor("red").

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

В вашем случае у property имеется тип single, а сеттер принимает на вход какой-то левый класс. Компилятор справедливо негодует, точно так же, как он негодовал бы, если бы вы сделали следующее:
Код:
var
  s: single;
  c: clsKVw;
begin
  s := c;

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

Спасибо, Александр за небольшую лекцию.
Я прекрасно понимаю, как работает property.

Говоря "Это же бред", я имел в виду, что даже через
Код:
FUNCTION():SINGLE

это не работает!!!!!!!!!!!!!!!!!
У сеттера через PROCEDURE нет возвращаемого значения, в том и дело!
А если сеттер сделан через функцию, то его возвращаемое значение такое же, как у property.
Но компилятор и в этом случае отказывается компилировать.
КАКОЕ ДЕЛО КОМПИЛЯТОРУ ДО МОИХ АРГУМЕНТОВ???
Ну это же бред!!!

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

prospero78 писал(а):
Я прекрасно понимаю, как работает property.
Вы это уже говорили, и статью по ссылке читали, но компилятор с вами не согласен.

Ваш код должен выглядеть примерно так:
Код:
PROTECTED
    _Ua:clsKVw;
PUBLIC
    PROPERTY Ua:SINGLE read _Ua.val;
    PROCEDURE SetUa(VAR a:clsKVw);

Либо так:
Код:
PROTECTED
    _Ua:clsKVw;
    PROCEDURE _set_Ua(VAR a:clsKVw);
PUBLIC
    PROPERTY Ua:clsKVw read _Ua write _set_Ua;

Ну, ещё может быть вот так:
Код:
PROTECTED
    _Ua:clsKVw;
PUBLIC
    PROPERTY Ua:clsKVw read _Ua write _Ua;

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