Л>> * в VB 6.0 не реализовано наследование Л>> мой личный аргумент: а оно там и не надо, VB 6.0 язык для быстрого и удобного написания пользовательских интерфейсов. Кстати если человек достаточно компетентен и обладает знаниями то и на VB 6.0 может сделать практически то же самое что и в С++ 6.0 GIV>Не согласен. Мне надо. Былоб в VB6 наследование — не былоб постоянных половых извращений...
Очень многие придерживаются мнения, что как раз наследование как таковое (точнее, наследование реализации), вообще является плохой практикой при дизайне архитектуры. Хорошие решения в дизайне великолепно реализуются при помощи, например, паттерна Адаптер (или например, Мост, или еще Фасад) — короче, агрегация или композиция всенепременно спасут отца русской демократии, тем более с Class Editorом.
А вот действительно серьезной проблемой VB6 является, помимо многого прочего, отсутствие возможности объявлять свои интерфейсы (чужие-то реализовывать можно, а вот чтоб свои...)
Что касается VB.NET, то он настолько мало отличается от C# (найдите хотя бы пять отличий в функциональности!), что я лично считаю его функционально идентичным C#. Там есть почти все, чего не хватало в VB6 — он от него отличается сильнее, чем C# от C++ (возьму на себя такую смелость...)
GIV>Пример из реального проекта на VB — есть десяток финансовых документов. Они вобщем похожи за исключением деталей. По уму вынестиб эту похожую часть в базовый класс + создать десяток наследников. Красиво.
Не-а. Уродливо. Лучше агрегация. Даже если и приходится писать кучами практически пустые процедуры свойств.
GIV>Или хочу я сделать свой UpperCase only текстбокc.
Это да. Здесь развожу руками
Здравствуйте, Alexey Shirshov, Вы писали:
ЕК>>Дело в том, что как инструмент написания интерфейсов VB явно уступает delphi. А как средство программирования вообще не годиться в силу ряда причин. Например — никудашнее бастродействие. Элементарные операции сложения на VB работают в десятки раз медленнее, чем на VC (из-за использования variant где надо и не надо).
AS>Это программист решает, а не среда (vb). AS>К твоему сведению, vb — сильно типизрованный язык.
По просьбе трудящихся (привет Mika!!) постараюсь "обгрунтувать" эти комментарии. Во-первых, определимся, что речь идет о VB.NET. Там переменных типа Variant нет как таковых, и если в отдельном месте в Environment поставить птицу Option Strict, песнь о которой можно петь еще очень долго в форуме .NET, то контроль типов получится не менее жесткий, чем в C++ (будут например выдаваться предупреждения при неявном конвертировании Double в Integer и т.д.). Единственная неопределенность с типами, которая остается — тип Object — но это уже относится к ООП и дизайну.
ЕК>>Что касается искалеченных судеб, то дело в том, что VB — очень плохой язык для обучения программированию (на мой взгляд). AS>Не правда ваша.
Присоединяюсь. Чем VB6 таки плох, на нем нельзя по-человечески учить ООП и дизайн. А VB.NET (ИМХО) подходит для этих целей практически идеально, даже пожалуй лучше, чем C++.
ЕК>>В основном из-за очень размытой типизации. AS>Это заблуждение.
Присоединяюсь. Рассказал о VB.NET выше, а в VB6 можно было поставить Option Explicit и как-то держаться в разумных рамках.
ЕК>>Он не подходит для ряда задач из-за катастрофически низкого быстродействия кода. AS>Опять же не правда.
И притом потому, что как правило на нем пишут не архиваторы и не графические фильтры, а БД, офис, складской учет и т.д. Неважно, позовешь ты аксессовскую базу из VB или из C++, все равно ядро-то не на VB6 писано (кстати, а попробуйте-ка из VС6 так с базами поработать и с Office Automation, как из VB6!). В этой области не играет ровно никакой роли, умножаются два числа за семь микросекунд или за семьдесят.
ЕК>>Хотя для ряда задач VB является оптимальным языком. AS>Для очень многих задач.
Для ОЧЕНЬ многих задач. Некоторые даже ухитрились написать на нем пакет динамической геометрии (т.е. по сути САПР — графическая библиотека), по производительности происходящий американского конкурента, написанного разумными программистами на Borland C++.
ЕК>>Что касается VB.NET, то он слабо отличается от C# и на голову выше VB.
Всей душой согласен. По поводу незначительных отличий VB.NET от С# можно очень долго рыть MSDN и найти только несколько упоминаний о, например, отсутствии inline XML-документации или различиях при добавлении обработчиков событий.
Здравствуйте, Воронков Василий, Вы писали:
Л>>Честно говоря обидно за язык, потому что если посмотреть на его "КПД" оно как таковое превзойдёт все другие языки ... и на мой взгляд это показатель.
ВВ>Гы-гы, я тоже так думал. Пока не стал писать на C#
А что, все-таки стоит переходить с VB.NET на C#? Можешь пожалуйста поделиться опытом? (Для меня это очень важно, сам долго писал на всех версиях Basic вплоть до VB6 — теперь пишу на VB.NET). Грасиас.
>По просьбе трудящихся (привет Mika!!) постараюсь "обгрунтувать" эти комментарии. >Во-первых, определимся, что речь идет о VB.NET
Речь идёт и о VB6, и о VB.NET. Критика моя направлена против VB6. Что касается VB.NET, то он почти не уступает C# и принципиальной разницы между ними нет.
ВВ>>Гы-гы, я тоже так думал. Пока не стал писать на C# КО>А что, все-таки стоит переходить с VB.NET на C#? Можешь пожалуйста поделиться опытом? (Для меня это очень важно, сам долго писал на всех версиях Basic вплоть до VB6 — теперь пишу на VB.NET). Грасиас.
Я с VB.NET на C# не переходил, я переходил с VB/VC на C#. И надо сказать, что скорость разработки на C# вполне VB-шная. По поводу VB.NET сказать сложно.. Если ты раньше не писал C++/Java, то придется осваивать новый синтаксис и пр. и тп. Причем ничего по сути от этого перехода не изменится. Есть кое-какие фички у C#, который нет в васике, но и обратное утверждение тоже справедливо. В VB.NET, благодаря отключаемости Option Strict/Option Explicit, можно просто писать более быстро/грязно/просто. В VB.NET мне еще не нравится то, что его пытались "сделать похожим" на старый VB, в результате чего появились такие штуки как модуль, которые ИМХО только пудрят мозги программисту. Еще есть момент, что C#-программист может пользоваться большим спросом, хотя это еще далеко не факт.
Здравствуйте, Кирилл Осенков, Вы писали:
КО>Очень многие придерживаются мнения, что как раз наследование как таковое (точнее, наследование реализации), вообще является плохой практикой при дизайне архитектуры.
И что же такого плохого в наследование реализации?
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
На самом деле влияние некой простоты использования васика, переносится и в Net. Например можно опускать компараторы при создании объекта, но при этом скорость замедляется в разы. Даже там где эти компараторы объявлены скорость выполнения алгоритмов ниже чем при собственной реализации. Я все понимаю, что удобство прежде всего, но страдают и те кому эти удобства по барабану, а нужна скорость. Вот и приходится все переписывать. А повинен в этом Васик, т.к. в Native компиляторах идеалогия IDispatch применяется только в крайней необходимости.
и солнце б утром не вставало, когда бы не было меня
КО>>Очень многие придерживаются мнения, что как раз наследование как таковое (точнее, наследование реализации), вообще является плохой практикой при дизайне архитектуры. WH>И что же такого плохого в наследование реализации?
Это не мое мнение; я его не вполне разделяю. Однако этим мнением со мной делились люди, которых я уважаю, поэтому возьму на себя риск изложить их аргументацию своими словами:
Безусловно, без наследования далеко не уедешь (это было бы слишком радикально) — но пользоваться им нужно неохотно (т.е. выдавать по рецептам )
уж больно много с ним ошибок делают (Не всем же в руки оружие дают )
Открытые и защищенные переменные ведут к ошибкам при наследовании
И самое важное: в коде производного класса не видно, из чего состоит базовый класс — из-за этого отсутствует четкое понимание того, что уже реализовано и как именно (при наследовании производный класс как бы "непрозрачен" — нужны некоторые усилия, чтобы держать в уме функциональность базового класса при написании производного класса). Это ведет к ошибкам, при этом чаще всего у начинающих.
Здравствуйте, Serginio1, Вы писали:
S>Здравствуйте, Леонид, Вы писали:
S> На самом деле влияние некой простоты использования васика, переносится и в Net. Например можно опускать компараторы при создании объекта, но при этом скорость замедляется в разы. Даже там где эти компараторы объявлены скорость выполнения алгоритмов ниже чем при собственной реализации. Я все понимаю, что удобство прежде всего, но страдают и те кому эти удобства по барабану, а нужна скорость. Вот и приходится все переписывать. А повинен в этом Васик, т.к. в Native компиляторах идеалогия IDispatch применяется только в крайней необходимости.
Здравствуйте, Кирилл Осенков, Вы писали:
КО>Очень многие придерживаются мнения, что как раз наследование как таковое (точнее, наследование реализации), вообще является плохой практикой при дизайне архитектуры. Хорошие решения в дизайне великолепно реализуются при помощи, например, паттерна Адаптер (или например, Мост, или еще Фасад) — короче, агрегация или композиция всенепременно спасут отца русской демократии, тем более с Class Editorом.
Насчёт наследования реализации я с вами согласен -- почти всегда лучше использовать агрегацию. Но ведь наследование этим не исчерпывается. Полиморфизм слишком приятная штука, что бы от неё отказываться.
Здравствуйте, Леонид, Вы писали: Л> ...VB 6.0 язык для быстрого и удобного написания пользовательских интерфейсов. Кстати если человек достаточно компетентен и обладает знаниями то и на VB 6.0 может сделать практически то же самое что и в С++ 6.0 ... (ответные аргументы, типа — "а писать драйвера?" не принимаются ... довайте до "клинических" случаев не опускаться)
Это-то все верно, но когда на бейсике требуют написать немаленький plugin для САПРа, где помимо интерфейса немерянно логики, аргументируя это тем, что потом другим программистам, которые не знают плюсов будет легче всё это поддерживать... Это не прибавляет любви ни к языку, ни к таким программистам. Вся нелюбовь к Бейсику, ИМХО, из-за того, что его пропихивают в несвойственные ему области.
Здравствуйте, Alexey Shirshov, Вы писали:
AS>Здравствуйте, Serginio1, Вы писали:
S>>Здравствуйте, Леонид, Вы писали:
S>> На самом деле влияние некой простоты использования васика, переносится и в Net. Например можно опускать компараторы при создании объекта, но при этом скорость замедляется в разы. Даже там где эти компараторы объявлены скорость выполнения алгоритмов ниже чем при собственной реализации. Я все понимаю, что удобство прежде всего, но страдают и те кому эти удобства по барабану, а нужна скорость. Вот и приходится все переписывать. А повинен в этом Васик, т.к. в Native компиляторах идеалогия IDispatch применяется только в крайней необходимости.
AS>Ты не путай компонентную модель и алгоритмы.
Проблема не в Компонентной модели (ее кстати там нет в общем понятии, т.к. не наследуются от Component) а в погоне за универсальностью и простоте. И влияние Васика в данном вопросе прослеживается Явно. Казалось бы что проще SortedDictionary ан нет и там надо запороть, что проигрывают деревьям. А модели без дженериков даже при похожести с Delphi это совсем другое.
И внутри object может рассмативаться как IDispatch со всеми проблемами отображения.
и солнце б утром не вставало, когда бы не было меня
КО>И самое важное: в коде производного класса не видно, из чего состоит базовый класс — из-за этого отсутствует четкое понимание того, что уже реализовано и как именно (при наследовании производный класс как бы "непрозрачен" — нужны некоторые усилия, чтобы держать в уме функциональность базового класса при написании производного класса).
Для этого есть различные наглядные способы представления структуры классов — ЮМЛ например (да чего уж там каракуля на бумажке и та сойдет, если так уж тяжело держать в голове).
КО>
КО>КО>Это ведет к ошибкам, при этом чаще всего у начинающих.
Сложность управления автотранспортными средствами и запутанность ПДД ведет к ДТП, при этом чаще всего у начинающих.
и т.п. и т.д.
Я буду еще более категоричен. Программист знающий только один язык — это моральный урод. Он зациклен в своем мире и не способен адекватно оценить реалии программирования.
Будь моя воля, я бы ввел закон — не брать на работу людей знающих только одни язык.
Что касается ВБ. Язык простой и удобный, и это его главные недостатки. Научиться культуре программирования на ВБ намного сложнее чем на С++ или Дельфи.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Кирилл Осенков, Вы писали:
КО>А что, все-таки стоит переходить с VB.NET на C#? Можешь пожалуйста поделиться опытом? (Для меня это очень важно, сам долго писал на всех версиях Basic вплоть до VB6 — теперь пишу на VB.NET). Грасиас.
Не стоит. В Видби разница между Васиком и Шарпом практически исчезнет. Васик даже будет иметь чуть больше высокоуровневых фич.
Шарп — это для тех кто привык к С++.
Хотя я бы изучил просто из соображений саморазвития.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Я буду еще более категоричен. Программист знающий только один язык — это моральный урод. Он зациклен в своем мире и не способен адекватно оценить реалии программирования.
VD>Будь моя воля, я бы ввел закон — не брать на работу людей знающих только одни язык.