Содержание
- 2. Распространенность парадигм программирования во многом обуславливается их способностями поддерживать современные методологии разработки программного обеспечения. Основной показатель
- 3. На второй план отступает такое требование, как быстрое проектирование первоначальной (полнофункциональной) версии программы, потому что его
- 4. Техника эволюционного развития реализована в возвратном проектировании. Она же используется при экстремальном программировании (X-programming). 1. Буч
- 5. Эволюционная разработка – один из основных факторов, определяющих создание современного программного обеспечения Окончание очередного витка эволюционного
- 6. Его нельзя переделать «мастером», его невозможно автоматически сгенерировать при повторном проектировании. При этом желательно как можно
- 7. Основные виды отношений между программными объектами Отличие парадигм программирования заключается в различных способах реализации моделей состояния
- 8. Известная всем метафора: Алгоритмы + Данные = Программы Отражает только простейшие отношения, существующие между данными и
- 9. Более точным отражением является текущего состояния является: Программа = Конструктив (Данные, Алгоритмы) В борьбе конструктивов и
- 10. ООП предложило более гибкие конструктивы для построения эволюционно расширяемых программ
- 11. Абстрагирование от конкретных экземпляров достигается за счет введения специальных понятий, определяющих как семантические артефакты, например, "абстрактный
- 12. Агрегаты и обобщения используются при конструировании композиций из данных и процедур. В каждой из существующих парадигм
- 13. Конструирование агрегатов Агрегация (агрегирование) - это абстрагирование, посредством которого один объект конструируется из других [Цикритзис]. Агрегирование
- 14. Наиболее типичным является восприятие агрегата как единой абстракции, сформированной непосредственным включением используемых в нем программных объектов.
- 16. Косвенное связывание позволяет формировать агрегаты из отдельных элементов, уже располагаемых в пространстве. Взаимосвязь осуществляется алгоритмическим заданием
- 18. Наследование позволяет создавать структуру объекта, эквивалентную той, которая формируется непосредственным включением. Но поддерживает свойства конкатенации, в
- 20. Образное агрегирование связано с отсутствием специально созданной абстракции, соответствующей формируемому агрегату. Вместо этого агрегат воссоздается только
- 21. A X Z Y adrrZ adrrX Агрегат A из элементов X, Y, Z, построенный на основе
- 22. Наряду с "чистыми" методами, агрегаты могут строиться по смешанному принципу, когда одновременно применяются различные комбинации методов
- 24. К специфике различных парадигм программирования можно отнести способы построения агрегатов и их использования. В частности, при
- 25. Процедурное агрегирование Агрегатам данных соответствуют абстрактные типы данных. Они состоят из объектов данных, подключаемых непосредственно или
- 26. //-------------------------------------------------------- // Простейший контейнер на основе одномерного массива //-------------------------------------------------------- // Контейнер должен знать о фигуре #include
- 27. //-------------------------------------------------- // Процедуры должны знать о контейнере и фигуре, // доступной через модуль, описывающий контейнер #include
- 28. //--------------------------------------------------------- // Необходим прототип функции, формирующей фигуру при вводе shape *In(); //--------------------------------------------------------- // Ввод содержимого контейнера
- 29. //--------------------------------------------------- // Необходим прототип функции вывода отдельной фигуры void Out(shape &s); //--------------------------------------------------- // Вывод содержимого контейнера
- 30. Объектно-ориентированное агрегирование Объектно-ориентированное программирование предлагает следующие варианты композиции для создания агрегатов: Основной агрегирующей единицей является виртуальная
- 31. Обычные процедуры, размещаемые в классе и используемые для изменения своего внутреннего состояния, часто называются методами, функциями-членами
- 32. Пример объектно-ориентированного агрегирования //------------------------------------------------------ // Простейший контейнер на основе одномерного массива //------------------------------------------------------ // Контейнер должен знать
- 33. //----------------------------------------------------------- // Необходимо знать описание контейнера и методов фигуры, // доступных через container_atd.h #include "container_atd.h" //-----------------------------------------------------------
- 34. //------------------------------------------------------ // Ввод содержимого контейнера void container::In() { cout " (yes=\'y\', no=other character)? " char k;
- 35. //------------------------------------------------------------- // Вывод содержимого контейнера void container::Out() { cout for(int i = 0; i cout cont[i]->Out();
- 36. Отличие методов агрегирования ОО агрегирование не имеет никаких преимуществ перед процедурным агрегированием ОО подход лучше описывает
- 37. Процедурный подход позволяет лучше скрывать данные [Meyers] struct simple; simple *create_simple (int val); void destroy_simple(simple* s);
- 38. Резюме ОО агрегирование обеспечивает более компактное написание программ за счет поддержки рациональных методов создания артефактов. Процедурное
- 39. Конструирование обобщений Обобщение - это композиция альтернативных по своим свойствам программных объектов, принадлежащих к единой категории
- 40. Основа специализации – программный объект, который может использоваться в качестве специализации того или иного обобщения. Для
- 41. Методы формирования обобщений При обобщении на основе общего ресурса происходит размещение специализаций в едином адресном пространстве.
- 44. Наличие общего ресурса для нескольких абстракций позволяет использовать такое обобщение в двух различных целях: Хранение одного
- 45. Альтернативное связывание Предполагает независимое размещение специализаций в рассматриваемом обобщении. Использование ссылки или указателя обеспечивает доступ только
- 48. Образное обобщение Как и образное агрегирование, связано с мысленными ассоциациями программиста. Используя ключевой признак, можно связать
- 50. Вариантное обобщение Вариант - основа обобщения данных в процедурном подходе. Обобщение, применяемое в процедурном подходе и
- 51. Обработка вариантных обобщений осуществляется независимыми процедурами, организующими доступ к внутренним переменным через экземпляр обобщения, получаемый, в
- 52. Процедуры, осуществляющие обработку всего вариантного обобщения, используют алгоритмический механизм анализа вариантов по ключевому параметру, содержащему признак
- 53. Использование независимых вариантных процедур для создания кода ведет к централизации процесса обработки обобщений, выделя в нем
- 54. Построение вариантного обобщения на основе общего ресурса Рассмотрим создание обобщенной геометрической фигуры, используемой для представления прямоугольника
- 55. //------------------------------------ // прямоугольник struct rectangle { int x, y; // ширина, высота }; //------------------------------------- // треугольник
- 56. Процедура динамического создания прямоугольника: rectangle *Create_rectangle(int x, int y) Процедура инициализации уже созданного прямоугольника: void Init(rectangle
- 57. Процедура динамического создания треугольника: triangle *Create_triangle (int a, int b, int c) Процедура инициализации уже созданного
- 58. //------------------------------------------------------ // Процедуры, обеспечивающие работу с прямоугольником //------------------------------------------------------ // Динамическое создание прямоугольника по двум сторонам rectangle
- 59. // Ввод параметров прямоугольника void In(rectangle &r) { cout cin >> r.x >> r.y; } //
- 60. //----------------------------------------------------- // Процедуры, обеспечивающие работу с треугольником // Динамическое создание треугольника по трем сторонам triangle *Create_triangle(int
- 61. // Ввод параметров треугольника void In(triangle &t) { cout cin >> t.a >> t.b >> t.c;
- 62. Вариантное обобщение на основе прямого включения строится с применением объединения: // Обобщение на основе // разделяемого
- 63. Объединение включается в агрегат, который также содержит признаки специализаций и ключевую переменную, предназначенную для хранения текущего
- 64. Вариантные процедуры Динамическое создание обобщенной фигуры: shape *Create_shape_rectangle(int x, int y) shape *Create_shape_triangle (int a, int
- 65. //------------------------------------------------------ // Процедуры, обеспечивающие работу с обобщенной фигурой //------------------------------------------------------ // Сигнатуры, необходимые обработчикам вариантов. void Init(rectangle
- 66. // Инициализация обобщенного прямоугольника void Init_rectangle(shape &s, int x, int y) { s.k = shape::key::RECTANGLE; Init(s.r,
- 67. // Ввод параметров обобщенной фигуры из // стандартного потока ввода shape* In() { shape *sp; cout
- 68. // Вывод параметров текущей фигуры в стандартный // поток вывода void Out(shape &s) { switch(s.k) {
- 69. Полная версия примера в pp_examp1.zip. Резюме Вариантные обобщения на основе общего ресурса формируются при написании программы
- 70. Процесс построения языковой структуры вариантного обобщения совпадает по направленности с восходящим проектированием. Это никоим образом не
- 71. Построение вариантного обобщения на основе альтернативного связывания Позволяет обойтись без дополнительных обобщающих конструкций, что обеспечивает большую
- 72. // структура, обобщающая все имеющиеся фигуры struct shape { // значения ключей для каждой из фигур
- 73. Построение вариантного обобщения на основе образного восприятия Для иллюстрации образного восприятия вариантов, введем в нашу программу
- 74. struct container { enum {max_len = 100}; // максимальная длина int len; // текущая длина //
- 75. // структура, обобщающая прямоугольник struct r_shape { // значения ключей для каждой из фигур int k;
- 76. void Out(rectangle &r); void Out(triangle &t); void Out(shape *ps) { switch(ps->k) { case 1: // прямоугольник
- 77. Пример программы на языке программирования Оберон (процедурный стиль) Язык содержит расширяемые типы данных, обеспечивает проверку типов
- 78. (****************************************************** figure.o: содержит модуль figure с процедурами и типами, осуществляющими обработку обобщенных геометрических фигур ********************************************************) MODULE
- 79. (******************************************************* rectangle.o: содержит модуль rectangle с процедурами и типами, осуществляющими обработку прямоугольников ********************************************************) MODULE rectangle; IMPORT
- 80. (* Процедура инициализации уже существующего прямоугольника *) PROCEDURE Init*(VAR r: rect; x, y: INTEGER); BEGIN r.x
- 81. (* Процедура вывода *) PROCEDURE Output*(VAR r: rect); BEGIN Out.String("Rectangle: x = "); Out.Int(r.x, 0); Out.String(",
- 82. (* Процедура вывода в файл, использующая передачу параметра-переменной *) PROCEDURE FileOutput* (VAR outFile : FileIO.TFile; VAR
- 83. (******************************************************** figureproc.o: содержит модуль figureProc с процедурами, осуществляющими обработку специализаций, связанных с обобщенной геометрической фигурой. Эти
- 84. (* Процедура, осуществляющая создание и ввод одной из специализаций после предварительного анализа признака вводимой фигуры *)
- 85. (* Процедура, осуществляющая вывод специализаций через параметр-переменную *) PROCEDURE Output*(VAR f: figure.fig); BEGIN WITH f: rectangle.rect
- 86. (* Процедура Заполнения фигуры из файла *) PROCEDURE FileInput*(VAR inFile : FileIO.TFile) : figure.Pfig; VAR flag
- 87. (* Процедура вывода в файл, использующая передачу параметра-переменной *) PROCEDURE FileOutput*(VAR outFile : FileIO.TFile; VAR f:
- 88. (* test.o: *) MODULE figureTest; IMPORT In, Out, FileIO, Console, figure, rectangle, triangle, figureProc, container; VAR
- 89. (* Предварительная инициализаци контейнера *) container.Init(c); (* Тестовый вывод содержимого контейнера до работы *) Out.String("Initialed Container
- 90. Отличительные особенности объектно-ориентированной альтернативы Основной спецификой ОО подхода является возможность группирования процедур вокруг обрабатываемых ими данных.
- 91. При ООП методы классов напрямую привязываются к обрабатываемым данным. Эта привязка осуществляется во написания кода (в
- 92. Поэтому, когда в ходе выполнения программы формируется экземпляр объекта Di с данными типа ti, создается и
- 93. Объектное обобщение При ОО методе организации альтернатив, не требуется анализа признаков специализаций. Используется зависимость двух статически
- 96. Основная задача выбора альтернативы заключается в вызове соответствующей связанной процедуры. Она решается следующим образом. Через указатель
- 98. Таким образом, в объектном обобщении не нужен специализированный ключ, обеспечивающий анализ существующей альтернативы, так как решение
- 99. Пример использования объектного обобщения // Класс, обобщающий все имеющиеся фигуры. // Является абстрактным, обеспечивая, тем самым,
- 100. Опорные процедуры: virtual void In() virtual void Out() virtual double Area() Все эти виртуальные абстракции начинают
- 101. // прямоугольник class rectangle: public shape { int x, y; // ширина, высота public: // переопределяем
- 102. // Динамическое создание прямоугольника по двум сторонам rectangle::rectangle(int _x, int _y): x(_x), y(_y) {} // Ввод
- 103. class triangle: public shape { int a, b, c; // стороны public: void In(); // ввод
- 104. // Инициализация по трем сторонам triangle::triangle(int _a, int _b, int _c): a(_a), b(_b), c(_c) {} //
- 105. Пример программы на языке программирования Оберон 2 (ОО стиль) Язык дополнительно содержит процедуры, связанные с типом,
- 106. (******************************************************* figure.o: содержит модуль figure с процедурами и типами, осуществляющими обработку обобщенных геометрических фигур ********************************************************) MODULE
- 107. (* Процедура, вычисляющая переметр обобщенной фигуры *) PROCEDURE (VAR f: fig) Perimeter* (): REAL; BEGIN RETURN
- 108. (********************************************************rectangle.o: содержит модуль rectangle с процедурами и типами, осуществляющими обработку прямоугольников ********************************************************) MODULE rectangle; IMPORT In,
- 109. (* Процедура инициализации уже существующего прямоугольника *) PROCEDURE (VAR r: rect) Init*(x, y: INTEGER); BEGIN r.x
- 110. (* Процедура вывода прямоугольника - наследника фигуры *) PROCEDURE (VAR r: rect) Output*; BEGIN Out.String("Rectangle: x
- 111. (* Процедура вывода в файл прямоугольника - наследника фигуры *) PROCEDURE (VAR r: rect) FileOutput*(VAR outFile
- 112. (******************************************************** figureproc.o: ********************************************************) MODULE figureProc; IMPORT In, Out, FileIO, figure, rectangle, triangle; (* Создание и ввод
- 113. (* Процедура заполнения обобщенной фигуры из файла *) PROCEDURE FileInput* (VAR inFile : FileIO.TFile) : figure.Pfig;
- 114. Отличие методов обобщения Основным неоспоримым достоинством объектного обобщения является поддержка быстрого и безболезненного, для уже написанного
- 115. //-------------------------------------------- // структура, обобщающая все имеющиеся фигуры // Изменилась, в связи с добавлением круга struct shape
- 116. // Ввод параметров обобщенной фигуры // Изменилась из-за добавления круга shape* In() { shape *sp; //
- 117. // Вывод параметров текущей фигуры // Изменилась из-за добавления вывода круга void Out(shape &s){ switch(s.k) {
- 118. При разработке же больших программных систем обработка обобщений может осуществляться не одной сотней процедур, каждую из
- 119. ОО подход, в аналогичной ситуации, позволяет провести добавление круга практически без изменений уже написанного кода. При
- 120. // Ввод параметров обобщенной фигуры // Изменяется в связи с добавлением круга shape* In() { shape
- 121. ОО обобщение прекрасно поддерживает эволюционное расширение агрегатов, при котором используется только одна производная альтернатива, заменяющая ту,
- 122. Ограничения техники ООП Проблемы с расширением функциональности альтернатив При добавлении нового обработчика специализации необходимо включить в
- 123. Пример. Добавление вычисления периметра (ПП) // Вычисление периметра прямоугольника double Perimetr(rectangle &r) { return (r.x +
- 124. Пример. Добавление вычисления периметра (ООП) // Класс, обобщающает все имеющиеся фигуры. // Изменился в связи с
- 125. // Измененный прямоугольник (вычисляет периметр) class rectangle: public shape { int x, y; // ширина, высота
- 126. Проблемы при добавлении специализированных действий Пример. Надо выводить все прямоугольники, расположенные в контейнере. Соответствующая процедура должна
- 127. // Вывод только обобщенного прямоугольника // Процедура добавлена без изменений // других объектов bool Out_rectangle(shape &s)
- 128. Объектно-ориентированный подход не позволяет, в данном случае, получить элегантное решение. Возможные пути: Использование динамического анализа типа
- 129. // Класс, обобщающает все имеющиеся фигуры. class shape { public: virtual void In() = 0; //
- 130. // Прямоугольник переопределяет вывод себя class rectangle: public shape { int x, y; // ширина, высота
- 131. Выводы Независимо от техники и парадигм программирования создаются программные объекты и отношения между ними, с использованием
- 133. Скачать презентацию



































![Процедурный подход позволяет лучше скрывать данные [Meyers] struct simple; simple *create_simple (int](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/902967/slide-36.jpg)






























































































Язык СSS. Введение
Создание концепта видеоигры
Форматирование табличного документа
Как создать страницу компании в Google
Исполнитель перемещайка
Словесные информационные модели. 7 класс
Онлайн или не онлайн – вот в чем вопрос
Аудит контекстных рекламных кампаний 220 Вольт
Sisteme de prevenire a scurgerilor/pierderilor de date
Надежность программных продуктов
Компьютерные вирусы
Трудоёмкость алгоритмов
Склеивание мешков цепочек (3 класс)
Сортировка списков на языке Python
Можно ли сломать интернет? Локальные компьютерные сети
Партнерская программа ООО АльянсАвтоГрупп
Twitter. Сервис микроблогов
Организация как система
Формы представления чисел в цифровых устройствах (лекция 3)
Нейронные сети
Знакомство с языком С++
Транспортный уровень. Модель OSI
О поведении человека
E-mail
Интерактивный словарь (глоссарий) терминов по разработке, внедрению и адаптации программного обеспечения
Як працює інтернет та браузери
Модели знаний на графах
Арбитраж. День 4