Научная статья на тему 'Объектно-ориентированное программирование с созданием классов для объектов типа «Массив» и «Матрица»'

Объектно-ориентированное программирование с созданием классов для объектов типа «Массив» и «Матрица» Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
716
44
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ / ВИЗУАЛЬНЫЙ ПРОЕКТ / МОДУЛИ / КЛАССЫ / ДИНАМИЧЕСКИЕ МАССИВЫ

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Широкова О.А.

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

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Object-Oriented Programming With the Creation of Classes for Objects Such as Array and Matrix pp. 15-22 Olga A. Shirokova In article features of studying of a course of object-oriented programming are considered. When studying this course students are offered to create the visual project for the solution of mathematical tasks with creation of classes of mathematical objects in Delphi. Keywords: Object-oriented programming, Visual project, Modules, Classes, Dynamic arrays

Текст научной работы на тему «Объектно-ориентированное программирование с созданием классов для объектов типа «Массив» и «Матрица»»

Литература

1. Саати Т. Принятие решений. Метод анализа иерархий. М.: Радио и связь, 1993.

2. Федунец, Н.И. Теория принятия решений. Учебное пособие для вузов / Н.И. Федунец, В.В. Куприянов. - М.: Московский государственный горный университет, 2005. - 218 с. -(Высшее горное образование). - ISBN 5-7418-0397-0.

УДК 004.42

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ С СОЗДАНИЕМ КЛАССОВ ДЛЯ ОБЪЕКТОВ ТИПА «МАССИВ» И «МАТРИЦА»

Широкова Ольга Александровна, к. ф.-м. н., доцент кафедры высшей математики и математического моделирования, Казанский (Приволжский) федеральный университет

Россия, Казань, oshirokova@mail.ru

Введение

Дисциплина «Программирование» занимает одно из центральных мест в системе подготовки студентов математических факультетов. В настоящее время объектно-ориентированный стиль применяется при разработке широкого круга приложений [1-6]. Способность студентов мыслить обьектно формируется при разработке визуальных приложений с использованием стандартных объектов (компонентов) системы объектно-ориентированного программирования (ООП).

При изучении этого курса студентам предлагается разработка визуальных проектов в Delphi [1, 2]. Студентов нужно обучать применению знаний в реальных ситуациях, расширять сферу возможного применения ООП. Для этого рекомендуется решать задачи, имеющие объекты, прототипами которых являются реально существующие математические объекты и структуры.

Возможности ООП можно эффективно использовать при реализации алгоритмов вычислительного типа. Базовыми понятиями линейной алгебры и аналитической геометрии являются вектор и матрица. Их моделью в алгоритмических языках являются массивы. Часто при решении задач аналитической геометрии и линейной алгебры необходимо использовать массивы, размерность которых не фиксирована. В алгоритмических языках для этого удобно пользоваться динамическими массивами, их размер может определяться на этапе вычислений, а не в момент трансляции. Эти массивы относятся к ссылочным типам, требующим распределения памяти в «куче». Принцип инкапсуляции ООП позволяет соединить в описании класса воедино и элементы динамического массива, и операции над ними. Эти возможности реализует описанный ниже класс TMas, созданный для решения серии задач, использующих массивы различной длины [1]. Таким же образом можно создать класс TMatr для динамического двумерного массива. Полное описание этих классов предусматривает достаточное количество методов, реализующих основные операции линейной алгебры и аналитической геометрии.

При изучении курса технологии ООП студентам в числе многих других проектов предлагается создать проект для решения следующих задач аналитической геометрии в пространстве и на плоскости:

р =(^ y^ zi);

1.

вычисление расстояния между двумя точками декартовой системе координат:

P2 = (X2 , У 2 , Z2)

d = V(X2 - X1)2 + (У2 - У1)2 + (Z2 - Z1)2

2. вычисление координат середины отрезка

P P

И 2

X =

I X2

У =

У1 + У 2 .

z =

Z1 + Z2

(1)

(2)

2 ' 2 2 3. вычисление координат центра тяжести п материальных точек. Координаты центра Р(х у г) Р, = (х,, у,, г,), (г = 1...и)

\ •> ^ •> / гтхггг&ллт-т п лтсл^глтяа ттт-ит-гчт ^ггчи^ь- г \ г? У г? г/•> \ /

тяжести

массами

щ.

системы n материальных точек вычисляются по формулам:

X =

„ щ*, „ щ,У, „ m,z,

i=1 . п ' У = —-; п z = =1 п

„ щ i=1 „ щ ,=1 „ щ i=1

(3)

4. Вычисление ориентированной площади многоугольника с вершинами в точках

P = (X, У-), (i = 1. n)

1 2'

S = о[(*1 - Х2)(У1 I У2) I (*2 - *3 )(У 2 + Уз) + ... + (*n - *1)(Уп I У:)] . (4)

5. Вычисление расстояния от точки ^ до прямой, если прямая задана своей

точкой Р ■ и направляющим вектором Я = (1, ш, п) в координатной форме

1 m п . Расстояние d от точки до этой прямой вычисляется по

формуле:

(5)

Отметим, что если в первых двух задачах и последней задаче (5) длина массива фиксирована, то в (3) и (4) длина массива произвольна и указывается пользователем на этапе вычислений.

1. Создание классов TMas и TMatr

Для разработки визуального проекта решения предложенных задач создаются два модуля Massiv и Matrisa с описанием классов TMas, TMatr. В этих классах используются свойства Elem и Elemm [1,3].

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

Остановимся подробно на описании метода определения адреса динамической памяти для j-го элемента массива - метода ElemP. Метод ElemP позволяет интерпретировать байты памяти, отведенные под элемент с номером j, как значение вещественного типа. При описании метода ElemP используются:

• функция Sizeof(x) - дает размер аргумента x в байтах;

• функция Ptr(x:integer) - стандартная функция типа указатель, которая преобразует адрес памяти (адрес=сегмент+смещение) в указатель.

Процедуры GetMem и FreeMem выделяют и освобождают в динамической памяти область размера (jMax - jMin + 1)*Sizeof(Real) и присваивают адрес этой области указателю Orig.

Фрагменты описания модуля Massiv с классом TMas представлены ниже:

unit Massiv; interface

type Real=single; RealP=AReal; type TMas=class protected

Orig: pointer; jMin, jMax:integer;

{поле Orig используется как указатель адреса кучи}

function ElemP(j:integer):RealP; {определяет адрес j элемента}

public

function OutElem (j:integer):Real; procedure InpElem(j:integer;r:Real); constructor Create(jMin ,jMax :integer); destructor Destroy; override;

ElemP=Ptr(LongInt(Orig) +(j - jMin)*Sizeof(Real));

property Elem[j:integer]:Real read OutElem write InpElem; default; end;

implementation{исполняемая часть} end.

Аналогичным образом описываются методы и свойства для второго класса TMatr в модуле Matrisa. При работе конструктора значения полей kMin, kMax, jMax и jMin, также как и в классе TMas, в TMatr передаются как параметры, определяющие количество элементов массива. Метод ElemPP позволяет интерпретировать байты памяти, отведенные под элементы с номерами k и j, как значение вещественного типа. Метод ElemPP записывается в секции Protected и поэтому доступен потомкам класса TMatr.

Процедуры GetMem и FreeMem выделяют и освобождают в динамической памяти область размера

(kMax-kMin+1)*(jMax-jMin+1)*Sizeof(Real)

и присваивают адрес этой области указателю Orig. Указатель Orig на начало этого участка определен в секции Protected, поэтому он доступен потомкам класса TMatr. Метод Clearance очищает массив, т.е. заполняет нулевыми значениями.

В результате работы конструктора инициализируются все поля класса. Процедура GetMem в методе Create выделяет в динамической памяти область заданного размера (создает динамические переменные заданного размера и помещает их адрес в указатель Orig):

GetMem(Orig,((kMax-kMin+1)*(jMax-jMin+1)*Sizeof(Real)));

Метод destructor Destroy уничтожает объект. Процедура FreeMem освобождает память, занятую динамическими переменными данного размера:

FreeMem(Orig,((kMax-kMin+1)*(jMax-jMin+1)*Sizeof(Real)));

В классе TMatr описаны двухместные операции Add, Mul. Здесь действуют соглашение: при выполнении двухместной операции первым операндом является сам объект, вторым операндом - тот, который является формальным параметром метода. Результат сохраняется в полях первого операнда. В методе Det2 вычисляется определитель матрицы второго порядка:

function TMatr.Det2; var S:Real; begin S:=0;

S:=Elemm[1,1]*Elemm[2,2]-Elemm[1,2]*Elemm[2,1]; Det2:=S; end;

Если в классе TMatr не описывать свойство Elemm[k,j:integer], то в модуле Unit Matrisa необходимо обращаться не к Elemm[i,j], а к ElemPP[i,j]A

Фрагменты описания модуля Matrisa, в котором описан класс TMatr, приводятся ниже:

Unit Matrisa; interface

type Real=Single; RealP=AReal; type TMatr=class protected Orig: Pointer;

kMin, kMax, jMin, jMax:Integer; function ElemPP(k,j:Integer):RealP; public

function OutElemm(k,j:integer):Real; procedure InpElemm(k,j:integer;r:Real);

constructor Create(kMin , kMax , jMin ,jMax :Integer); destructor Destroy; override;

property Elemm[k,j:integer]:Real read OutElemm write InpElemm; default;

procedure Clearance; procedure Add(x:TMatr); procedure Mul(x:TMatr); function Det2():Real; end;

implementation uses Uses Massiv; function TMatr.ElemPP; begin

ElemPP:=Ptr(LongInt(Orig)+((k-kMin)*(jMax-jMin+1)+j-jMin) *Sizeof(Real)); end;

end.

2. Отношение композиции между классами TMas, TMatr и TForm

Разработка визуального проекта начинается с планирования и структурирования, т.е. создания проекта системы. В мире программного обеспечения для этого служат модели [5].

Рис. 1 - Диаграмма классов приложения с использованием классов TMas и TMatr

19

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

Композицией называют такое отношение между классами, когда один является неотъемлемой частью второго. Физическая композиция реализуется включением в класс фиксированного количества полей, являющихся объектами другого класса. Обычно такие поля принято называть объектными [5, 6].

На диаграмме классов композиция изображается линией с закрашенным ромбом, указывающим на класс большей сложности, в который происходит включение объектных полей. Между классами TMas и TMatr существует отношение композиции. Представим диаграмму классов приложения решения задач с использованием классов TMas и TMatr (рис. 1).

Интерфейс проекта создается с помощью меню, размещенного на форме. Меню диалогового окна позволяет решать все пять поставленных задач.

При создании проекта важным является выбор процедур z1, z2, z3, z4, z5 соответствующих номерам задач, которые вызываются обработчиком Bitbtn1Click. Каждая из процедур решает одну из поставленных задач. Код обработчика этого события имеет вид:

procedure TForm1.BitBtn1Click(Sender: TObject);

begin

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Bitbtn1.Enabled:=false;

Bitbtn2.Enabled:=true;

case nz of

1: z1(stringGrid1,label3);

2: z2(stringGrid1,label3);

3: z3(stringGrid1,Label3);

4: z4(stringGrid1,Label3);

5: z5(stringGrid1,Label3);

end; end;

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

В работе предлагается следующая последовательность работы с приложением:

• Операция 1. При запуске приложения перед пользователем должно раскрываться окно, в котором он должен выбрать в выпадающем списке одну из задач (рис. 2, а). После должно раскрываться окно, в котором он должен видеть поле компонента StringGrid1 для ввода чисел, а также кнопки «Вычислить», «Следующая». Поскольку числа не введены, нажатие кнопок «Вычислить» и «Следующая» должно быть заблокировано (рис. 2, б).

• Операция 2. Пользователь вводит числа - при вводе первых цифр кнопка «Вычислить» должна стать доступной. Соответственно, после вычисления кнопка «Вычислить» снова должна становиться недоступной.

• Операция 3. Пользователь нажимает кнопку «Вычислить» - если числа введены верно, то при этом должно выполняться вычисление, а результат - отображаться в окне формы. При этом необходимо блокировать изменение введенных чисел, поскольку если пользователь изменит исходные данные, то результат перестанет соответствовать вводу. Кнопка «Следующая», наоборот должна стать доступной (рис. 2, в). Если числа введены неверно, то приложение должно выводить сообщение об ошибке «Ошибка в записи числа». Также при ошибочном вводе должны выйти сообщения «Переполнение» и «Ошибка при вычислениях».

Tjfi Form2

□ | и M/-J'

Jg Form2

Геометрические задачи | Выход 1

РаспояТищ^адудвумя

gr-T-|—

/ ВЫЧИСЛИТЬ

СЛЕДУЮЩАЯ

Геометрические задачи I

ВВЕДИТЕ КООРДИНАТЫ ДВУХ ТОЧЕК

ВЫЧИСЛИТЬ

СЛЕДУЮЩАЯ

11 11 п

Г Form2

И В УУ

Геометрические задачи I

Расстояние от точки до прямой Введите координаты 2-х точек и вектора прямой

X |у V

3 -6 5

12 37 7

-4 45 56

ВЫЧИСЛИТЬ

СЛЕДУЮЩАЯ

Расстояние от точки до прямой: = 34,0

Геометрические задачи I

|Х |у g к

Координаты центра тяжести матер-х точек ВВЕДИТЕ ЧИСЛО ТОЧЕК

|4

ВЫЧИСЛИТЬ

СЛЕДУЮЩАЯ I

в г

Рис. 2 - Реализованные операции программы

• Операция 4. При выборе пункта меню «Координаты центра тяжести материальных точек», как и пункта меню «Площадь многоугольника», становится доступным окно ввода «Edit» (рис. 2, г). Пользователь вводит число материальных точек n либо число n вершин многоугольника. Далее, если число введено правильно, поле StringGridl становится доступным и в нем устанавливается необходимое число строк для заполнения (рис.2, г). Соответственно, при вводе исходных данных компонент «Edit» становится недоступным.

• Операция 5. Пользователь нажимает кнопку «Следующая» для решения следующей задачи - на экране должно отобразиться исходное состояние окна приложения. Далее пользователь переходит на пункт меню «Геометрические задачи» и выбирает в выпадающем списке одну из задач (См. рис. 2, а).

• Операция 6. Для завершения работы пользователь нажимает меню «Выход». Приложение закрывается, причем кнопка «Выход» должна быть доступна в любой момент времени.

Итак, в процессе визуального проектирования интерфейса мы получаем заготовку модуля с полями-компонентами.

Меню диалогового окна позволяет решать поставленные задачи, например, последние (4)-(5) (Рис.За, б). Таким образом, создание в Delphi проектов решения математических задач способствует формированию навыков объектно-ориентированного и визуального программирования моделей реальных объектов и структур. У студентов формируются умения применять модели разработки программного обеспечения при создании программных продуктов, а также применять средства моделирования программных систем.

б

а

а б

Рис. 2 - Реализованные операции программы

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

Литература

1. Широкова О.А. Визуальный проект для решения геометрических задач. //В мире научных открытий: Материалы XII Международной научно-практической конференции (30 июня 2014 г.): Сборник научных трудов. Научный ред. д.п.н., проф. Г.Ф. Гребенщиков. - М.: Издательство «Спутник+», 2014. - с.139-144.

2. Широкова О.А. Особенности обучения программированию на основе общности и различия принципов // Современные проблемы науки и образования. - 2015. - № 1, с.1757. URL: http://www.science-education.ru/121-17896

3. Плещинский Н.Б. Объектное программирование в Delphi. Учебное пособие. - Казань: Издательство КМО, 1999. - 86с.

4. Широкова О.А. Технология программирования. Практикум по технологии программирования MDI-приложения с реализацией в DELPHI. / Коллективная монография «Избранные вопросы современной науки», ч. 14, Научный ред. д.п.н., проф. Г.Ф. Гребенщиков. - М.: Издательство «Спутник+», 2014. -136-158 с.

5. Кватрани Т. Rational Rose 2000 и UML. Визуальное моделирование. Пер. с англ. - М.: ДМК Пресс, 2001. - 176с.

6. Иванова Г.С. Технология программирования: учебник. - М., КНОРУС, 2011. - 336с. УДК 004.05

СИСТЕМА АНАЛИЗА И ОЦЕНКИ ИСТОЧНИКОВ СВЕТА

Шинов Александр Александрович, магистрант, Московский Физико-Технический Институт (Государственный Университет), Россия, г. Долгопрудный, alexandershinov@gmail.com

Введение

Научные и учебные лаборатории в процессе своей деятельности часто сталкиваются с проблемами устаревшего программного обеспечения. В отдельных случаях заменить устаревшее программное обеспечение либо невозможно, либо возможно при затрате недопустимо больших ресурсов. Это обусловлено уникальностью программного обеспечения, необходимого для конкретных научных исследований и учебных целей, утерянными исходными кодами.

Возникает необходимость интеграции устаревших и современных программных продуктов для создания объединённых систем в целях применения современных

i Надоели баннеры? Вы всегда можете отключить рекламу.