- •1. Вычислительные машины.
- •1.1. Модель эвм фон-Неймана.
- •1.2. Архитектуры современных эвм. Основные принципы работы отдельных компонентов. Центральные процессоры. Каналы (устройства обмена).
- •1.3. Иерархия и организация памяти эвм. Запоминающие устройства с произвольной выборкой. Внешние запоминающие устройства. Стековая память.
- •1.4. Организация и обработка прерываний от внешних устройств эвм. Схема с общей шиной. Буферизация.
- •1.5. Относительная адресация. Виртуальная память. Прямой доступ к памяти.
- •Страничная организация виртуальной памяти
- •Сегментная организация виртуальной памяти
- •1.6. Конвейеризация. Устройства ввода-вывода. Организация ввода-вывода.
- •1.7. Векторные машины. Машины с архитектурой risc. Многопроцессорные машины. Понятие о параллельных процессах.
- •Типы Процессорная симметричность
- •Потоки команд и данных
- •Соединения процессоров
- •Программные реализации Многопроцессорная обработка с sisd
- •Многопроцессорная обработка simd
- •Многопроцессорная обработка misd
- •Многопроцессорная обработка mimd
- •Понятия и терминология параллельного программного обеспечения
- •2. Персональные эвм.
- •2.1. Архитектура семейства микропроцессоров 286/586 (регистры, сегментация памяти, реальный и виртуальный режимы, защита памяти, шина, структура памяти, структура ввода/вывода, прерывания).
- •2.2. Пэвм. Система команд и способы представления информации. Архитектура математического сопроцессора.
- •3. Программный интерфейс вычислительных систем.
- •3.1. Программирование на машинном языке. Ассемблеры и макроассемблеры. Компиляторы.
- •3.2. Система управления вводом/ выводом. Спулинг.
- •3.3. Языки высокого уровня. Интерпретаторы. Абсолютные и перемещающие загрузчики. Связывающие загрузчики и редакторы связей.
- •3.4. Микропрограммы. Эмуляция. Микропрограммная поддержка.
- •4. Операционные системы.
- •4.1. Функции ядра операционной системы.
- •4.2. Управление заданиями и процессами. Понятие процесса, состояния процесса. Обработка прерываний.
- •4.3. Управление памятью, файловые системы. Концепции распределения памяти. Понятия оверлейного перекрытия, свопинга. Концепции виртуальной памяти.
- •4.4. Понятие файла, организация файла, файловой системы. Блок управления файлом.
- •4.5. Управление внешними устройствами и связью. Принципы функционирования систем управления вводом/выводом.
- •4.6. Ос. Поддержка систем программирования. Надежность, безопасность и защита. Поддержка интерфейса прикладного программирования (api)
- •4.7. Понятие о режимах реального времени. Мультизадачность и многопоточость.
- •4.8. Составные части ос ms dos, unix, Windows 95/98.
- •4.9. Загрузка ос. Основные группы команд ms dos, unix.
- •5. Парадигмы программирования.
- •5.1. Процедурное, декларативное и объектно-ориентированное программирование.
- •5.2. Логическое и функциональное программирование.(Принципы и сравнительная характеристика).
- •5.3. Параллельное программирование.
- •5.4. Абстракция данных.
- •6. Формальные языки и грамматики.
- •6.1. Иерархия Хомского.
- •6.2. Регулярные грамматики. Конечные автоматы.
- •6.3. Кс-грамматики и мп-автоматы.
- •6.4. Алгоритмическая разрешимость проблем в автоматных и кс языках.
- •6.5. Нисходящий и восходящий анализ.
5. Парадигмы программирования.
5.1. Процедурное, декларативное и объектно-ориентированное программирование.
Процедурное (императивное) программирование является отражением архитектуры традиционных ЭВМ, которая была предложена фон Нейманом в 1940-х годах. Теоретической моделью процедурного программирования служит алгоритмическая система под названием Машина Тьюринга.
Программа на процедурном языке программирования состоит из последовательности операторов (инструкций), задающих процедуру решения задачи. Основным является оператор присваивания, служащий для изменения содержимого областей памяти. Концепция памяти как хранилища значений, содержимое которого может обновляться операторами программы, является фундаментальной в императивном программировании.
Выполнение программы сводится к последовательному выполнению операторов с целью преобразования исходного состояния памяти, то есть значений исходных данных, в заключительное, то есть в результаты. Таким образом, с точки зрения программиста имеются программа и память, причем первая последовательно обновляет содержимое последней.
Процедурный язык программирования предоставляет возможность программисту определять каждый шаг в процессе решения задачи. Особенность таких языков программирования состоит в том, что задачи разбиваются на шаги и решаются шаг за шагом. Используя процедурный язык, программист определяет языковые конструкции для выполнения последовательности алгоритмических шагов.
(по Чернацкому) в языке программирования есть основная программа и подпрограмма. В зависимости от языка программирования подпрограммы оформляются по разному. Примеры: Pascal, СИ, Кобол.
Декларативное программирование
Декларативное программирование — термин с двумя различными значениями.
Согласно первому определению, программа «декларативна», если она описывает каково́ нечто, а не как его создать. Например, веб-страницы на HTML декларативны, так как они описывают что должна содержать страница, а не как отображать страницу на экране. Этот подход отличается от языков императивного программирования, требующих от программиста указывать алгоритм для исполнения. В типично декларативном языке программирования XSLT, последовательность исполнения зависит, как правило, от входящего XML (в случае с использованием push-модели — «проталкивание»), в случае использования pull-модели (вытягивания), XSLT вырождается в частный случай функционального программирования и легко может быть заменена на аналогичный код в XQuery.
Согласно второму определению, программа «декларативна», если она написана на исключительно функциональном, логическом или языке программирования с ограничениями. Выражение «декларативный язык» иногда употребляется для описания всех таких языков программирования как группы, чтобы подчеркнуть их отличие от императивных языков.
Программы на языках декларативного программирования легко поддаются методикам метапрограммирования — когда программа может генерироваться по её описанию. Например XSLT-программа может быть сгенерирована из файла XML (часто с помощью другой XSLT) — см. Schematron.
Объе́ктно-ориенти́рованное, или объектное, программи́рование (в дальнейшем ООП) — парадигма программирования, в которой основными концепциями являются понятия объектов и классов. В случае языков с прототипированием вместо классов используются объекты-прототипы.
Основные понятия
Абстракция
Абстрагирование — это способ выделить набор значимых характеристик объекта, исключая из рассмотрения незначимые. Соответственно, абстракция — это набор всех таких характеристик.
Инкапсуляция
Инкапсуляция — это свойство системы, позволяющее объединить данные и методы, работающие с ними, в классе и скрыть детали реализации от пользователя.
Класс
Класс является описываемой на языке терминологии (пространства имён) исходного кода моделью ещё не существующей сущности (объекта). Фактически он описывает устройство объекта, являясь своего рода чертежом. Говорят, что объект — это экземпляр класса. При этом в некоторых исполняющих системах класс также может представляться некоторым объектом при выполнении программы посредством динамической идентификации типа данных. Обычно классы разрабатывают таким образом, чтобы их объекты соответствовали объектам предметной области.
Наследование
Наследование — это свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью. Класс, от которого производится наследование, называется базовым, родительским или суперклассом. Новый класс — потомком, наследником или производным классом.
Объект
Сущность в адресном пространстве вычислительной системы, появляющаяся при создании экземпляра класса или копирования прототипа (например, после запуска результатов компиляции и связывания исходного кода на выполнение).
Полиморфизм
Полиморфизм — это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.
Прототип
Прототип — это объект-образец, по образу и подобию которого создаются другие объекты. Объекты-копии могут сохранять связь с родительским объектом, автоматически наследуя изменения в прототипе; эта особенность определяется в рамках конкретного языка.
[править]
Определение ООП и его основные концепции
В центре ООП находится понятие объекта. Объект — это сущность, которой можно посылать сообщения, и которая может на них реагировать, используя свои данные. Данные объекта скрыты от остальной программы. Сокрытие данных называется инкапсуляцией.
Наличие инкапсуляции достаточно для объектности языка программирования, но ещё не означает его объектной ориентированности — для этого требуется наличие наследования.
Но даже наличие инкапсуляции и наследования не делает язык программирования в полной мере объектным с точки зрения ООП. Основные преимущества ООП проявляются только в том случае, когда в языке программирования реализован полиморфизм; то есть возможность объектов с одинаковой спецификацией иметь различную реализацию.
Язык Self, соблюдая многие исходные положения объектно-ориентированного программирования, ввёл альтернативное классам понятие прототипа, положив начало прототипному программированию, считающемуся подвидом объектного.