Inochkin
Запрет на пост | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Ну вот. Отсутствовал один день, а уже накидали проблем) Имейте в виду, что исчезну до выходных, поэтому прошу меня сильно не пинать, пока буду отсутствовать, и считайте меня героем - лечу в ханты-мансийск, а там, говорят, комары как собаки) Ну, по порядку. simplexe Ну что ж вы батенька, хотите от такого молодого языка. Не спешите. Видимо, это дело будет развиваться, так что дождетесь еще и классов для работы с CDROM. Мне вот тоже в Framework1.1 не хватает классов для COM-порта. Приходится пользоваться апишными функциями и пресловутым DllImport. По поводу RTTI отвечу сразу всем: ну да ребята, я до вчерашнего дня не имел никакого представления о typeid и иже с ним. Но это говорит только о том, что мне пора бы все-таки найти время, чтобы полностью прочитать последний стандарт. Больше ни о чем. Но скажу вам честно - меня жутко пугает этот пдф на 1022 страницы. Впрочем, что говорить о языке, в котором "противоестественно соединены низкоуровневый и абстрактный подходы к программированию" (с) не помню чье, было в какой-то из приведенных мной ссылок. Естественно, такой язык будет невероятно громоздким. Впрочем, потихоньку прочитаем и такой стандарт, хотя и не скоро. sk Asgard Ну объясните мне, каким образом можно отдать предпочтение чему-то, зная хорошо только один вариант. Ведь вы же сами говорите, что не писали на C# ничего серьезного. А вы попробуйте. Те же самые паттерны, скажем синглетон, в сишарпе реализуются на уровне языка, если можно так назвать факт присутствия ключевого слова sealed. Я уверяю вас, вам понравится. А вот мнение Страуструпа по поводу C# я все-таки не уловил. Ну вот убейте, а не могу я явно вывести из этой цитаты его отношение к языку. А читать между строк и строить догадки мне тоже не хочется. 2 Kuvaldum и все остальным, кто высказывался по поводу полиморфизма Приведенный пример есть всего лишь пример с целью продемонстрировать удобство использования ключевого слова is (не забываем, что я не знал о существовании typeid). Никакого контекста там нет и не было. Пример был сляпан за две минуты и никакого отношения к реальности не имеет. Поэтому говорить о полиморфизме здесь не стоит - не тот случай, берегите свое красноречие. Во-вторых. Скажите, если вам понадобится вывести пару отладочных окошек, вы действительно будете создавать "несколько процедур через полиморфизм"? segeich Признаю, малость сжульничал. Ну уж если по-честному, то давайте по-честному. Итак, вводим ограничение: только чистый язык, никаких библиотек, оберток и шаблонов. То есть заметьте: даже несмотря на то, что STL описана в стандарте, мы ею не пользуемся! Только средства языка! Второе ограничение: пишем весь код полностью. Третье: пишем работающий код, то есть чтобы его можно было откомпилировать, запустить и получить ожидаемый результат. Ну и четвертое - это критерии оценки: лаконичность кода и его соответствие принципам ООП. С точки зрения правильности проектирования код не рассматриваем. Итак: Код: namespace Example { public class ExampleClass { public ExampleClass() { } private int Parse(string s) { try { return int.Parse(s); } catch{throw;} } public static void Main() { ExampleClass EC = new ExampleClass(); try { string a = "25"; EC.Parse(a); a = "e25"; EC.Parse(a); } catch { //тут ошибка, но сообщение о ней вывести не можем поскольку действует ограничение 1 } finally { //в принципе не нужно, но все равно напишу:) } } } } | Парсить строку на чистом C++ оставляю вам, если у вас такое желание возникнет. По поводу второго примера мы уже выяснили, что он неудачен, поскольку существует RTTI. Вместо него я просто напомню вам о существовании в C# ключевого слова delegate (правда тут нужно признать, что сишарп это .NET, поэтому то, что делегат это на самом деле наследник System.MulticastDelegate придется принять. То же самое, впрочем, придется принять и в отношении предыдущего и последующего примеров. Ну что поделать, если в сишарпе все наследуется от object, никуда не денешься). Надеюсь вы признаете факт, что указатели на функции куда менее соответствуют принципам ООП, чем делегаты. Ну а по поводу третьего примера, я вам расскажу где эту штуку применил: есть некий комбобокс, в который нужно вывести названия неких устройств. В зависимости от выбора пользователя меняется логика работы программы. То есть мне удобны мнемонические имена полей енума в программе, а пользователю удобны те же самые мнемонические имена при выборе. То есть от абстрактного енума Код: public enum E { a1 = 0x01, a2 = 0x02, a3 = 0x03 } | я запросто перехожу к вполне осмысленному: Код: public enum SensorTypes { Warm_Sensor = 0x01, Smoke_Sensor = 0x02, Fire_sensor = 0x03 } | Кстати, уж не знаю, баг это или фича, но компилятор в VS2003 принимает и русские идентификаторы. В принципе это объяснимо, юникод же, но как-то дико и непривычно смотрятся русские идентификаторы. Ну а задача определения региональных настроек ОС в принципе тоже решается несложно. Ну и по поводу автоматического распределения памяти. Если вас не устраивает термин, то я буду пользоваться любым, какой вы предложите. Хотя бы и "освобождение". Главное, что смысл вы поняли верно. Вот только STL это не язык, а библиотека, даже несмотря на включение её в стандарт. Такое же отношение имеет и .NET к C#, поэтому прошу вас быть объективным: либо пользоваться в примерах STL и не придираться к использованию .NET в моих примерах, либо привести примеры в соответствие с ограничением 1, которое я привел выше. TheChampion На мой взгляд, самая большая проблема C++ в том, что это ну очень сложный язык. Впрочем, об этом я говорил выше - нельзя легко и изящно состыковать в одном языке две концепции. Хейельсберг и не пытался, поэтому у него получился прекрасный ООП-инструмент. Кстати, по COM мне больше нравится труд Дейла Роджерсона. Очень просто и доходчиво описана сложная технология. SergeBS Вы серьезно? Позвольте узнать, в чем же заключается технология Win95 и WinNT и т.д.? Я-то вот как-то до сих пор думал, что это ОС и не более того. Win95 и 98 - потребительские ОС для небыстрых машин. NT предназначены для мощных машин. Вот и все. А это оказывается целая технология, которая к тому же и канула в лету. И почему это заказчики до сих пор требуют, чтобы программы шли и на 98-ой винде? Удивительные люди эти заказчики. Кстати, а вот еще позвольте задать вопрос. Я тут выше упоминал Дейла Роджерсона в связи с COM. Я сразу скажу, что не в курсе истории и всегда думал, что COM - это исключительно изобретение микрософта. А поскольку вы уверенно заявили, что все известные вам технологии этой фирмы свистнуты, и поскольку я не думаю, что вы не знаете, что такое COM, то я сделал вывод, что COM также свистнутая технология. Не расскажете ли вы мне историю этого похищения? Думаю, что и всем остальным будет интересно. Благодарю заранее. WiseAlex Цитата: Это действительно один из самых серьезных недостатков с++ - его сложность | Как я уже говорил, на мой взгляд, самый серьезный. В принципе, с тем, что в этом отношении его можно отнести к естественным, я согласен. Но хорошо ли это для программиста, перед которым стоят не философски-исследовательские задачи, а вполне реальные коммерческие? |