Оберон-клуб «ВЄДАsoft»

Твердыня модульных языков
Текущее время: 25 сен 2018, 07:55

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




Начать новую тему Ответить на тему  [ Сообщений: 39 ]  На страницу Пред.  1, 2, 3, 4
Автор Сообщение
 Заголовок сообщения: Re: Free Oberon официально выпущен
СообщениеДобавлено: 24 янв 2018, 08:57 
Не в сети

Сообщения: 9
prospero78su писал(а):
akron1 писал(а):
Код: "OBERON"
  1. list.clear(list);
  2. list.add(list, item);


А если это будет выглядеть вот так:
Код: "OBERON"
  1.  
  2. мЦепь.Очистить(уЦепь);
  3. мЦепь.Зв_Добав(уЦепь, уЗвено);
  4.  


В любом случае в методах необходимо передавать ссылку на себя.
Во второй строке для list -- непонятно,что это -- вариант от мене лишён данного недостатка.
Кроме того, в секции BEGIN модуля можно проводить инициализацию самого модуля, а для типа туЦепь в модуле модЦепь можно предусмотреть процедуру Создать():туЦепь, где членам типа туЦепь -- процедурным переменным можно присвоить ссылки на процедуры из модуля. Но! передавать ссылку на себя всё-равно придётся.
Так-что можно, но не совсем понятно зачем.

З.Ы. Я исхожу из того, что В Оберон-07 (да и в любом Обероне) нет понятия "класс". Потребность в нём перекрывается понятием "модуль". Типы разделяют семантику классов, но Вирт чётко разделяет код и данные. Типы относятся к данным.


Дело не в том, какими словами это будет записано, а в необходимости явной передачи "лишнего" параметра. Причем этот параметр не обязательно простая переменная -- это может быть и сложное обозначение:
Код: "OBERON"
  1. a.b[i].c[j].clear(a.b[i].c[j]);


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Free Oberon официально выпущен
СообщениеДобавлено: 24 янв 2018, 09:13 
Не в сети

Сообщения: 92
prospero78su писал(а):
akron1 писал(а):
Код: "OBERON"
  1. list.clear(list);
  2. list.add(list, item);


А если это будет выглядеть вот так:
Код: "OBERON"
  1.  
  2. мЦепь.Очистить(уЦепь);
  3. мЦепь.Зв_Добав(уЦепь, уЗвено);
  4.  



В таком виде теряется полиморфизм и, соответственно, расширяемость системы.

prospero78su писал(а):
В любом случае в методах необходимо передавать ссылку на себя.
Во второй строке для list -- непонятно,что это -- вариант от мене лишён данного недостатка.
Кроме того, в секции BEGIN модуля можно проводить инициализацию самого модуля, а для типа туЦепь в модуле модЦепь можно предусмотреть процедуру Создать():туЦепь, где членам типа туЦепь -- процедурным переменным можно присвоить ссылки на процедуры из модуля. Но! передавать ссылку на себя всё-равно придётся.
Так-что можно, но не совсем понятно зачем.


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


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Free Oberon официально выпущен
СообщениеДобавлено: 24 янв 2018, 12:39 
Не в сети
Администратор
Аватара пользователя

Сообщения: 70
akron1 писал(а):
Дело не в том, какими словами это будет записано, а в необходимости явной передачи "лишнего" параметра. Причем этот параметр не обязательно простая переменная -- это может быть и сложное обозначение:
Код: "OBERON"
  1. a.b[i].c[j].clear(a.b[i].c[j]);

Ох, Антон. Если в моей конторе я увижу такой код -- изобью линейкой по рукам до посинения))

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

akron1 писал(а):
Вот именно, не совсем понятно - зачем. А, ну да, компилятор проще... Пусть лучше программист занимается ручным созданием таблиц виртуальных методов... Уж он то точно не ошибется.

Свою позицию по этому вопросу я объяснил чуть выше. Я исхожу из Ленинского "ни один солдат не должен быть в неведении в отношении того, по каким принципам сконструировано и как действует его оружие". Тут же могу напомнить о том, RTTI далеко не худенький зверёк, понимание виртуальных методов у многих отсутствует и пользоваться ими не умеют. Если есть желание переопределить метод -- сделай его вызов явно. Из другого модуля, который описывает соответствующий тип. Контроля -- больше, сюрпризов -- меньше.

vlad писал(а):
В таком виде теряется полиморфизм и, соответственно, расширяемость системы.

Полиморфизм в серьёзном ПО -- не очень хорошая штука. А расширение системы можно делать и другим способом, например, обмен типизированными сообщениями. Старое не трогаем, новое само по себе. SOLID во всей красе))

Открываем раздел 9.5 репорта:
Цитата:
Тип T выражения Case (Case переменная) также может быть типом записи или указателя. Тогда метки Case должны быть расширениями Т, а в предписаниях Si, помеченных Ti, переменная Case рассматривается как тип Ti.
Пример:

Код: "OBERON"
  1.  
  2. TYPE R_ = RECORD a:
  3. INTEGER END;
  4. R0 = RECORD (R_)
  5. b: INTEGER
  6. END;
  7. R1 = RECORD (R_)
  8. b: REAL
  9. END;
  10. R2 = RECORD (R_)
  11. b: SET
  12. END;
  13. P = POINTER TO R_;
  14. P0 = POINTER TO R0;
  15. P1 = POINTER TO R1;
  16. P2 = POINTER TO R2;
  17. VAR
  18. p: P;
  19. CASE p OF
  20. P0: p.b := 10 |
  21. P1: p.b := 2.5 |
  22. P2: p.b := {0, 2}
  23. END

Хм. Прямое расширение через проверку типов. Что я делаю не так?)))

_________________
Действия профессионала предсказуемы. Но в мире полно любителей!


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Free Oberon официально выпущен
СообщениеДобавлено: 24 янв 2018, 21:23 
Не в сети

Сообщения: 92
prospero78su писал(а):
Ох, Антон. Если в моей конторе я увижу такой код -- изобью линейкой по рукам до посинения))


А что за контора такая, пишущая на обероне, если не секрет?

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


Все они программисты или может какие эффективные менеджеры? В питоне, кстати, эта ссылка "на себя" тоже явно присутствует (за что и критикуется некоторыми), но вот такого безобразия, как привел Антон, в месте вызова все равно нет. Я почему-то подозреваю, что ты сам такую херь не пишешь, используя вовсю ББ-ные интерфейсы (если пишешь на обероне).

Во всех вменямых ЯП с поддержкой ООП методы переопределяются явно. Херней с ручной инициализацией процедурных переменных занимаются сишники (не путать с С++) и суровые оберонщики (O7).

prospero78su писал(а):
vlad писал(а):
В таком виде теряется полиморфизм и, соответственно, расширяемость системы.

Полиморфизм в серьёзном ПО -- не очень хорошая штука. А расширение системы можно делать и другим способом, например, обмен типизированными сообщениями. Старое не трогаем, новое само по себе. SOLID во всей красе))


Меня пугают люди, которые сорят терминами не понимая их значения. Или не понимая как оно используется на практике, а заучив формулировку. Почитай подробнее про букву "D" в SOLID. Потом поговорим, почему твое расширение через проверку типов не всегда применимо.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Free Oberon официально выпущен
СообщениеДобавлено: 29 янв 2018, 12:38 
Не в сети
Администратор
Аватара пользователя

Сообщения: 70
vlad писал(а):
А что за контора такая, пишущая на обероне, если не секрет?

Пишущая -- громко сказано. Куда как чаще -- совсем не пишущая. Услуги программистов в Калининградской области не нужны от слова совсем. Изолента, скотч и проволока -- востребованы гораздо больше.
ООО "КБК Техника". Директор я там)) В каталогах есть.

vlad писал(а):
Все они программисты или может какие эффективные менеджеры?

Заявляются как программисты. Что-то вроде знают. Циклы и операторы наляпать могут. Задавать правильные вопросы -- мало кто может, а отвечать на просто вопросы -- совсем нет.

vlad писал(а):
В питоне, кстати, эта ссылка "на себя" тоже явно присутствует (за что и критикуется некоторыми), но вот такого безобразия, как привел Антон, в месте вызова все равно нет.

Не знаю. Может это привычка, но ссылка "на себя" в питоне меня совсем не раздражает. Меня бесит примерно вот это:
Код: "OBERON"
  1.  
  2. filter(if a in for b in range(map(liser) print("ok") else print("bad"))
  3.  

Это ооочень похоже на пример Антона)))
Но там хоть слева направо разбор...

vlad писал(а):
Почитай подробнее про букву "D" в SOLID. Потом поговорим, почему твое расширение через проверку типов не всегда применимо.

А я где-то писал, что предложенный вариант -- серебряная пуля? Если что, я сторонник шин сообщений даже не на основе типов сообщений, и числовых кодов.
Я как радиоинженер не могу сказать, что программирую я даже на "удовл", но с учётом написанного выше ,я думаю понятно, что буковка "D" в SOLID мне по душе))

_________________
Действия профессионала предсказуемы. Но в мире полно любителей!


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Free Oberon официально выпущен
СообщениеДобавлено: 29 янв 2018, 20:04 
Не в сети

Сообщения: 92
prospero78su писал(а):
ООО "КБК Техника". Директор я там)) В каталогах есть.


Да, нашел, а собственный сайтик? :) 21 век все-таки. А можешь похвастаться каким-нибудь примером, когда клиент остался доволен разработанным софтом? Какого рода был софт?

prospero78su писал(а):
vlad писал(а):
Все они программисты или может какие эффективные менеджеры?

Заявляются как программисты. Что-то вроде знают. Циклы и операторы наляпать могут. Задавать правильные вопросы -- мало кто может, а отвечать на просто вопросы -- совсем нет.


Ну я бы не стал делать глубоких выводов на основе такой выборки. Программисты все-таки тяготеют к крупным городам. В нашей деревне тоже напряг с кадрами.

prospero78su писал(а):
Не знаю. Может это привычка, но ссылка "на себя" в питоне меня совсем не раздражает.


Так в питоне оно нормально сделано, self присутствует только в декларации метода. Напомню оригинальный O7 код:
Код: "JS"
 
a.b[i].c[j].clear(a.b[i].c[j]);
 


В питоне как и во всех нормальных языках с ООП будет:
Код: "JS"
 
a.b[i].c[j].clear();
 


prospero78su писал(а):
Меня бесит примерно вот это:
Код: "PYTHON"
 
filter(if a in for b in range(map(liser) print("ok") else print("bad"))
 



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

prospero78su писал(а):
Если что, я сторонник шин сообщений даже не на основе типов сообщений, и числовых кодов.


Ужос какой :) Это был мой второй работодатель. Начальник тоже из электроники пришел. Но я тогда был совсем зеленый и не мог осознать насколько это ужасно, зато теперь содрогаюсь от того, что мы там понаписали :) В точности как ты рассказывешь - сообщения на основе числовых кодов в распределенной системе.

prospero78su писал(а):
Я как радиоинженер не могу сказать, что программирую я даже на "удовл", но с учётом написанного выше ,я думаю понятно, что буковка "D" в SOLID мне по душе))


Я поясню, что не так с буковкой "D" в твоем примере. Когда ты пишешь "Module1.method1(object1)" у тебя появляется dependency на все расширения object1, даже если сам object1 в месте вызова у тебя абстрактный. Потому что Module1 должен знать все эти расширения, чтобы реализовать method1 с помощью проверки типа. Поскольку Module1 у тебя импортируется статически, то и dependency вполне статическая, хотя и неявная.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Free Oberon официально выпущен
СообщениеДобавлено: 29 янв 2018, 20:53 
Не в сети

Сообщения: 9
Ну ладно, я тоже несколько перегнул, желая показать важность методов.

В реальности это выглядит чуть менее страшно:
Код: "OBERON"
  1.  
  2. list := a.b[i].c[j];
  3. list.clear(list);
  4.  

вместо a, b, c, i, j можно подставить осмысленные идентификаторы


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Free Oberon официально выпущен
СообщениеДобавлено: 29 янв 2018, 21:27 
Не в сети

Сообщения: 92
akron1 писал(а):
В реальности это выглядит чуть менее страшно:
Код: "OBERON"
  1.  
  2. list := a.b[i].c[j];
  3. list.clear(list);
  4.  



А если "a.b[i].c[j]" - не pointer? :) Довольно частный случай конечно, но вполне валидный.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Free Oberon официально выпущен
СообщениеДобавлено: 29 янв 2018, 22:07 
Не в сети

Сообщения: 9
Тогда хуже, конечно. Если писать руководство пользователя по Оберону-07, то надо особо отметить, что не рекомендуется использовать процедурные поля в статических записях.


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

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


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

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


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

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Тех.поддержка phpBB