ВВЕДЕНИЕ
Информационная система — это организационно-техническая система, предназначенная для выполнения информационно-вычислительных работ или предоставления информационно-вычислительных услуг, удовлетворяющих потребности системы управления и ее пользователей—управленческого персонала, внешних пользователей.
Автоматизированные информационные системы стали играть в жизни общества большую роль в середине 20 века. В это время бурно начала развиваться индустрия вычислительной техники. Большинство компаний и организаций переходили на автоматизированные системы, потому что человеку становилось все сложнее управлять большим количеством информации и организовать ее должным образом. С этого момента у каждой компании появились свои информационные системы для стабильной работы.
В моём случае, я разрабатываю автоматизированную информационную систему «Регистратура поликлиники» на языке программирования С++. Эта простая программа обеспечивает стабильную работу поликлиники, упрощает запись ко врачам, работу медсестер: им больше не приходится всё писать в ручную или же искать карту пациента в архиве - всю работу выполняет автоматизированная информационная система:
· Поиск карты пациента;
· Запись;
· Создание новой карты;
Таким образом, мы приходим к выводу, что наше общество нуждается в автоматизированных информационных системах. Теперь общество выполняет очень много полезных, быстрых и сложных операций с помощью информационных систем. Я теперь понимаю, насколько сильную и большую роль играют автоматизированные системы в нашей жизни, без которых мы вернемся в первобытное общество.
ОБЩИЙ РАЗДЕЛ
Системные требования
Системные требования к электронной вычислительной машине:
- Процессор: AMD A6;
- Операционная система: Windows 7 или выше;
- Частота: 2000 MHz;
- Оперативная память: 4 ГБ;
- Клавиатура и мышь.
- Монитор 1600х900;
- Свободное пространство на жестком диске 19 ГБ.
Характеристика системы программирования
1.2.1 Анализ средств разработки
Сколько существуют компьютеры, столько же и существуют средства разработки программного обеспечения. С течением времени они совершенствуются, постоянно прогрессируют и с каждым разом становятся все удобнее в использовании и проще в изучении.
Для начала подвергнем анализу наиболее популярные языки программирования:Java, C#, C++ и VisualBasic[DataStructures…, 1999].
Анализ языка программирования
Таблица 1.1 - Парадигмы
| Возможность | Язык | |||
| Java | C# | C++ | VisualBasic | |
| Императивная | + | + | + | + |
| Объектно-ориентированная | + | + | + | + |
| Рефлексивная | -/+ | +/- | +/- | +/- |
| Обобщенное программирование | + | + | + | + |
| Логическая | - | - | - | - |
| Распределительная | + | -/+ | +/- | - |
- Императивная. Императивный язык описывает не задачу, а способ ее решения.
- Объектно-ориентированная. Она основана на представлении всего в языке в виде объектов. Объекты, в свою очередь, могут содержать в себе как переменные, так и методы для работы с ними. Выполняется поддержка основополагающих принципов ООП: полиморфизм, наследование и инкапсуляция.
- Рефлексивная. Это возможность, предполагающая, что язык программирования может оперировать собственным кодов как данными.
- Обобщенное программирование. При написании алгоритмов есть возможность передавать им данные любых типов.
- Логическая. Программа является набором некоторых правил и фактов вывода в определенном логическом исчислении.
- Распределительная. Поддержка языком программирования возможности распараллеливания вычислений.
Таблица 1.2 - Типизация
| Возможность | Язык | |||
| Java | C# | C++ | VisualBasic | |
| Статическая типизация | + | + | + | + |
| Явная типизация | + | + | + | + |
| Неявное приведение типов без потери данных | - | + | + | + |
| Неявное приведение типов с потерей данных | - | - | + | + |
| Неявное приведение типов в неоднозначных ситуациях | - | + | + | + |
| Алиасы типов | - | + | + | - |
| Информация о типах в runtime | + | + | -/+ | + |
| Информация о типах-параметрах в runtime | - | + | -/+ | + |
- Статическая типизация. Невозможность изменения типов в процессе выполнения после их объявления.
- Явная типизация. Параметры и типы переменных указываются явно.
- Неявное приведение типов без потери данных. Например, приведение числа с плавающей точкой к целому числу.
- Неявное приведение типов с потерей данных. Например, приведение целого числа к числу с плавающей точкой.
- Неявное приведение типов в неоднозначных ситуациях. Допустим, при попытке сложения числа 7 и строки «3» мы можем получить, как число 10, так и строку «73».
- Алиасы типов. Замена одного алиаса типа на другой, полностью эквивалентный ему, например, #typedefTYPE1 TYPE2.
- Информация о типах в runtime. Наличие возможности выяснить точный тип объекта в runtime.
Таблица 1.3 - Компилятор-интерпретатор
| Возможность | Язык | |||
| Java | C# | C++ | Visual Basic | |
| Open-source | + | + | + | + |
| Возможность компиляции | + | + | + | + |
| Bootstrapping | + | + | + | ? |
| Многопоточная компиляция | + | - | + | + |
| Интерпретатор командной строки | - | - | +/- | + |
| Условная компиляция | -/+ | + | + | + |
- Open-source компилятор или интерпретатор. Эта возможность говорит о наличии полноценного open-sourceкомпилятора или интерпретатора.
- Возможность компиляции. Способность компилировать код в нативный или в byte-codс возможностью JIT компиляции.
- Bootstrapping. Это значит, что компилятор написан на том же языке, что и компилируется им.
- Многопоточная компиляция. Способность компилятора распараллеливать процесс сборки на несколько потоков при условии наличии таковых.
- Интерпретатор командной строки. Возможность вводить инструкции языка в командную строку с последующим незамедлительным их выполнением.
- Условная компиляция. Наличие возможности включения или отключения компиляции участка программного кода в зависимости от выполнения условий, например, в C++ это делается с помощью #if … #endif.
Таблица 1.4 - Управление памятью
| Возможность | Язык | |||
| Java | C# | C++ | Visual Basic | |
| Создание объектов на стеке | - | + | + | - |
| Неуправляемые указатели | - | + | + | - |
| Ручное управление памятью | - | + | + | - |
| Сборка мусора | + | + | -/+ | + |
- Объекты на стеке. Способность создавать экземпляры любого типа данных не «в куче», а на стеке.
- Неуправляемые указатели. Характерен прямой доступ к памяти и наличие адресной арифметики.
- Ручное управление памятью. Возможность оперировать с данными «в куче» посредством, например, операторов newи deleteв языке C++.
- Сборка мусора. Компилятор способен сам отслеживать неиспользуемые участи памяти в куче и освобождать их.
Таблица 1.5 - Управление потоками вычислений
| Возможность | Язык | |||
| Java | C# | C++ | Visual Basic | |
| Конструкция goto | - | + | + | + |
| Инструкция break без метки | + | + | + | + |
| Инструкция break с меткой | + | - | - | + |
| Поддержка try/catch | + | + | + | + |
| Ленивые вычисления | - | -/+ | + | - |
- Конструкция goto. Подразумевает возможность безусловного перехода к метке.
- Инструкция breakбез метки. Безусловный выход из ближайшего цикла.
- Инструкция breakс меткой. Поддержка безусловного выхода из цикла, помеченного меткой.
- Поддержка try/catch. Наличие возможности обрабатывать исключения с помощью конструкции try/catch.
- Ленивые вычисления. Предполагает экономию времени на проведении вычислений, результаты которых в дальнейшем не понадобятся.
Таблица 1.6 - Типы и структуры данных
| Возможность | Язык | |||
| Java | C# | C++ | Visual Basic | |
| Кортежи | - | +/- | +/- | +/- |
| Многомерные массивы | +/- | + | + | + |
| Динамические массивы | +/- | +/- | + | + |
| Ассоциативные массивы | +/- | + | + | + |
| Контроль границ массивов | + | + | +/- | + |
| Цикл foreach | + | + | + | + |
| Целые числа произвольной длины | + | + | - | + |
| Целые числа с контролем границ | - | - | - | - |
- Кортежи. Способность компилятора вернуть из метода кортеж. Кортеж – это неименованный тип данных, содержащий безымянные поля произвольного типа.
- Многомерные массивы. Наличие в языке возможности создавать многомерные массивы, например, array[N][M].
- Динамические массивы. Наличие в языке возможности создавать массивы, которые способны изменять свой размер в процессе выполнения программного кода.
- Ассоциативные массивы. Это так называемыеhash-таблицы.
- Цикл foreach. Наличие в языке конструкции, благодаря которой существует возможность перебора всех элементов коллекции.
- Наличие поддержки длинной целочисленной арифметики.
- Целые числа с контролем границ. Определение типа чисел с заданным диапазоном, например, intrange [-77, 69], и при попытке присвоения переменной rangeзначения, выходящего за границы, происходила бы ошибка.
Таблица 1.7 - Объектно-ориентированные возможности
| Возможность | Язык | |||
| Java | C# | C++ | Visual Basic | |
| Интерфейсы | + | + | + | + |
| Мультиметоды | - | -/+ | -/+ | - |
| Переименование членов при наследовании | - | - | -/+ | - |
| Множественное наследование | - | - | + | - |
- Интерфейсы. Наличие синтаксической и семантической конструкций в программном коде, обеспечивающая специфицирование услуг, предоставляемых классом.
- Множественное наследование. Способность при создании класса наследоваться от нескольких, что позволяет производному классу содержать в себе функционал базовых классов.
Таблица 1.8 - Функциональные возможности
| Возможность | Язык | |||
| Java | C# | C++ | Visual Basic | |
| First class function | - | + | + | - |
| Анонимные функции | - | + | + | + |
| Лексические замыкания | + | + | + | + |
| Частичное применение | - | + | +/- | - |
| Каррирование | - | + | +/- | - |
- Firstclassfunction или объекты первого класса. В контексте определенного языка это названия сущностей, способных передаваться в качестве параметра, быть полученными при выполнении функции или быть присвоенными переменной.
- Анонимные функции. Наличие особого вида функций, объявляемых в месте использования и не получающих уникального идентификатора для их вызова.
- Лексическое замыкание. Наличие в функции ссылки на переменную, объявленную вне тела функции и не переданную в нее в качестве параметра.
Таблица 1.9 - Прочие свойства
| Возможность | Язык | |||
| Java | C# | C++ | VisualBasic | |
| Макросы | - | - | + | + |
| Шаблоны | + | + | + | + |
| Поддержка Unicodeв идентификаторах | + | + | + | + |
| Перегрузка функций | + | + | + | + |
| Динамические переменные | + | + | + | + |
| Значение параметров по умолчанию | - | + | + | + |
| Локальные функции | +/- | +/- | + | +/- |
| Наличие библиотек для работы с графикой | + | + | + | + |
- Макросы. Наличие макросистемы, обрабатывающей код программы до ее компиляции или выполнения.
- Шаблоны. Наличие возможности создания обобщенных классов для расширения функционала. Например, в C++ это template классы.
- Перегрузка функций. Возможность создания перегруженных функций, позволяющих принимать на вход различные наборы параметров.
- Динамические переменные. Способность языка создавать в нем переменные «в куче».
- Значение параметров по умолчанию. Способность вызывать конструкторы или функции без явной подстановки значений входных параметров, которые проинициализированы в описании функции.
- Наличие библиотек для работы с графикой. Возможность использовать функционал таких библиотек как: OpenGL, WebGL, OpenML, DirectX.
Исходя из приведенных сравнительных характеристик можно сказать, что по своей универсальности при написании программного обеспечения языку C++ нету равных. Считается, что при реализации программного продукта нужно отталкиваться от поставленной цели, и для этого в наибольшей степени подходят два языка: C++ и Java. Они оба обладают возможностью распараллеливания вычислений и созданием хорошего графического интерфейса, хотя в Javaдля этого требуется значительно больше оперативной памяти, что склоняет выбор не в его пользу. Также, в отличии от языка C++, Javaне поддерживает прямой доступ к памяти компьютера и ленивые вычисления, что сильно увеличило бы объем кода. Помимо прочего C++ обладает более хорошей типизацией данных.