Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_pascal.doc
Скачиваний:
11
Добавлен:
27.09.2019
Размер:
1.43 Mб
Скачать

Классы. Инкапсуляция»

Целью работы является:

  • изучение назначения и структуры классов;

  • освоение объявления и реализации классов;

  • освоение области видимости членов класса;

  • получение навыков работы с классами.

Задание на выполнение лабораторной работы

Разработать структуру класса и программу вычисления в соответствии с вариантом задания.

Программа должна включать:

  • объявление и реализация классов в соответствии с вариантом задания;

  • разграничение области видимости членов класса;

  • ввод исходных данных и их обработка;

  • вывод результатов выполнения программы.

Средства и оборудование

Персональная ЭВМ, среда программирования не ниже Borland Delphi 5.0.

Теоретические основы

Классы – это объявленные пользователем типы данных, объединяющие в себе не только разнотипные данные (например, тип record), но и операции над этими данными (понятие инкапсуляции). Введение классов позволяет оперировать более сложными понятиями также как и стандартными типами данных.

В среде программирования Delphi классы могут содержать объявления полей, методов, свойств и событий. Наличие в классе свойств и событий является надстройкой среды программирования Delphi.

Поля – это данные, содержащиеся в классе. В качестве полей могут выступать практически любые переменные стандартных и пользовательских типов.

Методы – это процедуры и функции, позволяющие работать с полями класса.

Свойства – это специальный механизм Delphi, позволяющий удобно работать с полями класса путем вызова методов класса.

События – это специальный механизм Delphi, позволяющий реагировать на события пользователя, такие как события от мыши, клавиатуры или таймера.

Любой класс в Delphi автоматически наследуется от базового класса TObject и перенимает все его элементы. Каждый созданный класс должен иметь конструктор и деструктор по умолчанию.

Конструктор – это метод, размещающий в памяти сам класс и его поля. Конструктор по умолчанию называется Create и не имеет формальных параметров. Объявление нового конструктора начинается с зарезервированного слова constructor, за которым следует его имя и возможные формальные параметры. После вызова метод constructor выдает указатель на место в памяти, где класс был размещен.

Деструктор – метод, удаляющий класс из памяти. Деструктор по умолчанию называется Destroy. Вместо деструктора рекомендуется вызывать метод Free, также имеющийся в любом классе, который перед удалением объекта проверяет действительное его наличие в памяти. При необходимости пользовательский деструктор объявляется при помощи зарезервированного слова destructor и следующего за ним имени. Следует заметить, что метод Free вызывает деструктор Destroy, поэтому, если требуется удалять объект класса наследника из памяти при помощи метода Free, то необходимо объявлять деструктор именем Destroy и наследовать его от базового класса при помощи зарезервированного слова override.

В основе объектно-ориентированного программирования лежит необходимое требование, что доступ к полям должны иметь только методы этого класса, так как они могут проверить значения полей на правильность. В среде программирования Delphi существуют следующие области видимости:

  • private – доступ к объявленным здесь элементам открыт для методов класса, а также к элементам напрямую можно обращаться из любых процедур и функций не членов класса в модуле, где объявлен этот класс;

  • protected – доступ к элементам имеют методы класса, а также наследники этого класса. Доступ открыт также для процедур и функций в модуле, где объявлен этот класс;

  • public – доступ к элементам полностью открыт для использования в процедурах и функциях, объявленных вне класса;

  • published – область видимости как у раздела public. Дополнительно то, что свойства и события, объявленные в этом разделе, отображаются в Инспекторе объектов Delphi;

  • automated – область видимости как у раздела public. Методы, объявленные в этом разделе, будут видны другим приложениям при создании OLE сервера.

Области видимости разделяют все элементы класса на доступные вне класса и доступные только внутри класса.

Объявление нового класса производится в разделе type модуля, например:

type

TComplex = class

private

r, i: Extended;

function Getre: Extended;

function Getim: Extended;

procedure Setre(re: Extended);

procedure Setim(im: Extended);

public

constructor Create(re, im: Extended);

destructor Destroy; override;

procedure Set(re, im: Extended);

function Modul: Extended;

property Re: Extended read GetRe write Setre;

property Im: Extended read r write Setim;

end;

Описание класса состоит из описания методов класса. Описание метода включает его заголовок и тело метода. В заголовок метода обязательно добавляется название класса перед именем метода, например:

function TComplex.Modul: Extended;

begin

result := sqrt( sqr(r)+sqr(i) );

end;

procedure TComplex.Set(re, im: Extended);

begin

r := re;

i := im;

end;

Для работы с созданным классом необходимо объявить экземпляр этого класса:

var

C: TComplex;

Обращение к полям и методам класса происходит при помощи указания имени экземпляра класса и имени поля или вызываемого метода, разделенными между собой точкой, например:

x := C.Modul;

C.Set(10, 7);

Переменная С после объявления в разделе переменных указывает на несуществующий указатель, а не на структуру TComplex. Объявление переменной является недостаточным условием для работы с ней. Необходимо разместись структуру TComplex в памяти, а после окончании работы с переменной – удалить, например:

begin

C := TComplex.Create;

// использование переменной С

C.Free;

end;

Варианты заданий

  1. Разработать структуру объекта для представления и расчета объема и площади поверхности правильного усеченного конуса. Разработать программу, рассчитывающую объем и площадь поверхности правильного усеченного конуса при помощи данного объекта.

  2. Разработать структуру объекта для представления и расчета объема и площади поверхности тора. Разработать программу, рассчитывающую объем и площадь поверхности тора при помощи данного объекта.

  3. Разработать структуру объекта для представления и расчета объема и площади поверхности тетраэдра. Разработать программу, рассчитывающую объем и площадь поверхности тетраэдра при помощи данного объекта.

  4. Разработать структуру объекта для представления и расчета объема и площади поверхности октаэдра. Разработать программу, рассчитывающую объем и площадь поверхности октаэдра при помощи данного объекта.

  5. Разработать структуру объекта для представления и расчета объема и площади поверхности додекаэдра. Разработать программу, рассчитывающую объем и площадь поверхности додекаэдра при помощи данного объекта.

  6. Разработать структуру объекта для представления и расчета объема и площади поверхности икосаэдра. Разработать программу, рассчитывающую объем и площадь поверхности икосаэдра при помощи данного объекта.

  7. Разработать структуру объекта для представления и расчета объема и площади поверхности призма. Разработать программу, рассчитывающую объем и площадь поверхности призма при помощи данного объекта.

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

  9. Создать класс типа дата с полями: день, месяц, год. Класс должен иметь конструктор, функции–члены установки дня, месяца и года, функцию–член приращения на 1 день, функции–члены получения дня, месяца и года, а также две функции–члены печати:

  1. печать по шаблону «25 февраля 2005 года»;

  2. печать по шаблону «25.02.2005».

Функции–члены установки полей должны проверять корректность задаваемых параметров.

  1. Создать класс типа время с полями: час, минута, секунда. Класс должен иметь конструктор, функции–члены установки времени, функцию–член приращения на 1 секунду, функции–члены получения часа, минуты и секунды, а также две функции–члены печати:

  1. печать по шаблону «13 часов 20 минут 7 секунд»;

  2. печать по шаблону «1:20».

Функции–члены установки полей класса должны проверять корректность задаваемых параметров.

  1. Определите класс дробей рациональных чисел, являющихся отношением двух целых чисел. Напишите методы для сложения, вычитания, умножения и деления дробей. Реализовать функцию–член приведения дроби к наименьшему знаменателю наиболее эффективным способом.

  2. Создать класс комплексных чисел. Предусмотреть функции-члены в классе: сложение, вычитание, умножение, деление, нахождение сопряженного числа. Функция-член печати вида «2+3i». Функция-член нахождения модуля комплексного числа и возведения в степень. Вычислить следующие выражения:

  1. ;

  2. ;

  3. ;

  4. ;

  5. .

  1. Создать класс для представления динамического массива с указанным ниже типом элементов. Определить конструктор, деструктор, операцию чтения и записи элемента массива. Для динамического массива вести функции-члены нахождения среднего арифметического, максимального, минимального чисел. Определить метод-член для сортировки чисел по возрастанию.

  1. тип элементов Integer;

  2. тип элементов Double;

  3. тип элементов Currency;

  1. Операции с римскими цифрами. Написать программу сложения, вычитания и умножения чисел, записанных римскими цифрами. Исходные данные и результаты должны представляться в римской нотации. Представить римское число в виде класса. Взаимное соответствие чисел между в римской и десятичной системой приводится в таблице 2.

Таблица 2.