Главная страница
Навигация по странице:

  • 5.1. Классы и объекты

  • 5.2. Динамическое создание объектов

  • 5.3. Область видимости

  • 5.4. Операции is и as

  • 5.5. Сведения, передаваемые в событие

  • Индивидуальные задания

  • КЛАССЫ И ОБЪЕКТЫ. Лабораторная работа классы и объекты


    Скачать 292.89 Kb.
    НазваниеЛабораторная работа классы и объекты
    АнкорКЛАССЫ И ОБЪЕКТЫ
    Дата13.01.2021
    Размер292.89 Kb.
    Формат файлаpdf
    Имя файлаVS_LR5.pdf
    ТипЛабораторная работа
    #167877

    46
    ЛАБОРАТОРНАЯ РАБОТА № 5.
    КЛАССЫ И ОБЪЕКТЫ
    Цель лабораторной работы:
    изучить основные понятия, относя- щиеся к классам и объектам, освоить динамическое создание объектов в программном коде.
    5.1. Классы и объекты
    В объектно-ориентированном подходе существуют понятия класс и объект.
    Класс – это программная единица, которая задает общий шаблон для конкретных объектов. Класс содержит все необходимые описа- ния переменных, свойств и методов, которые относятся к объекту.
    Примером класса в реальной жизни является понятие «автомобиль»: как правило, автомобиль содержит некоторое количество колес, две- рей, имеет какой-то цвет, но эти конкретные детали в классе не опи- сываются.
    Объект – это экземпляр класса. Свойства объекта содержат кон- кретные данные, характерные для данного экземпляра. В реальной жиз- ни примером объекта будет конкретный экземпляр автомобиля с 4 коле- сами, 5 дверками и синего цвета.
    5.2. Динамическое создание объектов
    Чаще всего для размещения на форме кнопки, поля ввода или дру- гих управляющих элементов используется дизайнер среды Visual Studio: нужный элемент выделяется в панели элементов и размещается на фор- ме. Однако иногда создавать элементы нужно уже в процессе выполне- ния программы. Поскольку каждый элемент управления представляет собой отдельный класс, его помещение на форму программным спосо- бом включает несколько шагов:
    1.
    Создание экземпляра класса.
    2.
    Привязка его к форме.
    3.
    Настройка местоположения, размеров, текста и т. п.
    Например, чтобы создать кнопку, нужно выполнить следующий код (его следует разместить в обработчике сообщения
    Load или в каком- либо другом методе):
    Button b = new
    Button
    ();

    47
    Здесь объявляется переменная b
    , относящаяся к классу
    Button
    , как и в предыдущих лабораторных работах. Однако дальше идет нечто но- вое: с помощью оператора new создается экземпляр класса
    Button
    , и ссылка на него присваивается переменной b
    . При этом выполняется целый ряд дополнительных действий: выделяется память под объект, инициализируются все свойства и переменные.
    Далее нужно добавить объект на форму. Для этого служит свойство
    Parent
    , которое определяет родительский элемент, на котором будет размещена кнопка: b.Parent = this
    ;
    Ключевое слово this относится к тому объекту, в котором разме- щен выполняемый в данный момент метод. Поскольку все методы в ла- бораторных работах размещаются в классе формы, то и this относится к этому конкретному экземпляру формы.
    Вместо формы кнопку можно поместить на другой контейнер. На- пример, если на форме есть элемент управления Panel, то можно помес- тить кнопку на него следующим образом: b.Parent = panel1;
    Чтобы задать положение и размеры кнопки, нужно использовать свойства Location и Size: b.Location = new
    Point
    (10, 20); b.Size = new
    Size
    (200, 100);
    Обратите внимание, что
    Location и
    Size
    – это тоже объекты. Хотя внутри у
    Location содержатся координаты x и y, задающие левый верхний угол объекта, не получится поменять одну из координат, нужно менять целиком весь объект
    Location
    . То же самое относится и к свойству
    Size
    На самом деле, каждый раз, когда на форму помещается новый эле- мент управления или вносятся какие-то изменения в свойства элементов управления, Visual Studio генерирует специальный служебный код, кото- рый проделывает приведенные выше операции по созданию и настройке элементов управления. Попробуйте поместить на форму кнопку, изменить у нее какие-нибудь свойства, а затем найдите в обозревателе решений вет- ку формы
    Form1
    , разверните ее и сделайте двойной щелчок по ветке
    Form1.Designer.cs
    . Откроется файл с текстом программы на языке C#, ко- торую среда создала автоматически. Менять этот код вручную крайне не рекомендуется! Однако можно его изучить, чтобы понять принципы соз- дания элементов управления в ходе выполнения программы.

    48
    5.3. Область видимости
    Переменные, объявленные в программе, имеют область видимости.
    Это значит, что переменная, описанная в одной части программы, не обязательно будет видна в другой. Вот наиболее часто встречающиеся ситуации:
    1.
    Переменные, описанные внутри метода, не будут видны за пре- делами этого метода. Например: void
    MethodA()
    {
    // Описываем переменную delta int delta = 7;
    } void
    MethodB()
    {
    // Ошибка: переменная delta в этом методе неизвестна!
    int gamma = delta + 1;
    }
    2.
    Переменные, описанные внутри блока или составного операто- ра, видны только внутри этого блока. Например: void
    Method()
    { if
    (a == 7)
    {
    int b = a + 5;
    }
    // Ошибка: переменная b здесь уже неизвестна!
    MessageBox
    .Show(b.ToString());
    }
    3.
    Переменные, описанные внутри класса, являются глобальными и доступны для всех методов этого класса, например: class
    Form1 :
    Form
    { int a = 5; void
    Method()

    49
    {
    // Переменная a здесь действительна
    MessageBox
    .Show(a.ToString());
    }
    }
    5.4. Операции
    is
    и
    as
    Часто бывает удобно переменные разных классов записать в один спи- сок, чтобы было легче его обрабатывать. Чтобы проверить, к какому классу принадлежит какой-либо объект, можно использовать оператор is
    : он воз- вращает истину, если объект принадлежит указанному классу. Пример:
    Button b = new
    Button
    (); if
    (b is
    Button
    )
    MessageBox
    .Show(
    "Это кнопка!"
    );
    else
    MessageBox
    .Show(
    "Это что‐то другое..."
    );
    Как правило, в общих списках объекты хранятся в «обезличенном» состоянии, так, чтобы у всех у них был лишь минимальный общий для всех набор методов и свойств. Для того чтобы получить доступ к рас- ширенным свойствам объекта, нужно привести его к исходному классу с помощью операции приведения as
    :
    (someObject as
    Button
    ).Text =
    "Это кнопка!"
    ;
    Следует помнить, что операция приведения сработает только в том случае, если объект изначально принадлежит тому классу, к которому его пытаются привести (или совместим с ним), в противном случае опе- ратор as выбросит исключение и остановит выполнение программы.
    Поэтому более безопасный подход состоит в комбинированном приме- нении операторов as и is
    : сначала проверяем совместимость объекта и класса, и только потом выполняем операцию приведения: if
    (someObject is
    Button
    )
    (someObject as
    Button
    ).Text =
    "Это кнопка!"
    ;
    В качестве практического примера использования этих операций рассмотрим пример программы, которая перебирает все элементы управления на форме, и у кнопок (но не у других элементов управле- ния!) заменяет текст на пять звездочек «*****»: private void
    Form1_Load(
    object sender,
    EventArgs e)
    {

    50
    // Перебираем все элементы управления foreach
    (
    Control c in this
    .Controls) if
    (c is
    Button
    )
    // Кнопка?
    (c as
    Button
    ).Text =
    "*****"
    ;
    // Да!
    }
    5.5. Сведения, передаваемые в событие
    Когда происходит какое-либо событие (например, событие
    Click при нажатии на кнопку), в обработчик этого события передаются до- полнительные сведения об этом событии в параметре e
    Например, при щелчке кнопки мыши на объекте возникает событие
    MouseClick
    . Для этого события параметр e
    содержит целый ряд пере- менных, которые позволяют узнать информацию о нажатии:

    Button
    – какая кнопка была нажата;

    Clicks
    – сколько раз была нажата и отпущена кнопка мыши;

    Location
    – координаты точки, на которую указывал курсор в мо- мент нажатия, в виде объекта класса
    Point
    ;

    X
    и
    Y
    – те же координаты в виде отдельных переменных.
    Индивидуальные задания
    Если в индивидуальном задании используется элемент
    Panel
    , изме- ните его цвет, чтобы он визуально выделялся на форме. Если использу- ется элемент
    Label
    , не забудьте присвоить ему какой-либо текст, иначе он не будет виден на форме.
    1.
    Разработать программу, динамически порождающую на окне кнопки. Левый верхний угол кнопки определяется местоположением курсора при щелчке. Вывести надпись на кнопке с координатами ее ле- вого верхнего угла.
    2.
    Разработать программу, динамически порождающую на окне кноп- ки и поля ввода. Левый верхний угол элемента управления определяется ме- стоположением курсора при щелчке. Кнопка порождается, если курсор на- ходится в левой половине окна, в ином случае порождается поле ввода.
    3.
    На форме размещен элемент управления
    Panel
    . Написать про- грамму, которая при щелчке мыши на элементе управления Panel до- бавляет в него кнопки
    Button
    , а при щелчке на форме в нее добавляются поля ввода
    TextBox
    4.
    На форме размещены 3 панели (элемент управления Panel). На- писать программу, которая при щелчке мыши на первой панели добав- ляет во вторую панель кнопки Button, при щелчке на второй панели до- бавляет в третью панель поля ввода TextBox, а при щелчке на третьей панели добавляет на первую панель метки Label.

    51 5.
    Написать программу, добавляющую на форму кнопки. Кнопки добавляются в узлы прямоугольной сетки. Расстояния между кнопками и расстояния между крайней кнопкой и границей окна должны быть равны как по горизонтали, так и по вертикали.
    6.
    Разработать программу, при щелчке мыши динамически порож- дающую на окне кнопки или поля ввода. Каждый четный элемент управ- ления является кнопкой, нечетный – полем ввода. Левый верхний угол кнопки определяется местоположением курсора при щелчке. Для поля ввода положение курсора определяет координаты правого нижнего угла.
    7.
    Создать программу с кнопкой, меткой и полем ввода. При щелчке на соответствующий элемент на форме динамически должен создаваться подобный ему элемент. Предусмотреть возможность выво- да количества кнопок, меток и полей ввода.
    8.
    Создать программу, добавляющую различные элементы управ- ления на форму и на панель
    Panel
    . Тип элементов управления выбира- ется случайным образом. Предусмотреть возможность вывода инфор- мации о количестве элементов по типам и информацию о расположении элементов.
    9.
    Разработать программу, добавляющую на форму последова- тельность элементов управления случайной длины. Тип элементов управления задается случайным образом. Предусмотреть возможность вывода информации о количестве элементов по типам.
    10.
    Написать программу, динамически порождающую на окне кнопки или метки. Левый верхний угол элемента управления определя- ется местоположением курсора при щелчке. При нажатии правой кноп- ки мыши на форме с нее удаляются все кнопки.
    11.
    Написать программу, динамически порождающую на окне по- очередно кнопки или поля ввода. Левый верхний угол элемента управ- ления определяется местоположением курсора при щелчке. При нажа- тии правой кнопки мыши на форме с нее удаляются все порожденные элементы.
    12.
    Разработать программу с двумя кнопками на форме. При нажа- тии на первую на форму добавляется одна панель
    Panel
    . При нажатии на вторую кнопку в каждую панель добавляется поле ввода.
    13.
    Разработать программу с двумя кнопками на форме. При нажа- тии на первую на форму добавляется одна кнопка или поле ввода.
    При нажатии на вторую кнопку каждое поле увеличивается по вертика- ли в два раза.
    14.
    Написать программу с кнопкой и тремя полями ввода. При на- жатии на кнопку программа анализирует содержимое первого поля и динамически порождает элемент управления. Если в первом поле вво-

    52 да содержится буква «
    К
    », то на форму добавляется кнопка, если «
    П
    » – поле ввода, если «
    М
    » – метка. Во втором и третьем поле ввода содержат- ся координаты левого верхнего угла будущего элемента управления.
    15.
    Разработать программу, добавляющую на форму метки с тек- стом. Местоположение и размеры меток определяются в программе ди- намически через поля ввода. В заголовок окна, анализируя размер всех меток, вывести количество маленьких и больших меток. Маленькой меткой считается метка размером менее 50 пикселей по горизонтали и вертикали.
    16.
    Создать программу с двумя кнопками на форме, динамически порождающую на окне метки или поля ввода. При нажатии на первую кнопку каждая метка увеличивается по горизонтали в два раза. При нажа- тии на вторую кнопку каждое поле уменьшается по вертикали в два раза.
    17.
    Разработать программу, динамически порождающую на окне кнопки и поля ввода. Координаты элемента управления определяются случайным образом. Элементы управления не должны накладываться друг на друга. Если нет возможности добавить элемент управления (нет места для размещения элемента), то предусмотреть вывод информации об этом.
    18.
    Разработать программу, динамически порождающую на окне кнопки и поля ввода. Координаты элемента управления определяются случайным образом. При наведении курсора на элемент управления он должен быть удален с формы.
    19.
    Разработать программу, динамически порождающую при щелчке на окне различные элементы (поля ввода, кнопки, метки). Тип элементов определяется с помощью радиокнопок. Все элементы распо- лагаются горизонтально в ряд. При достижении правой границы окна начинается новый ряд элементов.
    20.
    Разработать программу, динамически порождающую или поле ввода (при нажатии на окне левой кнопкой мыши), или кнопку (при на- жатии на окне правой кнопкой мыши). Все элементы располагаются на- искосок, начиная с левого верхнего угла окна. Реализовать обработчик события изменения размера окна, в котором удалить все порожденные элементы.


    написать администратору сайта