Лекція №2
З курсу: «Застосування засобів ООП в лінгвістичних
задачах»

1.6. Основні положення об’єктної моделі
Методи структурного проектування допомогає зпростити процес
розробки складних систем за рахунок використання алгоритмів як готових
будівельних блоків. Аналогічно, методи об’єктно-орієнтованого
проектування створенні, щоб допомогти розробникам застосовувати
потужні засоби об’єктного і об’єктно-орієнтованого програмування, що
використовує в якості блоків класи и об’єкти.
Але в об’єктній моделі відображається і множина іншіх факторів. Як
показано нижче, об’єктний підхід зарекомендували себе як уніфікуюча ідея
всієї компьютерної науки, що використовується не тільки в програмуванні,
але також в проектуванні інтерфейса користувача, баз даних і навіть
архітектури компьютерів. Причина такой широти в тому, що орієнтація на
объекти дозволяє нам справлятися з складністю систем самой разної
природи.
Об’єктно-орієнтований аналіз і проектування відображають
эволюційне, а не революційний развиток проектування; нова методологія
не пориває з попередніми методами, а будується з врахуванням
попереднього досвіду.

2. Етапи розробки ПЗ
2.1. Об’єктно-орієнтоване програмування.
Що таке об’єктне-орієнтоване програмування (object-oriented
programming, OOP)? Ми визначаємо його наступним чином:
Об’єктно-орієтоване програмування - це методологія
програмування, яка базується на представленні програми у вигляді
сукупності об’єктів, кожен з яких є екземпляром визначеного класу, а
класи утворюють ієрархію спадкування.

В даному визначенні можна виділити три частини:
1) OOП використовує в якості базових елементів об’єкти, а не
алгоритми;
2) кожен об’єкт є екземпляром деякого визначеного класу;
3) класи організовані ієрархічно.
Програма буде об’єктно-орієнтованою тільки при дотриманні всіх трьох
вказаних вимог. Програмування, яке не базується на ієрархічних
відносинах, не відноситься до OOП, а називаеться програмуванням на
основі абстрактних типів даних.
У відповідності з цим визначенням не всі мови програмування є
об’єктно-орієнтованими. Теоретично можлива можлива імітація об’єктно-
орієнтованого програмування на звичайних мовах, таких, як Pascal і навіть
COBOL або асемблер, але досить важко. Можна сказати що: "мова
програмування є об’єктно-орієнтованою тільки тоді, коли виконуються
наступні умови:
Підтримуються об’єкти, абстракції даних, що мають інтерфейс у
вигляді операцій з іменами і власні дані, з обмеженням доступу до
них.
Об’єкти відносяться до відповідних типів (класам).
Типи (класи) можут спадковувати атрибути супертипів (суперкласів)".

2.2. Об’єктно-орієнтоване проектування.
Програмування насамперед розуміється як правильне і ефективне
використання механізмів конкретних мов програмування. Проектування,
навпаки, основна увага приділяється правильному і эфективному
структуруванню складних систем. Ми визначаемо об’єктно-орієнтоване
проектування наступним чином:
Об’єктно-орієнтоване проектування - це методологія проектування,
яка об’єднує в собі процес об’єктної декомпозиції і прийоми представлення
логічної і фізичної, а також статичної і динамічної моделей системи що
проектується.

В даному визначені є дві важливі частини: об’єктно-орієнтоване
проектування 1) базується на об’єктно-орієнтваній декомпозиції; 2)
використовується різноманіття прийомів представленя моделей, які
відображають логічну (класи і об’єкти) і физичну (модулі и процеси)
структуру системи, а також її статичні і динамічні аспекти.
Саме об’єктно-орієнтована декомпозиція відрізняє об’єктно-орієнтоване
проектування від структурного; в першому випадку логічна структура
системи відображається абстракціями у вигляді класів і об’єктів, в другому
- алгоритмами. Для ОО проектування використовується абревіатура OOD
(object-oriented design), для позначення метода об’єктно-орієтованого
проектування.
2.3. Об’єктно-орієнтований аналіз.

На об’єктну модель вплинула більш ранішня модель життєвого циклу
програмного забезпечення. Об’єктно-орієнтований анализ (або OOA,
object-oriented analysis) направлений на створення моделей реальної
дійсності на основі об’єктно-орієтованого світогляду.
Об’єктно-орієнтований аналіз - це методологія, при якій вимоги до
системи сприймаються з точки зору класів і об’єктів, які визначаються
(выявленных) в предметній області.

OOA(Object-oriented
analysis)
OOD(Object-oriented
design)
OOP(Object-oriented
programming)


Як співвідносяться ООА, OOD и OOP? На результатах
ООА формується моделі, на яких базуються OOD; OOD в
свою чергу створює фундамент для остаточної
реализації системи з використання методології OOP.


2.4. Складові частини об’єктного підходу
Парадігми програмування
Існує п’ять основних різновидів стиля програмування, які перераховані
нижче разом з видами абстракцій:
процедурно-орієнтовані
Алгоритми
об’єктно-орієнтовані
класи і об’єкти
логіко-орієнтовані
мета, часто представлена в термінах
обчисленя предикатів
орієнтований на правила
правила "якщо-то"
орієнтовани на обмеження
інваріантні співвідношення

Кожен стиль програмування має свою концептуальну базу. Кожен стиль
вимагає свого способа сприйняття задачі що вирішується. Для об’єктно-
орієнтованого стиля концептуальна база - це об’єктна модель. Вона має
чотири головних елемента:
абстрагування;
інкапсуляція;
модульність;
ієрархія.
Ці елементи є головними в тому розумінні, що без будь якого з них
модель не буде об’єктно-орієнтованою. Окрім головних, є ще три
додаткових елементи:
типизація;
паралелізм;
сохраняемость.
Називаючи їх додатковими, ми маємо на увазі, що вони корисні в
об’єктній моделі, але не є обов’язковими.


2.4.0. Структура проекта в середовиші Delphi
Проект - сукупність файлів з яких Delphi створює програму для
виконання. В склад кожного проекту обов’язково входять:


Файл проекту - *.dpr
*.dfm,
*.pas,
*.res,
*.cfg,
*.dof,
*.dcu

ФормаФормаОписОписМодульМодульМодульМодульПараметриПроектРесурсиЗастосуванняКомпіляція(сборка)
*.pas*.pas*.pas*.pas*.dfmProject1.dpr*.res*.dfm*.cfg
Рис.2.4. Зв’язок між файлами проекту.


2.4.1. Головний модуль - *.dpr
В головному модулі містяться інструкції, які забезчують
запуск(виконання) програми. В якості прикладу в лістінгу наведемо
головний текст файла головного модуля нашої програми(файл буде
створений, як тільки ми виконаємо збереження проекту)

Лістінг 2.4.1
program Project1;
uses
Forms,
Unit1 in ‘Unit1.pas’ {Form1};
{$R *.res}
begin
Application.Initialize;

Application.CreateForm(TForm1, Form1);
Application.Run;
end.

В заголовку модуля вказано ім’я програми, далі йдуть команди, які
містять інформацію про те, що (які модулі) знадобляться компілятору Delphi
для створення кінцевого exe – файлу.


2.4.2. Модуль форми - *.dfm

Модуль форми містить тільки інформацію про її налаштування і
компонентах які на ній присутні. Модуль форми формується автоматично
при виконанні налаштування форми, перенесені на неї і настойки
компонентів. При цьому необхідно знати де зберігаються процедури
обробки подій для цих компонентів. Процедури обробки подій зберігаються
в файлі реалізації. В лістінгу наведений текст модуля форми програми яку
розглядаємо.

Лістінг 2.4.2 Модуль форми програми

object Form1: TForm1
Left = О
Top = О
Borderlcons = [biSystemMenu, biMinimize]
BorderStyle = bsSingle
Caption = #1042#1099#1095#1080#1089#1083#1077#1085#1080#1077'
'#1082#1086#1088#1085#1077#1081'
#1082#1074#1072#1076#1088#1072#1090#1085#1086#1075#1086'
#1091#1088#1072#1074#1085#1077#1085#1080#1103
ClientHeight = 152
ClientWidth = 386
Color = clBtnFace -
Font.Charset = RUSSIAN_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif
Font.Style = []

OldCreateOrder = False
Position = poScreenCenter
PixelsPerlnch = 96
TextHeight = 13
object Label1: TLabel
Left = 24
Тор = 16
Width = 299
Height = 13
Caption = #1042#1074#1077#1076#1080#1090#10771
'#1079#1085#1072#1095#1077#1085#1080#1103'
'#1082#1086#1101#1092#1092#1080#1094#1080#1077#1085#1090#1086#1074'
1 #1082#1074#1072#1076#1088#1072 #1090 #1085 #1086 #1075#1086'
'#1091#1088#1072#1074#1085#1077#1085#1080#1103
end
object Label2: TLabel
Left = 24
Top = 55
Width = 10
Height = 13
Caption = 'A:'
end
object Label3:.TLabel
Left = 24
Top = 83
Width =10
Height = 13
Caption = 'B:'
end
object Label4: TLabel
Left = 24
Top = 111
Width = 10
Height =13
Caption = 'C:'
end
object Label5: TLabel
Left = 104
Top = 48
Width = 120

Height = 80
AutoSize = False
Wordwrap = True
end
object Editl: TEdit
Left = 40
Top = 48
Width =48
Height = 21
TabOrder = О
end
object Edit2: TEdit
Left = 40
Top =76
Width = 48
Height =21
TabOrder = 1
end
object Edit3: TEdit
Left = 40
Top = 104
Width = 48
Height = 21
TabOrder = 2
end
object Buttonl: TButton
Left = 240
Top =48
Width = 120
Height = 32
Caption = #1042#1099#1095#1080#1089#1083#1080#1090#1100
TabOrder = 3
OnClick = ButtonlClick
end
object Button2: TButton
Left = 240
Top = 96
Width = 120
Height =32
Caption = #1047#1072#1074#1077#1088#1096#1077#1085#1080#1077'

#1088#1072#1073#1086#1090#1099
TabOrder = 4
end
end



2.4.3. Модуль реализации - *.pas
В модулі реалізації міститься інформація тілько про присутні на формі
компоненти і процедури обробки подій на цих компонентах.
Модуль форми можна умовно розділити разділити на дві частини -
секцію опису і власне розділ реалізації.
Секція опису (починається з службового слова interface) містить
автоматично зформоване Delphi – оголошення типа форми. Цей розділ
також містить перелік компонентів, які знаходяться на формі.
Секція реалізації починається з службового слова implementation.
Вона містить оголошення локальних процедур і функцій, в тому числі і
процедур обробки подій.
Розглянемо текст модуля реалізації проекта для Windows.

Лістінг 2.4.3 Текст модуля реалізації

unit Unit1;
interface
{В цьому розділі описується взаємодія даного модуля з
іншими користувацькими і стандартними модулями, а також з
головною програмою. Іншими словами – взаємодія модуля з
зовнішнім світом}

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls;
{ В цьому списку через коми перераховуються ідентифікатори
модулів, інформація інтерфейсних частин яких повинна бути
доступна в даному модулі }

type
TForml = class(TForm)
Editl: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;

Implementation
{ В цьому розділі вказується реалізаційна частина опису
даного модуля, яка недоступна для інших модулів і програм}

{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);

var А,В,С:single;
D:real;
XI,Х2:real;
begin
// Введення початкових даних.
A: =StrToInt(Edit1.Text);
B:=StrToInt(Edit2.Text);
C:FStrToInt(Edit3.Text);
// Обчислення дискримінанта. . .
D:=B*B-4*A*C;
if D<0 then
// Якщо дискримінант від’ємний, то виводиться повідомлення
//про те, що рівняння немає коренів.
begin
Label5.Caption:='Рівняння немає дійсних коренів';
end
// Якщо дискримінант більше або дорівнює 0, то
// обчислюємо корені рівняння.
else
begin
X1:=(-B-sgrt(D))/(2*A);
X2:=(-B+sqrt(D))/(2*А);
// Виводимо розрахованне значення коренів.
Label5.Caption:='X1 = '+FloatToStr(XI)+
Chr(13)+ // Перевід на наступну стрічку.
‘Х2 = '+FloatToStr(X2);
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Close;
end;
end.

Питання:


Література:

1. Архангельский А.Я. Программирование в Delphi. Учебник по
классическим версиям Delphi. 2006 г. - 1152 с.
2. Архангельский А.Я. Delphi 2006. Справочное пособие: язык
Delphi, классы, функции Win32 и .NET, 2006 г. - 1152 с.
3. Архангельский А.Я. Приемы программирования в Delphi на
основе VCL, 2006 г. - 944 с.
4. Архангельский А.Я. Программирование в Delphi для Windows.
Версии 2006, 2007, Turbo Delphi, 2007 г. - 1248 с.