Что такое оод и ооп в уголовном праве

Обновлено: 30.06.2024

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

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

ОО действий заключается в причинении вреда или созданию реальных возможностей причинения вреда объектам уголовно-правовой охраны: общественным отношениям или интересам, благам конкретной личности, общества или государства.

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

Непреодолимая сила – это наличие таких чрезвычайных и неотвратимых в данной обстановке объективных факторов (сил природы, воздействие людей), когда человек лишается возможности надлежащим образом в соответствии со своим сознанием и волей. К НС приравнивается непреодолимое физическое принуждение (ч.1 ст.40 – не является преступлением, если лицо вследствие такого воздействия не могло руководить своими действиями) и психическое принуждение (угроза причинить вред интересам лица или интересам других значимых для него людей, с целью заставить его совершить преступное деяние – признается смягчающим обстоятельством).

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

Обязанности лица совершить определенные действия может вытекать из: закона (СК РФ - обязанность детей содержать престарелых родителей, обязанность родителей содержать несовершеннолетних детей); характера профессии или занимаемой должности (врач обязан оказывать помощь больному – ст.124, капитан судна обязан оказать помощь людям, терпящим бедствие – ст.270); предшествующего поведения лица (если одно лицо поставило второго в опасное для жизни состояние и не оказало ему помощи); особого характера взаимоотношений с другим лицом (неоказание помоши лицу, оказавшемуся в опасной ситуации и лишенного возможности принять меры к самосохранению в силу малолетства, старости, болезни или беспомощности, если виновный обязан иметь о нем заботу).

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

15. Понятие общественно опасных последствий, их виды.

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

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

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

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

К нематериальным ООП относят: причинение морального вреда, ущемление чести и достоинства личности, нарушение конституционных прав и свобод гражданина, организационный вред (нарущение нормальной деятельности организации), подрыв общественной безопасности и порядка, внешней безопасности страны).

Иногда одно деяние (Д или Б) может породить разные ООП: нарушение равноправия граждан (ст.136) может причинить потерпевшему имущественный вред, тяжкий моральный вред или ущемить его права.

В преступлениях с материальным составом ООП являются обязательным признаком объективной стороны преступления, поэтому оконченным такое преступление может считаться при наступлении таких последствий. Их характер и размер могут изменять квалификацию деяния (тяжкий, средней тяжести или легкий вред здоровью или смерть; крупный размер хищения).

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

image

Спойлер: устранение всех нарушений OOD приводит к улучшениям производительности, аналогичным преобразованиям Араса в ECS, к тому же использует меньше ОЗУ и требует меньше строк кода, чем ECS-версия!

TL;DR: Прежде чем прийти к выводу, что ООП отстой, а ECS рулит, сделайте паузу и изучите OOD (чтобы знать, как правильно использовать ООП), а также разберитесь в реляционной модели (чтобы знать, как правильно применять ECS).

Я уже долгое время принимаю участие во множестве дискуссий про ECS на форуме, частично потому, что не думаю, что эта модель заслуживает существовать в качестве отдельного термина (спойлер: это просто ad-hoc-версия реляционной модели), но ещё и потому, что почти каждый пост, презентация или статья, рекламирующие паттерн ECS, повторяют следующую структуру:

Основы объектно-ориентированного программирования были заложены столь же давно, если не раньше (этот стиль начал исследоваться в работе 1950-х годов)! Однако именно в 1990-х годах объектно-ориентированность стала модной, виральной и очень быстро превратилась в доминирующую парадигму программирования. Произошёл взрыв популярности многих новых ОО-языков, в том числе Java и (стандартизированной версии) C++. Однако так как это было связано с ажиотажем, то всем нужно было знать это громкое понятие, чтобы записать в своё резюме, но лишь немногие по-настоящему в него углублялись. Эти новые языки создали из многих особенностей ОО ключевые слова — class, virtual, extends, implements — и я считаю, что именно поэтому в тот момент ОО разделилась на две отдельные сущности, живущие собственными жизнями.

Я буду называть применение этих вдохновлённых ОО языковых особенностей "ООП", а применение вдохновлённых ОО техник создания дизайна/архитектур "OOD". Все очень быстро подхватили ООП. В учебных заведениях есть курсы ОО, выпекающие новых ООП-программистов… однако знание OOD плетётся позади.

Я считаю, что код, использующий языковые особенности ООП, но не следующий принципам проектирования OOD, не является ОО-кодом. В большинстве критических отзывов, направленных против ООП, используется для примера выпотрошенный код, на самом деле не являющийся ОО-кодом.

  • Абстрагирование
  • Инкапсуляция
  • Полиморфизм
  • Наследование

Ниже я буду ссылаться на эти принципы, называя их по акронимам — SRP, OCP, LSP, ISP, DIP, CRP…

Ещё несколько замечаний:

    Когда вас учили иерархиям/наследованию, то, возможно, давали подобную задачу: Допустим, у вас есть приложение университета, в которой содержится каталог студентов и персонала. Можно создать базовый класс Person, а затем класс Student и класс Staff, наследуемые от Person.

    Если вы используете подход с наследованием реализаций, то совершенно не учитываете LSP и думаете с практической точки зрения о возможности многократного использования кода, пользуясь наследованием как инструментом.

С этой точки зрения совершенно логично следующее:


Он корректно будет работать для квадратов (вычисляя сумму их площадей), но не сработает для прямоугольников.

Что делает этот код? Ну, ничего хорошего

Если говорить вкратце, то этот код заново реализует уже существующую особенность языка — композицию как библиотеку времени выполнения, а не как особенность языка. Можно представить это так, как будто код на самом деле создаёт новый метаязык поверх C++ и виртуальную машину (VM) для выполнения этого метаязыка. В демо-игре Араса этот код не требуется (скоро мы его полностью удалим!) и служит только для того, чтобы примерно в 10 раз снизить производительность игры.

Давайте оценим этот код в соответствии с OOD:

Если мы удалим фреймворк композиции, и у нас не будет базового класса Component, то как нашим GameObjects удастся использовать композицию и состоять из компонентов? Как сказано в заголовке, вместо написания этой раздутой VM и создания поверх неё GameObjects на странном метаязыке, давайте просто напишем их на C++, потому что мы программисты игр и это в буквальном смысле наша работа.

Вкратце об изменениях:

Объекты


У нас теперь есть обычный код C++:

Алгоритмы

Ещё одно серьёзное изменение внесено в алгоритмы. Помните, в начале я сказал, что интерфейсы и алгоритмы работают в симбиозе, и должны влиять на структуру друг друга? Так вот, антипаттерн "virtual void Update" стал врагом и здесь. Первоначальный код содержит алгоритм основного цикла, состоящий всего лишь из этого:

Вместо него мы создали более явный основной цикл, который сильно упрощает понимание потока управления (поток данных в нём по-прежнему обфусцирован, но мы исправим это в следующих коммитах).


Недостаток такого стиля в том, что для каждого нового типа объекта, добавляемого в игру, нам придётся добавлять в основной цикл несколько строк. Я вернусь к этому в последующем посте из этой серии.

img

image

Спойлер: устранение всех нарушений OOD приводит к улучшениям производительности, аналогичным преобразованиям Араса в ECS, к тому же использует меньше ОЗУ и требует меньше строк кода, чем ECS-версия!

TL;DR: Прежде чем прийти к выводу, что ООП отстой, а ECS рулит, сделайте паузу и изучите OOD (чтобы знать, как правильно использовать ООП), а также разберитесь в реляционной модели (чтобы знать, как правильно применять ECS).

Я уже долгое время принимаю участие во множестве дискуссий про ECS на форуме, частично потому, что не думаю, что эта модель заслуживает существовать в качестве отдельного термина (спойлер: это просто ad-hoc-версия реляционной модели), но ещё и потому, что почти каждый пост, презентация или статья, рекламирующие паттерн ECS, повторяют следующую структуру:

Основы объектно-ориентированного программирования были заложены столь же давно, если не раньше (этот стиль начал исследоваться в работе 1950-х годов)! Однако именно в 1990-х годах объектно-ориентированность стала модной, виральной и очень быстро превратилась в доминирующую парадигму программирования. Произошёл взрыв популярности многих новых ОО-языков, в том числе Java и (стандартизированной версии) C++. Однако так как это было связано с ажиотажем, то всем нужно было знать это громкое понятие, чтобы записать в своё резюме, но лишь немногие по-настоящему в него углублялись. Эти новые языки создали из многих особенностей ОО ключевые слова — class, virtual, extends, implements — и я считаю, что именно поэтому в тот момент ОО разделилась на две отдельные сущности, живущие собственными жизнями.

Я буду называть применение этих вдохновлённых ОО языковых особенностей "ООП", а применение вдохновлённых ОО техник создания дизайна/архитектур "OOD". Все очень быстро подхватили ООП. В учебных заведениях есть курсы ОО, выпекающие новых ООП-программистов… однако знание OOD плетётся позади.

Я считаю, что код, использующий языковые особенности ООП, но не следующий принципам проектирования OOD, не является ОО-кодом. В большинстве критических отзывов, направленных против ООП, используется для примера выпотрошенный код, на самом деле не являющийся ОО-кодом.

  • Абстрагирование
  • Инкапсуляция
  • Полиморфизм
  • Наследование

Ниже я буду ссылаться на эти принципы, называя их по акронимам — SRP, OCP, LSP, ISP, DIP, CRP…

Ещё несколько замечаний:

    Когда вас учили иерархиям/наследованию, то, возможно, давали подобную задачу: Допустим, у вас есть приложение университета, в которой содержится каталог студентов и персонала. Можно создать базовый класс Person, а затем класс Student и класс Staff, наследуемые от Person.

    Если вы используете подход с наследованием реализаций, то совершенно не учитываете LSP и думаете с практической точки зрения о возможности многократного использования кода, пользуясь наследованием как инструментом.

С этой точки зрения совершенно логично следующее:


Он корректно будет работать для квадратов (вычисляя сумму их площадей), но не сработает для прямоугольников.

Что делает этот код? Ну, ничего хорошего

Если говорить вкратце, то этот код заново реализует уже существующую особенность языка — композицию как библиотеку времени выполнения, а не как особенность языка. Можно представить это так, как будто код на самом деле создаёт новый метаязык поверх C++ и виртуальную машину (VM) для выполнения этого метаязыка. В демо-игре Араса этот код не требуется (скоро мы его полностью удалим!) и служит только для того, чтобы примерно в 10 раз снизить производительность игры.

Давайте оценим этот код в соответствии с OOD:

Если мы удалим фреймворк композиции, и у нас не будет базового класса Component, то как нашим GameObjects удастся использовать композицию и состоять из компонентов? Как сказано в заголовке, вместо написания этой раздутой VM и создания поверх неё GameObjects на странном метаязыке, давайте просто напишем их на C++, потому что мы программисты игр и это в буквальном смысле наша работа.

Вкратце об изменениях:

Объекты


У нас теперь есть обычный код C++:

Алгоритмы

Ещё одно серьёзное изменение внесено в алгоритмы. Помните, в начале я сказал, что интерфейсы и алгоритмы работают в симбиозе, и должны влиять на структуру друг друга? Так вот, антипаттерн "virtual void Update" стал врагом и здесь. Первоначальный код содержит алгоритм основного цикла, состоящий всего лишь из этого:

Вместо него мы создали более явный основной цикл, который сильно упрощает понимание потока управления (поток данных в нём по-прежнему обфусцирован, но мы исправим это в следующих коммитах).


Недостаток такого стиля в том, что для каждого нового типа объекта, добавляемого в игру, нам придётся добавлять в основной цикл несколько строк. Я вернусь к этому в последующем посте из этой серии.

img

Читайте также: