Глава 7. Объектно-ориентированное программирование

  • doc
  • 07.05.2020
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала 36. Глава 7. Объектно-ориентированное программирование.doc

Глава 7.        Объектно-ориентированное программирование

Практические работы и проекты

Проект № 1.
Движение на дороге

1.       Изучите материал § 48 учебника (создание объектов в программе).

2.       Постройте программу, которая описана в тексте параграфа. Используя выбранную среду программирования, изобразите движение машин по дороге в текстовом или графическом режиме. Для этого дополните класс TCar.

3.       *Добавьте в модель светофор, который переключается автоматически по программе (например, 5 с горит красный свет, затем 1 с – жёлтый, потом 5 с – зеленый и т.д.). Измените классы так, чтобы машина запрашивала у объекта Дорога местоположение ближайшего светофора, а затем обращалась к светофору для того, чтобы узнать, какой сигнал горит. Машины должны останавливаться у светофора с запрещающим сигналом.

Практическая работа № 62.           
Скрытие внутреннего устройства объектов

1.       Измените построенную ранее программу моделирования движения автомашин по дороге так, чтобы все поля у объектов были закрытыми. Используйте свойства для доступа к данным.

Проект № 2.
Иерархия классов (логические элементы)

1.       Используя материалы § 50 учебника, постройте модуль, описывающий иерархию классов логических элементов. Для проверки его работы напишите программу, которая строит таблицу истинности последовательного соединения логических элементов «И» и «НЕ».

2.       Добавьте в иерархию классов элементы «исключающее ИЛИ», «И-НЕ» и «ИЛИ-НЕ». Вынесите всю построенную систему классов логических элементов в отдельный модуль LogElement.

3.       «Соберите» в программе RS-триггер из двух логических элементов «ИЛИ-НЕ», постройте его таблицу истинности (обратите внимание на вариант, когда оба входа нулевые).

4.       *Постройте новый класс TNOrTrigger, моделирующй RS-триггер на двух логических элементах «ИЛИ-НЕ». От какого класса лучше наследовать этот класс? Почему?

Ответ:

 

Как лучше включить в этот класс два элемента «ИЛИ-НЕ»? Будете ли вы использовать для этого наследование?

Ответ:

 

5.       *Выполните задания 3-4 для RS-триггера на двух логических элементах «И-НЕ». Определите, при каких входах состояние сохраняется, а какие входные сигналы запрещены.

Ответ:

 

6.       *Постройте логический элемент «шифратор», который выдает на выходы двоичное представление номера входа, на который подали сигнал. Обозначение и таблица истинности шифратора «4 в 2» показаны ниже:

Все комбинации входов, которые не перечислены в таблице истинности, считаются запрещенными. Выполните следующие задания:

а)       по таблице истинности составьте логическую схему шифратора; постарайтесь использовать минимальное число логических элементов;

б)      добавьте в программу новый класс – модель шифратора (англ. coder), в которой будут использованы уже имеющиеся классы логических элементов;

Будете ли вы использовать наследование? Почему?

Ответ:

 

в)      напишите программу, которая строит таблицу истинности шифратора, используя построенную модель.

7.       *Постройте модель логического элемента «дешифратор» (англ. decoder), который выполняет обратную операцию. Напишите программу, которая строит его таблицу истинности.

Практическая работа № 63.           
Создание формы в RAD-среде

1.       Постройте программу с графической формой, описание которой приведено в § 52 учебника.

2.       Определите обработчики событий

OnShow (вывод формы на экран) – установить размеры формы 400 на 100 пикселей;

OnClick (щелчок мыши по форме) – уменьшить ширину и высоту формы на 10 пикселей, если соответствующий размер больше, чем 100 пикселей;

OnResize (изменение размеров формы) – вывести размеры формы в заголовке окна.

3.       *[Для Delphi] Найдите в Интернете, как ограничить пределы изменения размеров формы (то есть установить минимальную и максимальную ширину и высоту). Добавьте эти возможности в программу.

Практическая работа № 64.           
Использование компонентов

1.       Постройте программу для просмотра рисунков, описание которой приведено в § 53 учебника.

2.       *Дополните программу так, чтобы рисунок, размер которого меньше, чем отведенное для его поле, центрировался в рамках этого поля.

Подсказка: нужно «подложить» под компонент TImage панель (компонент TPanel), у компонента TImage отключить принудительное выравнивание, и менять положение и размеры этого компонента при изменении размеров формы (можно использовать обработчик события OnResize панели, на которой лежит TImage).

Практическая работа № 65.           
Компоненты для ввода и вывода данных

1.       Постройте программу «RGB-кодирование», описание которой приведено в § 53 учебника. Добавьте в эту программу защиту от ввода слишком больших чисел (больших, чем 255).

2.       *Добавьте в программу возможность обратного перевода цифровых кодов: введенное значение шестнадцатеричного кода должно преобразовываться в отдельные значения RGB, например, из «#FF00CC» нужно получить R = 255, G = 0 и B = 204.

Возможно, вам будет полезно логическое свойство Focused, которое есть у компонентов, принимающих ввод с клавиатуры. Оно равно True, если компонент имеет «фокус ввода», то есть пользователь вводит данные в это поле. Например, если Edit1это компонент класса TEdit, можно написать

if Edit1.Focused then

  { компонент принимает ввод с клавиатуры }

else

  { компонент НЕ принимает ввод с клавиатуры }

3.       Разработайте программу для перевода морских милей в километры (1 миля = 1852 м).

4.       Разработайте программу для решения системы двух линейных уравнений. Обратите внимание на обработку ошибок при вычислениях.

5.       Разработайте программу для перевода суммы в рублях в другие валюты.

6.       Разработайте программу для перевода чисел и десятичной системы в двоичную, восьмеричную и шестнадцатеричную.

7.       Разработайте программу для вычисления информационного объема рисунка по его размерам и количеству цветов в палитре.

8.       Разработайте программу для вычисления информационного объема звукового файла при известных длительности звука, частоте дискретизации и глубине кодирования (числу бит на отсчёт).

 

Практическая работа № 66.           
Разработка компонентов

1.       Постройте программу с компонентом TIntEdit, описание которой приведено в § 54 учебника.

2.       *Найдите в Интернете информацию по установке нового компонента в палитру компонентов среды Lazarus (или Delphi) и выполните такую установку. Измените программу так, чтобы она использовала компонент TIntEdit из палитры компонентов. Учтите, что при установке компонента в Lazarus потребуется пересборка всей среды (в Delphi – нет).

Проект № 3.
Модель и представление

  1. Постройте программу с компонентами, описание которой приведено в § 55 учебника.
  2. Измените программу так, чтобы она вычисляла выражения с вещественными числами (для перевода вещественных чисел из символьного вида в числовой используйте функцию StrToFloat).
  3. Добавьте в программу обработку ошибок. Подумайте, какие ошибки может сделать пользователь. Какие ошибки могут возникнуть при вычислениях? Как их обработать?

*Сделайте обработку ошибок, используя исключения (Exception).

  1. *Измените программу так, чтобы она вычисляла выражения со скобками. Подсказка: нужно искать последнюю операцию с самым низким приоритетом, стоящую вне скобок.

Предусмотрите сообщение об ошибке «Непарные скобки в выражении». Для обработки этой ошибки используйте исключение – наследник класса Exception:

type EBracketException = class(Exception);  

  1. Постройте программу «Калькулятор» для выполнения вычислений с целыми числами (см. рисунок).