Файл: Применение объектно-ориентированного подхода при проектировании информационной системы (принципы объектно–ориентированного программирования).pdf
Добавлен: 04.07.2023
Просмотров: 267
Скачиваний: 2
СОДЕРЖАНИЕ
1. Принципы объектно–ориентированного программирования
1.3. Методы и их использование
1.4. Понятие инкапсуляции и ее влияние на свойства объекта
1.6. Понятие области видимости
1.7. Понятие полиморфизма и виртуальных методов
2.1. Пример 1 Тестирующая программа, реализованная на Borland Delphi
2.2 Пример 2 Вычисление значения функции
2.3 Пример 3 Вычисление всех значений функции
2.4 Пример 4 Обработка массивов
2.2.3. Модуль обработчика вычисления функции на Visual Basic
На форме разместим кнопку, для которой напишем обработчик, приведенный в Приложении 3.
2.2.4. Результат выполнения программы
Результат ввода исходных данных и расчета Y показан на рисунке 8.
Рисунок 8 – Результат выполнения программы
2.3 Пример 3 Вычисление всех значений функции
2.3.1 Постановка задачи
Вычислить и напечатать все значения функции:
Таблица 4 – Заданные функции
|
f1 |
f2 |
f3 |
f4 |
|
= |
Таблица 5 – Заданные условия
|
Усло-вие_1 |
Усло-вие_2 |
Усло-вие_3 |
Усло-вие_4 |
Начальное значение аргумента Хи |
Конечное значение аргумента Хк |
Шаг изменения аргумента dx |
|
x<0 |
0≤x<4 |
4≤x≤6 |
x>6 |
-4 |
10 |
0.7 |
2.3.2 Алгоритм решения задачи
Алгоритм решения задачи показан на рисунке 9.
Рисунок 9 – Алгоритм решения задачи
2.3.3 Модуль вычисления значений функции на интервале на Visual Basic
На форме разместим кнопку, для которой напишем обработчик, приведенный в Приложении 4.
2.3.4. Результат выполнения программы
Результат вычисления всех значений функции на интервале показан на рисунке 10.
Рисунок 10 – Результат выполнения программы
2.4 Пример 4 Обработка массивов
2.4.1 Постановка задачи
Для элементов, стоящих на четных местах, двух одномерных массивов одинаковой длины определить среднее арифметическое среди элементов, попадающих в интервал (-10,10).
2.4.2 Алгоритм решения задачи
Алгоритм решения задачи показан на рисунке 11.
Рисунок 11 – Алгоритм решения задачи
2.4.4. Программа обработки массивов на Visual Basic
На форме разместим кнопку, для которой напишем обработчик, приведенный в Приложении 5.
2.4.5. Результат выполнения программы
Для ввода каждого элемента массивов выдается окно, показанное на рисунке 12.
Рисунок 12 – Окно ввода элементов массивов
Результат обработки массивов показан на рисунке 13.
Рисунок 13 – Результат выполнения программы
ВЫВОД. Во второй были рассмотрены примеры объектно–ориентированного программирования в Borland Delphi и Visual Basic.
ЗАКЛЮЧЕНИЕ
На основании проделанной работы можно сделать следующие выводы:
1) основными понятиями объектно–ориентированного программирования является класс и объект. Объект является физической реализацией класса. Класс - сложная структура, которая аналогична типу. В класс входит ни только описание данных, процедур и функций, выполняемых над объектом, но и характеристики используемых данных, а также подпрограмм;
2) под объектом в Object Pascal понимается некоторая динамическая структура;
3) под методами понимаются процедуры и функции, которые объявлены при описании класса и выполняют некоторые действия над его объектами;
4) инкапсуляция – это скрытие полей некоторого объекта, так чтобы к ним можно было обращаться только через методы данного класса. Для разграничения прав доступа к полям некоторого объекта реализуется через его свойства. Свойство некоторого объекта характеризуется полем, в котором хранится свойство, а также двумя методами, которые обеспечивают доступ к свойствам поля;
5) объектно–ориентированное программирование дает возможность создавать новые классы при помощи добавления полей, свойств и методов, для уже существующих классов;
6) в описание класса обычно входят директивы, которые устанавливают видимость элементов, принадлежащих определенному классу, в теле программы;
7) под полиморфизмом понимается возможность применения одинаковых имен методов, которые входят в разные классы;
8) были разработаны и реализованы 4 примера объектно-ориентированного программирования: тестирующая программа, реализованная на Borland Delphi; вычисления функции на Visual Basic; вычисление всех значений функции; обработка массивов.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
- Белов В.В. Программирование в Delphi: процедурное, объектно-ориентированное, визуальное / Белов В.В., Чистяков В.И. – М.: Горячая Линия-Телеком, 2009. – 240 с.
- Галисеев Г.В. Программирование в среде Delphi 7. Самоучитель / Г.В.Галисеев. – М.: Диалектика, 2012. – 288 с.
- Дарахвелидзе П.Г. Программирование в Delphi 7 / П.Г.Дарахвелидзе, Е.П,Марков. – СПб.: BHV, 2011. – 784 с.
- Иванова Г.С. Объектно–ориентированное программирование / Г.С.Иванова. – М.: МГТУ им. Баумана, 2012. – 320 с.
- Культин Н.Б. Основы программирования в Delphi 7 / Н.Б.Культин. – СПб.: BHV, 2012. – 640 с.
- Лесневский А.С. Объектно–ориентированное программирование для начинающих / А.С.Лесневский. – СПб.: Бином. Лаборатория знаний, 2012. – 232 с.
- Нил Дж. Рубенкинг. Язык программирования Delphi для «чайников» / Нил Дж. Рубенкинг. – М.: Диалектика, 2012. – 336 с.
- Фаронов В.В. Программирование на языке высокого уровня. Гриф МО РФ / В.В.Фаронов. – СПб.: Питер, 2012. – 640 с.
- Фленов М.Е. Библия Delphi / М.Е.Фленов. – СПб.: BHV, 2009. – 800 с.
- Хорев П.Б. Объектно–ориентированное программирование: учебное пособие для студентов учреждений высшего профессионального образования / П.Б.Хорев. – М.: Академия, 2011. – 448 с.
Приложения
Приложение 1
КОД ОБРАБОТЧИКОВ ГЛАВНОЙ ФОРМЫ
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,IniFiles, Menus, StdCtrls, ComCtrls, ExtCtrls;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
Label1: TLabel;
RadioOtvet1: TRadioButton;
RadioOtvet2: TRadioButton;
RadioOtvet3: TRadioButton;
Next: TButton;
vopros: TRichEdit;
Image1: TImage;
procedure FormCreate(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure NextClick(Sender: TObject);
procedure N4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
TTest= Record {Запись для хранения вопросов и ответов}
vopros: string[255];{Вопрос теста}
kolotv: integer;{Количество вариантов ответов}
otvet1: string[255];{Текст первого ответа}
otvet2: string[255];{Текст второго ответа}
otvet3: string[255];{Текст третьего ответа}
picture: string[20];{Имя файла картинки}
end;
var
Form1: TForm1;{Главная форма приложения}
IniFile: TIniFile; {Переменная для связи с INI-файлом}
Test: array [1..20] of TTest;{Массив записей вопросов и ответов}
exename: string;{Имя файла теста}
exepath: string;{Путь к файлу теста}
lenpath: integer;{Длина пути к файлу теста}
k: integer;{Позиция последнего / в полном имени файла}
i: integer;{Переменная цикла}
ini: TIniFile;{Переменная связи с INI-файлом}
vsegovoprosov: integer; {Количество вопросов в тесте}
nomervoprosa: integer; {Номер текущего вопроса}
section: string; {Секция INI-файла}
picturefilename: string; {Путь к файлу картинки}
otvet: array[1..20] of char; {Выбранные ответы на каждый вопрос}
vsegoA: integer; {Количество выбранных ответов А}
vsegoB: integer; {Количество выбранных ответов Б}
vsegoV: integer; {Количество выбранных ответов В}
implementation
uses unit2;
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
exename:=Application.ExeName; {Определение полного имени файла}
lenpath:=length(exename); {Определение длины полного имени файла}
k:=0; {Положение / }
for i:=lenpath downto 1 do {Цикл по длине полного имени файла}
if ((copy(exename,i,1)='\') and (k=0)) then begin {Если текущий символ = /}
{Выделить имя файла из пути}
exepath:=copy(exename,1,i);
k:=i; {Запомнить положение /}
end;
ini:=TIniFile.Create(exepath+'TEST.INI'); {Связать переменную с INI-файлом}
vsegovoprosov:=Ini.ReadInteger('всеговопросов','всего',0); {Прочитать количество вопросов}
for nomervoprosa:=1 to vsegovoprosov do {Цикл по количеству вопросов}
begin
section:='вопрос'+inttostr(nomervoprosa); {Определение имени секции INI-файла}
test[nomervoprosa].vopros:=ini.ReadString(section,'вопрос',''); {Чтение вопроса}
test[nomervoprosa].otvet1:=ini.ReadString(section,'ответ1',''); {Чтение 1-го ответа}
test[nomervoprosa].otvet2:=ini.ReadString(section,'ответ2',''); {Чтение 2-го ответа}
test[nomervoprosa].otvet3:=ini.ReadString(section,'ответ3',''); {Чтение 3-го ответа}
test[nomervoprosa].picture:=ini.ReadString(section,'картинка',''); {Чтение имени файла картинки}
end;
end;
procedure TForm1.N2Click(Sender: TObject);
begin
// Начать тест
nomervoprosa:=1; {Начать с 1-го вопроса}
vsegoA:=0;vsegoB:=0;vsegoV:=0; {Обнулить количество ответов каждого вида}
vopros.Clear; {Очистка поля для вывода вопроса}
vopros.Lines.Add(test[nomervoprosa].vopros); {Вывод текста вопроса}
RadioOtvet1.Caption:=test[nomervoprosa].otvet1; {Вывод 1-го ответа}
RadioOtvet2.Caption:=test[nomervoprosa].otvet2; {Вывод 2-го ответа}
RadioOtvet3.Caption:=test[nomervoprosa].otvet3; {Вывод 3-го ответа}
RadioOtvet1.Checked:=true; {Выбор 1-го ответа}
Label1.Caption:='Выберите один из вариантов отбетов на следующий вопрос:'; {Вывод пояснения}
vopros.Visible:=true; {Сделать вопрос видимым}
RadioOtvet1.Visible:=true; {Сделать 1-й ответ видимым}
RadioOtvet2.Visible:=true; {Сделать 2-й ответ видимым}
RadioOtvet3.Visible:=true; {Сделать 3-й ответ видимым}
Next.Visible:=true; {Сделать кнопку перехода к следующему вопросу видимой}
end;
procedure TForm1.NextClick(Sender: TObject);
// Кнопка перехода к следующему вопросу
begin
if (nomervoprosa<vsegovoprosov) then {Пока номер вопроса менььше наибольшего}
begin
if (RadioOtvet1.Checked=true) then otvet[nomervoprosa]:='А'; {Увеличение счетчика ответов А}
if (RadioOtvet2.Checked=true) then otvet[nomervoprosa]:='Б'; {Увеличение счетчика ответов Б}
if (RadioOtvet3.Checked=true) then otvet[nomervoprosa]:='В'; {Увеличение счетчика ответов В}
nomervoprosa:=nomervoprosa+1; {Увеличение номера вопроса}
label1.Caption:='Выберите наиболее подходящий для Вас вариант ответа на вопрос'; {Вывод пояснения}
vopros.Clear; {Очистка поля вопроса}
vopros.Lines.Add(test[nomervoprosa].vopros); {Вывод вопроса}
RadioOtvet1.Caption:=test[nomervoprosa].otvet1; {Вывод 1-го ответа}
RadioOtvet2.Caption:=test[nomervoprosa].otvet2; {Вывод 2-го ответа}
RadioOtvet3.Caption:=test[nomervoprosa].otvet3; {Вывод 3-го ответа}
if (test[nomervoprosa].picture<>'') then begin {Если в вопросе есть картинка}
{Получить имя файла картинки}
picturefilename:=exepath+'vopros'+inttostr(nomervoprosa)+'.bmp';
{Загрузка картинки из файла}
image1.Picture.LoadFromFile(picturefilename);
{Показать картинку}
image1.Visible:=true;
end
else
{Скрыть картинку}
image1.Visible:=false;
RadioOtvet1.Checked:=true; {Выбрать 1-й варинт ответа}
end
else
begin
{Если выбран 1-й ответ, увеличить счетчик ответов А}
if (RadioOtvet1.Checked=true) then otvet[nomervoprosa]:='А';
{Если выбран 2-й ответ, увеличить счетчик ответов Б}
if (RadioOtvet2.Checked=true) then otvet[nomervoprosa]:='Б';
{Если выбран 3-й ответ, увеличить счетчик ответов В}
if (RadioOtvet3.Checked=true) then otvet[nomervoprosa]:='В';
result.StringGrid1.Cells[0,0]:='Номер вопроса'; {Вывод заголовка столбца таблицы результатов теста}
result.StringGrid1.Cells[1,0]:='Ответ'; {Вывод заголовка столбца таблицы результатов теста}
for i:=1 to vsegovoprosov do {Цикл по количеству вопросов}
begin
result.StringGrid1.Cells[0,i]:=inttostr(i); {Вывод в таблицу номер вопроса}
result.StringGrid1.Cells[1,i]:=otvet[i]; {Вывод в таблицу выбранного варианта ответа}