Лекція №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) направлений на створення моделей реальної дійсності на основі об’єктно-орієтованого світогляду. Об’єктно-орієнтований аналіз - це методологія, при якій вимоги до системи сприймаються з точки зору класів і об’єктів, які визначаються (выявленных) в предметній області.
Як співвідносяться ООА, 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;
В заголовку модуля вказано ім’я програми, далі йдуть команди, які містять інформацію про те, що (які модулі) знадобляться компілятору 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; { В цьому списку через коми перераховуються ідентифікатори модулів, інформація інтерфейсних частин яких повинна бути доступна в даному модулі }
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 с.