Re[12]: С++ culture
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 08.11.05 10:18
Оценка: 1 (1)
Здравствуйте, VladD2, Вы писали:

E>>Можно ли в Java вводить новые методы в уже существующие классы?


VD>Да. На том построена туча фрэймворков.


Кстати. Требуется помощь зала по жабке. Есть некий класс A.
Создадим его экземпляр так:

A a = new A() {public void newMethod() {/* do nothing */};};

Как можно вызвать этот новый метод не прибегая к рефлексии?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[5]: С++ culture
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 08.11.05 10:23
Оценка: +2
Здравствуйте, mrozov, Вы писали:

M>2. Подозреваю, что даже такой высококлассный специалист, как Вы, смог бы выиграть в скорости написания кода той же степени надежности, используя не с++, а с# или Java.


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

M>Т.е. Ваша личная высочайшая или даже сверхестественная квалификация ни в коей мере не отменяет того простого факта, что большинство (подавляющее) людей не способны писать код с той степеню аккуратности, которая требуется для грамотного кодирования на с++.


Но ведь речь нужно вести о конкретных командах и конкретных проектах. Если есть команда, хорошо владеющая C++ и не допускающая того количества ошибок, о котором постоянно говорят, и эта команда специализируется в конкретной предметной области, имеет в ней свои наработки, то почему участники этой команды не могут агитировать за C++? Я вот этого не понимаю.

Т.е. лозунг "Все в .Net или Java!" -- это легально. А вот "Пишите прикладные проекты на C++" -- это уже нецензурная брань? Так получается?
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[6]: С++ culture
От: mrozov  
Дата: 08.11.05 10:49
Оценка: 1 (1) +2 -2
Здравствуйте, eao197, Вы писали:


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


Я так думаю, что это было давно? Java развивалась весьма сильно с каждой версией. В любом случае, c# заметно поудобнее и код получается быстрым везде, где мне это удавалось увидеть.


E>Но ведь речь нужно вести о конкретных командах и конкретных проектах. Если есть команда, хорошо владеющая C++ и не допускающая того количества ошибок, о котором постоянно говорят, и эта команда специализируется в конкретной предметной области, имеет в ней свои наработки, то почему участники этой команды не могут агитировать за C++? Я вот этого не понимаю.


У меня есть проекты, написанные на с++, нуждающиеся в поддержке, и навыки, для этого необходимые. Я не пытаюсь переписывать их на .net. Но
и агитировать в пользу с++ не стал бы. Почему — написано выше и ниже еще добавлю.

E>Т.е. лозунг "Все в .Net или Java!" -- это легально. А вот "Пишите прикладные проекты на C++" -- это уже нецензурная брань? Так получается?


Именно так и получается. Массовая распространенность с++ — трагическое недоразумение. Впрочем, насколько я понимаю, это почти чисто российский феномен. Ведь с++ это так круто! Ведь все конкретные пацаны только на нем и пишут. VB — он для слабаков! А кто же из молодых и зеленых хочет быть слабаком?

Слава богу, что .net предложил хорошую альтернативу. Хорошую, замечу, почти во всех направлениях, и в большинстве — лучшую. c++ все равно нужен? Да. Заинтересовано ли общество в том, чтобы сишного кода было побольше? Не думаю.

Вам, я так понимаю, за "державу" обидно? Так это эмоции. Конечно, золотое правило "не ломалось — не чини" никто не отменял. Конечно, все бросать не нужно. Но и избыток гордости за выбранное профессиональное направление человека, имхо, не красит.
Re[7]: С++ culture
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 08.11.05 11:17
Оценка: 1 (1) +4
Здравствуйте, mrozov, Вы писали:

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


M>Я так думаю, что это было давно? Java развивалась весьма сильно с каждой версией. В любом случае, c# заметно поудобнее и код получается быстрым везде, где мне это удавалось увидеть.


Да, давно.
А с C# ты будешь себя хорошо чувствовать только на MS-платформах, либо ждать, пока Mono будет пытаться за MS успеть.
Если сейчас нужна кроссплатформенность, то выбор реально есть либо из C++, либо из Java, либо из любого динамического языка (вроде Perl, Python или Ruby).

M>Слава богу, что .net предложил хорошую альтернативу. Хорошую, замечу, почти во всех направлениях, и в большинстве — лучшую. c++ все равно нужен? Да. Заинтересовано ли общество в том, чтобы сишного кода было побольше? Не думаю.


Имхо, общество -- это понятие абстрактное.

Лично я заинтересован, чтобы качественного C++ кода было побольше. Я уже не общество?

M>Вам, я так понимаю, за "державу" обидно? Так это эмоции.


А "все на .Net" -- это не эмоции?
При том, что сопутствующего софта для Java сейчас на порядки больше, чем для .Net. Одних IDE, если только подсчитать

M> Конечно, золотое правило "не ломалось — не чини" никто не отменял. Конечно, все бросать не нужно. Но и избыток гордости за выбранное профессиональное направление человека, имхо, не красит.


А перепрыгивание с технологии на технологию только из-за моды (конкретно на RSDN, здесь и сейчас, популярен .Net) так же не красит. Здесь вообще сильны две эмоции -- "С++ дырявое решето, поэтому must die!" и ".Net -- наше все, поэтому все в .Net". Странно, что Java никто не продвигает. Хотя сейчас это уже гораздо более проработанная платформа, чем C#.

В общем, мне кажется, что лозунги "Нужно писать на .Net, потому, что C++ глючный, т.к. я на нем пишу с ошибками" -- это такая же эмоция, как "C++ forever!". А выбор языка и платформы для конкретной задачи должен включать в себя анализ большого количества факторов. И очень жаль, что критерий "количество багов в C++ программах" для конкретной команды оказывается на одном из первых мест.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[8]: С++ culture
От: mrozov  
Дата: 08.11.05 11:45
Оценка: +2 -3
E>А перепрыгивание с технологии на технологию только из-за моды (конкретно на RSDN, здесь и сейчас, популярен .Net) так же не красит. Здесь вообще сильны две эмоции -- "С++ дырявое решето, поэтому must die!" и ".Net -- наше все, поэтому все в .Net". Странно, что Java никто не продвигает. Хотя сейчас это уже гораздо более проработанная платформа, чем C#.

Java — рулит. Но у нее есть фатальный недостаток — ее создал не MS. Причем я не шучу.

E>В общем, мне кажется, что лозунги "Нужно писать на .Net, потому, что C++ глючный, т.к. я на нем пишу с ошибками" -- это такая же эмоция, как "C++ forever!". А выбор языка и платформы для конкретной задачи должен включать в себя анализ большого количества факторов. И очень жаль, что критерий "количество багов в C++ программах" для конкретной команды оказывается на одном из первых мест.


Да нет же, все не так. Нужно писать на .Net, потому, что C++ глючный, т.к. я, все мои знакомые программисты и подавляющее большинство других программистов, на нем пишут с ошибками. А количество ошибок на .net заметно меньше, как и общая скорость разработки. И практика моей компании показывает, что стоимость решений на с++ оказывается неприемлимо высокой.

Короче — если мыслить с позиции человека, который отвечает за разработку, то выбор очевиден. C++ только там, где этого нельзя избежать.
Из любого правила есть исключения, но общая тенденция такова.

А вообще, у меня есть друг, в чем-то похожий (видимо) на Вас. Только он не сишник, он уже много лет на скриптовых языках пишет. Очень грамотный и очень одаренный товарищ, золотые руки.
Вот ему .net не нужен. И с++ ему тоже не нужен. И от строгой типизации он видит один вред.

Причем довод у него очень даже убедительный — нужно просто все делать правильно. И все. И любые аргументы на тему, что без компиляции и типизации работать нормально нельзя, разбиваются вдребезги о железный довод — он-то может. А может он так, как могут вообще реально очень немногие. И убогий инструментарий ему не помеха в создании очень даже интерестных решений.

И за долгие и многочисленные часы нашего общения на эту тему мне так и не удалось довести до его сознания простую мысль — он в меньшинстве и распространять свой опыт на окружающих автоматически — совершенно некорректно. Вас мне убедить тоже, очевидно, не удастся.
Re[9]: С++ culture
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 08.11.05 11:56
Оценка: +1
Здравствуйте, mrozov, Вы писали:

M>Java — рулит. Но у нее есть фатальный недостаток — ее создал не MS. Причем я не шучу.

+1

Правда, за ней, кроме Sun, стоят такие монстры, как IBM и HP. Но, видимо, Java продолжит рулить в нише серверов и Unix-ов. А на Windows и десктопах MS ее уделает.

M>Короче — если мыслить с позиции человека, который отвечает за разработку, то выбор очевиден. C++ только там, где этого нельзя избежать.

M>Из любого правила есть исключения, но общая тенденция такова.

К сожалению, так оно и есть. Но, имхо, в большинстве случаев это объеясняется не непосредственно глючностью программ на C++, а элементарной скудностью готовых библиотек для современных технологий. А библиотеки не пишутся из-за сложности этого процесса на C++. Замкнутый круг.

M>Причем довод у него очень даже убедительный — нужно просто все делать правильно. И все. И любые аргументы на тему, что без компиляции и типизации работать нормально нельзя, разбиваются вдребезги о железный довод — он-то может. А может он так, как могут вообще реально очень немногие. И убогий инструментарий ему не помеха в создании очень даже интерестных решений.


Так ведь так оно и есть.
Нет, не серьезно -- так и есть.

M>И за долгие и многочисленные часы нашего общения на эту тему мне так и не удалось довести до его сознания простую мысль — он в меньшинстве и распространять свой опыт на окружающих автоматически — совершенно некорректно. Вас мне убедить тоже, очевидно, не удастся.


Не-а. Я ведь, с недавних пор, сам стал сторонником Ruby. Теперь что-то делаю на C++, что-то на Ruby. Классно!
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[9]: С++ culture
От: Kluev  
Дата: 08.11.05 13:01
Оценка: +1 -2
Здравствуйте, mrozov, Вы писали:

M>Да нет же, все не так. Нужно писать на .Net, потому, что C++ глючный, т.к. я, все мои знакомые программисты и подавляющее большинство других программистов, на нем пишут с ошибками. А количество ошибок на .net заметно меньше, как и общая скорость разработки. И практика моей компании показывает, что стоимость решений на с++ оказывается неприемлимо высокой.


Есть такая отрасль CAD/CAE/CAM называется. Дык вот, net и java там не жильцы и это так же очевидно как 2х2=4. В качестве примера некоторые сведения о реальной САЕ. Исходные данные ок 30 мб, результат расчета от 1-4Гб, расчетный модуль разделен на три процесса, т.к. адрессного пространства в 2Гб на процесс не хватает чтобы втиснуть все. Работа с памятью написана ручками (свой менеджер кучи), т.к. стандартный crt-шный дохнет на таких обьемах (из-за сильной фрагментации памяти). Юзать дотнет и жабу в качестве основных инструментов разработки здесь абсолютно бесмысленно т.к. даже на рынок не сможешь войти. Более того они и по удобству здесь не годятся, C++ самое то, аналогов по удобству и быстродействию даже и близко нет.

M>Короче — если мыслить с позиции человека, который отвечает за разработку, то выбор очевиден. C++ только там, где этого нельзя избежать.

M>Из любого правила есть исключения, но общая тенденция такова.

Только исключений слишком много. Фактически весь back-end на С/С++ написан и альтернатив нет. Там где есть куча готовых компонентов (внутренне как правило написанных на С/С++) и можно заюзать стандартный большой фреймворк — удобно. Но много ли таких задач? На самом деле имхо нет. А где есть свой core-development там уже бесполезняк. Не так же и по тому, что в таких языка просто подходящих средств нет. Для примера достаточно одной таблетки — простой класс треугольник:
class CSharpTriangle
{
  public Node[] nodes = new Node[3]; // все приехали, можете закрывать свою лавочку
}


M>А вообще, у меня есть друг, в чем-то похожий (видимо) на Вас. Только он не сишник, он уже много лет на скриптовых языках пишет. Очень грамотный и очень одаренный товарищ, золотые руки.

M>Вот ему .net не нужен. И с++ ему тоже не нужен. И от строгой типизации он видит один вред.

Все справедливо, ему не нужен С++, а многим софтовым фирмам не нужен он.
Re[10]: С++ culture
От: mrozov  
Дата: 08.11.05 13:10
Оценка: :)
K>Есть такая отрасль CAD/CAE/CAM называется.

А еще есть отрасль под общим названием "прикладное программирование", в которой задействовано подавляющее большинство разработчиков.

K>Только исключений слишком много.

Я вижу очень мало. А я по меркам большинства моих коллег — хардкорщик.


K>
K>class CSharpTriangle
K>{
K>  public Node[] nodes = new Node[3]; // все приехали, можете закрывать свою лавочку
K>}
K>


Контраргумент:

x = x + 1;
Re[11]: С++ culture
От: Kluev  
Дата: 08.11.05 13:41
Оценка:
Здравствуйте, mrozov, Вы писали:

K>>Есть такая отрасль CAD/CAE/CAM называется.


M>А еще есть отрасль под общим названием "прикладное программирование", в которой задействовано подавляющее большинство разработчиков.

А CAD — не прикладное программирование?

K>>Только исключений слишком много.

M>Я вижу очень мало. А я по меркам большинства моих коллег — хардкорщик.
Реальность это больше чем мы видим. А мерки вещь очень относительная. Для кого-то и VB-шник хардкорщик.

K>>
K>>class CSharpTriangle
K>>{
K>>  public Node[] nodes = new Node[3]; // все приехали, можете закрывать свою лавочку
K>>}
K>>


M>Контраргумент:

M>x = x + 1;

И в чем же аргумент? сам хоть понял что сказал?
Re[12]: С++ culture
От: mrozov  
Дата: 08.11.05 14:08
Оценка: 1 (1) +1 -1 :)
Здравствуйте, Kluev, Вы писали:

K>А CAD — не прикладное программирование?


Речь идет о миллионах людей, перед которыми такие задачи никогда не встанут. Против тех тысяч, которые вынуждены иметь с ними дело.
Вы знаете, сколько в мире программистов на VB/Delphi? Сколько web-программистов? Вы мне говорите о капле в море, которую пытаетесь возвести в закон. Понимания в моем лице, естественно, не добиваясь.

K>>>Только исключений слишком много.

M>>Я вижу очень мало. А я по меркам большинства моих коллег — хардкорщик.
K>Реальность это больше чем мы видим. А мерки вещь очень относительная. Для кого-то и VB-шник хардкорщик.

Именно! О том, собственно, и речь. Большую часть своей карьеры я занимался как раз тем, что разрабатывал низкоуровневые компоненты для программистов, которые сами от таких вещей далеки. Я этим занимался в разных компаниях. Забавно, что для многих профессиональных программистов умение написать сервис или знание основ многопоточного программирования выглядит мистическим шаманством.

Вы, вероятно, посчитаете их просто недоучками... точно также, как они посчитают (вероятно) недоучкой Вас, раз Вы плаваете в тонкостях CSS и не в состоянии без запинки сказать, в чем отличия IE версии 5.0. от 5.5 (примеры взяты от балды и к реальным Вашим знаниям, разумеется, отношения не имеют). И заметьте, будут на 100% правы.

Отойдем чуть в сторону и что же мы видим? Ба, да это же Java-программисты! Которые Вам с удовольствием расскажут, насколько велика их доля рынка и насколько нелепо Вы будете смотреться, пытаясь написать application layer средненькой такой корпорации на с++.

Автоматизация бухгалтерии? Обработка excel-евских файлов на с++? Удачи. Она Вам понадобится.

web-приложение?

Таких примеров — вагон и маленькая тележка. Ни один разумный человек не станет убеждать окружающих в том, что драйвера нужно начинать писать на C#. И я искренне надеюсь, что не за горами времена, когда люди будут стесняться предлагать писать бизнес-логику или, скажем, UI, на с++.

K>И в чем же аргумент? сам хоть понял что сказал?

Многоуважаемый коллега! Позволю себе переадресовать Вам Ваш же вопрос (раз уж мой не в меру тонкий намек остался непонятым).
Re[13]: С++ culture
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 08.11.05 14:15
Оценка:
Здравствуйте, mrozov, Вы писали:

K>>А CAD — не прикладное программирование?


M>Речь идет о миллионах людей, перед которыми такие задачи никогда не встанут. Против тех тысяч, которые вынуждены иметь с ними дело.

M>Вы знаете, сколько в мире программистов на VB/Delphi? Сколько web-программистов?

А интересно, сколько в мире Delphi программистов?

Вот C++ программистов, по озвученной Страуструпом оценке, около 3 миллионов. Неужели это можно назвать каплей в море?
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[14]: С++ culture
От: mrozov  
Дата: 08.11.05 14:19
Оценка:
Здравствуйте, eao197, Вы писали:

E>Вот C++ программистов, по озвученной Страуструпом оценке, около 3 миллионов. Неужели это можно назвать каплей в море?


Я сам — с++ программист. И что?
Я бы поставил вопрос иначе — сколько в мире задач, для которых с++ будет оптимальным выбором?

До Java и широкого распространения web — подавляющее большинство.
После .net — очень и очень вряд ли.
Re[15]: С++ culture
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 08.11.05 14:25
Оценка:
Здравствуйте, mrozov, Вы писали:

E>>Вот C++ программистов, по озвученной Страуструпом оценке, около 3 миллионов. Неужели это можно назвать каплей в море?


M>Я сам — с++ программист. И что?

M>Я бы поставил вопрос иначе — сколько в мире задач, для которых с++ будет оптимальным выбором?

Давай так: перечисли те прикладные области, которые ты знаешь. Так будет проще оценивать перспективность языка.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[7]: С++ culture
От: Павел Кузнецов  
Дата: 08.11.05 14:38
Оценка: +4
mrozov,

> Именно так и получается. Массовая распространенность с++ — трагическое недоразумение. Впрочем, насколько я понимаю, это почти чисто российский феномен.


Вы неправильно понимаете. Прикладные "коробочные" продукты в подавляющем большинстве написаны и пишутся на C или C++. Enterprise automation -- да, там много VB, C#, Java. Может, это и изменится в будущем, но пока что это именно так.
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[9]: С++ culture
От: Павел Кузнецов  
Дата: 08.11.05 14:43
Оценка: +5
mrozov,

> Нужно писать на .Net, потому, что C++ глючный, т.к. я, все мои знакомые программисты и подавляющее большинство других программистов, на нем пишут с ошибками. А количество ошибок на .net заметно меньше, как и общая скорость разработки. И практика моей компании показывает, что стоимость решений на с++ оказывается неприемлимо высокой.


Это ваш опыт. Не пытайтесь его обобщать в категоричной форме на всех.

> И за долгие и многочисленные часы нашего общения на эту тему мне так и не удалось довести до его сознания простую мысль — он в меньшинстве и распространять свой опыт на окружающих автоматически — совершенно некорректно.


Зря вы не применяете этого же подхода к себе.
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[13]: С++ culture
От: Kluev  
Дата: 08.11.05 15:33
Оценка:
Здравствуйте, mrozov, Вы писали:

M>Речь идет о миллионах людей, перед которыми такие задачи никогда не встанут. Против тех тысяч, которые вынуждены иметь с ними дело.

M>Вы знаете, сколько в мире программистов на VB/Delphi? Сколько web-программистов? Вы мне говорите о капле в море, которую пытаетесь возвести в закон. Понимания в моем лице, естественно, не добиваясь.

И что теперь? Меня мало беспокоит число пользователей языка, а больше интерсуют возможности и удобство. А по многим параметрам у С++ до сих пор нет никаких альтернатив, ни по удобству ни по скорости.

M>Отойдем чуть в сторону и что же мы видим? Ба, да это же Java-программисты! Которые Вам с удовольствием расскажут, насколько велика их доля рынка и насколько нелепо Вы будете смотреться, пытаясь написать application layer средненькой такой корпорации на с++.


Так же нелепо смотрятся и деятели которые говорят что java/net смогут заменить С++
Есть целое море задач для которых лучше чем С++ (пока) не найти.

K>>И в чем же аргумент? сам хоть понял что сказал?

M>Многоуважаемый коллега! Позволю себе переадресовать Вам Ваш же вопрос (раз уж мой не в меру тонкий намек остался непонятым).

В чем же тонкость намека непойму? О вполне конкретных вещах писалось, жирным шрифтом выделено.
Re[5]: С++ culture
От: Cyberax Марс  
Дата: 08.11.05 16:51
Оценка: +3 :)
mrozov wrote:

> Т.е. Ваша личная высочайшая или даже сверхестественная квалификация ни

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

Не нужно сверхвысокой квалификации, просто надо понимать КАК писать
программы на С++. Это совсем несложно, придется выучить:
1. RAII и его использование.
2. Политики владения.
3. Эффективное использование стандартной библиотеки.

Это вполне достаточно, чтобы писать безглючные программы на С++. При
этом не нужно знать про темплейтную магию — я сам долгое время без
проблем программировал на "C с классами", не используя темплейты в своем
коде (но используя "библиотечные").

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[10]: С++ culture
От: GlebZ Россия  
Дата: 08.11.05 17:39
Оценка: +1
Здравствуйте, Kluev, Вы писали:

K>Для примера достаточно одной таблетки — простой класс треугольник:

K>
K>class CSharpTriangle
K>{
K>  public Node[] nodes = new Node[3]; // все приехали, можете закрывать свою лавочку
K>}
K>


Я сам могу привести кучу аргументов против Net в CAD системах, но Холмс, почему нужно закрывать лавочку именно здесь?

С уважением, Gleb.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[13]: С++ culture
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 08.11.05 18:00
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

E>>>Можно ли в Java вводить новые методы в уже существующие классы?


VD>>Да. На том построена туча фрэймворков.


ANS>Кстати. Требуется помощь зала по жабке. Есть некий класс A.

ANS>Создадим его экземпляр так:

ANS>A a = new A() {public void newMethod() {/* do nothing */};};


ANS>Как можно вызвать этот новый метод не прибегая к рефлексии?


Хороший вопрос, однако. Может быть, на него кто-то и ответит.
Я бы хотел на другом остановиться. На самом деле здесь не модифицируется класс A, а порождается новый, анонимный класс (или как он в Java называется), производный от A.

Вот небольшой реальный тест.
Файл A.java:
class A
{
    public void hello() { System.out.println( "original hello!" ); }
}

Файл Test.java:
class Test
{
    private static void use( A a )
    {
        Class s = a.getClass().getSuperclass();
        System.out.println( "use object of: " + a.getClass().getName() +
            ", with superclass: " + s.getName() );

        a.hello();
    }

    public static void main( String args[] )
    {
        A a;
        use( a = new A() {
                public void bye() { say_bye(); }
                private void say_bye() { System.out.println( "bye!" ); }
            }
        );

        A b;
        use( b = new A() {
                public void hello() { System.out.println( "another hello!" ); bye(); }
                public void bye() { say_bye(); }
                private void say_bye() { System.out.println( "another bye!" ); }
            }
        );
    }
}


Если запустить, то получаем:
use object of: Test$1, with superclass: A
original hello!
use object of: Test$2, with superclass: A
another hello!
another bye!


Т.е. создаются новые классы Test$1 и Test$2, которые производные от A. Но, т.к. в программе они присваиваются ссылкам на экземпляры A, то вызывать из них напрямую можно методоы, определенные в A.

Другое дело, что объект, скажем класса Test$1, можно использовать в качестве шаблона для порождения аналогичных объектов (через getClass() и getConstructor()). Однако, определение Test$1 должно быть доступно в compile-time. С таким же успехом через кодогенерацию можно описать какой-нибудь C++ класс, производный он нужного нам класса, скомпилировать в DLL, подгрузить DLL в процесс и -- опа! Получаем то же самое. Почти.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[11]: С++ culture
От: Kluev  
Дата: 09.11.05 09:27
Оценка: 1 (1) -1 :)
Здравствуйте, GlebZ, Вы писали:

GZ>Здравствуйте, Kluev, Вы писали:


K>>Для примера достаточно одной таблетки — простой класс треугольник:

K>>
K>>class CSharpTriangle
K>>{
K>>  public Node[] nodes = new Node[3]; // все приехали, можете закрывать свою лавочку
K>>}
K>>


GZ>Я сам могу привести кучу аргументов против Net в CAD системах, но Холмс, почему нужно закрывать лавочку именно здесь?


Дотнетовский массив — это ссылочный тип который в GC-хипе аллоцируется. В NET нельзя сделать массив частью аггрегата, как в С++:
struct Triangle
{
   Node  *nodes[3];
};

В итоге имеем оверхед на ровном месте. В качестве примера цифры из реальной жизни.
В программе ~150000 обьектов в которых 8 фикс.массивов на борту, ~50000 в которых 15.
В С++ общее число обьектов: 200 тысяч.
В .NETе 150к + 150к*8 + 50к + 50к*15 = 2,150,000
Если смысл обсуждать дальше? Конечно можно возразить (на примере того же треугольника) делай вот так и будет щастье:
class Triangle
{
   public Node A, B, C; // вместо массива переменные
}

Но это уже буллшит какой-то.
В треугольнике, например, нужен именно массив, который для удобства еще и закольцовывается:
Node* node_at( int idx )
{
   static const int imap[] = { 1, 2, 0, 1, 2, 0, 1 };
   return nodes[imap[idx+2]]; // транслируем колецевой индекс в обычный
}
// юзается очень удобно, пример вычисление всех углов:
void angles(Triangle &t)
{
   double angs[3];
   for ( int i = 0; i < 3; i++ )
      angs[i] = angle( t.node_at(i-1), t.node_at(i), t.node_at(i+1) );
    
}


И это элементарные вещи широко используемыые в повседневной жизни. В NET на таких простых вещах имеешь либо оверхед либо гемморой, а чаще и то и другое вместе взятое.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.