2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3  След.
 
 
Сообщение12.02.2009, 07:39 
Заслуженный участник


15/05/05
3445
USA
вздымщик Цыпа писал(а):
Если владелец умный, то он будет искать вменяемых программеров, которые по ногам не стреляют.
Я давно подозревал, что у Вас работают исключительно вменяемые программеры.

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

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

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

 Профиль  
                  
 
 
Сообщение12.02.2009, 10:21 


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

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

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

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

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

 Профиль  
                  
 
 
Сообщение12.02.2009, 14:09 
Заслуженный участник


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

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

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

 Профиль  
                  
 
 
Сообщение12.02.2009, 14:32 


01/02/09
7
Если уж на то пошло, то существуют и более древние языки безо всяких указателей и со сборкой мусора вместо явного управления памятью...
Тот же LISP...

 Профиль  
                  
 
 
Сообщение12.02.2009, 14:38 


19/11/08
347
Yuri Gendelman писал(а):
Я Вам пишу, что В Java интерфейсы не заменяют ссылки, А Вы отвечаете (по Фрейду?), что интерфейсы есть.

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

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

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

 Профиль  
                  
 
 
Сообщение12.02.2009, 16:32 


01/02/09
7
Андрей А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 


19/11/08
347
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 


01/02/09
7
Андрей А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 


19/11/08
347
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 


21/03/06
1545
Москва
Отделение интерфейса от реализации появилось как минимум еще в Си, на уровне .c и .h файлов. И если этим механизмом пользоваться правильно, проблем с разделением в 99,9 случаев не возникает.

 Профиль  
                  
 
 
Сообщение13.02.2009, 13:06 


19/11/08
347
Тут не то чтоб отделение интерфейса от реализации ... а именно понятие интерфейса - как самостоятельной категории.
То-что было раньше - это наследование виртуальных классов... немного не то.
А я имел ввиду - чистую абстракцию - описание входа-выхода как некий самостоятельный объект, как новый тип данных - называется интерфейс, он отдельно хранится , присваивается ,подвергается манипуляциям.
Т.е. есть переменные типа строк, типа чисел, а есть типа интерфейс.

 Профиль  
                  
 
 
Сообщение13.02.2009, 14:02 


21/03/06
1545
Москва
Цитата:
А я имел ввиду - чистую абстракцию - описание входа-выхода как некий самостоятельный объект, как новый тип данных - называется интерфейс, он отдельно хранится , присваивается ,подвергается манипуляциям.
Т.е. есть переменные типа строк, типа чисел, а есть типа интерфейс.

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

 Профиль  
                  
 
 
Сообщение13.02.2009, 14:24 


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

 Профиль  
                  
 
 
Сообщение13.02.2009, 14:36 


21/03/06
1545
Москва
Цитата:
Например, само объявление интерфейса происходит независимо от всего - как будто объявляется тип данных - так-же можно понимать и его реализацию в объектах - как реализацию какого-то типа данных.
Дальше, я могу создать переменную типа ... интерфейс! и указать нужный мне для работы... затем присвоить этой переменой объект! ,у которого в списке реализованных интерфейсов есть и требуемый, и с этого момента переменная превращается в канал доступа к этому объекту при помощи того самого интерфейса.

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

 Профиль  
                  
 
 
Сообщение13.02.2009, 14:54 


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

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

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

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



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

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


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

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group