2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу Пред.  1, 2, 3  След.
 
 
Сообщение12.02.2009, 07:39 
вздымщик Цыпа писал(а):
Если владелец умный, то он будет искать вменяемых программеров, которые по ногам не стреляют.
Я давно подозревал, что у Вас работают исключительно вменяемые программеры.

Добавлено спустя 28 минут 27 секунд:

Андрей АK писал(а):
Я думаю, что из попытки избавиться от указателей и возникла технология COM и далее визуал языки.
Технология COM возникла как средство/среда компонентного программирования. Основная ее особенность - бинарный формат объектов, интерфейс IUnknown и т.п. Подсчет ссылок тут не главное.
Визуальные языки возникли как удобное средство создания GUI с помощью компонент. В VB компоненты - это COM, в Delphi - VCL.
Язык, в котором указателей нет из принципиальных соображений, - это прежде всего Java, к COM отношения не имеющий.

Андрей АK писал(а):
Для замены ссылок пришлось придумывать "интерфейсы"...
В Java нет указателей, но есть ссылки. Интерфейсы тут ни при чем.

 
 
 
 
Сообщение12.02.2009, 10:21 
Yuri Gendelman писал(а):
Технология COM возникла как средство/среда компонентного программирования. Основная ее особенность - бинарный формат объектов, интерфейс IUnknown и т.п. Подсчет ссылок тут не главное.

Имено что главное - ничего кроме подсчёта ссылок IUnknown делать не умеет - отсюда и вывод (по Фрейду) о первоначальной задумке программеров, куда его потом втулили это уже дело десятое.

Yuri Gendelman писал(а):
Язык, в котором указателей нет из принципиальных соображений, - это прежде всего Java, к COM отношения не имеющий.

В Java нет указателей, но есть ссылки. Интерфейсы тут ни при чем.

Ха !
в Java как раз всё построено на интерфейсах.
Там даже элементарные типы данных имеют в своей основе тип Object - для того чтоб можно было использовать интерфейс IObject (или как он там называется) к числам да строкам (напрмер вызывать функцию tostring).
Интерфейсы - это фундамент Java - этот механизм удачно спёрли у COM-технологии и конечно это не COM, но это её клон ... причём такой в котором интерфейсная идеология возведена в абсолют.

 
 
 
 
Сообщение12.02.2009, 14:09 
Андрей АK писал(а):
Yuri Gendelman писал(а):
Андрей АK писал(а):
Для замены ссылок пришлось придумывать "интерфейсы"...
В Java нет указателей, но есть ссылки. Интерфейсы тут ни при чем.
Ха !
в Java как раз всё построено на интерфейсах.
Ха !
Я Вам пишу, что В Java интерфейсы не заменяют ссылки, А Вы отвечаете (по Фрейду?), что интерфейсы есть.

Андрей АK писал(а):
ничего кроме подсчёта ссылок IUnknown делать не умеет.
Так Вы про QueryInterface() ничего не знаете?

Тогда дальше не интересно.

 
 
 
 
Сообщение12.02.2009, 14:32 
Если уж на то пошло, то существуют и более древние языки безо всяких указателей и со сборкой мусора вместо явного управления памятью...
Тот же LISP...

 
 
 
 
Сообщение12.02.2009, 14:38 
Yuri Gendelman писал(а):
Я Вам пишу, что В Java интерфейсы не заменяют ссылки, А Вы отвечаете (по Фрейду?), что интерфейсы есть.

То что вы называете ссылками - это и есть интерфейсы.
В Java все ссылки представляют собой ссылки на объект - т.е. указатель точки входа (интерфейса) для доступа к объекту.

Yuri Gendelman писал(а):
Так Вы про QueryInterface() ничего не знаете?
Тогда дальше не интересно.

Это то-же самое что на фразу: "Цистерна с молоком перевозит только молоко" ответить: "неправильно: ещё и водителя цистерны".
Не занимайтесь демагогией - водитель сам по себе - груз сам по себе.

 
 
 
 
Сообщение12.02.2009, 16:32 
Андрей АK писал(а):
в Java как раз всё построено на интерфейсах.


Андрей АК, помойму вы пытаетесь прикрыть своё незнание предмета громкими заявлениями.

Андрей АK писал(а):
Там даже элементарные типы данных имеют в своей основе тип Object


Ложное утверждение. Элементарные типы данных в Java не являются объектами (в частности передаются по значению).
В Java 5 был введён autoboxing, но примитивные типы как были примитивными, так и остались.

Андрей АK писал(а):
Интерфейсы - это фундамент Java - этот механизм удачно спёрли у COM-технологии и конечно это не COM, но это её клон ...


Ложное утверждение. Если вы бы имели хоть какое-то представление об истории языков программирования или хотя бы заглянули в Википедию, то поняли бы, что корни Java лежат в языках родившихся за долго до COM. Фактически Java --- это почти-почти Modula-3 с сишным синтаксисом... Вообще сравнивать COM и Java совершенно некорректно. Ключевой составляющей COM является бинарный стандрт, накладывающий строгие ограничения на представление объектов в памяти. Стандарт Java таких ограничений не накладывает (накладываются только семантические и синтаксические ограничения). Более того, COM создан с целью облегчить взаимодействия программ написанных на разных языках, дать возможность заменять отдельные компоненты... Java была создана совершенно с другими целями и свойств COM не разделяет. Вы не можете взять Java class и прозрачно вставить его туда, где раньше использовался C++ класс. Вы не можете легко проделать обратную процедуру... Вы не можете объявить, что ваш С++ класс наследует от Java интерфейса и т.д. и т.п.. Если уж на то пошло, то можно сказать, что JNI и Invocation API в чем-то похожи на COM, но не больше...

Далее, назвать семантические ограничения налагаемые стандартом COM на (COM)интерфейсы чем-то новаторским нельзя. Это просто явная формализация требований, которые гарантируются объектными моделями любого ОО ЯП. Необходимость в явном постулировании таких требованиях следует из того, что COM-интерфейсы могут создаваться вручную на низком уровне (на языках С или даже на ассемблере), в то время как в ОО ЯП за соблюдение объектной модели отвечает компилятор... Тот же QueryInterface есть ничто иное как "каст", приведение типов. операция появивщаяся задолго до COM.

 
 
 
 
Сообщение12.02.2009, 18:59 
mr.Aleph писал(а):
Андрей АK писал(а):
Там даже элементарные типы данных имеют в своей основе тип Object


Ложное утверждение. Элементарные типы данных в Java не являются объектами (в частности передаются по значению).

И о чём это говорит?
А почему объекты не могут передаваться по значению?
Раз передаются по значению, то уже не объекты?
ЛЮБОЙ тип данных JAVA наследует от Object и этим всё сказано - идите читайте учебники.

mr.Aleph писал(а):
Андрей АK писал(а):
Интерфейсы - это фундамент Java - этот механизм удачно спёрли у COM-технологии и конечно это не COM, но это её клон ...


Ложное утверждение. Если вы бы имели хоть какое-то представление об истории языков программирования или хотя бы заглянули в Википедию, то поняли бы, что корни Java лежат в языках родившихся за долго до COM. Фактически Java --- это почти-почти Modula-3 с сишным синтаксисом... Вообще сравнивать COM и Java совершенно некорректно. Ключевой составляющей COM является бинарный стандрт, накладывающий строгие ограничения на представление объектов в памяти. Стандарт Java таких ограничений не накладывает (накладываются только семантические и синтаксические ограничения). Более того, COM создан с целью облегчить взаимодействия программ написанных на разных языках, дать возможность заменять отдельные компоненты... Java была создана совершенно с другими целями и свойств COM не разделяет.

Это вы неправильно себе представляете суть интерфейса - интерфейс это не бинарный стандарт не способ реализации и не что-то осязаемое.
Интерфейс - это такая-же абстракция как цикл, функция, переменная и т.д.
Конкретная реализация, в частности "строгие ограничения на представление объектов в памяти", не имеет к этой абстракции никакого отношения.

mr.Aleph писал(а):
Вы не можете взять Java class и прозрачно вставить его туда, где раньше использовался C++ класс. Вы не можете легко проделать обратную процедуру... Вы не можете объявить, что ваш С++ класс наследует от Java интерфейса и т.д. и т.п.. Если уж на то пошло, то можно сказать, что JNI и Invocation API в чем-то похожи на COM, но не больше...

Ну вот , а здесь вы путаете С++ класс с COM-обьектом.
И ,к стати, - классы от интерфейса не наследуют - интерфейс это всего лишь список функций.

Что до связи Java-COM то тут нет никаких проблем все они взаимозаменяемы, я сам писал программу, где в C++ коде использовал JAVA-интерфейс, а в JAVA программе получал данные из COM-объекта.

mr.Aleph писал(а):
Далее, назвать семантические ограничения налагаемые стандартом COM на (COM)интерфейсы чем-то новаторским нельзя. ...

Новаторство не в семантических ограничениях (или что вы там под этой фразой понимаете) - новаторство в самой идее отделения описания доступа к объекту от конкретной реализации.
Т.е. в появлении новой абстракции программирования.
Возможно у этой идеи были какие-то предшественники (я даже могу ещё нескольких назвать ,помимо упомянутых, - например - в электронике появление интерфейсов породило современный вид персональных компьютеров) ... но никакой революции они в программировании не совершили (ведь появление персональных компьютеров к программированию не относится).
А COM-интерфейсы породили новое поколение языков - визуал языки программирования.

(И и не надо теперь рассказывать о различии в реализации JAVA-интерфейсов и интерфейсов электронных плат - как я уже сказал - интерфейс - это математическая абстракция, а не конкретная реализация)

 
 
 
 
Сообщение12.02.2009, 19:21 
Андрей АK писал(а):
И о чём это говорит?
А почему объекты не могут передаваться по значению?
Раз передаются по значению, то уже не объекты?
ЛЮБОЙ тип данных JAVA наследует от Object и этим всё сказано - идите читайте учебники.


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

mr.Aleph писал(а):
Андрей АK писал(а):
Интерфейсы - это фундамент Java - этот механизм удачно спёрли у COM-технологии и конечно это не COM, но это её клон ...


Ложное утверждение. Если вы бы имели хоть какое-то представление об истории языков программирования или хотя бы заглянули в Википедию, то поняли бы, что корни Java лежат в языках родившихся за долго до COM. Фактически Java --- это почти-почти Modula-3 с сишным синтаксисом... Вообще сравнивать COM и Java совершенно некорректно. Ключевой составляющей COM является бинарный стандрт, накладывающий строгие ограничения на представление объектов в памяти. Стандарт Java таких ограничений не накладывает (накладываются только семантические и синтаксические ограничения). Более того, COM создан с целью облегчить взаимодействия программ написанных на разных языках, дать возможность заменять отдельные компоненты... Java была создана совершенно с другими целями и свойств COM не разделяет.


Андрей АK писал(а):
Это вы неправильно себе представляете суть интерфейса - интерфейс это не бинарный стандарт не способ реализации и не что-то осязаемое.

Интерфейс - это такая-же абстракция как цикл, функция, переменная и т.д.
Конкретная реализация, в частности "строгие ограничения на представление объектов в памяти", не имеет к этой абстракции никакого отношения.


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


Андрей АK писал(а):
Ну вот , а здесь вы путаете С++ класс с COM-обьектом.


Что с чем я простите путаю? С чего вы взяли?

Андрей АK писал(а):
И ,к стати, - классы от интерфейса не наследуют - интерфейс это всего лишь список функций.


Верное замечание, формально классы интерфейсы реализуют, но в C++ нет выделенного отношения реализации (там интерфейсы не выделены явно, в отличие от Java), поэтому я употребил слово наследует.

Андрей АK писал(а):
Что до связи Java-COM то тут нет никаких проблем все они взаимозаменяемы, я сам писал программу, где в C++ коде использовал JAVA-интерфейс, а в JAVA программе получал данные из COM-объекта.


Мммм, это дело случайно не на каком нибудь Microsoft J# было? Там конечно Microsoft позаботилась о том, чтобы было легко производить такие вещи, как прозрачное использование COM интефейсов в Java коде...
Но вообще в стандартной Java требуются дополнительные усилия... Собственно строго говоря для произвольной JVM раскладка Java-объекта в памяти не обязана удовлетворяет стандарту COM и поэтому Java объект не может быть использован как COM-объект (верно и обратное). Вот о чем я вам толкую.

Андрей АK писал(а):
Новаторство не в семантических ограничениях (или что вы там под этой фразой понимаете) - новаторство в самой идее отделения описания доступа к объекту от конкретной реализации.
Т.е. в появлении новой абстракции программирования.


Это не новаторство. Эти концепции уже были в 80 годах, за 13 лет до COM...

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

 
 
 
 
Сообщение12.02.2009, 20:30 
mr.Aleph писал(а):
Андрей АK писал(а):
Что до связи Java-COM то тут нет никаких проблем все они взаимозаменяемы, я сам писал программу, где в C++ коде использовал JAVA-интерфейс, а в JAVA программе получал данные из COM-объекта.


Мммм, это дело случайно не на каком нибудь Microsoft J# было? Там конечно Microsoft позаботилась о том, чтобы было легко производить такие вещи, как прозрачное использование COM интефейсов в Java коде...
Но вообще в стандартной Java требуются дополнительные усилия... Собственно строго говоря для произвольной JVM раскладка Java-объекта в памяти не обязана удовлетворяет стандарту COM и поэтому Java объект не может быть использован как COM-объект (верно и обратное). Вот о чем я вам толкую.

А вспомнил (давно это было) ... немного не так я делал.
(Всё в классическом JAVA)
Короче, я подключал к JAVA программе C++ DLL совместимую с JAVA (но общались они через общий интерфейс, объявленный через IDL) - но кроме того что это была JAVA-совместимая DLL - у неё присутствовал свой COM-объект, и таким образом JAVA-программа приобретала свой COM-интерфейс.
(Зачем-то это понадобилось ... уже не помню.)
Но смысл в том, что с одной стороны JAVA воспринимает некий интерфейс как точку входа в свой класс ... который на самом деле реализован на С++, и в то-же время си-шная программа так-же само общается с неким интерфейсом - не зная, что на другом конце сидит JAVA.
(Т.е. связь есть, а реализован в этом интерфейсе IUnknown или нет - дело десятое)

Что до остального то я вовсе не утверждал, что COM и JAVA это одно и то-же - я говорил о том, что в обеих случаях используется идея интерфейсов (принцип чёрного ящика - разделения свойств и реализации) и что ,приоритет в этом отношении, у COM.

 
 
 
 
Сообщение13.02.2009, 09:37 
Отделение интерфейса от реализации появилось как минимум еще в Си, на уровне .c и .h файлов. И если этим механизмом пользоваться правильно, проблем с разделением в 99,9 случаев не возникает.

 
 
 
 
Сообщение13.02.2009, 13:06 
Тут не то чтоб отделение интерфейса от реализации ... а именно понятие интерфейса - как самостоятельной категории.
То-что было раньше - это наследование виртуальных классов... немного не то.
А я имел ввиду - чистую абстракцию - описание входа-выхода как некий самостоятельный объект, как новый тип данных - называется интерфейс, он отдельно хранится , присваивается ,подвергается манипуляциям.
Т.е. есть переменные типа строк, типа чисел, а есть типа интерфейс.

 
 
 
 
Сообщение13.02.2009, 14:02 
Цитата:
А я имел ввиду - чистую абстракцию - описание входа-выхода как некий самостоятельный объект, как новый тип данных - называется интерфейс, он отдельно хранится , присваивается ,подвергается манипуляциям.
Т.е. есть переменные типа строк, типа чисел, а есть типа интерфейс.

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

 
 
 
 
Сообщение13.02.2009, 14:24 
Например, само объявление интерфейса происходит независимо от всего - как будто объявляется тип данных - так-же можно понимать и его реализацию в объектах - как реализацию какого-то типа данных.
Дальше, я могу создать переменную типа ... интерфейс! и указать нужный мне для работы... затем присвоить этой переменой объект! ,у которого в списке реализованных интерфейсов есть и требуемый, и с этого момента переменная превращается в канал доступа к этому объекту при помощи того самого интерфейса.
Ну и т.д.
Это в интерфейсно-ориентированых языках (VB, JAVA ...) но и у COM есть объект под названием typelybrary - в котором хранится описание интерфейсов - его можно скопировать, переслать, проинсталлировать в среду ... т.е. это чисто отдельная самостоятельная абстракция (но имеющая конкретное воплощение).

 
 
 
 
Сообщение13.02.2009, 14:36 
Цитата:
Например, само объявление интерфейса происходит независимо от всего - как будто объявляется тип данных - так-же можно понимать и его реализацию в объектах - как реализацию какого-то типа данных.
Дальше, я могу создать переменную типа ... интерфейс! и указать нужный мне для работы... затем присвоить этой переменой объект! ,у которого в списке реализованных интерфейсов есть и требуемый, и с этого момента переменная превращается в канал доступа к этому объекту при помощи того самого интерфейса.

По-моему, механизм наследования и ссылок в Си++ (ну и сопутствующие, типа динамического приведения типов) как раз и разработаны ради того, что Вы описали.

 
 
 
 
Сообщение13.02.2009, 14:54 
e2e4 писал(а):
По-моему, механизм наследования и ссылок в Си++ (ну и сопутствующие, типа динамического приведения типов) как раз и разработаны ради того, что Вы описали.

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

 
 
 [ Сообщений: 32 ]  На страницу Пред.  1, 2, 3  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group