Это способ построения компьютера на основе набора модулей
Главным требованием, предъявляемым к операционной системе, является способность выполнения основных функций: эффективного управления ресурсами и обеспечения удобного интерфейса для пользователя и прикладных программ. Современная ОС, как правило, должна реализовывать мультипрограммную обработку, виртуальную память, свопинг, поддерживать многооконный интерфейс, а также выполнять многие другие, совершенно необходимые функции.
Кроме этих функциональных требований к операционным системам предъявляются не менее важные принципы построения, обеспечивающие жизнеспособность системы: модульность, расширяемость, принцип функциональной избирательности, переносимость (мобильность), надежность и отказоустойчивость, совместимость, безопасность, производительность.
Модульный принцип построения компьютера
Под модулем в общем случае понимают функционально законченный элемент системы, который предполагает возможность без труда заменить его на другой при наличии заданных интерфейсов.
Принцип модульности заключается в следующем: построение ОС в виде модульной системы, в которой каждый модуль выполняет свои функции. При этом в составе ОС могут быть выделены следующие модули:
- модуль, отвечающий за загрузку ОС.
- модуль обработки прерываний.
- модуль справочной системы.
- конфигурационные файлы.
- утилиты.
- драйверы.
- библиотеки программ и др.
Способы разделения составных частей ОС в отдельные модули могут существенно различаться, но чаще всего разделение происходит именно по функциональному признаку.
Расширяемость
Принцип расширяемости заключается в следующем: код ОС должен быть написан таким образом, чтобы можно было легко внести дополнения и изменения, если это потребуется, и не нарушить целостность системы.
Расширяемость может достигаться за счет модульной структуры ОС, при которой программы строятся из набора отдельных модулей, за счет чего в ОС могут быть добавлены новые компоненты.
Изменения ОС обычно представляют собой приобретение новых свойств:
- поддержку новых устройств.
- возможность связи с сетями нового типа.
- поддержку графического интерфейса пользователя.
- использование более чем одного процессора и др.
Принцип функциональной избирательности
Принцип функциональной избирательности заключается в следующем: разделение всех модулей системы в зависимости от их приоритетов и наиболее оптимальное формирование состава ядра ОС.
В ОС выделяется некоторая часть важных модулей (ядро), которые должны постоянно находиться в оперативной памяти для более эффективной организации вычислительного процесса. Эта часть ОС образует основу системы и при формировании ее состава требуется учитывать два противоречивых требования:
- В состав ядра должны войти наиболее часто используемые системные модули.
- Количество модулей должно быть таким, чтобы объем памяти, занимаемый ядром, был бы не слишком большим (т.к. большая часть ядра загружается в оперативную память).
Переносимость (мобильность)
Требование переносимости кода тесно связано с расширяемостью. Расширяемость позволяет улучшать операционную систему, в то время как переносимость дает возможность легко перемещать всю систему на машину, базирующуюся на другом процессоре или аппаратной платформе, делая при этом по возможности небольшие изменения в коде.
Надежность, отказоустойчивость и совместимость
Принцип заключается в следующем: система должна быть защищена как от внутренних, так и от внешних ошибок, сбоев и отказов, ее действия должны быть всегда предсказуемыми, а приложения не должны быть в состоянии наносить вред ОС.
Принцип совместимости заключается в следующем:
- ОС должна выполнять программы, написанные для более ранних версий данной операционной системы, написанные для других ОС, а также для другой аппаратной платформы.
- Пользовательский интерфейс должен быть совместим с существующими системами и стандартами.
Безопасность и производительность
Принцип безопасности заключается в следующем:
- Защита ресурсов одного пользователя от других и установление квот по ресурсам для предотвращения захвата одним пользователем всех системных ресурсов (например, таких как память).
- Защита данных от несанкционированного доступа.
Принцип производительности заключается в следующем: система должна обладать настолько хорошим быстродействием и временем реакции, насколько это позволяет аппаратная платформа.
Современные ЭВМ могут иметь различную архитектуру, но обязательно содержат в своей структуре следующие элементы (Арифметико-логическое устройство (АЛУ), выполняющее арифметические и логические операции. Устройство управления (УУ), которое организует процесс выполнения программ. Запоминающее устройство (память) для хранения программ и данных. Внешние устройства для ввода–вывода информации (ВУ).) и используют основной принцип функционирования ЭВМ – принцип программируемости, дополненный новыми принципами, к которым можно отнести принципы модульности, магистральности и микропрограммируемости.
Модульность – это способ построения компьютера на основе набора модулей. Модулем называется конструктивно и функционально законченный электронный блок в стандартном исполнении. Это означает, что с помощью модуля может быть реализована какая-то функция либо самостоятельно, либо совместно с другими модулями.
Децентрализация управления предполагает иерархическую организацию структуры ЭВМ. Централизованное управление осуществляет устройство управления главного, или центрального, процессора. Подключаемые к центральному процессору модули (контроллеры и КВВ) могут, в свою очередь, использовать специальные шины или магистрали для обмена управляющими сигналами, адресами и данными. Инициализация работы модулей обеспечивается по командам центральных устройств, после чего они продолжают работу по собственным программам управления. Результаты выполнения требуемых операций представляются ими “вверх по иерархии” для правильной координации всех работ.
Иерархический принцип построения и управления характерен не только для структуры ЭВМ в целом, но и для отдельных ее подсистем.
Использование рассмотренных принципов и объединение в одном устройстве, названом центральный процессор (ЦП), АЛУ и УУ, привели к видоизмененной структуре современной ЭВМ, изображенной на рис. 1.
Наиболее распространенной является структура вычислительной системы (ВС), имеющая две или три (в большинстве случаев) общих магистрали (шины), к которым под воздействием устройств управления могут поочередно подключаться, входящие в систему узлы (см. рис. 2).
В приведенной на рис. 2. схеме, обработку информации осуществляет ЦП, синхронизируемый тактовыми импульсами устройства синхронизации. Обмен информацией между МП и остальными блоками ВС осуществляется по трем магистралям (шинам): адресной, данных и управляющей. Магистраль адреса (МА, ША) служит для передачи кода адреса, по которому производится обращение к устройствам памяти ввода-вывода и прочим внешним устройствам. Обрабатываемая информация и результаты вычислений передаются по магистрали данных (МД, ШД). Магистраль управления (МУ) передает управляющие сигналы на все блоки ВС, настраивая устройства, участвующие в выполняемой команде, на нужный режим работы.
Использование в ВС трех магистралей обеспечивает высокое быстродействие и упрощает процесс вычисления. Возможно построение ВС с одной или двумя магистралями, по которым последовательно передаются код адреса и обрабатываемая информация, но при этом значительно возрастает время выполнения команды и усложняется организация обмена информацией между узлами.
Компьютер – это универсальное электронное программно-управляемое устройство, предназначенное для автоматической обработки, хранения и передачи информации. Принцип программного управления компьютером состоит в том, что программа состоящая из набора команд, записывается в память компьютера, а компьютер автоматически исполняет эту программу. Программа — это заранее заданная, четко определённая последовательность арифметических, логических и других операций. Компьютер обрабатывает информацию, исполняя программы, которые разрабатываются человеком и вводятся в память компьютера.
МАГИСТРАЛЬНО-МОДУЛЬНЫЙ ПРИНЦИП ПОСТРОЕНИЯ КОМПЬЮТЕРА В основу архитектуры современных персональных компьютеров положен магистрально-модульный принцип. Модульная организация компьютера опирается на магистральный (шинный) принцип обмена информацией между устройствами. Кроме этого модульный принцип предполагает, что новые устройства (модули) должны быть совместимы со старыми и легко устанавливаться в том же месте, а это позволяет пользователю самому комплектовать нужную ему конфигурацию компьютера и модернизировать его. Функциональная организация компьютера Аппаратная реализация компьютера
Магистраль (системная шина) Устройства ввода Внешняя память Устройства вывода Процессор Внутренняя память
УСТРОЙСТВА ВВОДА Устройства ввода – это устройства для ввода информации в память компьютера. Эти устройства преобразуют различные виды информации (графическую, текстовую, числовую, звуковую) в цифровую (двоичную) форму К устройствам ввода относятся клавиатура, мышь, сканер, микрофон, графический планшет, джойстик и другие.
УСТРОЙСТВА ВВОДА Клавиатура – стандартное устройство для ввода алфавитно-цифровой информации и команд. Кроме алфавитно-цифровых клавиш клавиатура обычно имеет 12 функциональных клавиш, расположенных вдоль верхнего края. Функциональные клавиши могут программироваться пользователем. Например, во многих программах для получения помощи (подсказки) задействована клавиша F1, а для выхода из программы — клавиша F10. Управляющие клавиши имеют следующее назначение: Enter — клавиша ввода; Esc (Escape — выход) клавиша для отмены каких-либо действий, выхода из программы, из меню и т.п.; Ctrl и Alt — эти клавиши самостоятельного значения не имеют, но при нажатии совместно с другими управляющими клавишами изменяют их действие; Shift (регистр) — обеспечивает смену регистра клавиш (верхнего на нижний и наоборот); Insert (вставлять) — переключает режимы вставки (новые символы вводятся посреди уже набранных, раздвигая их) и замены (старые символы замещаются новыми); Delete (удалять) — удаляет символ с позиции курсора; Back Space или ← — удаляет символ перед курсором; Home и End — обеспечивают перемещение курсора в первую и последнюю позицию строки, соответственно; Page Up и Page Down — обеспечивают перемещение по тексту на одну страницу (один экран) назад и вперед; Tab — клавиша табуляции, обеспечивает перемещение курсора вправо сразу на несколько позиций до очередной позиции табуляции; Caps Lock — фиксирует верхний регистр, обеспечивает ввод прописных букв вместо строчных; Print Screen — обеспечивает печать информации, видимой в текущий момент на экране. Длинная нижняя клавиша без названия — предназначена для ввода пробелов. Клавиши ↑, ↓ , → , ← служат для перемещения курсора вверх, вниз, влево и вправо на одну позицию или строку. Малая цифровая клавиатура используется в двух режимах — ввода чисел и управления курсором. Переключение этих режимов осуществляется клавишей Num Lock.
УСТРОЙСТВА ВВОДА Мышь – это устройство-манипулятор для управления курсором и для работы с графическим интерфейсом. При перемещении мыши по коврику на экране перемещается указатель мыши, при помощи которого можно указывать на объекты и/или выбирать их. Используя клавиши мыши (их может быть две или три) можно задать тот или другой тип операции с объектом. Джойстик — устройство-манипулятор для ввода информации о движениях руки
УСТРОЙСТВА ВВОДА Сканер – устройство для оптического ввода изображений в память компьютера Если при помощи сканера вводится текст, компьютер воспринимает его как картинку, а не как последовательность символов. Для преобразования такого графического текста в обычный символьный формат используют программы оптического распознавания образов.
УСТРОЙСТВА ВВОДА Веб-камера – устройство для ввода в память компьютера видеоинформации в режиме реального времени. Используется для организации видеоконференций. Микрофон – устройства для ввода звуковой информации. Микрофон подключается к звуковой карте, которая преобразует звук в цифровую форму Графический планшет – устройство для ввода графической информации, рукописного текста с помощью специальной ручки.
УСТРОЙСТВА ВЫВОДА Устройства вывода – это устройства для вывода информации из памяти компьютера к пользователю. Эти устройства преобразуют информацию из двоичной (цифровой) формы в привычные для пользователя виды: текстовую, звуковую, графическую К устройствам ввода относятся: видеомонитор, принтер, акустические колонки, наушники, графопостроитель и другие.
УСТРОЙСТВА ВЫВОДА Принтер – устройство для отображения символьной и графической информации на бумаге. В настоящее время наибольшее распространение получили три типа принтеров: матричные, струйные и лазерные.
УСТРОЙСТВА ВЫВОДА Видеомонитор – устройство для отображения символьной и графической информации на экране Сейчас наибольшее распространение получили мониторы на базе электронно-лучевой трубки и жидкокристаллические мониторы (LCD)
УСТРОЙСТВА ВЫВОДА Акустические колонки и наушники – устройства для вывода звуковой информации
УСТРОЙСТВА ВЫВОДА Графопостроитель (плоттер) – устройство для вывода сложной графической информации на бумагу. Плоттеры используются для получения сложных конструкторских чертежей, архитектурных планов, географических и метеорологических карт, деловых схем, плакатов. Роликовые плоттеры прокручивают бумагу под пером, а планшетные плоттеры перемещают перо через всю поверхность горизонтально лежащей бумаги.
ПРОЦЕССОР Процессор – центральное устройство компьютера, которое осуществляет обработку информации, выполняя арифметические и логические операции, заданные программой, управляет вычислительным процессом и координирует работу всех устройств компьютера. Функции процессора: обработка данных по заданной программе путем выполнения арифметических и логических операций; программное управление работой устройств компьютера. Та часть процессора, которая выполняет команды, называется арифметико-логическим устройством (АЛУ), а другая его часть, выполняющая функции управления устройствами, называется устройством управления (УУ). Обычно эти два устройства выделяются чисто условно, конструктивно они не разделены.
ПРОЦЕССОР Современные процессоры выполняются в виде микропроцессоров. Физически микропроцессор представляет собой интегральную схему — тонкую пластинку кристаллического кремния прямоугольной формы площадью всего несколько квадратных миллиметров, на которой размещены схемы, реализующие все функции процессора. Кристалл-пластинка обычно помещается в пластмассовый или керамический плоский корпус и соединяется золотыми проводками с металлическими штырьками, чтобы его можно было присоединить к системной плате компьютера.
ПРОЦЕССОР Основной характеристикой процессора является производительность (быстродействие) – количество операций выполняемых за единицу времени. Производительность процессора определяется его тактовой частотой, разрядностью и его архитектурой.
ВНУТРЕННЯЯ ПАМЯТЬ Внутренняя память – это устройство, которое хранит информацию, необходимую компьютеру в данный момент работы. В состав внутренней памяти входят оперативная память, кэш-память и постоянная (специальная) память. Оперативная память (ОЗУ, англ. RAM) — это энергозависимое быстрое запоминающее устройство сравнительно небольшого объёма, непосредственно связанное с процессором и предназначенное для записи, считывания и хранения выполняемых программ и данных, обрабатываемых этими программами. Оперативная память используется только для временного хранения данных и программ, так как, когда компьютер выключается, вся информация, которая находилась в ОЗУ, удаляется. Обычно оперативная память исполняется из интегральных микросхем
Процессор компьютера может работать только с теми данными, которые хранятся в ячейках его оперативной памяти. Память состоит из множества ячеек. В каждой ячейке может храниться в данный момент только одно из двух значений: нуль или единица. Ячейка памяти, хранящая один двоичный знак, называется «бит». Бит – наименьшая частица памяти компьютера. В одном бите памяти хранится один бит информации. Свойства внутренней памяти: Дискретность: память состоит из отдельных ячеек – битов. Адресуемость: во внутренней памяти компьютера все байты пронумерованы. Нумерация начинается с нуля. Порядковый номер байта называется его адресом. Занесение информации в память, а также извлечение ее из памяти, проводится по адресам. ВНУТРЕННЯЯ ПАМЯТЬ
Структура оперативной памяти ВНУТРЕННЯЯ ПАМЯТЬ 0-й байт 0 1 0 1 1 0 0 0 1-й байт 1 1 0 0 1 1 0 1 2-й байт 1 0 1 0 1 1 1 1 3-й байт 0 0 1 0 1 0 0 1 …
ВНУТРЕННЯЯ ПАМЯТЬ Кэш-память или сверхоперативная память — очень быстрое ЗУ небольшого объёма, которое используется при обмене данными между микропроцессором и оперативной памятью для компенсации разницы в скорости обработки информации процессором и несколько менее быстродействующей оперативной памятью. Кэш-памятью управляет специальное устройство —контроллер, который, анализируя выполняемую программу, пытается предвидеть, какие данные и команды вероятнее всего понадобятся в ближайшее время процессору, и подкачивает их в кэш-память . Постоянная память (ПЗУ, англ. ROM) — энергонезависимая память, для хранения данных, которые никогда не потребуют изменения. Содержание памяти специальным образом "зашивается" в устройстве при его изготовлении для постоянного хранения. Из ПЗУ можно только читать. Прежде всего в постоянную память записывают программу управления работой самого процессора. В ПЗУ находятся программы управления дисплеем, клавиатурой, принтером, внешней памятью, программы запуска и остановки компьютера, тестирования устройств
ВНЕШНЯЯ ПАМЯТЬ Внешняя память – это устройства, предназначенные для долговременного хранения больших объёмов информации. Внешняя память энергонезависима, характеризуется меньшим быстродействием в сравнении с внутренней памятью, но имеет намного больший информационный объём. Устройства внешней памяти (накопители) обеспечивают запись информации на носители информации, а также считывание информации с носителей. В настоящее время наибольшее распространение получили накопители с магнитным и оптическим(лазерным) принципом записи и считывания информации.
ВНЕШНЯЯ ПАМЯТЬ Накопители на гибких магнитных дисках (дисководы) – устройства которые записывают информацию на гибкие магнитные диски (дискеты) диаметром 3,5 дюйма (89 мм) ёмкостью 1,44 Мбайт Гибкие магнитные диски (floppy disk) помещаются в пластмассовый корпус. Такой носитель информации называется дискетой. Дискета вставляется в дисковод. Магнитная головка дисковода устанавливается на определенную концентрическую дорожку диска, на которую и записывается (или считывается) информация Дискеты обычно используется для переноса данных с одного компьютера на другой .
ВНЕШНЯЯ ПАМЯТЬ Накопитель на жёстких магнитных дисках (англ. HDD — Hard Disk Drive) — это запоминающее устройство большой ёмкости, в котором носителями информации являются несменные круглые жёсткие пластины, обе поверхности которых покрыты слоем магнитного материала. Жесткие магнитные диски размещаются на одной оси, они заключены в металлический корпус и вращающихся с высокой угловой скоростью Жёсткие диски используется для постоянного хранения информации — программ и данных. Ёмкость жёстких дисков измеряется сотнями Гбайт
ВНЕШНЯЯ ПАМЯТЬ Накопители на оптических дисках (приводы оптических дисков) – устройства, которые записывают информацию и считывают информацию с помощью лазерного излучения. Информация записывается на диски двух основных видов - CD (Сompact Disk) ёмкостью около 700 Мбайт и DVD (Digital Video Disk) ёмкостью несколько Гбайт. Для работы с DVD необходимы DVD–приводы, которые могут работать также с CD. Используются различные типы оптических дисков: диски только для считывания информации (CD-ROM и DVD-ROM), диски для однократной записи (CD-R и DVD-R), диски для многократной записи, то есть перезаписываемые (CD-RW и DVD-RW). Для записи информации необходимы пишущие приводы CD-RW и приводы DVD-RW.
ВНЕШНЯЯ ПАМЯТЬ Лазерные дисководы используют оптический принцип чтения информации. На лазерных дисках CD (CD — Compact Disk, компакт диск) и DVD (DVD — Digital Video Disk, цифровой видеодиск) информация записана на одну спиралевидную дорожку (как на грампластинке), содержащую чередующиеся участки с различной отражающей способностью. Лазерный луч падает на поверхность вращающегося диска, а интенсивность отраженного луча зависит от отражающей способности участка дорожки и приобретает значения 0 или 1.
Существуют также оптические диски новых форматов: HD DVD ёмкостью 15 Гбайт однослойные и 30 Гбайт двухслойные Blu-Ray Disc ёмкостью 25 Гбайт однослойные и 50 Гбайт двухслойные Для работы с такими дисками необходимы специальные оптические приводы ВНЕШНЯЯ ПАМЯТЬ
ВНЕШНЯЯ ПАМЯТЬ Flash-память – это энергонезависимый тип памяти, позволяющий записывать и хранить информацию на микросхемах. Flash-память обеспечивает высокую сохранность данных, высокую скорость записи и считывания информации при небольших размерах. Устройства на основе flash-памяти не имеют в своём составе движущихся частей, что обеспечивает высокую сохранность данных при их использовании в мобильных устройствах
МАГИСТРАЛЬ (СИСТЕМНАЯ ШИНА) Магистраль – устройство, которое осуществляет взаимосвязь и обмен информацией между всеми устройствами компьютера. Магистраль включает в себя три многоразрядные шины, представляющие собой многопроводные линии: шину данных, шину адреса, шину управления. По шине данных между устройствами передаются данные, по шине адреса от процессора передаются адреса устройств и ячеек памяти, по шине управления передаются управляющие сигналы. Основными характеристиками системной шины является разрядность и частота
АППАРАТНАЯ РЕАЛИЗАЦИЯ КОМПЬЮТЕРА Конструктивно большинство основных устройств компьютера объединены в системном блоке, к которому подключаются внешние устройства (видеомонитор, клавиатура, мышь, принтер, сканер, звуковые колонки и другие). В системном блоке размещаются: блок питания; накопитель на жёстких магнитных дисках; накопитель на гибких магнитных дисках; накопитель на оптических дисках; системная плата; платы расширения; система вентиляции; система индикации и др. Корпус системного блока может иметь горизонтальную (DeskTop) или вертикальную (Tower — башня) компоновку.
АППАРАТНАЯ РЕАЛИЗАЦИЯ КОМПЬЮТЕРА Основные электронные компоненты, определяющие архитектуру процессора, размещаются на основной плате системного блока, которая называется системной или материнской На системной плате реализована магистраль обмена информацией, находятся разъёмы для установки микропроцессора и модулей оперативной памяти. Системные платы исполняются на основе наборов микросхем, которые называются чипсетами.
АППАРАТНАЯ РЕАЛИЗАЦИЯ КОМПЬЮТЕРА Периферийные устройства подключаются к шине не напрямую, а через свои контроллеры (адаптеры) и порты примерно по такой схеме: Контроллеры представляют собой наборы электронных цепей, которыми снабжаются устройства компьютера с целью совместимости их интерфейсов. Контроллеры, кроме этого, осуществляют непосредственное управление периферийными устройствами по запросам микропроцессора. Порты устройств представляют собой некие электронные схемы, позволяющие подключать периферийные устройства компьютера к внешним шинам микропроцессора. Портами также называют устройства стандартного интерфейса: последовательный, параллельный . Последовательный порт (COM1, COM2) обменивается данными с процессором побайтно, а с внешними устройствами — побитно. Параллельный порт (LPT)получает и посылает данные побайтно. К последовательному порту обычно подсоединяют медленно действующие или достаточно удалённые устройства, такие, как мышь и модем. К параллельному порту подсоединяют более "быстрые" устройства — принтер и сканер. Клавиатура и монитор подключаются к своим специализированным портам, которые представляют собой просто разъёмы. Сейчас широко используется универсальный USB-порт, обеспечивающий высокоскоростное подключение различных внешних устройств
Контроллеры дополнительных устройств, либо сами эти устройства, выполняются в виде плат расширения и подключаются к шине с помощью разъёмов расширения, называемых также слотами расширения. К дополнительным устройствам относятся видеоадаптер, звуковая карта, TV-карта, сетевая карта, внутренний модем и другие. АППАРАТНАЯ РЕАЛИЗАЦИЯ КОМПЬЮТЕРА
В любой профессии, не только в программировании, вы переживаете разные эмоциональные состояния по ходу выполнения проекта:
- Сначала есть энтузиазм от перспектив и возможностей.
- Затем приходит азарт. Первые ошибки и трудности вас только раззадоривают, заставляя мозг и фантазию работать на полную катушку.
- Следом проседает концентрация. В какой-то момент вы перестаёте обращать внимание на предупреждения и мелкие ошибки, откладывая решение этих проблем на потом.
- В итоге вы теряете мотивацию. Вы исправляете одну ошибку – появляется три. Вы пытаетесь добавить новую функцию, но выкидываете идею в мусорное ведро из-за нежелания тратить на это много времени.
Некоторые думают, что это нормально: стоит смириться и каждый раз проживать этот цикл. На деле же всё немного проще, и решение лежит не в области психологии, а в подходе к созданию кода.
Классическая проблема программирования
В западной литературе существует термин «big ball of mud» для описания архитектуры программы. Давайте переведём его дословно. Графически «большой шар грязи» можно представить в виде точек на окружности, символизирующих функциональные элементы, и прямых – связей между ними:
Похоже на ваши глаза перед сдачей проекта, не так ли?
Это иллюстрация той сложности, с которой вам надо работать, какое количество связей учитывать, если возникает ошибка.
Программирование не уникальная дисциплина: здесь можно и нужно применять опыт из других областей. Возьмём, к примеру, компьютер. Их производители не задумываются над многообразием задач, которые решает пользователь, и уж тем более не выделяют под каждую маленький процессор и память. Компьютер – это просто набор независимых сложных объектов, объединённых в одном корпусе при помощи разъёмов и проводов. Объекты не уникальны, не оптимизированы конкретно под вас, и тем не менее блестяще справляются со своей задачей.
В программировании есть точно такие же решения. Например, библиотеки. Они помогают не тратить драгоценное время на изобретение велосипеда. Однако для частных задач библиотеки не эффективны – создание отнимет уйму времени, а при единичной повторяемости эффективность стремится к нулю.
В этом случае полезнее обратиться к модулям. Модуль – логически завершённый фрагмент кода, имеющий конкретное функциональное назначение. Для взаимодействия модулей используются способы, не позволяющие изменять параметры и функциональность. Плюсы модульного программирования очевидны:
- Ускорение разработки.
- Повышение надёжности.
- Упрощение тестирования.
- Взаимозаменяемость.
Модульное программирование крайне эффективно при групповых разработках, где каждый сотрудник может сконцентрироваться только на своём фронте работ и не оглядываться на решения коллег. Однако и в индивидуальном подходе вы получаете, как минимум, вышеописанные преимущества.
Но не всё так просто.
Проблемы модульного программирования
Сама по себе идея использования модулей не сильно упрощает код, важно минимизировать количество прямых связей между ними. Здесь мы подходим к понятию «инверсия управления» (IoC). Упрощённо – это принцип программирования, при котором отдельные компоненты кода максимально изолированы друг от друга. То есть детали одного модуля не должны влиять на реализацию другого. Достигается это при помощи интерфейсов или других видов представления, не обеспечивающих прямого доступа к модульному коду.
В повседневной жизни таких примеров множество. Чтобы купить билет на самолёт или узнать время вылета, вам не надо звонить пилоту. Чтобы выпить молока, не надо ехать в деревню или на завод и стоять над душой у коровы. Для этого всегда есть посредники.
В модульном программировании существует три основные реализации:
- Внедрение зависимостей. Способ, при котором каждый элемент имеет свой интерфейс, взаимодействие модулей происходит через интерфейсы.
- Фабричный метод. Основывается на существовании некого объекта, предназначенного для создания других объектов. Иначе говоря, введение в программу прототипа, объединяющего общие черты для большинства объектов. Прямого взаимодействия между модулями нет, все параметры наследуются от «завода».
- Сервисный метод. Создаётся один общий интерфейс, являющийся буфером для взаимодействия объектов. Похожую функцию в реальной жизни выполняют колл-центры, магазины, площадки для объявлений и т.д.
Несмотря на то, что первая реализация IoC используется чаще всего, для первых шагов в модульном программировании лучше использовать другие два. Причина – простое создание интерфейсов лишь ограничивает доступ к модулям, а для снижения сложности кода необходимо также уменьшить количество связей. Интерфейсы, хаотично ссылающиеся на другие интерфейсы, код только усложняют.
Для решения этой проблемы необходимо разработать архитектуру кода. Как правило, она схожа с файловой структурой любого приложения:
Таким образом, поддержка принципов модульного программирования, инверсии управления и четкой архитектуры приложения поможет убить сразу трёх зайцев:
- Обеспечить чёткое функциональное разделение кода. При возникновении ошибок можно быстро определить источник, а исправления не приведут к появлению новых сбоев.
- Минимизировать количество связей. Это позволит упростить разработку, отдав на откуп нескольким разработчикам разные модули. Или вы сможете самостоятельно разрабатывать каждый блок без оглядки на другие, что тоже экономит время и силы.
- Создать иерархию с чёткой вертикалью наследования. Это повышает надёжность кода, так как тестирование провести проще, а результаты информативнее.
Соблюдение принципа модульности в больших проектах позволит сэкономить время и не расплескать стартовый задор. Более того, у вас получится наконец сосредоточиться на самом интересном – реализации оригинальных задумок в коде. А ведь это именно то, что каждый из нас ищет в программировании.
Читайте также: