Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
подготовка к мк2.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
632.83 Кб
Скачать

25.Инкапсуляция. Структурные типы данных и их реалызация

Инкапсулированные типы данных можно рассматривать как средство разработки программ, которое позволяет создавать новые типы данных с операциями, выполняющимися только над объектами этих новых типов.

Инкапсуля́ция — свойство языка программирования, позволяющее объединить данные и код в объект и скрыть реализацию объекта от пользователя (прикладного программиста). При этом пользователю предоставляется только спецификация (интерфейс) объекта. Пользователь может взаимодействовать с объектом только через этот интерфейс.

Структура данных — это такой объект данных, который содержит другие объекты данных в качестве своих элементов или компонентов. Компонентом этой структуры может быть элементарный объект дан­ных или структура данных.

Основные атрибуты структур данных следующие.

1. Количество компонентов. Структура данных может иметь фиксированный размер, если количество входящих в нее компонентов неизменно в течение времени жизни этой структуры (Масси­вы и записи), либо переменный размер, если это количе­ство динамически изменяется (стеки, списки, множества, таблицы и файлы). Для типов структур данных переменного раз­мера обычно определены операции вставки и удаления компонентов. Часто используются указатели, позволяющие явным образом связывать объекты данных фиксированного размера для получения объектов данных переменной длины.

2. Тип каждого компонента. Структура данных является однородной (гомоген­ной), если все ее компоненты одного типа. В противном случае она называ­ется неоднородной (гетерогенной). Массивы, множества и файлы обычно однородны, в то время как записи и списки, как правило, неоднородны.

3. Имена, используемые для выбираемых компонентов. Тип, определяющий структуру данных, должен быть снабжен механизмом выборки, позволяю­щим идентифицировать и выбирать отдельные компоненты структуры дан­ных. Для массива именем отдельного компонента может являться целочи­сленный индекс или последовательность индексов; в случае записи именем обычно служит определенный программистом идентификатор.

4. Максимальное количество компонентов. Для структуры данных переменной длины, например для стека, может быть указан максимальный размер (мак­симальное число входящих компонентов).

5. Организация компонентов. Наиболее распространенным видом организации компонентов в структуре данных является их простая линейная последова­тельность (векторы, записи, стеки, списки и файлы). Но мас­сив, список и запись, однако, обычно расширяются до многомерных форм, которые могут рас­сматриваться как отдельные типы или просто как базовые последователь­ные типы, в которых компонентами являются структуры данных того же типа. Например, двухмерный массив (матрицу) можно рассматривать как отдельный тип.

Операции над структурами данных

Спецификация области определения и диапазона значения для операций над струк­турами данных задается почти так же, как и в случае элементарных типов данных. Большое значение имеют следующие новые классы операций, специфические для структур данных.

1. Операции выборки компонента.

2. Операции над всей структурой даниых.

3. Вставка/удаление компонентов.

4. Создание/уничтожение структур данных.

26. Инкапсуляция при помощи подпрог.

Инкапсуляция имеет большое значение при модификации программ, посколь­ку она существенно упрощает этот процесс. Если нам удалось инкапсулиро­вать тип данных, то можно изменять представление объектов этого типа в любой момент, просто модифицируя подпрограммы, которые манипулиру­ют объектами этого типа, так чтобы они могли работать с их новым представлени­ем взамен старого. Но если тип данных группа не инкапсулирован, то другие части программы могут продолжать использовать его старое представление. Поэтому любые изменения в представлении этого типа данных привели бы к тому, что эти другие части программы не смогли функционировать. Часто очень трудно опреде­лить все подпрограммы, на которые (в отсутствие инкапсуляции) может повлиять изменение способа представления конкретных объектов данных. Поэтому изме­нения в их представлении могут повлечь за собой ошибки в программе.

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