ООТПиСП_Контрольная_работа_1_ЗО. Контрольная работа 1 Цель
Скачать 0.71 Mb.
|
Контрольная работа 1 Цель: Ознакомление с концепциями наследования и абстракции. Обычное и множественное наследование классов. Статические свойства, методы, классы. Перегрузка методов при наследовании классов. Освоение приемов создания, редактирования, копирования, удаления экземпляров и разработки интерфейсов классов. Задание: Дана фигура на плоскости согласно вариантам. Фигура описывается индивидуальными геометрическими свойствами и общими оформительскими свойствами: цвет, видимость. У фигуры имеются характеристики: периметр, площадь, ограничивающая область. Область размещения фигур в плоскости ограничена экстентами, за которые фигура не должна выходить. Необходимо разработать: классы для описания положения «Location» и ограничивающей области «Clip» в плоскости; статический класс «Geometry» для хранения общих констант и методов проверки различных ограничений на размещение фигур в плоскости; класс геометрического примитива «Primitive» для хранения и редактирования оформительских свойств фигуры как наследника от статического класса «Geometry»; класс примитивной фигуры – точки «Point» как наследника от классов «Location» и «Primitive»; класс фигуры согласно варианту «Figure» как наследника от класса «Point» с описанием специфических свойств и методов фигуры; наборы конструкторов для создания экземпляров каждого класса различными способами (дефолтный, копирующий, параметрический); методы для изменения свойств и вычисления характеристик фигуры; интерфейс для отображения и изменения всех свойств фигуры. Требования: Интерфейс и классы реализуются в одном модуле. Для редактирования фигуры разработать функцию ModifyFigure(), которая должна получать ссылку на экземпляр фигуры и предоставлять интерактивный консольный интерфейс для работы с ним. Оформление: 1. Текст задания 2. Описание свойств фигуры и формулы расчета характеристик 3. Диаграмма иерархии классов 4. Тестовый план для фигуры (свойства – характеристики) 5. Листинг программы с комментариями 6. Пример использования Варианты заданий: 1(11,21). Фигура: сектор окружности. 2(12,22). Фигура: треугольник Рело. 3(13,23). Фигура: правильный шестиугольник. 4(14,24). Фигура: эллипс. 5(15,25). Фигура: параллелограмм. 6(16,26). Фигура: сегмент окружности. 7(17,27). Фигура: ромб. 8(18,28). Фигура: кольцо (бублик). 9(19,29). Фигура: правильная трапеция. 10(20,30). Фигура: дельтоид. Используйте ru.wikipedia.org для получения информации о фигурах. Комментарии: Наследование – это концепция, согласно которой один класс может порождаться от другого класса с сохранением всех свойств и методов предка и добавляя к ним новые свойства и методы, расширяющие интерфейс потомка. Класс, который порожден от рассматриваемого класса, называется потомком или дочерним. Класс, от которого порожден рассматриваемый класс, называется предком или родительским. Класс, не имеющий родительского класса, но имеющий дочерние классы, называется базовым. Набор классов, связанных отношением наследования, называется иерархией. Базовый класс, с которого начинается иерархия, называется корневым. Наследование отражает такую особенность предметной области, как иерархичность и взаимосвязанность объектов по характерным признакам. Так, если объект А имеет такие же признаки, что и объект В, то не нужно разрабатывать объект А заново, а можно использовать то, что уже разработано в объекте В. Эта концепция предписывает программистам создавать новые классы, используя уже готовые алгоритмы и данные, реализованные в имеющихся классах, не затрачивая время на повторную разработку, копирование или переписывание кода. Абстракция – это концепция, согласно которой у объекта выделяются характеристики, которые отличают его от всех других объектов, четко определяя его концептуальные границы. Идея заключается в том, чтобы отделить способ использования составных объектов в программе от деталей их конкретной реализации в виде простых объектов. Абстракция отражает такую особенность предметной области, как идентичность и подобие объектов, и предполагает мысленное отвлечение от несущественных признаков и поведения объектов реального мира, с выделением только тех признаков и поведений, которые существенны с точки зрения их программной реализации в вычислительном процессе. Эта концепция предписывает программистам отделять программную реализацию от реального объекта с помощью свойств и методов класса, декларируя только то, что существенно с точки зрения программной реализации. Наследование классов является механизмом ООП, который позволяет создавать новые классы на основе уже существующих классов с добавлением новых свойств и методов. При наследовании новый класс получает все свойства и методы существующего класса и может их использовать в своей области действия так, как будто это его собственные свойства и методы. В качестве примера можно рассмотреть наследование плоских геометрических фигур. Сначала полагаем, что фигура описывается атрибутом видимости и цветом, которые определяют ее стиль. Затем берем простейшую фигуру – точку, которая описывается координатами (x,y) на плоскости и имеет стиль, т.е. наследует свойства видимости и цвета, добавляя два свойства X-координату и Y-координату. Далее от точки можно породить окружность, которая описывается координатами центра также как и точка, имеет стиль, и добавляет к этому набору специфическое свойство – радиус. Далее от окружности можно породить дугу, которая описывается центром, радиусом, стилем, как окружность, и добавляет два специфических свойства – начальный угол, определяющий начальную точку дуги, и конечный угол, определяющий конечную точку дуги. Далее от дуги можно породить сегмент окружности, который описывается центром, радиусом, стилем, начальным углом, конечным углом, как дуга, и добавляет специфическое свойство – высоту, как расстояние между центром дуги и центром соединяющего отрезка. Таким образом, каждая новая фигура добавляет специфические свойства, определяющие ее геометрию, к уже существующим свойствам, унаследованным от другой фигуры. Синтаксически, наследование классов записывается через двоеточие в описании шаблона класса-наследника. При этом класс-предок должен быть описан ранее. Двоеточие ставится сразу после имени класса-потомка и за двоеточием пишется имя класса-предка (без слова «class»), после чего в фигурных скобках описывается шаблон класса-потомка. При наследовании можно управлять уровнем доступа к элементам классов-предков в классах-потомках. Для этого используются те же самые спецификаторы доступа, но они уже относятся не к отдельному элементу, а ко всему классу. Спецификатор доступа пишется после двоеточия, перед именем класса-предка и означает уровень доступа к элементам класса-предка в классе-потомке. Личные элементы класса остаются личными элементами при любой форме наследования. Если наследование было приватным, то открытые и защищенные элементы становятся личными. Если наследование было защищенным, то открытые и защищенные элементы становятся защищенными. Если наследование было открытым, то открытые элементы остаются открытыми, а защищенные элементы остаются защищенными. Если спецификатор доступа не указан, то по умолчанию считается личный. Класс-потомок может использовать те же имена элементов, что и класс-предок. При обращении к одноименному элементу будет использоваться элемент собственного класса, т.е. если обращаться к элементу внутри методов класса-предка, то будут использоваться свойства и методы предка, а если внутри методов класса-потомка, то свойства и методы потомка. Чтобы указать, что обращение производится к элементу класса-предка внутри класса-потомка, необходимо явно указать имя предка по области действия, т.е. использовать оператор двоеточия. При создании экземпляра класса-потомка, сначала вызывается конструктор класса-предка, а затем конструктор класса-потомка. При удалении экземпляра класса-потомка, сначала вызывается деструктор класса-потомка, а затем деструктор класса-предка. Если наследований несколько, то конструкторы вызываются от базового класса к дочерним классам, а деструкторы вызываются в обратном порядке, от дочерних классов к базовым классам. Множественное наследование является механизмом порождения дочерних классов от нескольких родительских классов. При множественном наследовании области действия нескольких классов-предков объединяются с областью действия класса-потомка так, что потомок может использовать элементы любого из предков. Синтаксически, множественное наследование классов записывается через двоеточие в описании шаблона класса-наследника. Двоеточие ставится сразу после имени класса-потомка и за двоеточием пишутся имена классов-предков через запятую (без слова «class»), после чего в фигурных скобках описывается шаблон класса-потомка. Все классы-предки должны быть описаны ранее. При создании экземпляра класса-потомка, сначала вызываются конструкторы классов-предков в порядке слева направо по списку родителей, а затем конструктор класса-потомка. При удалении экземпляра класса-потомка, сначала вызывается деструктор класса-потомка, а затем деструкторы классов-предков в порядке справа налево по списку родителей. Наследование классов графически изображается диаграммой, называемой схемой иерархии классов. В ней каждый класс изображается прямоугольником с вписанным внутрь названием класса. Наследование изображается ломанной линией, идущей от класса-предка к классу-потомку. На конце предка ставится точка, а на конце потомка ставится стрелочка. Если от одного предка порождается несколько потомков, то линия разветвляется горизонтальным отрезком на диаграмме. Базовый класс изображается в самом низу диаграммы. Множественное наследование обозначается горизонтальным линейным отрезком, который разветвляется на несколько прямоугольников, обозначающих предков. Предки рисуются снизу, потомки сверху. Стрелочка ставится на конце потомка. Статическое свойство – это данные в классе, которые являются общими для всех экземпляров класса и хранятся как единственная копия от начала выполнения вычислительного процесса до его завершения независимо от количества созданных и удаленных экземпляров класса. Специфической особенностью статического свойства является то, что к нему можно обратиться и использовать в программе без создания экземпляра класса, в то время как для обычного свойства нужно создавать экземпляр. Изменение статического свойства влияет сразу на все экземпляры класса. Это влияние проявляется даже, когда экземпляры, изменившие статическое свойство, удаляются. Оставшиеся экземпляры используют последнее сохраненное значение свойства. Если все экземпляры удалены, то статическое свойство продолжает существовать, и хранит последнее присвоенное значение. Оно существует априорно и независимо от экземпляров класса, и его инициализация не зависит от создания экземпляров. Статический метод – это алгоритм, который может исполняться и использоваться без экземпляров класса только по контексту имени класса. Специфической особенностью статического метода является то, что его можно вызвать и использовать в программе без создания экземпляра класса, в то время как для вызова обычного метода нужен экземпляр. Статический метод не получает указателя на вызывающий его экземпляр, поэтому в теле статического метода нельзя использовать слово «this». Статический метод не может изменять обычные свойства, потому что он может вызываться, когда экземпляров нет, а следовательно и обычных свойств тоже нет, поэтому в статическом методе нельзя обращаться к обычным данным. Статический метод не может вызывать обычные методы, потому что обычный метод требует неявную ссылку на существующий экземпляр в виде указателя «на себя», которого статический метод просто не получает. Статический класс – это класс, который содержит только статические свойства и статические методы. Если класс содержит хотя бы одно обычное данное или обычный метод, то он не является статическим. Специфической особенностью статического класса является то, что все экземпляры статического класса не имеют собственной области памяти, а используют одну и ту же общую для всех них область памяти, и все его элементы доступны по области действия класса. Поэтому не нужно создавать экземпляров статического класса. Виртуальный метод – это наследуемый метод в иерархии классов, имеющий одно и тоже имя и одну и ту же сигнатуру, но разные реализации в каждом классе, вызов которого осуществляется посредством динамического связывания с фактически используемым экземпляром, игнорируя формальный тип объекта в контексте обращения. Чистый метод – это виртуальный метод, декларированный в классе, но не имеющий реализации. Пример выполнения контрольной работы В примере контрольная выполнена на языке С++, возможно выполнение на языке С++/С#/ Пример использования: Работа 1 Свойства фигуры: Центр = ( 1 ; 1 ) Радиус = 1 Площадь = 3.1456 Периметр = 6.2832 Видимость = On Номер цвета = 255 Область = ( 0 ; 0 )--( 2 ; 2 ) Размер = [ 2 x 2 ] ****************************************************************** Консольное меню: (T) Изменить цвет (R) Изменить радиус (V) Изменить видимость (X) Изменить X-координату (Y) Изменить Y-координату (P) Печатать все свойства (Q) Выход Выберите пункт:>x Введите X-координату:>2 Выберите пункт:>Y Введите Y-координату:>2 Выберите пункт:>R Введите радиус [R > 0]:>2 Выберите пункт:>T Введите цвет [0..255]:>15 Выберите пункт:>V Видимость [N-on|F-off]:>N Выберите пункт:>P Свойства фигуры: Центр = ( 2 ; 2 ) Радиус = 2 Площадь = 12.5664 Периметр = 12.5664 Видимость = On Номер цвета = 15 Область = ( 0 ; 0 )--( 4 ; 4 ) Размер = [ 4 x 4 ] Выберите пункт:>Q ****************************************************************** Завершение программы |