пользователей: 21276
предметов: 10469
вопросов: 178036
Конспект-online
зарегистрируйся или войди через vk.com чтобы оставить конспект.
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

Контейнеры. Использование традиционных подходов. Контейнеры в языках со строгим контролем типа данных.

Контейнеры в динамических языках.

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

 Контейнеры в языках программирования со строгим контролем данных.

Известн мнение, что принцип подстановки сам по себе обеспечивает решение проблемы контейнерных классов, поскольку принцип подстановки подтверждает, что переменная, которая объявлена с определенным типом можно присвоить на самом деле значение подтипа, и в этом отношении принцип подстановки до определенной  степени облегчает решение проблемы контейнеров, но не во всех случаях. Чтобы использовать подстановку программист прежде всего должен создать класс который был бы родителем всего, что программист захотел бы хранить в своей структуре данных. Объекты, хранящиеся в списке, должны быть описаны как подклассы родительского класса, поэтому программист не может построить список с целыми и вещественными типами, пока не породит эти типы из родительского класса. В действительности это не является сложной проблемой, поскольку можно получить разнородный список со значениями различных типов, если они являются подклассами родительского класса. Основная проблема возникает тогда, когда программист хочет сделать что-либо с элементом, извлеченным из списка, поскольку в этом отношении вступает свойство строгого контроля данных, которое определяет результат, принадлежащий родительскому классу, встает на пути программиста непреодолимой преградой, поэтому ему необходимо отменить подстановку дочернего типа данных (нарушить принцип подстановки). Можно ли определить тип значения, полученного из списка. Если это можно сделать, то позволит ли компилятор выполнить это присваивание безопасно с точки зрения сохранения типа. Извлечение элемента из структуры данных, как правило выполняется в несколько этапов, но применяется именно та техника, которая используется во многих коммерческих программных продуктов с использованием указанных структур данных. Сложность в использовании этих структур привела к необходимости рассмотреть альтернативные варианты. В языке С++ значение обычно не знают своего собственного динамического типа, и это усложняло построение контейнеров, поскольку программист должен не только приводить тип, но и обеспечивать собственный механизм определения динамических данных, и в связи с возникающей проблемой была предложена функция dynamic_cast которая и призвана решить обозначенную проблему.


19.06.2014; 15:41
хиты: 84
рейтинг:0
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2016. All Rights Reserved. помощь