Лекции по информатике (984119), страница 33
Текст из файла (страница 33)
В частности, .к развиваемости относят любые средства расширения языка: процедурность, модульность, наследуемость и об ьектпая ориентация. Последние две фундаментальные концепции нам предстоит еще рассмотреть. Работающая программа это материализованный интсллект и труд высококвалифицированных людей, который не только дорого стоит, но и содержит в себе элемент творчества. Поэтому идеал развиваемости является голубой мечтой программиста. Па заре программирования развиваемость выражалась в библиотеках стандартных программ и средствах модуляризапии. Это были средства заимствования, не защищенные от несанкционированного использования и разрушения. Пример: директива Фтпс1ис1е.
Идеал развиваемости должен гарантировать защиту программых услуг: защиту авторского права разработчика услуг и защиту потребителя от неправильного использования услуг, но не настолько тотальную, чтобы этим всем нельзя было пользоваться. В настоя!цс;е В1хемя 1эазвиваемость считается критичным свойством языке. п1эог1эаммирования, поскольку уже разработано колоссальное количество программных услуг во всех областях человеческой деятельности. Основными аспектами развиваемости являются: ° Модульность. Она обеспечивает развиваемость за счет фиксации сопряжения (интерфейса) между создателем и потребителем услуг. ° Стандартизация.
В дополнение к модульности, устраняет нерациональное разнообразие сопряжений. ° Наследуемость. Подразумевает гибкий аппарат развития, заимствования и защиты, действующий на уровне практически произвольных языковых объектов, а не только на уровне заранее предусмотренных модулей. Такой уровень гибкости позволяет легко приспособить программу к обслуживанию объектов, тип которых неизвестен не только при ес создании,но и при трансляпии (с Гара>нтией статического конт1>оля типОВ). Впервые развитая наследуемость появилась в Симуле-67 в соответствую>цем году, предвосхитив современное понимание идеала.
Итак, модульность обеспечивает упаковку программных услуг в модули-контейнеры, стандартизация доставку упакованных услуг потребителю в работоспособном состоянии, а наследусмость — изготовление контейнера новых услуг с минимальными затратами, с минимальным риском и в рамках законности. Уточним идеал наследуемости с учетом типизации языковых объектов: должно быть дозволено: ° Определятын>вый тип, на,следующий те и только те атрибуты исходного типа, которые желательны. ° Пополнять перечни атрибутов нового типа по сравнению с атрибутами исходного типа (обог>пценис ~~~~~ (возмож>п>сть вводить дополнительные поля при объявлении производного типа) и виртуальные операции, заменив>гцис старые операции при действиях с обогащенных>и значениями, даже в старых программах).
° Парантировать применимость сох|>анясмых опер'щий ~~~~д~~~~ типа к ~б~~~~~~ нового типа. Основные понятия и неформальные аксиомы наследования: ° Основные понятия: — Отношение наследования между родителем и наследником — Атрибуты наследования — Накопление атрибутов у наследника по отношению к родителю — Типы объектов и экземпляры (объектов) определенных типов ° Отношение наследовав>ия определяется:>ля типов, а нс для экземпляров (в живой природе наоборот, индивиды-наследники наследуют свойства индивидов-родителей).
407 е Наследник обладает всеми атрибутами родителей, обратное неверно. ° Право участвовать в операциях о|~рсделенпого класса это атрибут наследования! Таким образом, наследник имеет право замещать родителя в любых таких операциях. Определить этот класс иногда бывает непросто: даже присваивание в неполнообьектпых языках для обогащенных об"ьектов может замещать источник, но не получатель. ° Все экземпляры (объекты) одного типа обладают идентичными атрибутами (но не их значениями!). Следствие: индивидуальные свойства об"ьектов (определяемые, в частности, значениями атрибутов) пе наследуются и гю наследству не передаются. ° Наличие наследников пе влияет на атрибуты родителей. Следствие: свойство иметь наследников не считается атрибутом и, стало быть, пе наследуются. ° Атрибуты могут быть абстрактными (виртуальными), и тем самым требовать конкретизации (настройки на контекст перед использованием или в процессе использования), или конкретными, и тем самым такой настройки не требовать.
° Результат конкретизации абстрактных атрибутов в обшем случае определяется тем контекстом, где объекты создаются. Следствие: поскольку в этот контекст входят не только типы, но и конкретные об ьекты (экземпляры типов), то конкретные значения абстрактных атрибутов могут зависеть от свойств конкретных обьектов контекста, а пе только от их типов. Настройку на контекст естественно вьшолнятыгри создании (инициализации) объектов. Наггример, обьект-очередник при создании гюлучает конкретные значения атрибута, указывающего на стоящего впереди обьекта. ° Накопление в некоторых языках может состоять как из абстрактных, так и (в беднообьектпых языках) из конкретных атрибутов.
Примерами абстрактных атрибутов являются атрибуты-тюля записей и виртуальные операции. Преиму щества развитой наследуемости: ° Гармония открытости и защиты. 1!ринцип защиты авторского права реализуется в естественной гармонии с принципом открытой системы. Пользователь открытой системы не только получает доступ к декларированным возс |ожностям системы, но и может перестраивать систему для своих нужд способом, не предусмотренным явно ее создателем. ° Поддерживаемая технология развития программной системы (пошаговая модификация работающей основы) сгюсобствует оптимизации и структуризации мышления, программирования, памяти.
Более того, можно применить концепцию расслоенного программирования (пошаговое наращивание новых слоев работанпцсй версии программы от минимальной работоспособной основы до цели разветвленной системы услуг). Эта концсггпия отечественного программиста А. Л. Фуксмана, на западе, получила название быстрого прототипирования (гарЫ ргогоГур пф. е Поддерживаемый стиль мьпплсния адекватен естественному развитию от простого к сложному. От общего к частному от елиного корня к разнообразик) в от" личие от классического структурного программирования, подразумевающего лишь пошаговую детализацию сверху вниз.
° Говоря более конкретно, развитое наследование обеспечивает расширяемость объектов, типов и операций с защитой авторского нрава и с гарантией сохранности старых программ. Можно воспользоваться программой, развивать ее, но нельзя украсть секреты фирмы, если они скрыты автором. В заключ<ние подчеркнем существенное отличие изложенного понятия наследования от аналогичного биологического. В последнем случае не только сами типы,но и конкретные экземпляры объектов таких родительских типов, как животнью, кошки, собаки и т.п.
реально существуют лишь как некоторые абстракпии, представленные, например, совокупностью генов или изменчивым набором ныне живущих особей (обладаюьцих, .конечно, неисчислимым множеством свойств никак не охватываемых соответствующим типом).
А в информатике и типы., и экземпляры объектов представлены вполнс рсальными разрядами, записями, фреймами и т.п., с<ютветственно и наследование пока представлено как определение и обработка определений типов, а не как результат жизнед< ятельности объектов. Однако нет оснований полагать, что так будет всегда. Математической моделью идеального наследования является гомоморфизм ~21~. 7.4.2 Построение объектной технологии Активные объекты (данные и процедуры), присутствуя в языках программирования, были лишены существенных прав обычных данных, а обычные данные не имели свойств активных объектов, т.
е. нельзя было оперировать с процедурами и выполнять данные. Поэтому необходимо освободиться от неестественных ограничений и подняться на, следующий уровень абстракции. Введ<м концепцию языкового объекта, обобщающую представление об активных и пассивных обьектах. Это фактически означает, что любой объект можно рассматривать как потенциально активный, если явно не оговорено обратное.
Эта цель оказалась достигнутой на современном этапе развития программирования в рамках объектно-ориентированного программирования [59]. Основными идеями объектно-ориентированного программирования являются: ° Программный модуль является нормальным языковым объектом и имеет вполне определенный тип. ° Активный объект может предоставлять услуги как по извлечению, так и по преобразованию значений собственных атрибутов. ° Активные объекты могут обмениваться сообщениями и самостоятельно реагировать на них как на запросы услуг. Свойства объектой ориентации: ° Новый уровень абстракции. Объектная ориентация выводит на новый уровень абстракции и обновляет фундаментальные концепции языка,: управления, развития, защиты, модульности, динамизма, спепификации, технологии и сближает проблематику языков программирования с такой главой информатики, как искусственный интеллект.