![]() |
|
сделать стартовой | добавить в избранное |
![]() |
Компьютеры, Программирование
Программное обеспечение
Прикладной или системный? |
Евгений Каратаев В разработке программы встречаются неясные вопросы относительно того, как спланировать тот или иной код, куда его отнести и как классифицировать. Код может быть классифицирован по самым различным классификациям - на код верхнего и нижнего уровня, на специфичный и библиотечный, и другим. Правильная классификация зачастую на первых же шагах разработки (как проектирования, так и реализации) может помочь в выявлении ошибок. Если читаешь схему данных или код, предназначенный для выполнения определенной задачи, которая классифицируется определенным образом и при этом код имеет признаки классификации не соответствующей задаче, то у меня срабатывает рефлекс и этому коду (схеме, диаграмме) я сразу приписываю проблемный крестик. Независимо от текущего положения дел расхождение классификационных признаков задачи и реализации есть индикатор по крайней мере потенциальной ошибки или мины, которая рано или поздно сработает. Одним из предметов споров иногда может выступать деление как программистов, так и кода на прикладных и системных. К системным программистам традиционно относят разработчиков операционок, драйверов, инструмента, а остальных - к прикладным. Здесь я опишу свое видение классификации кода по признаку - прикладной или системный. Сразу можно помолчать, выслушать кучу вопросов и попыток уточнения вроде "А смотря что понимать под прикладным". Вот в таком виде, чтобы было понятно без подобных уточнений, и поведем дальше речь. Одна из основных аксиом программирования гласит, что программа есть виртуальная машина для преобразования или передачи информации, сама по себе являющаяся информационной сущностью. Программа по отношению к одному слою является переработчиком информации, а по отношению к другому слою (операционная система) - перерабатываемая информация. Таким образом, рассматривая основные способы построения программ как сущностей в контексте операционной системы, можно утверждать, что существует объект, который обрабатывает программу и поддерживает ее функционирование. Связывание же двух противоположных сущностей - алгоритмов как неизменяемых и исполняемых информационных объектов и данных как изменяемых и неисполняемых объектов производится через определенные соглашения о вызове. Эти соглашения называются декларацией типа и описывают, каким именно образом алгоритм должен получать доступ к обрабатываемой памяти. Прекрасной иллюстрацией может служить использование в языках высокого уровня различения между знаковым и беззнаковым целым. Программист для обоих типов может использовать одинаковые операции, например, сложение. Но при этом транслятор, имея сведения о типе целого (знаковый или беззнаковый), генерирует различный машинный код. Дальнейшим развитием понятия типа является понятие класса в объектно - ориентированных языках. Если говорить о С , то на нем программист может переопределить в том числе и встроенные операции языка, например, определить операцию сложения для строк. Синтаксически использоваться же будет по-прежнему оператор сложения, но транслятор, имея информацию о типе, будет генерировать код, описанный программистом в перегруженном операторе.
Несложно видеть, что реализация типизированного доступа в обоих случаях опирается на "используя информацию о типе". Независимо от того, как именно реализуется поддержка типов - на этапе генерации кода, с применением таблиц виртуальных функций или присоединением теговых данных, где-то все равно должна существовать соответствующая информация. Именно эта информация и определяет поведение исполнительного механизма доступа. Таким образом, обрабатываемая информация описывается как собственно ее содержанием, так и ее форматом доступа. Довольно общеизвестные сведения, приведенные выше, нужно рассматривать как освежение знаний и погружение в контекст вопроса. Теперь о сути темы. Мое мнение по вопросу разделения кода на системный или прикладной состоит в правиле - если исполнение кода и его течение определяется форматом данных, то это системный код, а если код зависит от содержания данных, то это прикладной код. Правило очень простое, хотя и, может быть, спорное. Тем не менее мне оно помогает в планировании модулей и в проектировании. Как различить код, зависящий от значений данных и не зависящий от значений данных. Просто надо посмотреть точки ветвлений программы (функции), условных переходов и циклов и определить, от чего зависит выполнение условия. Если от значения данных, к тому же обрабатываемых, то код должен быть отнесен к прикладному. Если только от неких констант, типов, данных описывающих формат других данных, то это системный код. Более того - такая оценка может выявить очевидные логические ошибки. Например, если в коде написано, что если параметр беззнаковый, то делать одно, а если больше 12, то другое. Приведем несколько примеров, демонстрирующих различение прикладного и системного контекстов. s ri g fu c( s ri g s r) { i le = s rle ( s r.c s r()); for( i i = 0; i < le ; i ) s r); re ur s r; } В этом примере код не зависит от значения символов в строке. Какие бы они ни были, программа будет исполняться точно так же. Таким образом, этот код является системным. s ri g fu c( i sum) { if( sum < 10) re ur "мало"; if( sum < 100) re ur "нормально"; if( sum < 1000) re ur "много"; re ur "очень много"; } В этом коде выполнение алгоритма явно зависит от значений данных. Поэтому такой код я классифицирую как прикладной. При разработке программы я бы счел хорошим стилем размещение приведенных функций в разных модулях, с тем, чтобы существовали модули, отвечающие за прикладную часть и за системную часть. Впрочем, для небольшой программы размещение таких функций в одном модуле может быть вполне оправдано. Кроме приведенного правила классификации кода на системный и прикладной следует обращать внимание на смешанный случай, существующий в явном виде при составлении функций, оперирующих визуальным представлением данных. При визуализации данных следует учитывать существование национальных стандартов представления данных, которые могут различаться так же и форматом представления. Например, при визуализации времени по российскому стандарту следует указывать час, минуту и секунду, а при визуализации по английскому стандарту следует дописывать еще и символы представления "AM/PM".
Таким образом, код независящий от значения данных, начинает зависеть от контекста его работы, который есть данные. Еще более сложный случай - формирование визуализации строкового представления с применением особенностей языка, например "сумма прописью". К какой категории отнести такую функцию? Думаю, что к прикладной. Приведенное правило классификации, конечно, не есть догма. Но лично я стараюсь придерживаться таких простых правил в работе и они мне помогают в проектировании и отыскании ошибок.
Системная технологизация основана на методе системной технологии, использующем эффект совместного действия Законов системности и технологизации, принципов системности и технологизации, моделей систем и технологий. Как известно, процессы творчества массово невыполнимы в том смысле, что они не могут многократно выполняться для тиражирования одного и того же изделия. В отличие от них, технологии – это процессы, которые создаются, по замыслу конструктора и технолога, как многократно выполнимые совокупности простых операций изготовления одинаковых изделий. Простота операции в данной технологии для человека обеспечивается, в частности, тем, что сложные и громоздкие физические, механические, химические, информационные, управленческие и другие процессы «поручаются» машине. Системная технология рассматривает вопросы технологизации на новом системном уровне, что дает возможность построения более совершенных технологий – системных технологий, и превращения данного вида деятельности в системную деятельность: системная экология, системное образование и т.д. * Системная координация осуществляется на основе метода системной технологии и комплекса прикладных системных технологий, которые разработаны в соответствующих разделах, посвященных приложениям системной технологии в информатике, управлении, образовании, математике, экологии, в социальных технологиях и в экономике. * Системная технология включает в себя, как один из разделов, формальное определение и исследование изделия (продукта) технологической системы, как результата функционирования технологической системы материального, информационного и др. видов производства
1. Программное обеспечение компьютеров. Архиваторы
2. Извлечение из компьютера системного времени и даты
3. Разработка системного программного обеспечения
4. Программное обеспечение персональных компьютеров
5. Программное обеспечение персональных компьютеров
9. Программное обеспечение персонального компьютера
10. Системное программное обеспечение
11. Авторское право как институт правовой защиты прикладного программно-математического обеспечения ЭВМ
12. Прикладное программное обеспечение
13. Прикладное программное обеспечение
14. Проблемное и системное программное обеспечение
15. Разработка базы данных и прикладного программного обеспечения для автобусного парка
16. Разработка прикладного программного обеспечения деятельности предприятия в системе клиент-сервер
17. Выполнение прикладных задач на компьютере
18. Системное программное обеспечение
19. Методика обучения декоративно-прикладному искусству в учреждении дополнительного образования
25. "Военный коммунизм" - вынужденная политика или программный идеал большевизма
29. Цикл-метод обучения. (Методика преподавания эстонского языка)
30. Учебное сотрудничество как средство оптимизации обучения иностранному языку
31. Роль поэзии в обучении немецкому языку
32. Билеты по методике обучения иностранным языкам
33. Контроль в обучении поисковому чтению на среднем этапе обучения иностранного языка в школе
34. Декоративно-прикладное искусство допетровской России
35. Начальный этап обучения игры на аккордеоне
36. Реферат по научной монографии А.Н. Троицкого «Александр I и Наполеон» Москва, «Высшая школа»1994 г.
37. Декоративно-прикладное искусство допетровской России
41. Защита информации в системах дистанционного обучения с монопольным доступом
42. Сопряжение спектрометра с персональным компьютером
44. Современное поколение персональных компьютеров
45. Что такое мультимедийный компьютер?
46. Устройство компьютера и его основные блоки
47. Архитектура персонального компьютера
48. История компьютера и компьютерной техники
49. Управление звуковой картой компьютера
52. Краткий конспект лекций по Теории тестирования аппаратных и программных средств
57. Разработка АРМ на основе персонального компьютера для дома
59. Есть ли пределы развития и миниатюризации компьютеров?
60. Устройство персонального компьютера
61. Современные системные платы
62. Программное обеспечение в фазе модернизации
63. Программатор ПЗУ /программный интерфейс/
64. Типовые расчеты надежности систем на персональном компьютере
65. Теория системного управления
66. По решению прикладных задач на языке FRED
69. Системное программирование
73. Помощь в обучении программированию
74. Диплом Программная система "Аттестации ИТ-специалистов"
76. Оптимизация плана работ по отладке программных продуктов
77. Программное обеспечение пункта обмена валюты банка
78. Крупнейшие фирмы-разработчики операционных систем и программных средств
79. Прикладная программа Excel
80. Применение программного комплекса Electronics Workbench для разработки радиоэлектронных устройств
82. Вирусы и антивирусное программное обеспечение
83. Сравнительный анализ каскадной и спиральной моделей разработки программного обеспечения
84. Вопросы к дисциплине: Стандартизация и проектирование программных средств (СППС)
89. Программированное обучение и контроль по физиологии
90. Применение компьютеров в медицине
91. Субъект преступления ("подновлённая" версия реферата 6762)
92. Компьютер и окружающий мир
95. Обучение в Германии (Доклад)
96. Место интенсивной методики в системе обучения иностранному языку в средней школе ([Курсовая])