OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 23 Август, 2019 01:37

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




Начать новую тему Ответить на тему  [ Сообщений: 69 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Re: есть ли ООП в Обероне-07
СообщениеДобавлено: Вторник, 18 Октябрь, 2016 21:46 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2355
Comdiv писал(а):
Для меня лично вопрос возможности ООП в Обероне и его отображения на Си - вопрос сугубо практический. И если люди высказывают ошибочные утверждения, не вижу причин не поправить, так как на основе таких утверждений нередко решения принимаются. Обратите внимание, что речь как раз идёт не о машинном уровне.

Вдумайтесь в фразу
«расслоение функциональности динамических структур между модулями»
Вирт разделил классы на уровне модулей через сокрытие. Я так это понял. А в Си нет модулей.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: есть ли ООП в Обероне-07
СообщениеДобавлено: Вторник, 18 Октябрь, 2016 22:09 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 882
Откуда: Киев
Иван Денисов писал(а):
Вирт разделил классы на уровне модулей через сокрытие. Я так это понял. А в Си нет модулей.

В языке - нет, но это не является непреодолимым препятствием для использования модулей в Си. Взгляните на пример, который я приводил в заметке по ссылке, там показано как разделить классы на уровне файлов через сокрытие схожим с Обероном способом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: есть ли ООП в Обероне-07
СообщениеДобавлено: Вторник, 18 Октябрь, 2016 23:33 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2355
Comdiv писал(а):
Иван Денисов писал(а):
Вирт разделил классы на уровне модулей через сокрытие. Я так это понял. А в Си нет модулей.

В языке - нет, но это не является непреодолимым препятствием для использования модулей в Си. Взгляните на пример, который я приводил в заметке по ссылке, там показано как разделить классы на уровне файлов через сокрытие схожим с Обероном способом.

Там только показано как сделать абстрактные классы через функциональные переменные и потом установить их реализацию через указатели. Абстрактные классы нужны далеко не всегда. В модульном подходе не обязательно делать абстракцию, чтобы обеспечить изоляцию классов. А в Си это, на сколько я помню со своего первого курса в универе, это невозможно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: есть ли ООП в Обероне-07
СообщениеДобавлено: Среда, 19 Октябрь, 2016 00:14 
Аватара пользователя

Зарегистрирован: Пятница, 23 Май, 2008 09:24
Сообщения: 32
Откуда: Барнаул
prospero78 писал(а):
Т.е. аналогию с методами, где ссылка на класс указывается перед именем процедуры, и просто процедурой, где ссылка на экземпляр передаётся явно первым членом


У вас просто примитивный пример ООП перед глазами, и вы сводите вызов метода до синтаксически посахарённого вызова процедуры. А как методу вызвать следующий метод? В примитивных моделях это метод, унаследованный от родителя, а в общем случае после линеаризации классов это может оказаться метод, переопределённый в другом предке общего потомка. Реализация ООП отвечает и за обнаружение точки входа, и за обнаружение последующих адресов, куда нужно передавать управление.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: есть ли ООП в Обероне-07
СообщениеДобавлено: Среда, 19 Октябрь, 2016 00:57 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 882
Откуда: Киев
Иван Денисов писал(а):
Там только показано как сделать абстрактные классы через функциональные переменные и потом установить их реализацию через указатели. Абстрактные классы нужны далеко не всегда. В модульном подходе не обязательно делать абстракцию, чтобы обеспечить изоляцию классов. А в Си это, на сколько я помню со своего первого курса в универе, это невозможно.
Описанный подход работает и без полиморфизма. Содержимое структуры недоступно вне файла-"модуля", но внутри него - нет ограничения на доступ. Чем не "no paranoia rule"? Главное отличие от Оберона в том, что нельзя половинчато скрывать содержимое структуры и необходимость обязательной работы через указатель.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: есть ли ООП в Обероне-07
СообщениеДобавлено: Среда, 19 Октябрь, 2016 06:33 

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 714
Откуда: Барнаул
Илья Ермаков писал(а):
Kemet писал(а):
В общем, следуя подобной логике, Си тоже объектно-ориентированный яп.


А где:
1) Расширение типов?
2) Полиморфизм (без void*) и селекция по типу? (что невозможно, кстати, без метаинформации)

Исходя из основного посыла: Оберон - Во!, ХХХ - Фу!, используя метод реверсивной психологии, приходим к пониманию того факта, что если что-то хорошо для Оберона, то тоже самое вполне хорошо и для Си. Если закат солнца вручную хорош для Оберона, то он, как минимум, не плох и для Си. Не поддерживается расширения структур? Не беда, Используем агрегированный указатель, в конкретныо реализации указывающий на требуемый тип структуры, нет тегов, не беда, испольщзуем поле в структуре ( int id, например ). Полиморфизм с указателями на "методы" вполне себе катит ибо вполне работает. Здесь ведь вот какое дело - на Си пишут не только ОО фреймворки, но и объектно-ориентированные Операционные системы. Во как. Исходя из таких посылов можно тоже сказать, что Си - это объектно-ориентированный язык программирования, как и Оберон-07. Блин, да даже на ассемблере пишут объектно-ориентированные ОС. Правда в тех ассемблерах есть некие высокоуровневые средства, да, но всё-же...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: есть ли ООП в Обероне-07
СообщениеДобавлено: Среда, 19 Октябрь, 2016 06:42 

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 714
Откуда: Барнаул
prospero78 писал(а):
...

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: есть ли ООП в Обероне-07
СообщениеДобавлено: Среда, 19 Октябрь, 2016 09:06 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2355
Comdiv писал(а):
Иван Денисов писал(а):
Там только показано как сделать абстрактные классы через функциональные переменные и потом установить их реализацию через указатели. Абстрактные классы нужны далеко не всегда. В модульном подходе не обязательно делать абстракцию, чтобы обеспечить изоляцию классов. А в Си это, на сколько я помню со своего первого курса в универе, это невозможно.
Описанный подход работает и без полиморфизма. Содержимое структуры недоступно вне файла-"модуля", но внутри него - нет ограничения на доступ. Чем не "no paranoia rule"? Главное отличие от Оберона в том, что нельзя половинчато скрывать содержимое структуры и необходимость обязательной работы через указатель.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: есть ли ООП в Обероне-07
СообщениеДобавлено: Среда, 19 Октябрь, 2016 09:31 
Аватара пользователя

Зарегистрирован: Воскресенье, 12 Апрель, 2015 18:12
Сообщения: 1113
Откуда: СССР v2.0 rc 1
Иван Денисов писал(а):
Извернуться то можно как-то при желании и написать в ООП на Си или на Ассемблере.
Речь идет именно о наличие поддержки со стороны языка данного стиля.

Совершенно верно, Вань.
ОО программу (и даже ОС) можно написать хоть на ассемблере. Только от этого ассемблер не станет поддерживать ООП.
В конечном итоге, мы всегда имеем дело с объектами: ячейки памяти, файлы, поверхность отрисовки. Всё есть объекты.
Но что знает ячейка памяти, или ссылка на ячейку памяти о типе?
И в этом отношении Си никогда не обладал ООП-поддержкой, адресная арифметика просто ломает строгую типизацию.
Таким образом получается, что с одной стороны в Си есть структуры и элементарные типы, но нет строгой типизации.
В python есть классы, но опять же никакой типизации. Как тут не помянуть Илью Ермакова с его тезисом № 1 "Типизация наше всё".
А как процедуры будут привязаны к расширяемым записям.... Это вообще дело десятое.
В ветке по дорасчёту две страницы потребовалось по property, чтобы у одного человека наступило просветление, что есть два разных понятия: семантика и типизация.
Передача в property другого типа поломает семантику, но никак не ломает типизацию.
Неявно сама по себе напрашивалась мысль, что перегрузка операторов точно также ломает семантику (без поломки типизации).
Но до этого обсуждения в той теме дело не дошло)))
Так вот затрону здесь: а какой смысл в том, что перегружать операторы? Усложнить компилятор?
Повыпендриваться, мол какой я умный, как у у меня всё не как у всех? А что крамольного в том, чтобы написать a.Add(b)? Неужели это на столько страшно смотрится?
А аргумент про как пользовать переопределённые или перегруженные методы -- это вообще непонятно зачем.
Неужели фантазия на столько бедна у программистов, что нельзя ну никак обозначить метод по другому? Надо обязательно одинаковыми именами?)))
И как бонус к такому подходу получаем упрощение компилятора, а это значит повышение надёжности!!
А не надёжность ли является священным граалем программиста?
Ну, и простите, синтаксис и хэдеры в Си и им подобных (даже с наличием ООП) отвращают брать в руки подобные инструменты.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: есть ли ООП в Обероне-07
СообщениеДобавлено: Среда, 19 Октябрь, 2016 12:45 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 882
Откуда: Киев
Иван Денисов писал(а):
Извернуться то можно как-то при желании и написать в ООП на Си или на Ассемлере..
Речь идет именно о наличие поддержки со стороны языка данного стиля.

Я повторюсь - речь идёт не о машинном уровне, где нет никакой проверки типов, а о выскоуровневой поддержке, где она есть.
Цитата:
1. Простейшее наследование объектов Интерфейс — Реализация.
2. Настоящее динамическое ООП — более одной реализации одного интерфейса могут сосуществовать в одной области видимости одновременно.
3. Содержимое объектов недоступно извне в обход методов.
4. Типизированные указатели объектов, что даёт отслеживание компилятором ошибки присваиваний между разными интерфейсами.
5. Чистый Си без дополнительных библиотек и магии макросов.


Иван Денисов писал(а):
В Обероне-07 есть скромная и сдержанная поддержка этого подхода, а в вашем примере, уж извините, но со стороны языка нет поддержки.
Создатели Си вряд ли её закладывали, тем не менее минимальная поддержка есть.

Цитата:
Через указатели эдак, что хочешь можно сделать, лишь бы проверка типов была.

ООП в Java через указатели - это не считается? Суть ООП-то не в том. В Обероне - так, в Си - эдак, что же тут такого? В Си менее удобно, в Обероне - более, в Компонентном Паскале - ещё удобней.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: есть ли ООП в Обероне-07
СообщениеДобавлено: Среда, 19 Октябрь, 2016 12:47 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2355
Comdiv, пожалуйста, вспомните зачем вы завели разговор про Си. На мой взгляд, вы немного отклонились от темы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: есть ли ООП в Обероне-07
СообщениеДобавлено: Среда, 19 Октябрь, 2016 12:50 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 882
Откуда: Киев
Я не заводил разговор о Си, я избавил от заблуждений о Си, высказанных другими участниками. Также это полезно для того, чтобы определить границу того, что считать поддержкой ООП.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: есть ли ООП в Обероне-07
СообщениеДобавлено: Среда, 19 Октябрь, 2016 12:57 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 882
Откуда: Киев
Многие, так или иначе, имеют дело с Си, и если я кому-то сумел показать, как можно применить схему, приближенную к Оберону в коде на Си, считаю это полезным.
Я открою страшный секрет, понимание Оберона помогает программировать и на Си, и на Java, и много где ещё. Я уже говорил, что возможности ООП на Обероне и их возможности отображения на Си для меня вопрос сугубо практический.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: есть ли ООП в Обероне-07
СообщениеДобавлено: Четверг, 20 Октябрь, 2016 09:18 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9133
Откуда: Россия, Орёл
Comdiv писал(а):
Я повторюсь - речь идёт не о машинном уровне, где нет никакой проверки типов, а о выскоуровневой поддержке, где она есть.


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

Вообще, такой стиль, какой Вы показали, встречается в ряде библиотек (Кемет тут и про ОС говорил).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: есть ли ООП в Обероне-07
СообщениеДобавлено: Четверг, 20 Октябрь, 2016 09:20 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2355
А я вот что-то не могу в Обероне-07 найти WITH...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: есть ли ООП в Обероне-07
СообщениеДобавлено: Четверг, 20 Октябрь, 2016 09:29 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9133
Откуда: Россия, Орёл
CASE по типу.
Ну, просто IS, короче.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: есть ли ООП в Обероне-07
СообщениеДобавлено: Четверг, 20 Октябрь, 2016 11:33 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 882
Откуда: Киев
Илья Ермаков писал(а):
Comdiv писал(а):
Я повторюсь - речь идёт не о машинном уровне, где нет никакой проверки типов, а о выскоуровневой поддержке, где она есть.

Ну а обеспечьте ещё возможность WITH. Вы просто будете вынуждены написать обероновский Кернел в миниатюре - теги типа и проч., при этом уже не уверен, что Вы хорошо это защитите от неверного использования.
Я проделывал это, и это решение достаточно защищённое и не требует жирных функций, но, как я уже говорил, я бы не стал применять его широко в Си. У меня есть подозрения, что и в Обероне не стоит увлекаться иерархиями.

Илья Ермаков писал(а):
Вообще, такой стиль, какой Вы показали, встречается в ряде библиотек (Кемет тут и про ОС говорил).

Буду благодарен, если укажите на библиотеки, где применён такой стиль, ОС тоже интересны.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: есть ли ООП в Обероне-07
СообщениеДобавлено: Четверг, 20 Октябрь, 2016 12:10 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9133
Откуда: Россия, Орёл
Не вспомню точно, где видел.

По-моему, FreeImage. Но в паре библиотек, с которыми биндились в последние 5 лет, такое было.

Когда у библиотеки процедурный API, но handle сущности реально указатель на структуру с процедурными полями (т.е. ООП внутри самой библиотеки, в реализации).

Да, кстати, вон GTK же устроен подобным образом, не?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: есть ли ООП в Обероне-07
СообщениеДобавлено: Четверг, 20 Октябрь, 2016 16:00 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 882
Откуда: Киев
В GTK защита организована следующим образом
Код:
/**
 * All the fields in the GObject structure are private
 * to the #GObject implementation and should never be accessed directly.
 */

Я смотрел на GTK поверхностно, но создаётся впечатление, что там всё совершенно не так. Сложно и ненадёжно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: есть ли ООП в Обероне-07
СообщениеДобавлено: Четверг, 20 Октябрь, 2016 17:27 

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 714
Откуда: Барнаул
Object-oriented programming with ANSI-C ( pdf )
Object-Oriented Programming In C
Overview of the C Object System. Using C as an high-level object-oriented language


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

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


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

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


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

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