• Зачем нужно ООП?

    saboteur_kiev
    @saboteur_kiev Куратор тега IT-образование
    software engineer
    Раньше программа могла быть написана одним сплошным листингом. Но при попытке сделать изменения, оказалось что очень сложно понять все зависимости внутри программы, как только ее размер превышает некоторый критический уровень.
    Появилась мода на модульность.
    Но программы стали сложнее, и уже модуль перестал помещаться в мозг одного человека, чтобы можно было его быстро править.
    В процессе различных подходов, был придуман ООП-подход, суть которого заключается в следующем:

    Раз все программы оперируют некоторыми данными, то нужно взять эти данные, взять функции (методы), которые работают с этими данными и поместить в один объект.
    Если нужно будет изменить тип данных, добавить/отнять/поделить функционал, то программист будет работать с одним этим объектом. При этом, если разные объекты запрашивают что-либо друг у друга, то в ООП довольно легко сделать версионность и обратную совместимость.

    Ну а все остальное (наследование, полиморфизм и так далее) это уже возникло как следствие того, что ООП не решает все проблемы. Другой, более удобной глобальной парадигмы для сложных программ пока нет, вот ООП и занял свою нишу.

    Программы поменьше, особенно те, которые могут быть написаны одним человеком, могут писаться как угодно, но чем больше программа, тем сложнее ее поддерживать, а ООП - один из самых доступных методов "поделить" программу на независимые инкапсулированные кусочки.
    Ответ написан
    Комментировать
  • Зачем нужно ООП?

    @UnformedVoid
    Разработчик ПО
    ООП задумывалось как подход для декомпозиции кода на модули — классы. Каждый класс выполняет свою функцию и код остаётся чистым. Это в идеале. Но в реале, ООП устраняя сложности процедурного программирования, добавляет свои. Всё как вы и описали. Идеи, описанные в книжках, в реальных примерах не имеют применений. Для написания хорошего ООП кода нужно много знать и хорошо понимать абстрактную сторону. Плюс, ООП реализовано множеством способов. Популярные реализации ООП (Java, C#) по-сути являются Класс-Ориентированным Программированием. Помимо этого ООП увеличивает объём кода. Также, постулаты на котором, основано текущее (популярное) ООП создают предпосылки для хрупкого кода. Например, наследование. Изначально наследование подразумевалось как метод для переиспользования кода. Но со временем стало понятно, что большие иерархии классов ведут к непредсказуемым ошибкам. Если обнаруживается ошибка в базовом классе при наличии уже большой иерархии, её исправление чревато появлением сложных ситуаций с падением модулей завязанных на него. Можно привести другие примеры, но это тема для целой статьи, а возможно и для нескольких. Сейчас в языки ООП внедряются фичи из функционального программирования. Функциональное программирование базируется на идее композиции функций. ООП сейчас переходит (или уже перешло) от наследования к композиции объектов. То есть рекомендуется использовать композицию вместо больших иерархий наследования. Функциональное программирование лишено проблем ООП. Многие вещи, которые в ООП надо специально изучать (например шаблоны проектирования, внедрение зависимостей), в ФП являются либо основополагающим принципом, либо естественно выплывающим следствием (в ООП тоже много хороших практик выплывают естественным образом, однако, чтоб понять их естественность приходится хорошенько вглядываться). ФП очень многое даёт из коробки. ООП — неплохая штука, однако оно отживает свой век. ФП позволяет с гораздо меньшими затратами писать надёжный, расширяемый, краткий, элегантный и эффективный код.

    Прошу не воспринимать моё отношение к ООП как негативное — у него есть свои плюсы, своя ниша. Плюс, в контексте ООП люди смогли изучить очень многое, ведь ООП навело их на многие мысли, создало необходимость в изучении структуризации и модуляризации кода. В контексте ФП это не было бы так очевидно (например, внедрение зависимостей в рамках ФП вообще не интересно изучать, так как в ФП — это просто передача параметров функции, то что мы итак понимаем). Так что всему своё место и время.
    Ответ написан
    7 комментариев
  • Зачем нужно ООП?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Прочитайте "Чистый код" Роберта Мартина, там это доходчиво объясняется. Все существующие парадигмы программирования, паттерны проектирования и архитектурные принципы существуют ровно с одной целью - снизить сложность сопровождения и развития большой кодовой базы.
    Ответ написан
    Комментировать
  • Как подключиться к устройству через USB?

    gbg
    @gbg Куратор тега Железо
    Любые ответы на любые вопросы
    Слишком много неопределенностей. Начнем с того, что устройство может выглядеть в системе как разные виртуальные классы устройств - HID, COM-порт и много еще чего.

    Устройство однозначно идентифицируются по VID и PID, которые нужно покупать, чтобы быть абсолютно уникальными на рынке.

    Если к машине подключено несколько одинаковых устройств, то идентификация производится по VID PID и номеру на шине.

    Радиогубительские устройства, как правило, это виртуальные ком-порты, так что пользователю надо просто показать диалог, в котором он сможет выбрать нужное.
    Ответ написан
    6 комментариев