Автор Тема: Ассоциативный контейнер в оберонах  (Прочитано 39575 раз)

DIzer

  • Гость
Re: Ассоциативный контейнер в оберонах
« Ответ #30 : Апрель 06, 2012, 01:13:17 pm »
Да. Именно поэтому в Java у класса Object (от которого наследуются все остальные) есть метод int   hashCode(). Без этого никак.

"Вот оно че, Михалыч!"  ;D

Обероны в пролете короче  :)
Так по этому и речь ведем об области  его эффективного использования - что бы в "дерьмо" не попасть, случайно...
это здесь - а у коровцев один ответ -лучше оберонов ничего нет...
« Последнее редактирование: Апрель 06, 2012, 01:16:12 pm от DIzer »

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Ассоциативный контейнер в оберонах
« Ответ #31 : Апрель 06, 2012, 01:14:12 pm »
Да. Именно поэтому в Java у класса Object (от которого наследуются все остальные) есть метод int   hashCode(). Без этого никак.

"Вот оно че, Михалыч!"  ;D

Обероны в пролете короче  :)

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

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Ассоциативный контейнер в оберонах
« Ответ #32 : Апрель 06, 2012, 01:19:31 pm »
Т.е. чтобы эти плюшки кушать, оно в языке должно быть изначально прошито. (В жабе Object часть языка?)
В жабе Object да, часть языка.

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

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Ассоциативный контейнер в оберонах
« Ответ #33 : Апрель 06, 2012, 01:21:47 pm »
Да. Это вариант. Хотя не особо удобно конечно.

Губанов Сергей Юрьевич

  • Hero Member
  • *****
  • Сообщений: 590
    • Просмотр профиля
    • Домашняя страница
Re: Ассоциативный контейнер в оберонах
« Ответ #34 : Апрель 06, 2012, 02:07:01 pm »
Да. Именно поэтому в Java у класса Object (от которого наследуются все остальные) есть метод int hashCode().
Угу, а в C# она int System.Object.GetHashCode().

DIzer

  • Гость
Re: Ассоциативный контейнер в оберонах
« Ответ #35 : Апрель 06, 2012, 02:07:04 pm »


Это не обязательно должно быть прошито в языке, можно используя другие механизмы это реализовать. Гм. Ну, например в этот контейнер передавать не только объекты, но и функцию которая из них будет делать хэш. В принципе, тут и наследование не особо нужно.
Мало... нужно иметь в языке обобщенный указатель (для определения типа ячейки в ассоциативном  массиве совместимого по присваиванию с произвольным типизированным указателем) - в КП есть AnyPtr - а в простых Оберонах вроде нет - может кто поправит?

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Ассоциативный контейнер в оберонах
« Ответ #36 : Апрель 06, 2012, 02:12:09 pm »


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

DIzer

  • Гость
Re: Ассоциативный контейнер в оберонах
« Ответ #37 : Апрель 06, 2012, 02:17:54 pm »
Нужно. Но это уже существенно меньшая проблема.
Почему если  его нет (как и других специализированных средств - например , нетипизированного указателя) - остается только шаболон с  использованием общего предка (а уж вшит он в ЯП или нет... вопрос конкретного ЯП) или я ошибаюсь?

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Ассоциативный контейнер в оберонах
« Ответ #38 : Апрель 06, 2012, 02:22:26 pm »
Но возникает проблема - в Обероне нет множественного наследования. Ни множественного наследования реализаций, ни интерфейсов. Поэтому если у типа есть еще какое-то свойство (Drawable например), то придется либо Hashable наследовать от Drawable, либо наоборот. И то и другое смотрится как-то искусственно.

Множественное наследование всегда можно сделать вручную (как в C ;)
Object.QueryInterface() - и вперед.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Ассоциативный контейнер в оберонах
« Ответ #39 : Апрель 06, 2012, 02:26:45 pm »
Но возникает проблема - в Обероне нет множественного наследования. Ни множественного наследования реализаций, ни интерфейсов. Поэтому если у типа есть еще какое-то свойство (Drawable например), то придется либо Hashable наследовать от Drawable, либо наоборот. И то и другое смотрится как-то искусственно.

Множественное наследование всегда можно сделать вручную (как в C ;)
Object.QueryInterface() - и вперед.
Приведи на Обероне реализацию, плиз. Object.QueryInterface это ж вроде как ни разу не Си, это С++.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re: Ассоциативный контейнер в оберонах
« Ответ #40 : Апрель 06, 2012, 02:31:42 pm »
Далее.. функцию хэширования в примитивном случае нам передавать не нужно... достаточно передать указатель на валидный объект - и ЗНАЧЕНИЕ возвращаемое этой функцией(только для односторонне ассоциативного массива) - в этом случае наш контейнер будет отличаться от обычного массива указателя лишь действиями по разрешению коллизий...

DIzer

  • Гость
Re: Ассоциативный контейнер в оберонах
« Ответ #41 : Апрель 06, 2012, 02:35:10 pm »
Ну и наконец ... можно использовать "встроенную" хэш - функцию общего вида (например CRC32 кодирование, со всеми "прелестями" такой методы) - хэшировать ВЕСЬ обьект.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Ассоциативный контейнер в оберонах
« Ответ #42 : Апрель 06, 2012, 02:48:29 pm »
Ну и наконец ... можно использовать "встроенную" хэш - функцию общего вида (например CRC32 кодирование, со всеми "прелестями" такой методы) - хэшировать ВЕСЬ обьект.
Что бы хешировать весь объект тебе нужно иметь возможность получить оный объект в виде куска памяти/массива байтиков. А в обероне такой возможности нет.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re: Ассоциативный контейнер в оберонах
« Ответ #43 : Апрель 06, 2012, 02:49:59 pm »
Правда тогда нужно передавать помимо указателя  размер- в оберонах это не прокатит (без использования систем), вроде бы.

DIzer

  • Гость
Re: Ассоциативный контейнер в оберонах
« Ответ #44 : Апрель 06, 2012, 02:50:42 pm »
 :) да вы успели запостить раньше чем я  :)