Объекты существующие пока программа загружена в память
Разработка программных комплексов на базе объектно-ориентированного программирования
объекты, существующие внутри подпрограмм, время жизни которых исчисляется от вызова подпрограммы до ее завершения
Разработка программных комплексов на базе объектно-ориентированного программирования
Разработка программных комплексов на базе объектно-ориентированного программирования
Разработка программных комплексов на базе объектно-ориентированного программирования
Верны ли утверждения? А) Базовый класс - класс, определяемый как расширение другого класса, называемого родительским В) Производный класс - расширение или подкласс другого класса Подберите правильный ответ
Разработка программных комплексов на базе объектно-ориентированного программирования
Разработка программных комплексов на базе объектно-ориентированного программирования
Разработка программных комплексов на базе объектно-ориентированного программирования
Разработка программных комплексов на базе объектно-ориентированного программирования
Структура данных, состоящая из некоторого количества однородных элементов данных, каждый из которых содержит указатель на следующий элемент, - это ___
Разработка программных комплексов на базе объектно-ориентированного программирования
Разработка программных комплексов на базе объектно-ориентированного программирования
Разработка программных комплексов на базе объектно-ориентированного программирования
Двусторонняя связь классов, которая устанавливается между самостоятельными объектами, причем и со стороны одного класса, и со стороны другого класса в связи могут участвовать несколько объектов, - это ____
Разработка программных комплексов на базе объектно-ориентированного программирования
Принцип разработки программной системы, предполагающий реализацию ее в виде отдельных частей (модулей), - это ___
Разработка программных комплексов на базе объектно-ориентированного программирования
Разработка программных комплексов на базе объектно-ориентированного программирования
Разработка программных комплексов на базе объектно-ориентированного программирования
Реализует математический взгляд на значения, которые могут быть использованы в вычислениях, присвоены переменным, но никогда в действительности не модифицируемы, подход с использованием ________ функций
Разработка программных комплексов на базе объектно-ориентированного программирования
Отношение между однотипными, имеющими общие признаки, но разные понятия, при котором одно из понятий является обобщающим и включает в себя второе понятие, - это ______
Разработка программных комплексов на базе объектно-ориентированного программирования
Полиморфизм, используемый, если конкретный метод определяется типом объекта, называется ____ полиморфизмом
Разработка программных комплексов на базе объектно-ориентированного программирования
фигуры (прямоугольники, овалы) рассматриваются как субъекты и соединяются линиями, которые представляют собой отношения
визуальная среда программирования предоставляет графические или символьные элементы, которыми можно манипулировать интерактивным образом в соответствии с некоторыми правилами
Разработка программных комплексов на базе объектно-ориентированного программирования
При запуске программы компилятор C++ устанавливает отдельную область неиспользуемой памяти, которая называется свободной ___
Разработка программных комплексов на базе объектно-ориентированного программирования
конструктором по умолчанию является конструктор, не имеющий параметров, или конструктор, у которого все параметры имеют значения по умолчанию
Разработка программных комплексов на базе объектно-ориентированного программирования
Разработка программных комплексов на базе объектно-ориентированного программирования
Служебное слово private, public или protected, за которым поме шается двоеточие, является спецификатором ___
Разработка программных комплексов на базе объектно-ориентированного программирования
Событийно-ориентированное программирование - это способ построения компьютерной программы, при котором в коде выделяется главный цикл приложения, тело которого состоит из двух частей: выборки события и обработки ___
Разработка программных комплексов на базе объектно-ориентированного программирования
Разработка программных комплексов на базе объектно-ориентированного программирования
Конкретная реализация класса, обладающая характеристиками состояния, поведения и индивидуальности, - это _______
Разработка программных комплексов на базе объектно-ориентированного программирования
Свойство языка программирования, позволяющее объединить и защитить данные и код в объект и скрыть реализацию объекта от пользователя, - это ____
Разработка программных комплексов на базе объектно-ориентированного программирования
Верны ли утверждения? А) Статическое создание объектов выполняется в процессе компиляции программы В) Статическое уничтожение объектов выполняется при завершении программы Подберите правильный ответ
Разработка программных комплексов на базе объектно-ориентированного программирования
Специальным образом организованный объект, используемый для хранения объектов других классов и управления ими, - это
Разработка программных комплексов на базе объектно-ориентированного программирования
Разработка программных комплексов на базе объектно-ориентированного программирования
Разработка программных комплексов на базе объектно-ориентированного программирования
Описание класса содержит ключевое слово class, за которым следуют его имя и тело класса в ____ скобках
Разработка программных комплексов на базе объектно-ориентированного программирования
из всех одноименных методов иерархии выбирается тот, который соответствует фактическому типу вызвавшего его объекта
Разработка программных комплексов на базе объектно-ориентированного программирования
Разработка программных комплексов на базе объектно-ориентированного программирования
Свойство абстракции существовать во времени независимо от процесса, породившего данный программный объект, - это ____
Разработка программных комплексов на базе объектно-ориентированного программирования
Изменить реализацию объекта без модификации основной части программы, если его интерфейс остался прежним, позволяет
Разработка программных комплексов на базе объектно-ориентированного программирования
отношение между классами, обеспечивающее возможность конструирования новых, более сложных классов из уже имеющихся посредством добавления полей и определения новых методов
свойство языка программирования, позволяющее объединить и защитить данные и код в объект и скрыть реализацию объекта от пользователя
Разработка программных комплексов на базе объектно-ориентированного программирования
Верны ли утверждения? А) Объекты класса конструируются снизу вверх в следующем порядке: базовый класс, члены класса, производный класс В) Объекты класса уничтожаются сверху вниз в следующем порядке: производный класс, члены класса, базовый класс Подберите правильный ответ
Разработка программных комплексов на базе объектно-ориентированного программирования
Разработка программных комплексов на базе объектно-ориентированного программирования
Разработка программных комплексов на базе объектно-ориентированного программирования
Разработка программных комплексов на базе объектно-ориентированного программирования
модель, которая подвергается отображению с целью возможности изменения структуры, параметров или параметров ее отдельных частей
Разработка программных комплексов на базе объектно-ориентированного программирования
Верны ли утверждения? А) Иерархия - ранжированная или упорядоченная система абстракций В) Иерархия классов - иерархия, образуемая классами в соответствии с их взаимосвязью <> Подберите правильный ответ
Разработка программных комплексов на базе объектно-ориентированного программирования
Разработка программных комплексов на базе объектно-ориентированного программирования
Способ реализации полиморфизма, заключающийся в возможности одновременного существования в одной области видимости нескольких различных вариантов применения оператора, имеющих одно и то же имя, но различающихся типами параметров, к которым они применяются, - это перегрузка
3) ОО подход обеспечивает лучшую масштабируемость в программных проектах, т.е. создание программ разной степени сложности, поэтому большинство современных технологий проектирования предполагает применение ООп.
В теории программирования ОО подход определен как технология создания сложного ПО, кот. Основано на представлении программы в виде совокупности программных объектов. Основное достоинство ООП - сокращение количества межмодульных вызовов и уменьшение объемов информации, передаваемой между модулями, по сравнению с модульным программированием. Это достигается за счет более полной локализации данных и интегрирования их с подпрограммами обработки, что позволяет вести практически независимую разработку отдельных частей (объектов) программы.
Кроме этого, объектный подход предлагает новые технологические средства разработки, такие как, наследование, полиморфизм, композиция, наполнение, позволяющие конструировать более сложные объекты из более простых. В результате существенно увеличивается показатель повторного использования кодов, появляется возможность создания библиотек объектов для различных применений, и разработчикам предоставляются дополнительные возможности создания систем повышенной сложности.
В основу ООП положены следующие принципы:
2) ограничение доступа;
Уточним, что представляет собой каждый принцип.
Абстрагирование - процесс выделения абстракций в предметной области задачи. Абстракция - это совокупность существенных характеристик некоторого объекта, которые отличают его от всех других видов объектов и, таким образом, четко определяют особенности данного объекта с точки зрения дальнейшего рассмотрения и анализа. В соответствии с определением применяемая абстракция реального предмета существенно зависит от решаемой задачи: в одном случае нас будет интересовать форма предмета, в другом вес, в третьем - материалы, из которых он сделан, в четвертом – закон движения предмета и т.д. Современный уровень абстракции предполагает объединение всех свойств абстракции (как касающихся состояния анализируемого объекта, так и определяющих его поведение) в единую программную единицу некий абстрактный тип (класс).
Ограничение доступа (Инкапсуляция — это принцип, согласно которому любой класс должен рассматриваться как чёрный ящик — пользователь класса должен видеть и использовать только интерфейсную часть класса (т. е. список декларируемых свойств и методов класса) и не вникать в его внутреннюю реализацию. Поэтому данные принято инкапсулировать в классе таким образом, чтобы доступ к ним по чтению или записи осуществлялся не напрямую, а с помощью методов. Принцип инкапсуляции (теоретически) позволяет минимизировать число связей между классами и, соответственно, упростить независимую реализацию и модификацию классов.) Это сокрытие отдельных элементов реализации абстракции, не затрагивающих существенных характеристик ее как целого.
Необходимость ограничения доступа предполагает разграничение двух частей в описании абстракции:
а) интерфейс – совокупность доступных извне элементов реализации абстракции (основные характеристики состояния и поведения);
б) реализация – совокупность недоступных извне элементов реализации абстракции (внутренняя организация абстракции и механизмы реализации ее поведения).
Ограничение доступа в ООП позволяет разработчику:
1) выполнять конструирование системы поэтапно, не отвлекаясь на особенности реализации используемых абстракций;
2) легко модифицировать реализацию отдельных объектов, что в правильно организованной системе не потребует изменения других объектов.
Сочетание объединения всех свойств предмета (составляющих его состояния и поведения) в единую абстракцию и ограничения доступа к реализации этих свойств получило название инкапсуляции.
Модульность - это принцип разработки программной системы, предполагающий реализацию ее в виде отдельных частей (модулей). При выполнении декомпозиции системы на модули желательно объединять логически связанные части, по возможности обеспечивая сокращение количества внешних связей между модулями. Принцип унаследован от модульного программирования, следование ему упрощает проектирование и отладку программы.
Иерархия - это ранжированная или упорядоченная система абстракций. Принцип иерархичности предполагает использование иерархий при разработке программных систем.
В ООП используются два вида иерархии.
1. Иерархия «целое/часть» – показывает, что некоторые абстракции включены в рассматриваемую абстракцию, как ее части, например, лампа состоит из цоколя, нити накаливания и колбы. Этот вариант иерархии используется в процессе разбиения системы на разных этапах проектирования (на логическом уровне – при декомпозиции предметной области на объекты, на физическом уровне - при декомпозиции системы на модули и при выделении отдельных процессов в мультипроцессной системе).
2. Иерархия «общее/частное» – показывает, что некоторая абстракция является частным случаем другой абстракции, например, «обеденный стол – конкретный вид стола», а «столы – конкретный вид мебели». Используется при разработке структуры классов, когда сложные классы строятся на базе более простых путем добавления к ним новых характеристик и, возможно, уточнения имеющихся.
Один из важнейших механизмов ООП - наследование свойств в иерархии общее/частное. Наследование - это такое соотношение между абстракциями, когда одна из них использует структурную или функциональную часть другой или нескольких других абстракций (соответственно простое и множественное наследование).
Типизация - это ограничение, накладываемое на свойства объектов и препятствующее взаимозаменяемости абстракций различных типов (или сильно сужающее возможность такой замены). В языках с жесткой типизацией для каждого программного объекта (переменной, подпрограммы, параметра и т. д.) объявляется тип, который определяет множество операций над соответствующим программным объектом. Рассматриваемые далее языки программирования на основе Паскаля используют строгую, а на основе С - среднюю степень типизации.
Использование принципа типизации обеспечивает:
1) раннее обнаружение ошибок, связанных с недопустимыми операциями над программными объектами (ошибки обнаруживаются на этапе компиляции программы при проверке допустимости выполнения данной операции над программным объектом);
2) упрощение документирования;
3) возможность генерации более эффективного кода.
Тип может связываться с программным объектом статически (тип объекта определен на этапе компиляции - раннее связывание) и динамически (тип объекта определяется только во время выполнения программы - позднее связывание). Реализация позднего связывания в языке программирования позволяет создавать переменные - указатели на объекты, принадлежащие различным классам (полиморфные объекты), что существенно расширяет возможности языка.
Параллелизм - свойство нескольких абстракций одновременно находиться в активном состоянии, т.е. выполнять некоторые операции.
Существует целый ряд задач, решение которых требует наличия одновременного выполнения некоторых последовательностей действий. К таким задачам, например, относятся задачи автоматического управления несколькими процессами.
Реальный параллелизм достигается только при реализации задач такого типа на многопроцессорных системах, когда имеется возможность выполнения каждого процесса отдельным процессором. Системы с одним процессором имитируют параллелизм за счет разделения времени процессора между задачами управления различными процессами. В зависимости от типа используемой операционной системы (одно- или мультипрограммной) разделение времени может выполняться либо разрабатываемой системой (как в MS DOS), либо используемой ОС (как в системах Windows).
Устойчивость - свойство абстракции существовать во времени независимо от процесса, породившего данный программный объект, и/или в пространстве, перемещаясь из адресного пространства, в котором он был создан.
Различают:
1) временные объекты, хранящие промежуточные результаты некоторых действий, например, вычислений;
2) локальные объекты, существующие внутри подпрограмм, время жизни которых исчисляется от вызова подпрограммы до ее завершения;
3) глобальные объекты, существующие пока программа загружена в память;
4) сохраняемые объекты, данные которых хранятся в файлах внешней памяти между сеансами работы программы.
Все указанные выше принципы в той или иной степени реализованы в различных версиях объектно-ориентированных языков.
В теории программирования ООП определяется как технология создания сложного программного обеспечения, которая основана на представлении программы в виде совокупности объектов , каждый из которых является экземпляром определенного типа (класса ), а классы образуют иерархию с
П р и м е ч а н и е . Такое представление программы впервые было использовано в языке имитационного моделирования сложных систем Simula, появившемся еще в 60-х годах.
Естественный для языков моделирования способ представления программы получил развитие в другом специализированном языке моделирования - языке Smalltalk (70-е годы), а затем был использован в новых версиях универсальных языков программирования, таких как Pascal, С++, Ада, Modula.
Основное достоинство ООП - сокращение количества межмодульных вызовов и уменьшение объемов информации, передаваемой между модулями,
по сравнению с модульным программированием. Это достигается за счет более полной локализации данных и интегрирования их с подпрограммами обработки,
что позволяет вести практически независимую разработку отдельных частей
Кроме этого, объектный подход предлагает новые технологические средства разработки, такие как наследование, полиморфизм, композиция, наполнение ,
позволяющие конструировать сложные объекты из более простых. В результате существенно увеличивается показатель повторного использования кодов,
появляется возможность создания библиотек объектов для различных применений, и разработчикам предоставляются дополнительные возможности создания систем повышенной сложности.
Основной недостаток ООП - некоторое снижение быстродействия за счет более сложной организации программной системы.
В основу ООП положены следующие п р и н ц и п ы : абстрагирование,
ограничение доступа, модульность, иерархичность, типизация, параллелизм,
А б с т р а г и р о в а н и е - процесс выделения абстракций в предметной области задачи. Абстракция - совокупность существенных характеристик некоторого объекта, которые отличают его от всех других видов объектов и,
таким образом, четко определяют особенности данного объекта с точки зрения дальнейшего рассмотрения и анализа. В соответствии с определением применяемая абстракция реального предмета существенно зависит от решаемой задачи: в одном случае нас будет интересовать форма предмета, в другом вес, в третьем - материалы, из которых он сделан, в четвертом - закон движения предмета и т.д. Современный уровень абстракции предполагает объединение всех свойств абстракции (как касающихся состояния анализируемого объекта, так и определяющих его поведение) в единую программную единицу некий абстрактный тип (класс).
О г р а н и ч е н и е д о с т у п а - сокрытие отдельных элементов реализации абстракции, не затрагивающих существенных характеристик ее как целого.
Необходимость ограничения доступа предполагает разграничение двух частей в описании абстракции:
интерфейс - совокупность доступных извне элементов реализации абстракции (основные характеристики состояния и поведения);
реализация - совокупность недоступных извне элементов реализации абстракции (внутренняя организация абстракции и механизмы реализации ее поведения).
Ограничение доступа в ООП позволяет разработчику:
∙ выполнять конструирование системы поэтапно, не отвлекаясь на особенности реализации используемых абстракций;
∙ легко модифицировать реализацию отдельных объектов, что в правильно организованной системе не потребует изменения других объектов.
Сочетание объединения всех свойств предмета (составляющих его состояния и поведения) в единую абстракцию и ограничения доступа к реализации этих свойств получило название инкапсуляции.
М о д у л ь н о с т ь - принцип разработки программной системы,
предполагающий реализацию ее в виде отдельных частей (модулей). При выполнении декомпозиции системы на модули желательно объединять логически связанные части, по возможности обеспечивая сокращение количества внешних связей между модулями. Принцип унаследован от модульного программирования, следование ему упрощает проектирование и
И е р а р х и я - ранжированная или упорядоченная система абстракций.
Принцип иерархичности предполагает использование иерархий при разработке программных систем.
В ООП используются два вида иерархии.
Иерархия «целое/часть» - показывает, что некоторые абстракции включены
в рассматриваемую абстракцию как ее части, например, лампа состоит из цоколя, нити накаливания и колбы. Этот вариант иерархии используется в процессе разбиения системы на разных этапах проектирования (на логическом уровне - при декомпозиции предметной области на объекты, на физическом уровне - при декомпозиции системы на модули и при выделении отдельных процессов в мультипроцессной системе).
Иерархия «общее/частное» - показывает, что некоторая абстракция является частным случаем другой абстракции, например, « обеденный стол -
конкретный вид стола», а « столы - конкретный вид мебели». Используется при
разработке структуры классов, когда сложные классы строятся на базе более простых путем добавления к ним новых характеристик и, возможно, уточнения имеющихся.
Один из важнейших механизмов ООП - наследование свойств в иерархии общее/частное. Наследование - такое соотношение между абстракциями, когда одна из них использует структурную или функциональную часть другой или нескольких других абстракций (соответственно простое и множественное
Т и п и з а ц и я - ограничение, накладываемое на свойства объектов и
препятствующее взаимозаменяемости абстракций различных типов (или сильно сужающее возможность такой замены). В языках с жесткой типизацией для каждого программного объекта (переменной, подпрограммы, параметра и т. д.)
объявляется тип, который определяет множество операций над соответствующим программным объектом. Рассматриваемые далее языки программирования на основе Паскаля используют строгую, а на основе С - среднюю степень типизации.
Использование принципа типизации обеспечивает:
∙ раннее обнаружение ошибок, связанных с недопустимыми операциями над программными объектами (ошибки обнаруживаются на этапе компиляции программы при проверке допустимости выполнения данной операции над программным объектом);
∙ возможность генерации более эффективного кода.
Тип может связываться с программным объектом статически (тип объекта определен на этапе компиляции - раннее связывание) и динамически (тип объекта определяется только во время выполнения программы - позднее связывание). Реализация позднего связывания в языке программирования позволяет создавать переменные - указатели на объекты, принадлежащие различным классам (полиморфные объекты), что существенно расширяет возможности языка.
П а р а л л е л и з м - свойство нескольких абстракций одновременно находиться в активном состоянии, т.е. выполнять некоторые операции.
Существует целый ряд задач, решение которых требует одновременного выполнения некоторых последовательностей действий. К таким задачам,
например, относятся задачи автоматического управления несколькими процессами.
Реальный параллелизм достигается только при реализации задач такого типа на многопроцессорных системах, когда имеется возможность выполнения каждого процесса отдельным процессором. Системы с одним процессором имитируют параллелизм за счет разделения времени процессора между задачами управления различными процессами. В зависимости от типа используемой операционной системы (одноили мультипрограммной) разделение времени может выполняться либо разрабатываемой системой (как в
MS DOS), либо используемой ОС (как в системах Windows).
У с т о й ч и в о с т ь - свойство абстракции существовать во времени независимо от процесса, породившего данный программный объект, и/или в пространстве, перемещаясь из адресного пространства, в котором он был создан.
∙ временные объекты, хранящие промежуточные результаты некоторых действий, например вычислений;
∙ локальные объекты, существующие внутри подпрограмм, время жизни которых исчисляется от вызова подпрограммы до ее завершения;
∙ глобальные объекты, существующие пока программа загружена в память;
∙ сохраняемые объекты, данные которых хранятся в файлах внешней памяти между сеансами работы программы.
Все указанные выше принципы в той или иной степени реализованы в различных версиях объектно-ориентированных языков.
Объект - совокупность свойств (параметров) определенных сущностей и методов их обработки (программных средств), т.е. объект– это нечто целое, объединяющее некоторые данные, чем можно управлять с помощью кода.
КЛАСС - это обобщенное понятие, определяющее характеристики и поведение некоторого множества конкретных объектов этого класса, называемых экземплярами класса. Класс содержит данные, задающее свойства объектов класса и функции (методы), определяющие их поведение. В классе могут присутствовать и события, на которые может реагировать объекты класса.
Класс является типом данных, определяемым пользователем. Он должен представлять собой одну логическую сущность, например, является моделью реального объекта или процесса. Элементами класса являются данные и функции, предназначенные для их обработки.
Объекты (переменные типа класса, экземпляры класса) создаются явным или неявным образом, то есть либо программистом, либо системой.
Класс относится к ссылочным типам данных, память под которые выделяется в хипе. Таким образом, экземпляры классов хранят не сами объекты, а ссылки на объекты, то есть их адреса.
Процедуры и функции (подпрограммы) – это относительно самостоятельные фрагменты программы, оформленные специальным образом и снабженные именем. Процедуры и функции улучшают наглядность и читаемость программ.
Процедура описывается следующим образом:
Procedure (список параметров);
Функция отличается от процедуры тем, чтобы результат работы функции возвращается через ее имя, и вызов функции может быть использован в выражениях вместе с другими операторами. Функция описывается следующим образом:
Function (список параметров): ;
Использование имени подпрограммы в тексте программы приводит к активизации подпрограммы и называется ее вызовом. Сразу после активизации подпрограммы начинают исполняться входящие в нее операторы, и после выполнения последнего из них управление возвращается в основную программу, которая продолжает выполняться с оператора, стоящего непосредственно за оператором вызова процедуры или функции. Подпрограммы могут вызываться неоднократно.
Для обмена информацией между основной программой и подпрограммой используются параметры, которые придают подпрограмме универсальность. Параметры, указываемые в круглых скобках при описании процедуры или функции, называются формальными. Фактическими называются параметры, указываемые за именем подпрограммы при ее вызове.
Пример. Составим подпрограммы вычисления суммы первых целых Nчисел в виде процедуры и в виде функции.
1. Абстрагирование подразумевает собой процесс изменения уровня детализации программы. Основная роль абстрагирования — это выделение существенных характеристик некоторого объекта, которые отличают его от других, и, таким образом, определяют особенности данного объекта с точки зрения дальнейшего рассмотрения и анализа.
Например, объект «компьютер» состоит из совокупности других объектов (микросхем, шин, разъемов и т. д.), но при взаимодействии с компьютером пользователь не задумывается о его составляющих.
Инкапсуляция есть объединение в едином объекте данных и алгоритмов их обработки, т. е. кодов, оперирующих с этими данными. В терминологии объектно-ориентированного программирования данные называются свойствами илиполями объекта, а алгоритмы, реализованные в виде подпрограмм, — объектными методами.
Инкапсуляция является основным свойством ООП, организующим защиту информации от ненужных и случайных модификаций, что обеспечивает целостность данных и упрощает отладку программного кода после изменений; заключается в сокрытии внутренней структуры данных и реализации методов объекта от остальной программы, что повышает надежность разрабатываемого программного средства.
Инкапсуляция реализует в объектно-ориентированном программировании принципы, предложенные Д. Парнасом, которые гласят:
· разработчик программного средства должен предоставлять пользователю всю информацию, которая нужна для эффективного использования этого ПС, и ничего, кроме этого;
· разработчик программного средства должен знать только требуемое поведение объекта и ничего, кроме этого.
3. Модульность — это принцип разработки программного средства — основной принцип парадигмы модульного программирования.
Иерархия — это упорядоченная система абстракций.
Наследование — это такое соотношение между абстракциями, когда одна из них использует структурную или функциональную часть другой или нескольких других абстракций (соответственно простое и множественное наследование).
Наследованиезаключается в процессе создания новых объектов (потомков) на основе уже имеющихся объектов (предков) с передачей их свойств и методов по наследству; позволяет модифицировать поведение объектов и придает объектно-ориентированному программированию исключительную гибкость.
Объект-потомок автоматически наследует от родителя все свойства и методы, может дополнять объекты новыми свойствами и заменять или дополнять методы родителя.
Наследование является вторым основным свойством ООП.
5. Типизация — это ограничение, накладываемое на свойства объектов и препятствующее взаимозаменяемости абстракций различных типов.
Язык PASCAL использует строгую степень типизации.
Типизация обеспечивает:
· раннее обнаружение ошибок, связанных с недопустимыми операциями над программными объектами, что происходит на этапе компиляции;
· возможность генерации более эффективного кода.
6. Параллелизм — это свойство нескольких абстракций одновременно находиться в активном режиме, выполняя некоторые операции.
Реальный параллелизм достигается только при реализации задач на многопроцессорных системах.
7. Устойчивость — это свойство абстракции существовать во времени, не зависимо от процесса, породившего данный процесс объекта.
· временные объекты, хранящие промежуточные результаты некоторых действий (например, вычислений);
· локальные объекты, существующие внутри подпрограмм во время их работы;
· глобальные объекты, существующие пока программа загружена в память;
· сохраняемые объекты, данные которых хранятся в файлах внешней памяти между сеансами работы программы.
8. Полиморфизм — это свойство родственных объектов вести себя по-разному в зависимости от ситуации, возникающей в момент выполнения программы, таким образом, это — свойство объектов, имеющих одного общего родителя, решать разными способами схожие по смыслу задачи, что выражается в наличии у предка и потомка методов с одинаковыми именами, имеющих разную реализацию.
Полиморфизм позволяет единообразно работать с объектами разных типов, если они принадлежат одной иерархии, так как для каждого типа объектов при вызове одноименных методов будут выполняться свои действия.
Полиморфизм является третьим основным свойством ООП.
Все указанные выше принципы в той или иной степени реализованы в различных версиях объектно-ориентированных языков.
Существует ряд базовых вопросов управления памятью, которые в различных ОС решаются по-разному. Например, следует ли назначать каждому процессу одну непрерывную область физической памяти или можно выделять память участками? Должны ли сегменты программы, загруженные в память, находиться на одном месте в течение всего периода выполнения процесса или их можно время от времени сдвигать? Что делать, если сегменты программы не помещаются в имеющуюся память? Как сократить затраты ресурсов системы на управление памятью? Имеется и ряд других не менее интересных проблем управления памятью [5, 10, 13, 17].
Ниже приводится классификация методов распределения памяти, в которой выделено два класса методов – с перемещением сегментов процессов между ОП и ВП (диском) и без перемещения, т.е. без привлечения внешней памяти (рис. 6.5). Данная классификация учитывает только основные признаки методов. Для каждого метода может быть использовано несколько различных алгоритмов его реализации.
Рис. 6.5. Классификация методов распределения памяти
На рис. 6.6 показаны два примера фиксированного распределения. Одна возможность состоит в использовании разделов одинакового размера. В этом случае любой процесс, размер которого не превышает размера раздела, может быть загружен в любой доступный раздел. Если все разделы заняты и нет ни одного процесса в состоянии готовности или работы, ОС может выгрузить процесс из любого раздела и загрузить другой процесс, обеспечивая тем самым процессор работой.
Рис. 6.6. Варианты фиксированного распределения памяти
При использовании разделов с одинаковым размером имеются две проблемы.
- Программа может быть слишком велика для размещения в разделе. В этом случае программист должен разрабатывать программу, использующую оверлеи, чтобы в любой момент времени требовался только один раздел памяти. Когда требуется модуль, отсутствующий в данный момент в ОП, пользовательская программа должна сама его загрузить в раздел памяти программы. Таким образом, в данном случае управление памятью во многом возлагается на программиста.
- Использование ОП крайне неэффективно. Любая программа, независимо от ее размера, занимает раздел целиком. При этом могут оставаться неиспользованные участки памяти большого размера. Этот феномен появления неиспользованной памяти называется внутренней фрагментацией (internal fragmentation).
Бороться с этими трудностями (хотя и не устранить полностью) можно посредством использования разделов разных размеров. В этом случае программа размером до 8 Мбайт может обойтись без оверлеев, а разделы малого размера позволяют уменьшить внутреннюю фрагментацию при загрузке небольших программ.
В том случае, когда разделы имеют одинаковый раздел, размещение процессов тривиально – в любой свободный раздел. Если все разделы заняты процессами, которые не готовы к немедленной работе, любой из них может быть выгружен для освобождения памяти для нового процесса.
Когда разделы имеют разные размеры, есть два возможных подхода к назначению процессов разделам памяти. Простейший путь состоит в том, чтобы каждый процесс размещался в наименьшем разделе, способном вместить данный процесс (в этом случае в задании пользователя указывался размер требуемой памяти). При таком подходе для каждого раздела требуется очередь планировщика, в которой хранятся выгруженные из памяти процессы, предназначенные для данного раздела памяти. Достоинство такого способа в возможности распределения процессов между разделами ОП так, чтобы минимизировать внутреннюю фрагментацию.
Недостаток заключается в том, что отдельные очереди для разделов могут привести к неоптимальному распределению памяти системы в целом. Например, если в некоторый момент времени нет ни одного процесса размером от 7 до 12 Мбайт, то раздел размером 12 Мбайт будет пустовать, в то время как он мог бы использоваться меньшими процессами. Поэтому более предпочтительным является использование одной очереди для всех процессов. В момент, когда требуется загрузить процесс в ОП, выбирается наименьший доступный раздел, способный вместить данный процесс.
В целом можно отметить, что схемы с фиксированными разделами относительно просты, предъявляют минимальные требования к операционной системе; накладные расходы работы процессора на распределение памяти невелики. Однако у этих схем имеются серьезные недостатки.
- Количество разделов, определенное в момент генерации системы, ограничивает количество активных процессов (т.е. уровень мультипрограммирования).
- Поскольку размеры разделов устанавливаются заранее во время генерации системы, небольшие задания приводят к неэффективному использованию памяти. В средах, где заранее известны потребности в памяти всех задач, применение рассмотренной схемы может быть оправдано, но в большинстве случаев эффективность этой технологии крайне низка.
Для преодоления сложностей, связанных с фиксированным распределением, был разработан альтернативный подход, известный как динамическое распределение. В свое время этот подход был применен фирмой IBM в операционной системе для мэйнфреймов в OS/MVT (мультипрограммирование с переменным числом задач – Multiprogramming With a Variable number of Tasks). Позже этот же подход к распределению памяти использован в ОС ЕС ЭВМ [12] .
При динамическом распределении образуется перемененное количество разделов переменной длины. При размещении процесса в основной памяти для него выделяется строго необходимое количество памяти. В качестве примера рассмотрим использование 64 Мбайт (рис. 6.7) основной памяти. Изначально вся память пуста, за исключением области, задействованной ОС. Первые три процесса загружаются в память, начиная с адреса, где заканчивается ОС, и используют столько памяти, сколько требуется данному процессу. После этого в конце ОП остается свободный участок памяти, слишком малый для размещения четвертого процесса. В некоторый момент времени все процессы в памяти оказываются неактивными, и операционная система выгружает второй процесс, после чего остается достаточно памяти для загрузки нового, четвертого процесса.
Рис. 6.7. Вариант использования памяти
Поскольку процесс 4 меньше процесса 2, появляется еще свободный участок памяти. После того как в некоторый момент времени все процессы оказались неактивными, но стал готовым к работе процесс 2, свободного места в памяти для него не находится, а ОС вынуждена выгрузить процесс 1, чтобы освободить необходимое место и разместить процесс 2 в ОП. Как показывает данный пример, этот метод хорошо начинает работу, но плохо продолжает. В конечном счете, он приводит к наличию множества мелких свободных участков памяти, в которых нет возможности разместить какой-либо новый процесс. Это явление называется внешней фрагментацией (external fragmentation), что отражает тот факт, что сильно фрагментированной становится память, внешняя по отношению ко всем разделам.
Один из методов преодоления внешней фрагментации – уплотнение (compaction) процессов в ОП. Осуществляется это перемещением всех занятых участков так, чтобы вся свободная память образовала единую свободную область. В дополнение к функциям, которые ОС выполняет при распределении памяти динамическими разделами, в данном случае она должна еще время от времени копировать содержимое разделов из одного места в другое, корректируя таблицы свободных и занятых областей. Эта процедура называется уплотнением или сжатием.
Перечислим функции операционной системы по управлению памятью в этом случае.
- Перемещение всех занятых участков в сторону старших или младших адресов при каждом завершении процесса или для вновь создаваемого процесса в случае отсутствия раздела достаточного размера.
- Коррекция таблиц свободных и занятых областей.
- Изменение адресов команд и данных, к которым обращаются процессы при их перемещении в памяти, за счет использования относительной адресации.
- Аппаратная поддержка процесса динамического преобразования относительных адресов в абсолютные адреса основной памяти.
- Защита памяти, выделяемой процессу, от взаимного влияния других процессов.
Уплотнение может выполняться либо при каждом завершении процесса, либо только тогда, когда для вновь создаваемого процесса нет свободного раздела достаточного размера. В первом случае требуется меньше вычислительной работы при корректировке таблиц свободных и занятых областей, а во втором – реже выполняется процедура сжатия.
Так как программа перемещается по оперативной памяти в ходе своего выполнения, в данном случае невозможно выполнить настройку адресов с помощью перемещающего загрузчика. Здесь более подходящим оказывается динамическое преобразование адресов. Достоинствами распределения памяти перемещаемыми разделами являются эффективное использование оперативной памяти, исключение внутренней и внешней фрагментации, недостатком – дополнительные накладные расходы ОС.
При использовании фиксированной схемы распределения процесс всегда будет назначаться одному и тому же разделу памяти после его выгрузки и последующей загрузке в память. Это позволяет применять простейший загрузчик, который замещает при загрузке процесса все относительные ссылки абсолютными адресами памяти, определенными на основе базового адреса загруженного процесса.
Ситуация усложняется, если размеры разделов равны (или неравны) и существует единая очередь процессов, – процесс по ходу работы может занимать разные разделы. Такая же ситуация возможна и при динамическом распределении. В этих случаях расположение команд и данных, к которым обращается процесс, не является фиксированным и изменяется всякий раз при выгрузке, загрузке или перемещении процесса. Для решения этой проблемы в программах используются относительные адреса. Это означает, что все ссылки на память в загружаемом процессе даются относительно начала этой программы. Таким образом, для корректной работы программы требуется аппаратный механизм, который бы транслировал относительные адреса в физические в процессе выполнения команды, обращающейся к памяти.
Применяемый обычно способ трансляции показан на рис. 6.8. Когда процесс переходит в состояние выполнения, в специальный регистр процесса, называемый базовым, загружается начальный адрес процесса в основной памяти. Кроме того, используется "граничный" (bounds) регистр, в котором содержится адрес последней ячейки программы. Эти значения заносятся в регистры при загрузке программы в основную память. При выполнении процесса относительные адреса в командах обрабатываются процессором в два этапа. Сначала к относительному адресу прибавляется значение базового регистра для получения абсолютного адреса. Затем полученный абсолютный адрес сравнивается со значением в граничном регистре. Если полученный абсолютный адрес принадлежит данному процессу, команда может быть выполнена. В противном случае генерируется соответствующее данной ошибке прерывание.
Читайте также: