Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JAVA или .NET ? обсуждаем достоинства и недостатки 
:(
    Опции темы
Allexx
Дата 3.2.2004, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 16.12.2003

Репутация: нет
Всего: нет




M
mr.DUDA
Вопросы, мнения и просто свои мысли по поводу особенностей платформы .NET в сравнении с JAVA можно обсудить в этой теме. В любых других темах замечания типа "JAVA (или .NET) круче!" будут являться оффтопом, даже в том случае, если они аргументированы :).

P.S. аналогичная тема есть в разделе по JAVA.

PM MAIL   Вверх
mr.DUDA
Дата 7.4.2005, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(Domestic @ 7.4.2005, 10:20)
Для меня отличие в том, что я понимаю листенеры полностью; а вот что же передается делегату - загадка  То есть, все-таки это не Питон, где можно определить функцию function , а потом писать x = function, в .НЕТ же явно указатели на методы нельзя пользовать.


Делегату (как методу) передаётся вызов с заданными аргументами. Внутри себя делегат (как класс) перечисляет подписчиков и вызывает каждого из них, передавая им эти же аргументы.

Кстати, а как в JAVA добавить обработчик события, если метод-обработчик является статическим ? smile
В .net такое возможно за счёт того, что делегат (как класс) хранит в списке подписчиков не только указатель на метод, но и указатель на объект, а для статических обработчиков - только указатель на статический метод класса.


--------------------
user posted image
PM MAIL WWW   Вверх
Domestic Cat
Дата 7.4.2005, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Цитата(mr @ 7.4.2005, 01:28)
Кстати, а как в JAVA добавить обработчик события, если метод-обработчик является статическим ?


Никак, нельзя реализовывать методы интерфейса как статики smile
Но я большой разницы не вижу - ну, можно делегатом сделать статик метод. Вопрос - зачем?


--------------------

PM   Вверх
mr.DUDA
Дата 7.4.2005, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(Domestic @ 7.4.2005, 10:39)
Но я большой разницы не вижу - ну, можно делегатом сделать статик метод. Вопрос - зачем?


Может быть класс-утилита, обрабатывающая события. Его методы реализуются как public static, и всем доступны всем классам из любой точки. К примеру, класс, сохраняющий сообщения в лог-файл. Можно сделать то же самое с пом. синглетона, но если по какой-либо причине это не подходит (ну например, мне нужно чтобы файл был открыт статическим конструктором класса, а не при обращении к Instance) - то всё делается статическими методами.


--------------------
user posted image
PM MAIL WWW   Вверх
Domestic Cat
Дата 7.4.2005, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



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





--------------------

PM   Вверх
mr.DUDA
Дата 7.4.2005, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(Domestic @ 7.4.2005, 10:50)
но ведь любой делегат озбначает, что будет "за кулисами" создан целый класс.

"За кулисами" (в классе делегата) создаётся только список подписавшихся методов, и список этот размещается "публикаторе" события (делегата). Никаких требований к подписчикам не выставляется - пусть они будут хоть статическими, хоть методами объекта класса. Это я к тому, что без делегатов приходится идти окольным путём для статиков:
Цитата(Domestic @ 7.4.2005, 10:50)
Того же можно достичь, реализовав методы как инстанс методы, и из них менять статик поля - вот поля и будут доступны всем. Правда, нужно создавать объект класса




--------------------
user posted image
PM MAIL WWW   Вверх
mr.DUDA
Дата 7.4.2005, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Насчёт кроссплатформенности.

Есть в инете такая библиотека GTK+, которую портировали на C#. Вкратце, это полноценная замена System.Windows.Forms. Вместе с GTK# можно разрабатывать любые приложения для Mono, Win и любых других платформ, на которые будет переведён .NET Framework.

Теперь про JAVA... smile
Мобильники у всех есть? Игры скачивали, устанавливали? Ага, вот то-то и оно smile, оказывается J2ME-приложение может и не заработать на модели, на которую оно не было расчитано. Малочисленные "кроссплатформенные" J2ME-игры на самом деле содержат в себе кучу "примочек" для наиболее распространённых платформ, что снимает с них ярлык "кроссплатформенное приложение". Что скажут по этому поводу оппоненты из лагеря JAVA ?
smile


--------------------
user posted image
PM MAIL WWW   Вверх
batigoal
Дата 7.4.2005, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Цитата(mr @ 7.4.2005, 11:35)
на которые будет переведён .NET Framework

Я бы выделил слово БУДЕТ большими буквами smile

Цитата(mr @ 7.4.2005, 11:35)
Что скажут по этому поводу оппоненты из лагеря JAVA

Мне кажется, это недостаток производителей телефонов - плохая реализация исполняющей системы.

Это сообщение отредактировал(а) Lamer George - 7.4.2005, 11:42


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
mr.DUDA
Дата 7.4.2005, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(Lamer @ 7.4.2005, 11:41)
Мне кажется, это недостаток производителей телефонов - плохая реализация исполняющей системы.

То есть, если так рассуждать, то проблема сводится к плохой реализации JVM в данном телефоне ? Байт-код, что ли, криво выполняется ? Тогда причём тут высокоуровневые заточки, когда программеру нужно избегать использовать какие-то классы из фреймворка J2ME ?


--------------------
user posted image
PM MAIL WWW   Вверх
batigoal
Дата 7.4.2005, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Цитата(mr @ 7.4.2005, 11:47)
когда программеру нужно избегать использовать какие-то классы из фреймворка J2ME

Так не программеру нужно избегать, а производителю мобилы бороться за то, чтобы его JVM полностью соотвтствовала стандарту. Не знаю, кто пишет исполняющую среду Java для win, linux и прочих осей - разработчики операционки или Sun'овцы - но для мобильников-то наверняка производитель делает это сам. Значит, он ответственен за точное соответствие спецификации виртуальной машины.

P.S. А .NET на мобилы разве ставят?


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
mr.DUDA
Дата 7.4.2005, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(Lamer @ 7.4.2005, 11:52)
А .NET на мобилы разве ставят?

ставят, на смартфоны.


--------------------
user posted image
PM MAIL WWW   Вверх
NotGonnaGetUs
Дата 7.4.2005, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 25.2.2005
Где: Москва

Репутация: нет
Всего: 12



C мобилами есть другая проблема.
Каждый производитель создаёт собственный библиотеки, что бы предоставить те или иные доп. функции.
Естественно, если написать приложение используещее "фичи" конкретного телефона, на другом телефоне оно не заработает.

А с байт кодом всё впорядке smile

Пройдёт ещё не много времени и на телефонах можно будет смело ставить "обычную" j2se %)
PM MAIL   Вверх
arilou
Дата 7.4.2005, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Вот вы спорите-спорите, а никто так и не сказал, что обе среды просто по разному реализуют паттерн Observer. Лично мне по душе ближе реализация .NET, потому что она более слабосвязанная - на классы-публикаторы или потребители событий не накладывается никаких ограничений, т.е не надо создавать и тем более реализовывать никаких интерфейсов.



--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Domestic Cat
Дата 7.4.2005, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



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


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


--------------------

PM   Вверх
arilou
Дата 7.4.2005, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Понял, повторяя сказанное, такая вещь, как анонимные методы будет в .NET 2.0 и уже есть в Mono 1.1.6. Это будет аналог того, о чем ты говоришь.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
stab
Дата 8.4.2005, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



Цитата
Мне нравится, что методы названы стандартно, скажем, если я вижу баттон в коде, я знаю что будет метод actionPerformed. С делегатами этот метод можно назвать хоть PrivetVasjaPupkin()


С другой стороны, методу можно дать хорошее описательное имя, например closeButton_Click, а в Java так и останется actionPerformed. Вообще, я так понимаю из этого кода:

Код

JButton b = new JButton("Name");    
//обьевляем событие    
 ActionListener listener = new ActionListener()    
  {    
            public void actionPerformed(ActionEvent event)    
            {    
                /* действия */    
            }    
 };    
//добавляем событие объекту    
b.addActionListener(listener);


что коментарий /* действия */, если его заменить на код, разворачивается в блок switch... эммм, если это так, то очень уж это смахивает на древний подход обработки сообщений из Win32 API. Читабельность у такого блока нулевая.


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0915 ]   [ Использовано запросов: 23 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.