Принцип открытости системы означает что

Принцип открытости системы означает что

(в ред. Федерального закона от 26.04.2007 N 63-ФЗ)

(см. текст в предыдущей редакции)

Принцип прозрачности (открытости) означает:

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

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

обеспечение доступа к информации, размещенной в информационно-телекоммуникационной сети «Интернет» на едином портале бюджетной системы Российской Федерации;

(абзац введен Федеральным законом от 07.05.2013 N 104-ФЗ)

стабильность и (или) преемственность бюджетной классификации Российской Федерации, а также обеспечение сопоставимости показателей бюджета отчетного, текущего и очередного финансового года (очередного финансового года и планового периода).

Секретные статьи могут утверждаться только в составе федерального бюджета.

Источник

Разработка и внедрение информационной системы

Принцип открытости системы означает что

Принципы создания информационной системы

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

Принцип «открытости» информационной системы

Это определение, сформулированное специалистами института IEEE (Institute of Electrical and Electronic Engineers ), унифицирует содержание среды, которую предоставляет открытая система для широкого использования. В настоящее время общепризнанным координационным центром по разработке и согласованию стандартов открытых систем является OASIS ( Organization for the Advancement of Structured Information Standards).

Общие свойства открытых информационных систем можно сформулировать следующим образом:

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

Структура среды информационной системы

Обобщенная структура любой ИС может быть представлена двумя взаимодействующими частями:

С этим разделением тесно связаны две группы вопросов стандартизации:

Эта модель используется более 20 лет и определяется системной сетевой архитектурой ( SNA ), предложенной IBM в 1974 году. Она основана на разбиении вычислительной среды на семь уровней, взаимодействие между которыми описывается соответствующими стандартами и обеспечивает связь уровней вне зависимости от построения уровня в каждой конкретной реализации ( рис. 8.1). Основным достоинством этой модели является детальное описание связей в среде с точки зрения технических устройств и коммуникационных взаимодействий. Вместе с тем она не принимает в расчет взаимосвязь с учетом мобильности прикладного программного обеспечения.

Принцип открытости системы означает что

Источник

Принципы SOLID: принцип открытости-закрытости

Принцип открытости/закрытости — The Open Closed Principle или OCP — один из пяти основных принципов объектно-ориентированного программирования и проектирования, сформулированных Робертом Мартином.

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

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

Следование принципу OCP заключается в том, что программное обеспечение изменяется не через изменение существующего кода, а через добавление нового кода. То есть созданный изначально код остаётся «нетронутым» и стабильным, а новая функциональность внедряется либо через наследование реализации, либо через использование абстрактных интерфейсов и полиморфизм.

Принцип открытости/закрытости Мейера основывается на идее, что разработанная изначально реализация класса в дальнейшем не модифицируется (разве что исправляются ошибки), а любые изменения производятся через создание нового класса, который обычно наследуется от изначального. Согласно определению Мейера реализация интерфейса может быть унаследована и переиспользована, но интерфейс может и измениться в новой реализации.

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

Источник

Принцип открытости-закрытости

Привет, Хабр! Перед вами перевод статьи Роберта Мартина Open-Closed Principle, которую он опубликовал в январе 1996 года. Статья, мягко говоря, не самая свежая. Но в рунете статьи дяди Боба про SOLID пересказывают только в урезанном виде, поэтому я подумал, что полный перевод лишним не будет.

Принцип открытости системы означает что

Я решил начать с буквы O, так как принцип открытости-закрытости, по сути, является центральным. Среди прочего тут есть много важных тонкостей, на которые стоит обратить внимание:

Это первая статья в моей колонке Заметки Инженера для The C++ Report. Статьи, публикуемые в этой колонке, будут фокусироваться на использовании C++ и ООП и затрагивать сложности в разработке ПО. Я постараюсь сделать так, чтобы материалы были прагматичны и полезны для практикующих инженеров. Для документации объектно-ориентированного дизайна в этих статьях я буду использовать нотацию Буча.

С объектно-ориентированным программированием связано много эвристик. Например, «все переменные-члены (member variables) должны быть закрытыми (private)», или «следует избегать глобальных переменных», или «определение типов во время исполнения опасно». В чем причина таких эвристик? Почему они правдивы? Всегда ли они правдивы? В этой колонке исследуется принцип проектирования, лежащий в основе этих эвристик, — принцип открытости-закрытости.
Ивар Якобсон сказал: «Все системы изменяются в процессе жизненного цикла. Это нужно иметь в виду при проектировании системы, у которой ожидается больше одной версии». Как же мы можем спроектировать систему, чтобы она была устойчива перед лицом изменений и у которой ожидается больше чем одна версия? Бертран Мейер рассказал нам об этом еще в далеком 1988 году, когда сформулирован знаменитый ныне принцип открытости-закрытости:

Програмные сущности (классы, модули, функции и т.д.) должны быть открыты для расширения и закрыты для изменений.

Если одно изменение в программе влечет за собой каскад изменений в зависимых модулях, то в программе проявляются нежелательные признаки «плохого» дизайна.

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

Описание

Модули, отвечающие принципу открытости-закрытости, имеют два главных признака:

Кажется, что два этих признака друг с другом не вяжутся. Стандартный способ расширить поведение модуля — внести в него изменения. Модуль, который не может быть изменен, обычно мыслится как модуль с фиксированным поведением. Как же могут быть выполнены эти два противоположных условия?

Ключ к решению — абстракция

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

Абстракции — это абстрактные базовые классы, а неограниченный набор возможных поведений представлен всеми возможными классами-наследниками. Модуль может манипулировать абстракцией. Такой модуль закрыт для изменений, так как он зависит от фиксированной абстракции. Также поведение модуля может быть расширено созданием новых наследников абстракции.

Принцип открытости системы означает что
Закрытый клиент

Принцип открытости системы означает что
Открытый клиент

Абстракция Shape

Рассмотрим приложение, которое должно рисовать круги и квадраты в стандартном GUI. Круги и квадраты должны быть нарисованы в определенном порядке. В соответствующем порядке будет составлен список кругов и квадратов, программа должна пройтись в этом порядке по списку и нарисовать каждый круг или квадрат.

На C, используя техники процедурного программирования, не отвечающие принципу открытости-закрытости, мы могли бы решить эту задачу как показано на листинге 1. Здесь мы видим множество структур данных с одним и тем же первым элементом. Этот элемент — код типа, который идентифицирует структуру данных как круг или квадрат. Функция DrawAllShapes проходит по массиву указателей на эти структуры данных, узнавая код типа и затем вызывая соответствующую функцию ( DrawCircle или DrawSquare ).

Функция DrawAllShapes не отвечает принципу открытости-закрытости, потому что она не может быть «закрыта» от новых типов фигур. Если бы я захотел расширить эту функцию возможностью рисовать фигуры из списка, включающего треугольники, то мне потребовалось бы изменить функцию. Фактически я должен изменять функцию для каждого нового типа фигуры, который мне нужно рисовать.

В реальном мире класс Shape содержал бы много других методов. И все же добавить новую фигуру в приложение все еще очень просто, так как все, что нужно сделать, — это ввести нового наследника и реализовать эти функции. Не нужно рыскать по всему приложению в поисках мест, требующих изменений.

Поэтому программы, отвечающие принципу открытости-закрытости, изменяются путем добавления нового кода, а не изменением уже существующего, в них не происходит каскадных изменений, свойственных программам, которые этому принципу не соответствуют.

Стратегия ввода закрытости

Очевидно, что ни одна программа не может быть на 100% закрыта. Например, что произойдет с функцией DrawAllShapes из листинга 2, если мы решим, что сначала должны быть нарисованы круги, а затем квадраты? Функция DrawAllShapes не закрыта от такого рода изменений. В целом не важно, насколько «закрыт» модуль, всегда есть какой-то тип изменений, от которого он не закрыт.

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

Использование абстракции для доcтижения дополнительной закрытости

Как мы можем закрыть функцию DrawAllShapes от изменений в порядке рисования? Помним, что закрытие базируется на абстракции. Поэтому, чтобы закрыть DrawAllShapes от упорядочивания, нам нужна некая «абстракция упорядочивания». Частный случай упорядочивания, представленный выше, — это рисование фигур одного типа перед фигурами другого типа.

В C++ эта функция может быть представлена как перегрузка оператора « Shape с методами сортировки.

Использование Data Driven подхода для достижения закрытости

Закрытости наследников класса Shape можно достигнуть, используя табличный подход, который не провоцирует изменения в каждом наследуемом классе. Пример такого подхода приведен в листинге 6.

Применив этот подход, мы успешно закрыли функцию DrawAllShapes от изменений, связанных с упорядочиванием, и каждого наследника класса Shape — от введения нового наследника или от изменения в политике упорядочивания объектов класса Shape в зависимости от их типа (например, такого, что объекты класса Squares должны рисоваться первыми).

Единственный элемент, который не закрыт от изменения порядка рисования фигур, — это таблица. Таблица может быть помещена в отдельный модуль, отделенный от всех остальных модулей, и поэтому ее изменения не затронут другие модули.

Дальнейшее закрытие

Эвристики и конвенции

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

Делайте все переменные-члены приватными

В ООП мы ожидаем, что методы класса не закрыты от изменений переменных — членов этого класса. Однако мы ожидаем, что любой другой класс, включая подклассы, закрыты от изменений этих переменных. Это называется инкапсуляцией.

Мы знаем, что тип или смысл этой переменной никогда не изменится. Так почему бы не сделать ее public и не дать клиенту прямой доступ к ней? Если переменная действительно никогда не изменится, если все клиенты соблюдают правила и лишь читают из этой переменной, тогда нет ничего страшного в том, что переменная публична. Однако подумайте, что случится, если один из клиентов воспользуется возможностью писать в эту переменную и изменит ее значение.

Никаких глобальных переменных… вообще!

Аргумент против глобальных переменных тот же, что и аргумент против публичных переменных-членов. Ни один модуль, который зависит от глобальной переменной, не может быть закрыт от модуля, который может писать в нее. Любой модуль, который использует эту переменную способом, не предполагаемым другими модулями, сломает эти модули. Это слишком рискованно — иметь множество модулей, зависящих от капризов какого-то одного зловредного модуля.
С другой стороны, в тех случаях, когда глобальные переменные имеют небольшое количество зависимых от них модулей или не могут быть использованы неправильным образом, они не причиняют вреда. Проектировщик должен оценить, сколько закрытости приноситься в жертву и определить, стоит ли того удобство, предоставляемое глобальной переменной.

Тут опять же вступают в игру проблемы стиля. Альтернативы использованию глобальных переменных обычно недороги. В таких случаях использование техники, которая привносит хоть и небольшой, но риск для закрытости вместо техники, которая такой риск полностью исключает, — это признак плохого стиля. Однако иногда использование глобальных переменных по-настоящему удобно. Типичный пример — глобальные переменные cout и cin. В таких случаях, если принцип открытости-закрытости не нарушается, можно пожертвовать стилем ради удобства.

RTTI — это опасно

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

Заключение

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

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

Источник

Статья 36 БК РФ. Принцип прозрачности (открытости)

Принцип прозрачности (открытости) означает:

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

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

обеспечение доступа к информации, размещенной в информационно-телекоммуникационной сети «Интернет» на едином портале бюджетной системы Российской Федерации;

стабильность и (или) преемственность бюджетной классификации Российской Федерации, а также обеспечение сопоставимости показателей бюджета отчетного, текущего и очередного финансового года (очередного финансового года и планового периода).

Секретные статьи могут утверждаться только в составе федерального бюджета.

Комментарии к ст. 36 БК РФ

Комментируемая статья раскрывает суть принципа прозрачности (открытости).

Согласно положениям статьи 6 Закона N 8-ФЗ к способам обеспечения доступа к информации о деятельности государственных органов и органов местного самоуправления относятся в том числе размещение государственными органами и органами местного самоуправления информации о своей деятельности в сети Интернет и предоставление пользователям информации по их запросу информации о деятельности государственных органов и органов местного самоуправления.

Согласно положениям статьи 132 Конституции Российской Федерации органы местного самоуправления самостоятельно управляют муниципальной собственностью, формируют, утверждают и исполняют местный бюджет, устанавливают местные налоги и сборы, осуществляют охрану общественного порядка, а также решают иные вопросы местного значения.

Как разъяснено в Определении Верховного Суда РФ от 11.11.2009 N 47-Г09-50, положения статьи 36 БК РФ, устанавливая принцип прозрачности (открытости) и его содержание в бюджетных отношениях, не содержат каких-либо норм о предоставлении дополнительных (по сравнению с установленными статьями 153, 265 БК РФ) полномочий законодательных органов по получению информации об исполнении бюджета для осуществления парламентского контроля.

Правовой смысл нормы, содержащейся в абзаце 2 статьи 36 БК РФ «доступность иных сведений о бюджетах по решению законодательных (представительных) органов государственной власти» предполагает недопустимость сокрытия от названного органа каких-либо сведений об исполнении бюджетов, но не предполагает правомочия названного органа вводить дополнительные формы отчетности об исполнении бюджета субъекта в нарушение федерального законодательства, установившего виды бюджетных отчетов и их периодичность.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *