Давно интересует вопрос, почему в предложении работы пишут "требуется программист С/С++". Только из-за того, что С++ создан на основе С? Это же совершенно разные подходы к программированию! Гораздо более здраво звучит "требуется программист Java/C++" или "программист С/Pascal/Fortran", а еще лучше "требуется программист ООП(объе-ориент.прогр)" или "требуется процедурный программист".
Здравствуйте, bobos, Вы писали:
B>Давно интересует вопрос, почему в предложении работы пишут "требуется программист С/С++". Только из-за того, что С++ создан на основе С? Это же совершенно разные подходы к программированию! Гораздо более здраво звучит "требуется программист Java/C++" или "программист С/Pascal/Fortran", а еще лучше "требуется программист ООП(объе-ориент.прогр)" или "требуется процедурный программист".
B>Какие будут комментарии?
Я вот на работе пишу часть проекта на C++, а другую часть (драйвера) на С. А написано в названии вакансии может быть что угодно.
Здравствуйте, bobos, Вы писали:
B>Давно интересует вопрос, почему в предложении работы пишут "требуется программист С/С++". Только из-за того, что С++ создан на основе С? Это же
странно знать C++ и не знать C. это же подмножество.
чистый C широко востребован в системном и низкоуровневом программировании
A>странно знать C++ и не знать C. это же подмножество.
Я к примеру знаю С++ на довольно крепком уровне, но абсолютно не знаю С.
A>чистый C широко востребован в системном и низкоуровневом программировании
Разве что для поддержки какого-то старого кода или в embedded programming, если для какой-то железяки C++ компилятор не доступен.
Здравствуйте, chum, Вы писали:
LD>>Кстати, LD>>Многие не задумываются, что ничто не мешает писать на C следуя ООП.
C>Ага, или на ассемблере!
О, на асме писать, следуя ООП, это круто! Видел в одной книжке примеры реализации, попробовал и плюнул — ну его нафиг объекты и vmt вручную создавать Весь труд уходит на реализации ООП, а не на полезный код
Здравствуйте, LelicDsp, Вы писали:
LD>Кстати, LD>Многие не задумываются, что ничто не мешает писать на C следуя ООП.
Ага, и таблицы виртуальных функций в виде структур с указателями на функции.
Такое можно, например, в POV-Ray увидеть.
Только вот не надо это, ИМХО.
Отдайте компилятору то, что он может сделать,
а сами займитесть более высокоуровневыми проблемами.
Здравствуйте, Left2, Вы писали:
A>>странно знать C++ и не знать C. это же подмножество. L>Я к примеру знаю С++ на довольно крепком уровне, но абсолютно не знаю С.
Это невозможно.
С — это подмножество C++ (да, да, я знаю, есть мелкие различия, например из-за того что ввели новые ключевые слова, но по сути так). С99 конечно кое-что новое добавил, но сути не изменил.
Конечно, другое дело, что ты наверное привык мыслить в терминах объектов больше.
Или ты имел ввиду функции стандартной библиотеки C (memcpy,printf там...)?
A>>чистый C широко востребован в системном и низкоуровневом программировании L>Разве что для поддержки какого-то старого кода или в embedded programming, если для какой-то железяки C++ компилятор не доступен.
Да, иногда вакансии чисто С попадаются, но редко.
A>>>странно знать C++ и не знать C. это же подмножество. L>>Я к примеру знаю С++ на довольно крепком уровне, но абсолютно не знаю С. АХ>Это невозможно. АХ> С — это подмножество C++ (да, да, я знаю, есть мелкие различия, например из-за того что ввели новые ключевые слова, но по сути так). С99 конечно кое-что новое добавил, но сути не изменил.
Ну хорошо, хорошо. В целом согласен.
АХ>Конечно, другое дело, что ты наверное привык мыслить в терминах объектов больше. АХ>Или ты имел ввиду функции стандартной библиотеки C (memcpy,printf там...)?
Я привык мыслить в терминах синтаксиса С++, и в терминах стандартной библиотеки С++. Перейти к написанию программ на C для меня ничуть не проще чем перейти к написанию программ на С#. Вот поэтому я и утверждаю что языка С не знаю.
Здравствуйте, Left2, Вы писали:
L>Я к примеру знаю С++ на довольно крепком уровне, но абсолютно не знаю С.
Весьма спорное утверждение.
С/С++/STL/COM/ATL/MFC/MSSQL/Oracle/JAVA/PHP/ASP — вот такие реальные требования к кандидатам можно встретить в объявлениях о работе. Часто пишут их HR, а не TL || PM.
Эх, люблю выпить и переспать с кем нибудь!
Но чаще выходит перепить с кем — нибудь и выспаться...
Здравствуйте, Left2, Вы писали:
A>>странно знать C++ и не знать C. это же подмножество. L>Я к примеру знаю С++ на довольно крепком уровне, но абсолютно не знаю С.
A>>чистый C широко востребован в системном и низкоуровневом программировании L>Разве что для поддержки какого-то старого кода или в embedded programming, если для какой-то железяки C++ компилятор не доступен.
Ага. Вот поэтому микрософты свой (встроенный в платформу x86) Word и написали на С. В самом деле, откуда для этой железяки C++?
Тот, кто желает, но не делает, распространяет чуму.
LD>Многие не задумываются, что ничто не мешает писать на C следуя ООП.
можно, и пишут.
1.группируем функции работающие с одной структурой данных в одном исходнике, чем не инкапсуляция.
2.наследование- можно заменить агрегацией и делегацией.
3.полиморфизм — можно реализовать через таблицы диспетчиризации
Здравствуйте, Awaken, Вы писали:
A>можно, и пишут. A>1.группируем функции работающие с одной структурой данных в одном исходнике, чем не инкапсуляция. A>2.наследование- можно заменить агрегацией и делегацией. A>3.полиморфизм — можно реализовать через таблицы диспетчиризации
Так и писали. Структурный подход это, хоть и дает видимость ООП.
Здравствуйте, Awaken, Вы писали:
L>>Разве что для поддержки какого-то старого кода или в embedded programming, если для какой-то железяки >C++ компилятор не доступен.
A>большая часть кода в ОС Windows и Unix это как — старый код?
да
Здравствуйте, Demiurg, Вы писали:
D> О, на асме писать, следуя ООП, это круто! Видел в одной книжке примеры реализации, попробовал и плюнул — ну его нафиг объекты и vmt вручную создавать Весь труд уходит на реализации ООП, а не на полезный код
для понимания того, что "под капотом" у С+#/Java (c) Jazy Cjow Rhrr полезно.
В реальной жизни применять конечно не стоит.
Здравствуйте, Demiurg, Вы писали:
D> Так и писали. Структурный подход это, хоть и дает видимость ООП.
неправда это. все вполне реально и структурный подход тут ни при чем.
кстати в контексте этого сообщения ООП следует читать как ОО подход.
A>можно, и пишут.
+1
раскрою немного тему в дополнение.
Хотя NT и не является полностью объектно-ориентированной, в ее основе лежат объекты. Единообразная форма именования, совместного использования и учета системных ресурсов, простой и дешевый способ обеспечения безопасности системы и ее модификации — все эти преимущества могут быть достигнуты при использовании объектной модели.
...
Несмотря на всестороннее использование объектов для представления разделяемых ресурсов, Windows NT не является объектно-ориентированной системой в строгом смысле. Большая часть кода операционной системы написана на С с целью обеспечения переносимости. Несмотря на то, что С не поддерживает непосредственно объектно-ориентированные конструкции, такие как динамическое связывание типов данных, полиморфные функции или наследование классов, эти инструментальные средства были использованы из-за их широкой распространенности.
A>1.группируем функции работающие с одной структурой данных в одном исходнике, чем не инкапсуляция.
не совсем то, source units не совсем корреллируют с инкапсуляцией, хотя в качестве доп меры может быть полезно при небольших объемах кода
Prefix
Identifies the kernel-mode component that exports the support routine and, usually, the component that defined the object type. Most prefixes have two letters.
Operation
Describes what is done to the object.
Object
Identifies the type of object.
что кстати изменилось в KMDF/WDF в связи с полным переходом на event-driven model
Methods, Properties, and Events
Methods are functions that perform an action on an object, such as creating or deleting the object. KMDF methods are named according to the following pattern: WdfObjectOperation
Object specifies the KMDF object on which the method operates, and Operation indicates what the method does. For example, the WdfDeviceCreate method creates a framework device object.
Properties are functions that read and write data fields in an object, thus defining object behavior and defaults. Properties are named according to the following pattern: WdfObject{Set|Get}Data
WdfObject{Assign|Retrieve}Data
Object specifies the KMDF object on which the function operates, and Data specifies the field that the function reads or writes. Some properties can be read and written without failure, but others can sometimes fail. Functions with Set and Get in their names read and write fields without failure. The Set functions return VOID, and the Get functions typically return the value of the field. Functions with Assign and Retrieve in their names read and write fields but can fail. These functions return an NTSTATUS value.
используя подобные naming convention можно вполне над разными исходниками трудиться команде и не путаться, заодно получаем реальную инкапсуляцию, если запретить доступ к объектам напрямую, работаем только в рамках своих интерфейсов, задаваемых по схеме выше.
Достаточно легко перевести программу на С++ с классами и наследованием в такую объектную модель, если хорошо понимать как и что + заранее установить такие правила — руку быстро можно набить, имея хороший пример перед глазами (вроде исходников ядра Windows).
A>2.наследование- можно заменить агрегацией и делегацией. A>3.полиморфизм — можно реализовать через таблицы диспетчиризации
технически заменить можно многими способами, конечно
кроме предложенных, последние 2 пункта наглядно продемонстрированы на примере class-specific driver model (class/port/miniport) в Классификация WDM драйверов
резюмируя, структурным программированием я бы это все не назвал.
... << RSDN@Home 1.2.0 alpha rev. 648>>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.