Конфигурационный файл. Конфигурирование программного обеспечения

Совокупность настроек программы, задаваемая пользователем.

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

Иногда в UNIX-подобных системах конфигурация задаётся на этапе сборки программы, и для её изменения программу необходимо пересобирать. Ярким примером может служить ядро Linux . Почти во всех приложениях, собираемых на основе autoconf , можно подключать или отключать те или иные внешние библиотеки через параметры к скрипту configure .

Часто для хранения конфигурации используется специальная база данных. В Windows используется реестр Windows , а в GNOME - GConf ; в обоих случаях конфигурация имеет древовидную структуру.

Источники


Wikimedia Foundation . 2010 .

Смотреть что такое "Конфигурация программного обеспечения" в других словарях:

    Содержание 1 Бразилия 2 Великобритания 3 Индия … Википедия

    Конфигурация: В Викисловаре есть статья «конфигурация» Конфигурация (астрономия) … Википедия

    В области информационных и компьютерных систем под конфигурацией понимают определенный набор комплектующих, исходя из их предназначения, номера и основных характеристик. Зачастую конфигурация означает выбор аппаратного и программного обеспечения … Википедия

    У этого термина существуют и другие значения, см. Конфигурация. Совокупность параметров программного обеспечения. В операционных системах *NIX изменение конфигурации производится путем редактирования текстовых файлов настройки, расположенных, как … Википедия

    ГОСТ Р МЭК 61508-4-2007: Функциональная безопасность систем электрических, электронных, программируемых электронных, связанных с безопасностью. Часть 4. Термины и определения - Терминология ГОСТ Р МЭК 61508 4 2007: Функциональная безопасность систем электрических, электронных, программируемых электронных, связанных с безопасностью. Часть 4. Термины и определения оригинал документа: 3.7.4 анализ влияния (impact analysis) …

    Инфраструктура - (Infrastructure) Инфраструктура это комплекс взаимосвязанных обслуживающих структур или объектов Транспортная, социальная, дорожная, рыночная, инновационная инфраструктуры, их развитие и элементы Содержание >>>>>>>> … Энциклопедия инвестора

    система - 4.48 система (system): Комбинация взаимодействующих элементов, организованных для достижения одной или нескольких поставленных целей. Примечание 1 Система может рассматриваться как продукт или предоставляемые им услуги. Примечание 2 На практике… … Словарь-справочник терминов нормативно-технической документации

    СТО Газпром 2-2.3-141-2007: Энергохозяйство ОАО "Газпром". Термины и определения - Терминология СТО Газпром 2 2.3 141 2007: Энергохозяйство ОАО "Газпром". Термины и определения: 3.1.31 абонент энергоснабжающей организации: Потребитель электрической энергии (тепла), энергоустановки которого присоединены к сетям… … Словарь-справочник терминов нормативно-технической документации

    Р 50.1.048-2004: Информационно-телекоммуникационные игровые системы. Термины и определения - Терминология Р 50.1.048 2004: Информационно телекоммуникационные игровые системы. Термины и определения: 2.3.25 адаптивное сопровождение: Изменение программного продукта после поставки, обеспечивающее его работоспособное состояние в измененных… … Словарь-справочник терминов нормативно-технической документации

    ГОСТ Р МЭК 61513-2011: Атомные станции. Системы контроля и управления, важные для безопасности. Общие требования - Терминология ГОСТ Р МЭК 61513 2011: Атомные станции. Системы контроля и управления, важные для безопасности. Общие требования оригинал документа: [МАГАТЭ 50 SG D8] Примечание 1 См. также «система, важная для безопасности», «класс систем контроля… … Словарь-справочник терминов нормативно-технической документации


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

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

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

Что именно стоит настраивать.

Вот типичные примеры данных, которые часто стоит вынести в настройки:

  • Всевозможные каталоги. Например - пути до файлов данных, каталоги импорта/экспорта.
  • Сетевые настройки. Имена серверов, IP-адреса, порты, имена и пароли для автоматического доступа.
  • Настройки баз данных. Имена JDBC-драйверов, URL базы данных, SQL-запросы, зависимые от используемой БД.
  • Настройки внешнего вида. Настройки Swing-овского Look & Feel-а, используемые шрифты, размеры, цвета, настройки горячих клавиш.
  • Прочее... Любые другие вещи, которые могут менятся от пользователя к пользователю.

Например, довольно часто встречаемая ситуация - настройка соединения с БД. Начинающие программисты часто пишут нечто подобное:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection con = DriverManager.getConnection("jdbc:odbc:MyDatabase",user,password);

Таким образом программа привязывается к конкретному JDBC драйверу. Использовать другой драйвер, например заменить мост на RMI-прокси или, в случае Oracle, OCI на Thin без перекомпиляции уже нельзя.

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

  1. Настраиваемый объект не должен содержать знаний о формате файлов и способе чтения/записи. Это позволило бы, в случае необходимости, заменить один способ другим.
  2. Большинство настроек должны выполняться при помощи программы (подпункт меню или отдельная программа настройки). Это сильно облегчает жизнь человека, который занимается администрированием. У большинства "юниксоидов" это может вызвать непонимание:-), но редактированием текстовых файлов в современном мире во многих случаях не обойтись.
  3. Должно быть установлено разумное умолчание для отсутствующих параметров. Другими словами - необходимо, чтобы большинству пользователей для запуска программы нужно было бы сделать минимум настроек. Как правило это оставляет благоприятное первое впечатление о программе, а часто именно оно - самое важное.

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

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

Разумное же умолчание для параметров часто просто невозможно представить. Например, что поставить в качестве имени SMTP-сервера? В случае Unix-систем можно попробовать поставить localhost, но для Windows-мира это редко кому подойдёт.

Рассмотрим наиболее распространённые варианты:

Ini-файлы.

Ini-файлы - это был самый распространённый вариант в эпоху Windows 3.x. Сейчас в виндовых программах он стал вытесняться хранением настроек в реестре. Тем не менее ini - это один из простейших вариантов хранения настроек. К сожалению довольно часто эта простота заставляет прибегать к различно рода ухищрениям. Пример типичного ini-файла:

InputDir=INPUT OutputDir=OUTPUT ArchDir=ARHIV TransferPath = a:\cour NoReceived=No Numb = 3 MenuName1 = ~N~orton ProgName1 = mousesav c:\command.com /c nc MenuName2 = Win - ~Б~локнот ProgName2 = notepad MenuName3 = Импорт из формата АБ "Инкомбанк" ProgName3 = incom.bat

В Java нет стандартного класса для чтения ini-файлов, но это не проблема. Т.к. формат очень прост, его легко сделать самому:

Файлы Properties.

Этот формат распространён в Unix-мире. Он ещё проще ini-файлов, т.к. в нём отсутствует понятие секций - всё состоит из ключей и значений. Пример типичного файла:

# Database configuration Database.Driver=sun.jdbc.odbc.JdbcOdbcDriver Database.DataURL=jdbc:odbc:MyDatabase Database.Prop.user=user Database.Prop.password=password

В Java есть готовый класс для чтения/записи таких файлов (java.util.Properties), но с ним есть некоторые проблемы. Во первых для чтения невозможно задать кодировку файла, а это означает проблемы с русскими буквами. Во вторых стандартная функция записи сохраняет данные в порядке следования хэш-значений ключей, что значит - как ей больше понравится. Но это тоже легко разрешимо - достаточно написать свою читалку/писалку.

XML-файлы.

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

user password

Для чтения и записи таких файлов предназначены специальные библиотеки - так называемые XML-парсеры. Таких парсеров уже сделано довольно много, так что писать его самому нет большого смысла - достаточно лишь подобрать подходящий. Для парсеров было разработано два стандартных программных интерфейса - событийный (SAX) и иерархический (DOM). Есть также и парсеры со своим интерфейсом. Размер jar-а с парсером может варьироваться от нескольких килобайт до мегабайта - в зависимости от поддерживаемых интерфейсов и возможностей.

Для XML также написано несколько библиотек для универсального сохранения (сериализации) объектов в файлах XML. Такие библиотеки позволяют отделить алгоритм сохранения от самого объекта, а это, как уже упоминалось, имеет много плюсов.

Сериализация.

Под термином "сериализация" понимают запись содержимого объекта в поток двоичных данных. Обычно имеется в виду универсальный алгоритм, реализуемый классами java.io.ObjectOutputStream и java.io.ObjectInputStream . Пользоваться ими просто настолько, насколько это вообще возможно - обычно достаточно лишь отметить в классе поддержку при помощи интерфейса Serializable и отметить ключевым словом transient те поля объекта, которые сохранять не нужно. Собсно и всё. :-) Пример:

public class SerialObject implements java.io.Serializable { private String name; private transient int state; public SerialObject() {} public SerialObject(String n) { name = n; } public String getName() { return name; } public void setState(int s) { state = s; } }
Запись объектов:
SerialObject o = ...; OutputStream os = ...; ObjectOutputStream oos = new ObjectOutputStream(os); oos.writeObject(o);
Чтение объектов:
InputStream is = ...; ObjectInputStream ois = new ObjectInputStream(is); SerialObject o = (SerialObject)ois.readObject();
Использование сериализации - это один из самых простых вариантов по реализации, но и у него есть свои недостатки. Получаемые файлы являются двоичными, а значит в текстовом редакторе их уже не подправить - придётся делать редактирование параметров из программы. Кроме того, необходимо следить за изменением сохраняемых объектов, дабы не нарушить совместимость при изменении и развитии программы.

Базы данных.

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

  • Настройки связаны весьма сложным образом и древовидные структуры типа XML подходят плохо.
  • Доступ к настройкам должен быть только у авторизованых пользователей.
  • Доступ к этим данным должен быть и из других программ, например из генератора отчётов типа Crystal Reports.
БД могут применятся объектные или реляционные. Другие типы сейчас широкого распространения не имеют. Использовать хорошую объектную БД часто так же просто, как и сериализацию. Для реляционых баз можно применить объектную надстройку, которая также позволяет сильно упростить жизнь. Ну а можно делать обычные SELECT-ы.

Скрипты.

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

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

Для программ на Java в качестве скрипт-языка хорошо использовать язык Pyton в его Java-инкарнации под названием JPyton. Там легко организовать двусторонюю связь между программой и скриптом. Если не будет хватать скорости интерпретации, то код на Pyton-е можно скомпилировать в байт-код - получится обычный Java-класс. Про JPyton можно почитать на сайте http://www.jpyton.org/ или в новой книжке Брюса Эккеля Thinking In Patterns with Java (доступна на http://www.bruceeckel.com/).

Пример программы с конфигурацией в XML.

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

Пример содержимого конфигурационного файла:

Просто строчка Вторая строчка

В качестве XML-парсера используется Sun-овский парсер в режиме DOM. На таком простом примере не видно особых преимуществ формата XML над теми же файлами properties. Они становятся заметны только в достаточно сложных программах, где становится необходимо хранить списки однотипных параметров или же содержимое объектов с уровнем вложенности два или более.

Последнее обновление: 04.09.2017

Конфигурация по умолчанию

Начиная с версии 2.0, необязательно явным образом подключать конфигурацию в проект. Инфраструктура ASP.NET Core автоматически может это сделать. Единственное ограничение состоит в том, что в качестве файла конфигурации должен выступать файл с именем appsettings.json .

Итак, добавим в проект файл appsettings.json со следующим содержимым:

{ "color": "navy", "text": "Hello ASP.NET Core 2.0!" }

Используем этот файл конфигурации в классе Startup:

Using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Configuration; namespace ConfigurationApp { public class Startup { public Startup(IConfiguration config) { AppConfiguration = config; } public IConfiguration AppConfiguration { get; set; } public void ConfigureServices(IServiceCollection services) { } public void Configure(IApplicationBuilder app) { var color = AppConfiguration["color"]; var text = AppConfiguration["text"]; app.Run(async (context) => { await context.Response.WriteAsync($"

{text}

"); }); } } }

Чтобы получить конфигурацию из файла appsettings.json, достаточно передать в конструктор класса объект IConfiguration, который и будет содержать все настройки. И затем полученную конфигурацию можно использовать в приложении.

Dependency Injection

Более того конфигурация, составленная из файла appsettings.json, доступна по всему приложению, и мы можем ее получить через механизм Dependency Injection, например, в конструкторе какого-нибудь класса. Так, можно определить компонент middleware - ConfigMiddleware, который будет использовать конфигурацию:

Using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Configuration; namespace ConfigurationApp { public class ConfigMiddleware { private readonly RequestDelegate _next; public ConfigMiddleware(RequestDelegate next, IConfiguration config) { _next = next; AppConfiguration = config; } public IConfiguration AppConfiguration { get; set; } public async Task Invoke(HttpContext context) { var color = AppConfiguration["color"]; var text = AppConfiguration["text"]; await context.Response.WriteAsync($"

{text}

"); } } }

И затем использовать данный компонент в классе Startup:

Public class Startup { public Startup(IConfiguration configuration) { AppConfiguration = configuration; } public IConfiguration AppConfiguration { get; set; } public void ConfigureServices(IServiceCollection services) { } public void Configure(IApplicationBuilder app) { app.UseMiddleware(); } }

Передача конфигурации из разных источников

Однако выше приведенный способ получения конфигурации в middleware и в других классах будет работать, если в приложении определен файл appsettings.json, который и хранит все настройки. Однако если файл называется иначе, или настройки хранятся в файлах xml, ini, каких-то других источниках или просто определяются в памяти, то по умолчанию передача конфигурации в качестве сервиса работать не будет. И в этом случае необходимо явным образом указать, с каким объектом будет сопоставляться сервис IConfiguration.

Например, мы хотим хранить конфигурационные настройки в памяти и передавать их в качестве сервиса в middleware:

Public class Startup { public Startup() { var builder = new ConfigurationBuilder() .AddInMemoryCollection(new Dictionary { {"color", "red"}, {"text", "Hello ASP.NET Core 2.0"} }); AppConfiguration = builder.Build(); } public IConfiguration AppConfiguration { get; set; } public void ConfigureServices(IServiceCollection services) { services.AddTransient(provider => AppConfiguration); } public void Configure(IApplicationBuilder app) { app.UseMiddleware(); } }

В метод AddTransient() через фабрику сервисов передается объект, который будет использоваться в качестве сервиса IConfiguration. При этом код ConfigMiddleware не меняется, он также получает IConfiguration через конструктор.

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

Состав программного обеспечения (ПО) вычислительной системы называют программ­ной конфигурацией .

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

Автоматизированное ПО не может функционировать без пользователя, здесь человек, работающий на компьютере, ставит компьютеру задачи и оценивает их выполнение. Эти программы человек использует для достижения своих целей: подготовки документов, получения информации из тех или иных источников, просмотра текста, графики, видео и так далее. Человек выполняет творческую часть работы, а компьютер – рутинную.

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

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

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

Программы пользовательского уровня можно подразделить на:

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

    инструментальные, предназначенные для программирования, то есть разработки новых программ;

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

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

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

2. Важнейшее служебное ПО, а именно:

    служебные программные средства ОС Windows;

    диспетчеры файлов;

    архиваторы.

3. Из прикладного ПО в данной главе будет рассмотрен только программный пакет MicrosoftOffice– самое распространенная среда для делопроизводства. А на практике расширенные возможностиWord,Excel,PowerPoint,Accessосваиваются в рамках лабораторного практикума.

/etc/ (файлы либо не имеют расширения, либо с расширением .conf, .cnf, .config, …). Например:
fstab - точки монтирования разделов дисков
hosts - хосты (соответствие доменных имен - адресам)
filesystems - поддерживаемые файловые системы.

В операционных системах Windows изменение конфигурации чаще всего производится через GUI (графический интерфейс пользователя), однако имеется возможность изменять некоторые параметры вручную (в файлах *.ini)

См. также


Wikimedia Foundation . 2010 .

Смотреть что такое "Конфигурация (ПО)" в других словарях:

    - (лат. configurare, от cum с, и figura образ). 1) образ, вид. 2) положение планет в отношении друг друга. 3) положение звезд относительно известных созвездий. 4) конфигурация страны очертание её границ. Словарь иностранных слов, вошедших в состав… … Словарь иностранных слов русского языка

    Конфигурация: В Викисловаре есть статья «конфигурация» Конфигурация (астрономия) … Википедия

    См … Словарь синонимов

    конфигурация - и, ж. configuration f., нем. Konfiguration <лат. configuratio подобие. 1. астр. Взаимное расположение планет. Сл. 18. Всякое различие отстояния неба и звезд, от их разстояний между собою, конфигурации, и от схождения и расхождения происходит.… … Исторический словарь галлицизмов русского языка

    конфигурация - Совокупность значений параметров, определяющих работу устройства. [Интент] конфигурация — конфигурация (ITIL Service Transition) Общий термин, используемый для описания группы… … Справочник технического переводчика

    КОНФИГУРАЦИЯ, конфигурации, жен. (лат. configuratio изображение) (книжн.). Вид, очертание, образ. || Взаимное расположение каких нибудь предметов, соотношение каких нибудь предметов. Конфигурация звезд на небе. Толковый словарь Ушакова. Д.Н.… … Толковый словарь Ушакова

    - (от позднелат. configuratio придание формы расположение), внешний вид, очертание; взаимное расположение предметов … Большой Энциклопедический словарь

    КОНФИГУРАЦИЯ, и, жен. (спец.). Внешнее очертание, а также взаимное расположение предметов или их частей. К. изделия. | прил. конфигурационный, ая, ое. Толковый словарь Ожегова. С.И. Ожегов, Н.Ю. Шведова. 1949 1992 … Толковый словарь Ожегова

    Жен. наружный вид, очертанье, очерк, образ. Толковый словарь Даля. В.И. Даль. 1863 1866 … Толковый словарь Даля

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

    - (от лат. configuratio форма, уклад) англ. configuration; нем. Konfiguration. 1. Внешнее очертание, взаимное расположение к. л. предметов или их частей. 2. В гештальтпсихоло г и и образец, состоящий из взаимозависимых элементов, при изучении к… … Энциклопедия социологии

Книги

  • 1 С:Бухгалтерия предприятия 2. 0. Новая конфигурация , Засорин Сергей Валентинович. Рассматриваются структура, основные элементы, возможности, приемы и методы выполнения учетных операций, особенности проведения бухгалтерского учета, состав и настройка конфигурации "1 С:…
  • 1C:Предприятие. Комплексная конфигурация. Секреты работы , Наталья Рязанцева, Дмитрий Рязанцев. Книга посвящена изучению приемов и методов работы по ведению автоматизированного бухгалтерского учета, учета кадров и заработной платы, складского учета на предприятиях, в организациях и…