Характеристика системы программирования

ВВЕДЕНИЕ

 

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

Автоматизированные информационные системы стали играть в жизни общества большую роль в середине 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++ обладает более хорошей типизацией данных.


 



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: