ВВЕДЕНИЕ
Информационная система — это организационно-техническая система, предназначенная для выполнения информационно-вычислительных работ или предоставления информационно-вычислительных услуг, удовлетворяющих потребности системы управления и ее пользователей—управленческого персонала, внешних пользователей.
Автоматизированные информационные системы стали играть в жизни общества большую роль в середине 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++ обладает более хорошей типизацией данных.