- •Псков ппи
- •Содержание
- •Введение
- •Лабораторная работа №1
- •Задание.
- •Краткая справка.
- •Краткая справка.
- •Рекомендации по выполнению задания
- •Лабораторная работа №2
- •Задание
- •Рекомендации по выполнению задания
- •Лабораторная работа №3
- •Задание
- •Краткая справка.
- •Рекомендации по выполнению задания
- •Лабораторная работа №4
- •Задание
- •Краткая справка.
- •Рекомендации по выполнению задания
- •Лабораторная работа №5
- •Задание
- •Краткая справка.
- •Рекомендации по выполнению задания
- •Лабораторная работа №6
- •Задание
- •Краткая справка.
- •Свойства управляющего элемента RadioButton
- •События управляющего элемента RadioButton
- •Свойства управляющего элемента CheckBox
- •Свойства управляющего элемента TextBox
- •События управляющего элемента TextBox
- •Рекомендации по выполнению задания
- •Лабораторная работа №7
- •Задание
- •Краткая справка.
- •Рекомендации по выполнению задания
- •Литература
- •Приложение Класс Form
- •Открытые конструкторы
- •Открытые свойства
- •Открытые методы
- •Открытые события
- •Защищенные свойства
- •Защищенные методы
- •Класс Graphics
- •Открытые свойства
- •Открытые методы
- •Защищенные методы
- •Антонов Игорь Вадимович Бруттан Юлия Викторовна с#. Программирование на языке высокого уровня
Лабораторная работа №3
“Проектирование иерархии классов. Использование контейнерных классов. Перерисовка графической информации”
Задание
Спроектировать базовый класс для моделирования различных геометрических фигур.
Спроектировать класс, моделирующий прямоугольник, как производный от класса, спроектированного в пункте 1 задания.
Реализовать сохранение информации об изображении в динамическом массиве объектов, имеющих тип класса, спроектированного в пункте 1 задания.
Реализовать перерисовку графического изображения, создаваемого в программе.
Краткая справка.
Классы являются шаблонами, на основе которых создаются объекты. Каждый объект содержит данные и методы для работы с этими данными. Класс определяет, какие данные может содержать каждый объект этого класса, но не содержит самих данных. При создании экземпляра объекта класса его поля заполняются конкретными данными.
Поля данных класса представляют собой любые переменные, связанные с классом. Если поля и функции объявлены как public, они доступны за пределами класса.
После того как будет создан экземпляр объекта, к полям класса можно осуществлять доступ с помощью синтаксиса объект.имя_поля.
Новые классы могут наследовать содержание (данные и методы) уже существующих классов. Такой новый класс называется производным. Класс, от которого он наследует, называется базовым. На основе наследования создаются иерархии классов. Проектирование иерархий классов – основа методологии объектно-ориентированного программирования.
Абстрактные классы содержат абстрактные методы – методы без реализации. Экземпляры таких классов не могут создаваться, но абстрактные классы часто используются в качестве базовых классов для иерархий классов, так как позволяют задать типовой набор функций, обязательный для реализации в производных классах. Такой абстрактный класс содержит обобщённую модель классов определённого назначения и ссылки на его тип могут использоваться в функциях, которым впоследствии будут передаваться экземпляры различных производных от него классов.
Контейнерные классы используются для хранения и обработки наборов объектов. Наиболее простой структурой данных такого рода является обычный массив. Массив в C# является экземпляром класса System.Array. System.Array обеспечивает эффективный доступ к отдельному элементу по его индексу. Однако Array обладает недостатком, заключающимся в необходимости указания его размера при создании экземпляра класса. После его создания не существует возможности добавлять, вставлять или удалять элементы. .NET поддерживает множество других контейнерных классов, которые полезны в различных обстоятельствах.
За исключением System.Array, все классы структур данных располагаются в пространстве имён System.Collections. В .NET 2.0 добавилось пространство имён System.Collections.Generic, в котором находятся параметризованные реализации контейнерных классов. Таким классам при создании в качестве параметра, передаваемого в угловых скобках, указывается тип данных, который будет храниться в контейнере. В число этих классов входит класс List, реализующий динамический массив (массив переменного размера) для данных определённого типа. Если при инициализации такого массива указать в качестве параметра определённый класс, то массив можно будет использовать для хранения объектов этого класса и классов, производных от него.
Класс List может быть проинициализирован следующим образом для хранения динамического массива экземпляров любых классов, производных от класса Figure:
List<Figure> array;
array = new List<Figure>();
После этого в контейнер можно добавлять элементы при помощи метода Add(), которому передаётся ссылка на экземпляр добавляемого объекта.
Число элементов, в текущий момент содержащихся в List, может быть получено с помощью свойства Count:
int n = array.Count;
Для перебора всех элементов динамического массива удобно использовать оператор языка C# foreach :
foreach (Figure f in array) { … }
Блок в фигурных скобках выполняется для всех элементов array, ссылка на которые поочерёдно помещается в переменную (в данном случае - f), доступную внутри блока. Для доступа к элементам List можно использовать и обычную индексную операцию – [].
Операционная система Windows и среда .NET не обеспечивают приложениям сохранение графической информации, выводимой ими в свои окна. В ситуациях перекрытия этих окон другими окнами и их сворачивания ранее выведенная информация будет исчезать, если приложение не обеспечит восстановление содержания окна. Для этих целей предназначено событие Paint, которое должны обрабатывать классы форм и управляющих элементов для восстановления своего содержания. Данное событие генерируется, когда содержание окна должно быть обновлено, в первый раз – при первом отображении окна. Обработчик события Paint получает второй аргумент типа PaintEventArgs, поле Graphics которого содержит объект типа Graphics, через который должны выполняться в этом обработчике операции графического вывода.
Graphics в обработчике события Paint не должен запрашиваться через метод CreateGraphics.
