Пішін терезесі



МАЗМҰНЫ
КІРІСПЕ 3
1 DELPHI ОРТАСЫМЕН ТАНЫСУ 4
1.1 Негізгі ұғымдар. Бағдарлама құру кезінде шешілетін тапсырмалар 4
Зертханалық жұмыс № 1 «Delphi интерфейсінің элементтері» 11
Зертханалық жұмыс № 2 «Негізгі пішіннің жобасы мен модулінің
Зертханалық жұмыс № 3 ««Тест» қосымшасын құру» 25
2 OBJECT PASCAL ТІЛІНДЕГІ ОБЪЕКТІЛІ – БАҒЫТТАЛҒАН БАҒДАРЛАМАЛАУ
2.1 Класс және объект туралы түсінік 32
2.2 Инкапсуляция, туындау және полиморфизм 33
2.3 Кластың синтаксисі 34
2.4 Кластың өрістері 35
2.5 Кластың әдістері 36
2.6 Кластың қасиеттері 41
2.7 Кластың құрылымы. Кластың элементтерінің көріну аймағы 45
2.8 Кластарға операциялар қолдану. IS және AS кілттік
2.9 Оқиға және меншіктеу 47
Зертханалық жұмыс №4 «Полиморфизм және көрнекілік әдістер»
Зертханалық жұмыс №5 "Қасиеттер мен әдістер" 56
Зертханалық жұмыс №6 "Оқиғалар" 58
3 ТЕРЕЗЕЛІК ҚОСЫМШАЛАРДЫ ҚҰРУ 63
3.1 Label, Edit, Memo мәтіндік құрауыштары. Button батырмасы 63
Зертханалық жұмыс №7 "Қарапайым Windows-қосымшасын құру" 70
3.2 Пернетақта арқылы берілген хабарламаны өңдеу 71
3.3 Тышқан арқылы берілген хабарламаны өңдеу 73
Зертханалық жұмыс №8 “TForm объектісі” 75
3.4 Басқару элементтерінің тасуын қамтамасыз ететін сипаттамалар (Drag
Зертханалық жұмыс №9 "Экрандық объектілерді сүйреу" 80
3.5 Диалог терезелері. Dialogs парағындағы Delphi құрауыштары
Тәжірибелік жұмыс №10 «Мәтіндік редактор» 93
3.6 Delphi - дің кескінді құруға
Зертханалық жұмыс №10 «Бейнелерді құру» 108
ҚОРЫТЫНДЫ 113
ҚОСЫМША А 114
ҚОСЫМША Б 118
ӘДЕБИЕТТЕР ТІЗІМІ 119
МАЗМҰНЫ 120
ҚАЗАҚСТАН РЕСПУБЛИКАСЫНЫҢ БІЛІМ ЖӘНЕ ҒЫЛЫМ МИНИСТІРЛІГІ
DELPHI ОРТАСЫНДА БАҒДАРЛАМАЛАУ
Әдістемелік құрал
КІРІСПЕ
Нақты әдістемелік құрал - дербес компьютерлер үшін Delphi
Әдістемелік құрал үш бөлімнен тұрады. Әдістемелік құралдағы материалдар: теориялық
Бірінші бөлім «Delphi ортасымен танысу» Delphi ортасында құрылған бағдарламаны
Қазіргі уақытта объектілі – бағытталған бағдарламалар өте танымал болып
Әдістемелік құралдың үшінші бөлімінде терезелік қосымшаларды құрудың технологиясы қарастырылады
Көмекші құрал келесі мамандықтың студенттеріне арналған: 010240 «Қолданбалы математика»,
Оқу құралы бағдарламалаудың қазіргі технологиясымен танысамын, объектілі бағытталған технологияның
1 DELPHI ОРТАСЫМЕН ТАНЫСУ
1.1 Негізгі ұғымдар. Бағдарлама құру кезінде шешілетін тапсырмалар
Delphi – Windows операциялық жүйесінде жұмыс істеуге бағытталған бағдарлама
Delphi және Object Pascal көп жылғы эволюцияның нәтижесі болып
Delphi бағдарлама құратын және жаңа бағдарламаны даярлайтын бағдарлама құру
Класс – берілгендер мен оларға әрекет жасайтын арнайы тип.
Объект – белгілі тапсырманы орындауға арналған, екілік бағдарламалық
Құрауыш – Delphi – дің стандартты класы, Delphi ортасында
Құрауыштар қасиеті – белгілі объекті берілгенде немесе өзгергенде автоматты
Құрауыштың оқиғасы – құрауыштың қолданушы немесе операциялық жүйемен әрекеттесуінің
Құрауыш хабарламаны өңдеу әдісінен тұрады, олардың әрқайсысы құрауыштың белгілі
Оқиғаны өңдеу деп – өрбіген оқиғаға жауап ретінде белсенділік
Құрауыш пішінге немесе басқа құрауышқа тиісті болуы мүмкін.
Пішін деп - Windows терезесінің қасиеттеріне ие және біркелкі
Қосымшаның пішіні қолданушылық интерфейстің негізі болып саналады. Қосымшада бірнеше
Пішін туралы ақпарат екі типті файлда сақталады: - .dfm
Бағдарламаның сыртқы құрылымы
Delphi - дің көмегімен құрылған бағдарламаның құрылымы дәстүрлі
Интерфейс бұл объектілердің жиынтығы, оның көмегімен ақпаратты белгілі бағытқа
Объектілер бағдарламада жеткілікті түрде автономды болғандықтан, олардың арасында ақпаратты
Сурет 1.1 Бағдарламаның сыртқы құрылғылармен әрекеттесуі
Мұндай бағдарламаның жұмысы да өз сипатында. Әдетте ол іске
Объект (TApplication класының) болып бағдарламаның өзі саналады. Шынында бұл
Объектілердің классификациясы
Жобаны жоғарыда айтылғандай нақты тағайындалуы анықталған жеке объектілердің жиынтығы
Жобада қолданылатын негізгі объект болып қосымша, пішін және құрауыш
Қосымша келіп түскен хабарламаны өңдеу циклін ұйымдастыратын жобаның негізгі
Пішін интерфейстік элементті көрсетеді, оның арқасында қосымшалар мен сыртқы
Сурет 1.2 Жобаның құрылымдық құрауыштарының классификациясы
Құрауыштар пішінге орналастырылады және ақпаратты алу, түрлендіру және бейнелеу
Құрылымдық түрде жоғарыда көрсетілген құрауыштардың бәрі TComponent (Құрауыш)
Кластың басқа элементтері пішіннің өзін қоса алғанда айтарлықтай қиынырақ
TControl (Басқару) класын қалыптастыратын басқару элементтері.
Басқару элементтері (TControl класының ұрпақтары болып келген құрауыштар) –
Экранда бейнеленбейтін элементтер (бейнеленбейтін немесе көрнекілік емес құрауыштар). Олар
Басқару элементтерін өз кезегінде екі үлкен кластарға бөлуге болады
Терезелік басқару элементтерінің класы TWinControl (Терезелік басқару элементі).
Терезелік басқару элементі ( TForm, TButton, TEdit, TMemo, TPanel,
Графикалық басқару элементтерінің класы TGraphicControl (Графикалық басқару элементі).
Графикалық басқару элементі ( TImage класының құрауышы – кескін,
Жобаның құрылымдық элементтерінің әрекеттесуі
Жанұя деп өзінің ұрпақтарымен қоса алғандағы класты айтамыз.
TComponent жанұясының әрбір объектісінің Owner қасиеті бар: TComponent
Негізгі объект деп - басқа объект орналасатын объектіні
Көмекші объект деп – орналасатын объектіні айтамыз.
property ComponentCount: Integer – тек оқу үшін. Негізгі объектінің
property Components[Index: Integer]: TComponent – тек оқу үшін. Ағымды
Кез – келген пішін TApplication класының қосымшасына орналастрылады, қосымша
TControl жанұясының құрауыштарын пішінге екі түрлі жолмен орналастыруға болады:
тікелей пішінге;
TWinControl жанұясының қосымша топталған бір құрауышына (TGroupBox – тақырыбы
TControl жанұясының әрбір құрауышында Parent қасиеті бар: TWinControl (Аталық),
Үлкен құрауыш – тікелей берілген құрауыш орналастырылған құрауыштың өзі.
Кіші құрауыш – орналасатын құрауыш.
Бейнеленбейтін құрауыштарда Parent қасиеті болмайды.
Пішіннің үлкен құрауышы жоқ (Parent = nil).
Мысал 1.1. Бұл мысал ерікті түрде пішінге орналастырылған келесі
procedure TForm1.FormCreate(Sender: TObject);
begin
RadioGroup1.Caption := 'Радиогруппа';
RadioButton1.Parent := RadioGroup1;
RadioButton1.Caption := 'Первая радиокнопка';
RadioButton1.Top := 15;
RadioButton1.Left := 10;
RadioButton1.Checked := True;
RadioButton2.Parent := RadioGroup1;
RadioButton2.Caption := 'Вторая радиокнопка';
RadioButton2.Top := 35;
RadioButton2.Left := 10;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
RadioButton1.Parent := Form1;
RadioButton2.Parent := Form1;
end;
property ControlCount: Integer – тек оқу үшін. Басқару элементінің
property Controls[Index: Integer]: TControl – тек оқу үшін. Ағымды
«Негізгі » - «Көмекші » деген қарым – қатынасты
«Үлкен» - «Кіші» қарым – қатынасы тек қана бейнеленген
Мысал 1.2. Бір пішіннен тұратын жобаны қарастырамыз. Тікелей пішінге
Негізгі меню - MainMenu.
Таймер - Timer.
GroupBox – тақырыбы бар панель.
Button - батырмасы.
GroupBox тақырыбы бар панельге орналастырамыз:
Енгізу жолы - Edit.
Белгі - Label.
Құрауыш ComponentCount Components Owner ControlCount Controls Parent
Form1 6 MainMenu1
Timer1
GroupBox1
Button1
Edit1
Label1 Application 2 GroupBox1
Button1 nil
GroupBox1 0 Бос Form1 2 Label1 Edit1 Form1
Button1 0 Бос Form1 0 Бос Form1
Label1 0 Бос Form1 - - GroupBox1
Edit1 0 Бос Form1 0 Бос GroupBox1
MainMenu1 0 Бос Form1 - - -
Timer1 0 Бос Form1 - - -
Бағдарлама құрарда шешілетін тапсырмалар
Негізгі болып келесілер табылады:
Жобаның түрін анықтау
бір құжатты интерфейс;
көп құжатты интерфейс;
DLL-кітапханасы.
Пішінді таңдау
Құрауыштарды орналастыру
Менюді құру
Хабарламаны өңдеу
хабарламаны өңдеудің келесі кезеңдерін ерекшелеуге болады:
хабарламаның типін қалыптастыру;
инициализация сообщения;
хабарламаны өңдеу және оқиғаны құру;
оқиғаны өңдеу;
хабарламаны өңдеу циклін қалыптастыру.
Деректер базасын қалыптастыру.
Тапсырманы бағдарламалау.
Қарым – қатынас, ақпарат терезелерін қалыптастыру.
Ерекше жағдайларды өңдеуді қамтамасыз ету.
Анықтама жүйесін құру.
Зертханалық жұмыс № 1 «Delphi интерфейсінің элементтері»
Бірінші тәжірибелік жұмыс Delphi ортасы мен осы тіл
Жұмыстың мақсаты: Delphi ортасымен және оның негізгі терезелерімен танысу.
Delphi — Windows жүйесінде жұмыс істеуге арналған бағдарламалаудың көрнекілік
Delphi ортасында бағдарламалау объектілі-бағытталған технологияға сүйенеді. Бағдарламалаудың базалық
Delphi ортасында бағдарлама құру жұмысының көп бөлігі құрауыштарды таңдау,
Тапсырма 1. Delphi - ді іске қосу
Delphi – ді іске қосу үшін 3 әдістің
1. Егер сіз Windows ортасында отырсаңыз , онда Жұмыс
2. Келесі қадамдарды орындаңыз: Пуск – Программы – Borland
3. Windows бағыттауышынан (Каталог Program Files\Borland\Delphi 6\Bin) delphi32.exe
Тапсырма 2. Delphi интерфейсінің элементтерін оқып – үйрену.
Ортаның интегралдық құрылымы (IDE – Integrated Development Environment).
Delphi ортасының интегралдық құрылымына қосымшаларды құрайтын және жобаны басқаратын
Негізгі меню
Құрал – саймандар панельі
Жоба диспетчері (Project Manager)
Код редакторы (Code Editor)
Құрауыштар палитрасы (Component Palette)
Пішін терезесі
Объект инспекторы (Object Inspector)
Объект бұтақтары (Object Tree View)
Меню конструкторы (Menu Designer)
Зерттеуші (Browser)
Delphi 6 ортасын іске қосқанда компьютер экраны сурет 1.3
Сурет 1.3 Delphi 6 ортасының терезелері мен панельдері
Бағдарламалау ортасының негізгі терезесін қарастырайық. Ол терезенің тақырыбы
Негізгі меню бағдарламалау ортасының командаларына қатынасты қамтамасыз етеді, олардың
Құрал – саймандар панелі негізгі менюде жиі қолданылатын командаларды
Құрал – саймандар панельінің батырмалары.
Кейбір батырмалар мен терминдердің не үшін тағайындалғаны Delphi
Осы батырмалардың біреуіне біраз уақыт тышқанның курсорын апарып қоя
Құрауыштар палитрасы — пішінге қосуға болатын көптеген объектілер жиынтығынан
Құрауыштар палитрасының кейбір парақтарын қарастырайық:
Standard –Windows – де қосымшасы бар стандартты басқару
Additional – қосымша басқару элементтері (графиктер мен диаграммаларды салуға
Data Access – деректер базасына қатынауды жүзеге асыратын арнайы
Data Controls – қолданушымен қарым – қатынас орнататын көрнекілік
Dialogs – стандартты қарым - қатынас құратын құрауыштар (қаріпті
System – операциялық жүйемен қарым – қатынасты орнататын құрал.
VBX –Visual Basic стиліндегі құрауыш.
Бетбелгіде жазылған сөздерді оқыңыздар және сөздердің мағынасын аударыңыздар. Әрбір
Бұл құрауыштардың көбі сіздердің алда құратын бағдарламаларыңызда қолданылады.
Жоба диспетчері - жобаға кіретін пішіндер мен
Диалог терезесінде келесі бағандар бар:
Unit – жоба модульдері.
Form – жоба пішіндері.
Path – модульдерге жол.
Қарым – қатынас терезесіндегі батырмалар:
Add – файлды жобаға қосу.
Remove – файлды жобадан жою.
View unit –модульді көру.
View form – пішінді көру.
Options – жоба параметрлері.
Код редакторы бағдарлама кодынан тұрады, олар бағдарлама кодын құруға
Open File at Cursor – атына тышқанның көрсеткіші орналасқан
Browse Symbol at Cursor – терезедегі кез – келген
Toggle Breakpoint – тоқтату нүктесін тағайындайды
Run to Cursor – қосымшаны тышқанның көрсеткішіне дейін орындайды
Debug – Evaluate/Modify – айнымалыны өзгерту және көру үшін
Debug – Add Watch to Cursor – айнымалыларды бағдарламаның
Read Only – файлда мәтінді редакциялауға тиым салады
Объект инспекторы қосымша құрамындағы объектілерді қадағалауға мүмкіндік береді..
Объект бұтақтары Delphi 6 ортасында пайда болған жаңалық болып
Delphi 6 ортасының құрылымын баптаңыздар.
Tools – Environment Options меню командасын таңдаңыз. Келесі өрістерге
Autosave options тобында (автосақтау опциясы):
Editor files ( Run командасын таңдағанда немесе Delphi –
Project Desktop ( Егер сіз Delphi – ден шықсаңыз
Compiling and running тобында(компиляторлау және іске қосу):
Show Compiler Progress (Сіздің жобаңыздың компиляциясы туралы есепті көруге
Minimize On Run (Сіз қосымшаңызды іске қосқанда Delphi –
Hide Designers On Run (Қосымша іске қосылып тұрған кезде
OK батырмасына басыңыздар.
Тапсырма 3. Delphi – дің негізгі терезелерінің қасиеттерін оқып
Delphi – де он негізгі терезе бар. Delphi іске
Пішін терезесі — Құрауыштар палитрасындағы құрауыштардан бағдарлама
Тышқанның көмегімен Run батырмасына шертіңіз және осы бағдарламаны орындаңыз.
Пішіннің бағдарламасы откомпилируется, экрандағы көмекші терезелер жойылады, пішіннің координаталық
Осы терезенің қасиетін зерттеңіз. Оның өлшемін өзгертіңіз, экран бойынша
Сіз байқағандай, пішін терезесі «жанданды».
Alt+F4 батырмаларының комбинациясы Delphi ортасын алғашқы қалпына әкеледі.
Инспектор Объектісінің терезесі құраушы немесе пішіннің өзіне тышқанмен шерткенде
Құрауыштардың стандартты палитрасындағы Button батырмасына басып, содан кейін
Пішінде батырманың бейнесі пайда болады (сурет 1.4).
Бұндай іс-қимыл пішінге құрауышты қосу деп аталады.
Қойылған құрауышқа шертіңіз.
Оның айналасында квадраттары бар тіктөртбұрыш жақтау пайда болды. Бұл
Сурет 1.4 Пішінге құрауышты қосу
TButton типі объект ретінде сипатталған және оның барлық құрауыштары
Тапсырма 4. «Программа "Тест"» жобасын құру.
Form1 пішінін ерекшелеңіз.
Объект Инспектіріндегі Caption қасиетіне «Программа «Тест»» деп жазыңыз.
MainMenu құрауышының көмегімен (сурет 1.5. көрсетілгендей) меню құрыңыз,
соған шертіңіз, одан кейін пішінге шертіңіз;
пайда болған MainMenu пиктограммасына екі рет шертіңіз.
Экранда «Программа “Тест”» пішінінің үстіне Form1.MainMenu1 тақырыбымен тағы бір
Объект Инспектіріндегі Caption жолына бірінші элемент меню Тест
Enter батырмасын басу арқылы менюдің бірінші элементінің бірінші командасын
Caption жолына Тестирование деп жазып, Enter –
Аналогиялық түрде келесі командалар үшін Результат және
Меню командаларын бөлуші сызық арқылы топтарға бөлуге болады, ол
Менюдің келесі элементін құрыңыздар — Помощь:
Меню Тест командасының оң жағында орналасқан тіктөртбұрышты тышқанның көмегімен
Caption жолына Помощь деп жазып, Enter – ді басыңыз;
Аналогиялық түрде келесі операцияларға Инструкция және О программе
Тышқанмен негізгі пішінге шерту арқылы негізгі пішінге Form 1.
Сурет 1.5 «Тест» бағдарламасының негізгі менюі
Выход командасы орындалу үшін оған бағдарлама жазыңыздар:
- Выход командасына шертіңіз.
Кодтар Редакторы терезесінде жанып - өшіп тұрған тышқанның
Тышқанның көрсеткіші тұрған позицияға пернетақтаның көмегімен төмендегі
Close;
Сонда мынаны аламыз:
procedure TForm1.N5Click(Sender: TObject);
begin
Close;
end;
5 – тапсырмада көрсетілген ереже бойынша жобаны сақтаңыздар.
Run батырмасының көмегімен бағдарламаны орындаңыздар.
Біз «Программа “Тест”» жобасының құрылымдық негізін құрдық. Егер
Тапсырма 5. Жобаны және пішіннің модулінің файлын сақтау.
«Мои документы» папкасында өзіңіздің меншік папкаңызды келесі түрде құрыңыз:
Оған салынған «Программа_Тест_» папкасын құрыңыз.
Delphi – дің негізгі менюінде келесі командалар тізімін орындаңыз:
«Save Unit1 As» тақырыбы бар диалогтық терезе пайда
Сурет 1.6 Негізгі пішіннің модульінің файлын сақтайтын терезе
Папканы таңдаңыз C:\…\Мои документы\…\Программа_Тест_.
«Имя файла» өрісіне – MainForm сөзін енгізіңіз
Осыдан кейін жоба файлын сақтау үшін «Save Project1
«Имя файла» өрісіне – Test сөзін енгізіңіз және
Енді сіздің жобаңыз «Test» деп аталады , ал оның
Файлдарды жазудың мұндай тізбегі жоба файлы алдын – ала
Жобаны жабыңыз.
Сурет 1.7 Жоба файлын сақтау терезесі
Сонымен сіздер Delphi ортасымен таныстыңыздар: негізгі терезенің құрама бөліктерімен
Зертханалық жұмыс № 2 «Негізгі пішіннің жобасы мен модульінің
№2 зертханалық жұмыста негізгі пішіннің жобасы мен модульінің бағдарламалық
Тапсырма 1. №1зертханалық жұмыста құрылған жобаны іске қосу және
Delphi – ді іске қосыңыз.
Негізгі менюдің командасын орындаңыз: File \ Open Project
Ашылған терезенің жобалар тізімінен (.DPR кеңейткіші бар файлдар)
Экранда «Программа «Тест»» тақырыбымен пішін пайда болады.
Жобаның бағдарламалық кодын көру үшін негізгі менюдің Project\View Source
Көңіл қойып жобаның бағдарламалық кодын қараңыздар
Сурет. 1.8. Жобаның бағдарламалық коды
Жобаның бағдарламалық коды бағдарламаның тақырыбынан, модульді қосу бөлімінен, компилятор
Бағдарламаның тақырыбы Program қызметші сөзінен тұрады, одан кейін
Модульді қосу бөлімі Forms жүйелік модульі мен Mainform
Компилятор директивасы {$R *.RES} бағдарламалық файлдың орындалуы үшін
Бағдарлама денесі begin сөзінен басталады және end сөзінен
Mainform модульінің бағдарламалық кодын көріп шығыңыздар (сурет 1.9).
View Unit (модульдерді көру) терезесі пайда болады. ( Бұл
Тізімнен Mainform атын таңдап, OK батырмасына басыңыздар.
Модульдер Object Pascal бағдарламалық тілінде қарастырылған стандартты конструкциядан тұрады
Unit < модульдің аты>;
interface

implementation

initialization

finalization

end.
Сурет 1.9 Модульдің бағдарламалық коды
Модульдің тақырыбы Unit қызметші сөзінен тұрады, ол сіздің
Модульдің бағдарламалық коды модульдің тақырыбы мен төрт бөлімнен
Интерфейс бөлімі interfase сөзінен басталады. Бұл бөлімде негізгі
а) модульді қосу бөлімі, uses сөзінен басталады. Біз көріп
б) типтерді сипаттау бөлімі, type сөзінен басталады. Оның құрамында
в) ауқымды айнымалыларды жариялау бөлімі var сөзінен басталады.
Жүзеге асыру бөлімі implementation сөзінен басталады. Ол меню
Нақ осы жағдайда бұл бөлімде біз бір ғана процедурамен
procedure TForm1.N5Click(Sender: TObject);
begin
Close;
end;
Бұл процедура меню элементі «Выход» - қа тышқанмен шерту
Компилятор директивасы {$R *.DFM}, жүзеге асыру бөлімінің басында орналасады,
Инициязациялау және қорытындылау бөлімдері міндетті емес.
Инициялизациялау бөлімі модульдің аяғында болады және міндетті
Қорытындылау бөлімі finalization сөзінен басталады және бағдарламаның аяқталуы
Тест орындалуы үшін қосымшаның негізгі модульі «Tест» -тің бағдарламасына
Біз жасап отырған қосымша өзіміз қосқан менюі
Тапсырма 2. Aboutbox пішінінің шаблонының негізінде «О
File негізгі менюінен New пунктін таңдап алыңыз,
Келесі элементтерден тұатын Aboutbox стандартты терезесі пайда болады:
графикалық сурет, ол пішінге Additional құрауыштар палитрасының Image (кескін)
мәтіндік құрауыштар (TLabel);
ОК батырмасы.
Aboutbox пішінінің Объект Инспектірінің Caption қасиетіне О
Image құрауышына тышқанмен шерту арқылы активтеңіз.
Суреттің маңайында қара квадраттары бар жақтау пайда болады.
Жақтаудың қара кадраттарын тышқанмен ұстай отырып Image құрауышының шекарасын
Image құрауышының Объект Инспектірінің Picture қасиетінің үш нүктесі
Picture Editor (Сурет редакторы) терезесінің Load командасын орындаңыздар.
Load Picture терезесінің «Папка:» өрісінен 256color каталогқа өтіңіздер
Каталог файлының тізімінен SHIPPING.BMP таңдаңыз (қалауларыңа қарай басқасын таңдауға
Picture Editor терезесінің OK батырмасына басу арқылы суретті «О
Инспектор Объектісін Image құрауышына бейімдеңіз және Stretch (масштабтау) қасиетіне
Сурет жақтауға толығымен орналасады.
Сурет 1.10 «О программе» пішінінің терезесі
Пішіндегі барлық мәтіндік құрауыштарды ( TLabel) жойыңыздар. Ол үшін
Aboutbox пішініне Label құрауышын қосыңыз (Standart палитра құрауышынан ).
Label1 құрауышы үшін Объект Инспекторінінің AutoSize қасиетіне false параметрін
Caption қасиетіне Программа Тест © Copyrighte by Makeew S.
Тышқанның көмегімен Label1 құрауышына қажетті өлшемді беріңіз және
Color қасиетіне фонның түсін орнатыңыз.
Font қасиетінің үш нүктесі бар батырмасына басу арқылы Қаріп
Әртүрлі қаріпі бар мәтінді енгізу үшін тізбекпен бірнеше Label
Пішіндегі ОК батырмасын активтеңіздер.
Объект Инспектірінің осы батырмасының Caption қасиетін Продолжить деп өзгертіңіздер.
Осы батырманың «О программе» терезесінде орналасуы мен өлшемін
Тапсырма 3. «О программе» пішінінің бағдарламалық модульін MainForm негізгі
Ағымды терезе ретінде «Программа «Тест»» неізгі пішінінің терезесін алыңыздар
«Помощь» менюін ашыңыздар және «О программе» командасына тышқанмен
«О программе» меню командасына тышқанмен шерткенде өңделетін процедурасы бар
Тышқанның көрсеткіші жанып - өшіп тұрған жерге мынаны жазыңыздар:
AboutBox.ShowModal;
Бұл команда бағдарламаның орындалуы барысында модальдық режимде экранға
Құрылған модульді сақтаңыздар: құрал – саймандар панельінің Save All
Toggle Form/Unit батырмасына тышқанмен шерту арқылы код редакторы терезесінен
Бағдарламаны орындаңыздар. «Tест» бағдарламасының менюіндегі «О программе» командасының жұмыс
Бұл зертханалық жұмыста біз қосымша қарым – қатынас терезелерін
Зертханалық жұмыс № 3 ««Тест» қосымшасын құру»
№3 – ші зертханалық жұмыста №1 – ші зертханалық
Тапсырма 1. Жобаны іске қосу. «Тестирование» пішінін құру.
Алдыңғы зертханалық жұмыста құрылған (TEST.DPR) бағдарламасын іске қосыңыздар және
Енді «Тестирование» пішінін құруға кірісеміз.
Біздің тест 3 – 4 варианттан тұратын жауабы бар
Құрал – саймандар панельінің New командасын орындаңыздар, New Items
Пішінді оқып – үйреніңіздер. Ол бетбелгісі бар үш парақтан
Пішінге тақырып және объектілерге қысқартылған ат тағайындаңыздар: PagesDlg –
Жазба кітапшасының парақтар санын беске дейін өзгертіңіздер (сәйкес тестің
Парақ қосу үшін парақтың өрісіне тышқанның оң жақ батырмасымен
«Тестирование» пішініндегі барлық 5 бетбелгі бір жолға сиюы үшін,
Тапсырма 2. Графикалық элементі бар тестің бірінші сұрағын көркемдеу.
Біздің жазба кітапшамыздың әрбір парағына сұрақ пен оның жауаптарын
Объект Инспектірінен PageControl1 – ді таңдаңыздар және ActivePage (актив
Активті парақ жазықтығынан жақтаудағы панель түрінде мәтінді енгізетін орын
Объект Инспектірінің Color қасиетіне тышқанды екі рет шерту
Caption қасиетінен Panel3 деген жазуды жойыңыздар.
Панельге картинадағы сияқты жақтау жасаңыздар. Ол үшін Bevelinner (ішкі
Дайын панельге Label құрауышын қосыңыздар, оны панельдің кеңдігіне дейін
Word Wrap қасиетіне (сөзді бөлуге рұқсат етіледі) – True
Label1 құрауышының Caption қасиетіне “ Заставкой какого программного продукта
Сурет қою үшін панель аймағына Additional қасиетінен Image
Суреттің Stretch қасиетіне true мәнін тағайындаңыздар.
Қозғалысты бағыттау пернелері мен Shift батырмасының комбинациясын қолдана
Сурет 1.11 «Тестирование» пішінінің терезесі
Қарым – қатынас парағына біз жауаптың бірнеше варианттарын орналастыруымыз
«Тестирование» пішінінің бірінші сұрағының парағына RadioGroup құрауышын қосыңыздар және
Items (элементтер) қасиетіне тышқанның екі шертуімен String List Editor
Бұл редактордың бірінші жолына Delphi, екінші жолына —
Қарым – қатынас терезесінің екінші парағына бірінші парақтың
Өздіктеріңнен №2, №3, №4, №5 сұрақтардан тұратын
Пішіннің құрылған «Тестирование» модульін Test_x.pas деген атпен сақтаңыздар.
Негізгі пішіннің бағдарламалық кодына жобаның негізгі менюінен «Тестирование» пішінін
TestDlg.Showmodal;
Uses бөліміне қосылған модульдің атын test_x енгізіңіздер;
Тапсырма 4. “Результат” пішінін құру және жобаны аяқтау.
Сурет 1.12 «Результат» пішінінің терезесі
New Items қарым – қатынас панельінен Dialogs қалташасын таңдаңыздар
Пішіндегі батырмалардың ішінен ОК батырмасын ғана қалтырыңыздар. Оны
Пішіннің панельінің жоғарғы жағына Label құрауышын қосыңыздар, оның
Пішінге сурет қойыңыздар.
Пішіннің файлын Result_x атымен сақтаңыздар және оны MainForm.pas модуліне
Тестен өткенде жауаптарды өңдейтін бағдарламалық кодты құрыңыздар. Негізгі пішіннің
Mainform модулінің соңғы бағдарламалық коды
var ball:byte;
begin
ball:=0;
if TestDlg.RadioGroup1.ItemIndex=0 then ball:=ball+1;
if TestDlg.RadioGroup2.ItemIndex=
...
...
ResultDlg.Label1.Caption:=’Ваш результат:’+IntToStr(Ball);
ResultDlg.ShowModal;
end;
Тестілеу нәтижесінде әрбір дұрыс жауап 1 балл деп есептелінеді
procedure TForm1.N6Click(Sender: TObject);
процедурасы тестілеу нәтижесінің балдарын қосады және нәтижені ball айнымалысына
if TestDlg.RadioGroup1.ItemIndex=0 then ball:=ball+1;
шартты көшу командасы орындалады. Мұнда былай деп айтылады, егер
Бағдарламалық жолда
ResultDlg.Label1.Caption:=’Ваш результат:’+IntToStr(Ball);
ResultDlg пішінінде орналасқан Label1 құрауышының Caption қасиетіне 'Ваш результат:'
ResultDlg.ShowModal;
командасы Результат пішінін демонстрация жасайды.
Бағдарламаны орындап, онда өз жолдастарыңызды тестен өткізіңіздер және оларға
Тексеру сұрақтары:
Көрнекілік бағдарламалау дегеніміз не және оның қарапайым бағдарламалаудан айырмашылығы
Жоба дегеніміз не, жаңа жобаны қалай бастаймыз және дайын
Пішін дегеніміз не, жаңа пішінді қалай қосамыз, жобада сіздер
Delphi терезесі қандай элементтерден тұрады?
Құрал – саймандар панельі дегеніміз не? Құрал – сайман
Құрауыш, құрауыштар палитрасы дегеніміз не, палитра құрауыштарының қандай
Құрауыштардың қасиеті дегеніміз не, Объект Инспектірі не үшін қажет,
Бірнеше құрауыштарды және олардың қасиеттерін атап өтіңіздер.
Модульдің және жобаның бағдарламалық коды дегеніміз не, оларды экранда
«Модульді қосу» дегеніміз не? Жобаға қандай модульдер қосылды?
Модуль қандай бөліктерден тұрады?
Жоба файлының құрылымы.
Меню дегеніміз не? Ол қандай элементтерден тұрады?
Оқиға дегеніміз не? Оқиғаларға мысалдар келтіріңіздер.
«Оқиғаны өңдеу» дегеніміз не? Оқиғаны өңдеуге мысалдар келтіріңдер.
Қандай процедуралар пішінді демонстрацияға шақырады ?
«Тест» жобасында нені өзгертер едіңіз және не қосар едіңіз?
2 OBJECT PASCAL ТІЛІНДЕГІ ОБЪЕКТІЛІ – БАҒЫТТАЛҒАН БАҒДАРЛАМАЛАУ
Процедуралық бағдарламалау бағдарламаның негізі алгоритм, берілгендерді өңдеу процедурасы деп
Объектілі - бағытталған бағдарламалау (ОББ) – ол негізінде
ОББ әдістемесінің қолданылуымен шешілетін тапсырмалар объект және оларға қолданылатын
Кластар мен олардың элементтеріне ат тағайындауда ұсынылатын ережелер:
Кластың аты Т префиксінен басталады.
Мысалы: TObject, TForm, TButton және т.б.
Кластың өрісі, қасиетке сай келеді (property), әдетте қасиеттің атымен
Мысалы: FCount: Integer;
property Count: Integer read FCount write SetCount;
Әдістің параметрі, оның мәні қандай да бір өрістің
Мысалы: procedure SetCount(ACount: Integer);
Әдістің аты, оның көмегімен қасиеттің мәні оқылады, әдетте Get
Мысалы: function GetParam: Integer;
Әдістің аты, оның көмегімен қасиеттің мәні жазылады, әдетте
Мысалы: SetCount әдісі (жоғарыдан қараңыздар).
Конструктор әдісіне әдетте Create аты беріледі.
Мысалы: constructor Create(Owner: TComponent);
constructor Create(AName: String);
Деструктор әдісіне әдетте Destroy аты беріледі:
Мысалы: destructor Destroy; override;
Хабарламаны өңдейтін әдістердің аттары WM префиксінен басталады, хабарламаның типтерінің
Мысалы: procedure WMSetFocus (var Message:
message WM_SetFocus;
message WM_Quit; {әр кез бағдарламаның орындалуын тез
арада тоқтату керек болғанда өрбиді}
Оқиғаның өңдеуішіне қатынауды жүзеге асыратын қасиеттің аттарына On
Мысалы: property OnChange: TNotifyEvent read FOnChange write FOnChange;
2.1 Класс және объект туралы түсінік
ООБ – дың негізінде класс (class) және объект деген
Класс өз кезегінде нұсқағышты береді. Бірақ ол дәстүрлік нұсқағышқа
Класс –берілгендер мен оларға қолданылатын әрекеттерден тұрады.
Объект – кластың физикалық іске асырылуы (кластың экземпляры).
Класс өзінше бір сипатталатын тип болып табылады және типтерді
Мысалы:
type
TForm1 = class(TForm) { TForm1- TForm класының ұрпақ
{Аталық кластың өрісін, әдісін және қасиеттерін иемденеді}
Button1: TButton; {өріс}
Button2: TButton; {өріс}
L1: TLabel; {өріс}
L2: TLabel; {өріс}
procedure Button1Click(Sender: TObject); {әдіс}
procedure FormActivate(Sender: TObject); {әдіс}
private
{ Private declarations }
public
{ Public declarations }
end;
Класс бір жағынан жазба (record) – типіне де ұқсайды,
Мысалы:
private
FCaption: String; {жолдық типтің өрісі}
FModified: Boolean; {логикалық типтің өрісі}
оларды өңдейтін бағыныңқы бағдарламалардан (әдіс),
Мысалы:
private
procedure SetCaption(Const ACaption: String);
procedure Close;
сонымен қатар өрістер мен әдістердің сипаттамалары бар қасиеттерден тұрады.
Мысалы:
public
property Caption: String read FCaption write SetCaption;
property Modified: Boolean read FModified write SetModified;
Сол себепті класта оның сипаттамалары мен тәртібі сипатталған.
Объект – белгілі бір класқа сай келетін айнымалыны береді
var
Form1: TForm1;
Барлық кластарға сай келетін объектіні құра беруге болмайды. Олардың
ОББ үш негізгі қасиеттермен сипатталады:
инкапсуляция (encapsulation),
туындау (inheritance),
полиморфизм (polymorphism).
2.2 Инкапсуляция, туындау және полиморфизм
Класс - өріс, әдіс және қасиетті өзіне бүтіндей қоса
Бұл тілде көптеген кластар бар (300 – ге жуық
Программист, бағдарламаны құра отырып өзінің пайдаланушы класын құрады. Мұндай
Жаңа класс басқа қарапайым кластың негізінде құрылады. Ол үшін
type className = class (ancestorClass)
мұнда className – жаңа кластың аты; ancestorClass – аталық
type TPersistent = class (TObject),
type TComponent = class (TPersistent),
type TControl = class (TComponent).
Кейде аталық класта сипатталған әдістер қандай да бір себепке
2.3 Кластың синтаксисі
Барлық кластың синтаксисі мынандай түрде болады:
type
ClassName = class (AncestorClass)
MemberList
end;
мұнда ClassName – кластың аты; class – кілттік сөз;
unit Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs;
type
TForm1 = class(TForm) { TForm1 класын жариялау}
Button1: TButton; {өріс}
Button2: TButton; {өріс}
L1: TLabel; {өріс}
L2: TLabel; {өріс}
procedure Button1Click(Sender: TObject); {әдіс}
procedure FormActivate(Sender: TObject); {әдіс}
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
i: Integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); {әдістің сипатталынуы}
begin
L1.Caption:= DateTimeToStr(Date);
L2.Caption:= TimeToStr(Time);
end;
procedure TForm1.FormActivate(Sender: TObject); {әдістің сипатталынуы}
begin
i:=125;
end;
end.
2.4 Кластың өрістері
Өріс деп кластағы инкапсуляцияланған берілгендерді айтамыз. Кластың өрістері жазбаның
type
TChildClass = class(TObject) { TChildClass класын жариялау}
FOne: integer; {бүтін типтің өрісі}
FTwo: String; {жолдық типтің өрісі}
FThree: TObject; { TObject класс өрісінің типі}
end;
Ерер арғы тегі TObject класы болса, онда тақырыпта оны
Инкапсуляция принципі бойынша өрістерге қатынау кластың әдістері мен қасиеттерінің
var
MyObject : TChildClass;
begin
MyObject := 16;
MyObject := ’Некоторое строковое значение’;
end;
Ұрпақ – класының өзінің арғы – тегінің барлық өрістеріне
type
TPredok = class {арғы тек класын жариялау}
Value: Integer;
end;
TPotomok = class(TPredok) {ұрпақ класын жариялау}
Value: String; {туындау өрісінің қабысуы}
end;
var
My1: TPredok; {класс айнымалысын жариялау (My1 –айнымалы-объект)}
My2: TPotomok; {класс айнымалысын жариялау (My2 – айнымалы-объект)}
begin
My1 := TPotomok.Create; { TPredok класының объектісін құрады }
My2 := TPotomok.Create; { TPotomok класының объектісін құрады}
My1.Value := 'Hello!'; {қате, TPredok өрісінің типі емес}
My2.Value := 'Hello!'; {дұрыс, Value: String өрісі жұмыс істейді}
My2.Value := 8; {қате: Value: Integer өрісі қалқаланған}
end;
Бұл мысалда екі класс сипатталған: TPredok – арғы тек
Ары қарай var-секциясында әртүрлі class типті екі айнымалы
2.5 Кластың әдістері
Кластың әдісі болып инкапсуляцияланған процедура мен функция табылады. Бұл
type
TMyClass = class(TObject) {класты жариялау}
...
procedure DoSomething; {DoSomething әдісін жариялау}
...
end;
DoSomething әдісіне сипаттама кейінірек модульдің implementation секциясында келтірілуі керек,
procedure TMyClass.DoSomething; {тақырыптың түрі: класс. әдіс}
begin
...
end;
Әдіске қатынағанда құрамды атты немесе With операторын қолдануға
type
TChildClass = class(TObject) {класты жариялау}
...
function FirstFunc(x:real):real;
procedure SecondProc;
...
end;
...
var
MyObject : TChildClass;
y : real;
begin
...
MyObject.SecondProc; // әдіске қатынаудың екі мысалы
y := MyObject.FirstFunc(3.14); //құрамды аттың көмегімен: класс .
...
With MyObject do //
begin
SecondProc;
y := FirstFunc(3.14);
end;
...
end;
Класта анықталған әдістер статикалық, виртуальды, динамикалық және абстрактілі болуы
Біратты әдістер ұрпақтарда мысалда көрсетілгендей өрістердің қалқалануы сияқты қалқаланады
Мүмкіндікті кеңейту үшін жиі динамикалық қалқалау қолданылады. Ол үшін
type
TFigure = class
procedure Draw; virtual; {виртуальды әдіс}
end;
TRectangle = class(TFigure)
procedure Draw; override; {қалқалау әдісі}
end;
TEllipse = class(TFigure)
procedure Draw; override; {қалқалау әдісі}
end;
Бұл мысалда TFigure аталық класының Draw виртуальды әдісі
Мұндай жариялау керекті мақсатқа жету мақсатында әдістерді қалқалауға мүмкіндік
var
Figure: TFigure;
begin
Figure := TRectangle.Create; // кластың данасын құру
Figure.Draw; // TRectangle.Draw әдісін шақыру
Figure.Destroy; // класс данасын жою
Figure := TEllipse.Create; // класс данасын құру
Figure.Draw; // TEllipse.Draw әдісін шақыру
Figure.Destroy; // класс данасын жою
end;
Семантикалық виртуальды және динамикалық әдістер біркелкі жұмыс істейді. Айырмашылығы
Класта әдіс abstract директивасының көмегімен абстрактілі болып жариялануы
procedure DoSomething; virtual; abstract;
Қалқаланбаған абстрактілі әдіске қатынау орындалу уақыты туралы қатені шақырады
type
TClass1 = class(TClass0)
...
procedure Paint; virtual; abstract;
end;
TClass2 = class(TClass1)
...
procedure Paint; override;
end;
var
jClass1: TClass1;
jClass2: TClass2;
begin
jClass1.Paint; // абстрактілі әдіске қатынау дұрыс емес
jClass2.Paint; // дұрыс
...
end;
Әрбір класс екі ерекше әдістен тұрады – конструктор және
Деструктор, конструкторға қарама – қарсы ұғым, ол кластың данасын
Конструктор мен деструктор процедура болғанымен де, олар арнайы резервтелген
type
TSample = class
Text: String;
constructor Create; // кластың данасын құру
destructor Destroy; // кластың данасын
end;
Өріске, қасиеттерге және әдістерге қатынамас бұрын, ең алдымен оларды
var
MyObject: TSample;
begin
...
MyObject := TSample.Create;
...
end;
Егер ұрпақтар класы құрылып жатса және оны құру кезінде
type
TShape = class(TGraphicControl)
private {ішкі
FPen: TPen;
FBrush: TBrush;
procedure PenChanged(Sender: TObject);
procedure BrushChanged(Sender: TObject);
public
constructor Create(Owner: TComponent); override;
destructor Destroy; override;
...
end;
...
constructor TShape.Create(Owner: TComponent);
begin
inherited Create(Owner); // TGraphicControl арғы тек класының объектісін құру
Width := 65; // TGraphicControl иемденген қасиетін өзгерту
Height := 65;
FPen := TPen.Create; // class TPen типі бар жеке
FPen.OnChange := PenChanged;
FBrush := TBrush.Create; // class TBrush типі бар жеке
FBrush.OnChange := BrushChanged;
end;
Кейбір қарапайым кластар конструкторды немесе деструкторды жарияламай – ақ,
type
TClassy = class;
...
var
Classy: TClassy;
...
Classy:= TClassy.Create; {объектіні құру}
...
Classy:= TClassy.Free; {объектіні жою}
Тілде бір класс аралығында бір атпен бірнеше әдісті жариялау
type
TClassy = class;
Procedure HH(i, j: byte; var s: String); reintroduce; overload;
Procedure HH(q: String); reintroduce; overload;
Procedure HH(a: array of Integer); reintroduce; overload;
end;
...
implementation
...
procedure TClassy.HH(i, j: byte; var s: String);
begin
S:=IntToStr(i + j);
end;
procedure TClassy.HH(q: String);
begin
Label2.Caption:= q;
end;
procedure TClassy.HH(a: array of Integer);
begin
Label1.Caption:= IntToStr(a[6] + a[4]);
end;
...
Енді TClassy.HH аты бар әдіске қатынағаннан кейін, бағдарлама қатынағанда
2.6 Кластың қасиеттері
Қасиеттер, өріс сияқты кластың атрибуты болып саналады. Қасиеттер сырт
оның қасиеттің мәнін сақтайтын кластың өрісімен байланысы;
қасиеттің өрісіне қатынауды қамтамасыз ететін екі әдіс:
қасиеттің мәнін тағайындайтын әдіс қасиетті жазу әдісі (write) деп
қасиеттің мәнін алатын әдісті қасиетті оқу әдісі (read) деп
Қасиетті property, read және write сөздерінің көмегімен жариялайды.
property propertyName[indexes]: type index integerConstant specifiers;
мұндағы propertyName – қасиеттің аты, кез – келген дұрыс
Мысал 2.6.1 Object Pascal - да анықталған
property Objects[Index: Integer]: TObject read GetObject
write SetObject;
property Pixels[X, Y: Integer]: TColor read GetPixel
write SetPixel;
property Values[const Name: string]: string read GetValue
write SetValue;
property ErrorCount: Integer read GetErrorCount;
property NativeError: Longint read FNativeError;
Мысал 2.6.2 Index спецификаторы бар қасиетке мысал.
type
TRectangle = class
private
FCoordinates: array[0..3] of Longint;
function GetCoordinate(Index: Integer): Longint;
procedure SetCoordinate(Index: Integer; Value: Longint);
public
property Left: Longint index 0 read GetCoordinate
write SetCoordinate;
property Top: Longint index 1 read GetCoordinate
write SetCoordinate;
property Right: Longint index 2 read GetCoordinate
write SetCoordinate;
property Bottom: Longint index 3 read GetCoordinate
write SetCoordinate;
property Coordinates[Index: Integer]: Longint read GetCoordinate write SetCoordinate;
...
end;
Index спецификаторы бар қасиетте қатынау әдісі бүтін типті қосымша
Егер Rectangle TRectangle типті болса, жоғарыда жарияланғандай, онда
Rectangle.Right := Rectangle.Left + 10;
мынадай сәйкестік орын алады:
Rectangle.SetCoordinate(2, Rectangle.GetCoordinate(0) + 100);
Қасиеттердің барлық жариялануында read және write спецификаторларының біреуі немесе
read fieldOrMethod
write fieldOrMethod
мұндағы fieldOrMethod – қасиет жарияланған класта немесе арғы –
Егер fieldOrMethod қасиет жарияланған класта жарияланса, ол қасиетті жарияламас
Егер fieldOrMethod арғы – тек класында жарияланса, онда ол
Егер fieldOrMethod - өріс болса, онда ол қасиеттің типінен
Если fieldOrMethod - әдіс болса, онда оны қайта анықтауға
Если fieldOrMethod - read спецификаторында анықталған әдіс болса, онда
Егер fieldOrMethod - write спецификаторында анықталған әдіс болса, онда
Мысалы, егер қасиет жарияланған болса:
property Color: TColor read GetColor write SetColor;
онда GetColor әдісі мыналай сипатталуы қажет
function GetColor: TColor;
және SetColor әдісі мыналай сипатталуы
procedure SetColor(Value: TColor);
немесе
procedure SetColor(const Value: TColor);
сипатталынуы керек.
Егер қасиет тек read спецификатрынан тұратын болса, онда ол
Мысал 2.6.3 Name және Address екі қасиеттерден тұратын Name
type
TName = string[15];
TAddress = string[35];
TPerson = class
private
FName: TName;
FAddress: TAddress;
protected
constructor Create(Name: TName);
procedure Show;
function GetName: TName;
function GetAddress: TAddress;
procedure SetAddress(NewAddress: TAddress);
public
property Name: TName
read GetName;
property Address: TAddress
read GetAddress
write SetAddress;
end;
Мұндағы Name – FName өрісімен байланысқан қасиет, GetName –
Төменде TPerson класының объектілерін құруға және оның қасиеттеріне
constructor TPerson.Create(Name: TName); // TPerson класының конструкторы
begin
FName := Name;
end;
function TPerson.GetName; // Name қасиетінің мәнін алатын әдіс
begin
Result := FName;
end;
function TPerson.GetAddress; // Address қасиетінің мәнін алатын әдіс
begin
Result := FAddress;
end;
// Address қасиетінің мәнін өзгертетін әдіс
procedure TPerson.SetAddress(NewAddress: TAddress);
begin
If FAddress = ’’ then FAddress := NewAddress;
end;
Қасиетке қатынау үшін бағдарламаның мәтінінде өрістер мен әдістердегі сияқты
var
Student : TPerson
HisAddress : String;
begin
Student := TPerson.Create(’Иванов’);
Student.Address := ’ул. Садовая, д.3, кв.25’;
...
HisAddress := Student.Address;
...
Student.Free;
end;
Address қасиетіне мән меншіктеу нұсқасын орындағанда компилятор әдісті шақыру
Student.SetAddress(’ул. Садовая, д.3, кв.25’);
Сырт жағынан қарағанда бағдарламада қасиетті қолданудың объектінің өрісін қолданудан
Student.FAddress := ’ул. Садовая, д.3, кв.25’;
Бірақ, Address қасиетін қолдана отырып біз тек оқу
type
TPerson = class
FAddress: TAddress;
procedure SetAddress(NewAddress: TAddress);
property Address: TAddress read FAddress write SetAddress;
end;
Қасиет нақты бір өріспен байланыспауы да мүмкін. Бұл жағдайда
2.7 Кластың құрылымы. Кластың элементтерінің көріну аймағы
Object Pascal объектілерінің модельінде оларды қай аймақта қолдануға
type
TMyClass = class(TControl)
private
... {меншік жариялану мына жерде}
protected
... {қорғалған жариялану мына жерде}
public
... {қатынас бар жариялану мына жерде}
published
... { жариялану мына жерде}
end;
Секциялар кластың құрамына кіретін элементтердің көріну аймағын анықтайды:
Private – көріну аймағын минимумге дейін кішірейтеді: сипаттаудың жабық
Public – класс жарияланған uses тізімінде модульге сілтемеден тұратын
Published – ол Public сияқты, бірақ айырмашылығы тек мынада,
Protected – кластың және оның кез – келген ұрпақ
Automated – OLE-объект Автоматизацисы интерфейсіне қосылатын қасиеттер мен әдістерді
Бір кластың төңірегінде ретсіз кез – келген секция құрылуы
2.8 Кластарға операциялар қолдану. IS және AS кілттік
Кластарға екі операция қолдануға рұқсат етілген – IS және
1. IS операторы.
IS операторының көмегімен берілген класс нұсқалған типке тиісті
object is class
Бұл өрнек логикалық типтен (boolean) тұрады, егер object
Мысал 2.8.1
IF ActiveControl IS TEdit THEN ...
IS операторы бульдік мәнді қайтарады.
TRUE – егер тексерілетін айнымалы ActiveControl берілген типке
FALSE – кері жағдайда.
Мысал 2.8.2
IF ActiveControl IS TObject THEN DoSomeThing;
Барлық кластар TObject класының ұрпақ кластары болғандықтан, DoSomeThing
2. AS операторы.
AS опрераторы нұсқағышты нақты типке келтіру үшін қолданылады. AS
object as class
Бұл өрнектің есетелінуінің нәтижесі болып class класының типіне
Мысал 2.8.3
WITH ActiveControl AS TEdit DO DoSomeThing;
Келтірілген фрагментте ActiveControl айнымалысы қандай да бір класқа нұсқағыш
Мысал 2.8.4
with Sender as TButton do //
begin
Caption := '&Ok';
OnClick := OkClick;
end;
...
(Sender as TButton).Caption := '&Ok'; // TButton немесе оның
// Sender айнымалысының Caption қасиетіне '&Ok' мәні
2.9 Оқиға және меншіктеу
Windows жүйесінде бұрыннан жұмыс істеп келе жатқан программистке
Қолда анықтамалық бола тұра, мұндай санды хабарламалармен жұмыс істеу
Object Pascal тілінің деңгейінде іске оқиғалар қалай іске асырылғанын
Оқиға — бұл сырттан келген әсерлерге қолданушының реакциясын құруға
Оқиғаны сипаттаудың синтаксисі мынадай:
property OnMyEvent: TMyEvent read FOnMyEvent
write FOnMyEvent;
мұндағы OnMyEvent – қасиет-оқиғаның аты, TMyEvent – оқиғаның процедуралық
Мұндай қасиетке мән тағайындау дегеніміз - объектіге оқиға
Application.OnActivate := MyActivatingMethod;
Application (осылай жұмыс істеп тұрған қосымшаға сай келетін объект
Кітапхананың ішінде Delphi – дің орындалу уақытында Windows хабарламаларын
if Assigned(FOnMyEvent) then FOnMyEvent(Self);
Оқиға пайда болғанына және тағайындалуына байланысты параметрлерінің әртүрлі саны
TNotifyEvent = procedure (Sender: TObject) of object;
Мысал 2.9.1 Мысал ретінде TControl класының стандарты оқиғаларының OnDblClick
type
TControl = class(TComponent)
private
..............................
FOnDblClick: TNotifyEvent;
FOnMouseDown: TMouseEvent;
FOnMouseMove: TMouseMoveEvent;
..............................
protected
..............................
property OnDblClick: TNotifyEvent read FOnDblClick
write FOnDblClick;
property OnMouseDown: TMouseEvent read FOnMouseDown
write FOnMouseDown;
property OnMouseMove: TMouseMoveEvent read FOnMouseMove
write FOnMouseMove;
..............................
end;
FOnDblClick, FOnMouseDown и FOnMouseMove – оқиға-қасиетін сипаттағанда қолданылатын өрістер.
type
TNotifyEvent = procedure (Sender: TObject) of object;
TMouseEvent = procedure (Sender: TObject; Button: TMouseButtton;
Shift: TShiftState; X, Y: Integer) of object;
TMouseMoveEvent = procedure (Sender: TObject; Shift: TShiftState;
X, Y: Integer) of object;
Процедуралық типтерге жалпы болып оқиғаның объект-көзіне нұсқағыштан тұратын Sender
Инспектор объектісінің Events парағының кез – келген оқиғасының өрісіне
procedure TForm1.Label1Click(Sender: TObject);
begin
...
end;
Оқиға объектінің қасиеті болып табылғандықтан, олардың мәнін бағдарламаның орындалу
Object1.OnMouseMove := Object2.OnMouseMove;
Меншіктеу принципі әрбір арнайы жағдай үшін жаңа еншілес кластың
Қандай механизм өңдеуішерді ауыстыруға мүмкіндік береді?, өйткені ол жай
type
TMyEvent = procedure(Sender: TObject; var AValue: Integer) of object;
T1stObject = class;
FOnMyEvent: TMyEvent;
property OnMyEvent: TMyEvent read FOnMyEvent write FOnMyEvent;
end;
T2nd0bject = class;
procedure SetValuel(Sender: TObject; var AValue: Integer);
procedure SetValue2(Sender: TObject; var AValue: Integer);
end;
var
Obj1: T1stObject;
Obj2: T2nd0bject;
begin
Obj1 := T1stObject.Create ;
Obj2 := T2nd0bject.Create;
Obj1.OnMyEvent := Obj2.SetValue1;
Obj1.OnMyEvent := Obj2.SetValue2;
...
end.
Бұл мысал атын қайта өзгерткен кезде басқа кластардың да
Объект Инспекторының Events бетінде әдістің, яғни оқиғаның типіне
Бақылау сұрақтары:
Класс пен оның элементтеріне ат тағайындағанда ұсынылатын ережелер.
Класс дегеніміз не? Объект дегеніміз не? Кластың жариялануы. Объектінің
Кластың өрісі дегеніміз не? Мысалдар. Кластың өрістерінің қалқалануы. Мысалдар.
Кластың әдісі болып не табылады? Мысалдар. Кластың әдісі кәдімгі
Әдістердің қалқалануы. Статикалық қалқалану. Динамикалық қалқалану.
Динамикалық, виртуальды және қалқалау әдістері. Мысалдар.
Абстракті әдістер. Мысалдар. Қайта іске қосылатын әдістер. Мысалдар.
Конструктор мен деструктор. Мысалдар.
Кластың қасиеті. Қасиеттің синтаксисі. Мысалдар.
Қасиеттің класы өрістің класынан несімен ерекшеленеді? Read, write специфиациялары.
Инкапсуляция. Мысал.
Туындау. Мысал.
Полиморфизм. Мысал.
Кластың құрылымы. Published, private, protected, public секциялары.
Кластарға амадар қолдану. IS және AS кілттік сөздері. Мысалдар.
Оқиға. Оқиғаның сипатталынуының синтаксисі. Мысалдар.
Процедуралық тип. Мысалдар.
Ең қарапайым процедуралық тип болып қандай тип табылады? Sender
Оқиғаның өңдегішін қалай шақырады?
Оқиғаға қайта ат тағайындау. Мысалдар.
Өз бетінше орындауға арналған тапсырма
Объектілі – бағытталған бағдарламалаудың негізгі принциптері. Объект, хабарлама, класс,
Абстракция, инкапсуляция, туындау және полиморфизм. Мысалдар.
Delphi – дің абстрактілі кластарының сипаттамалары (TObject, TPersistent, TComponent).
Delphi – дің абстрактілі кластарының сипаттамалары (TControl, TGraficControl, TWinControl,
Stored, default (немесе nodefaulte), implements спецификациялары. Мысалдар.
Берілгендердің динамикалық құрылымы. Нұсқағыштар, динамикалық айнымалылар. Мысалдар.
Variant типі. Variant типті айнымалылар. Variants модульі.
Зертханалық жұмыс №4 «Полиморфизм және көрнекілік
Полиморфизм — бұл әртүрлі кластарға кіретін әдістерге бірдей ат
Біреуі қалған екеуіне базалық класс болатындай үш класс анықталсын:
type
// базалық класс
TPerson = class
FName: String;
Constructor Create(AName: String);
Function Info: String; virtual;
end;
// TPerson – нан туынды
TStud = class (TPerson)
FGr: Integer;
Constructor Create(Aname: String; Gr: Integer);
Function Info: String; override;
end;
// TPerson – нан туынды
TProf = class(TPerson)
FDep: String;
Constructor Create(AName: String; Dep: String);
Function Info: String; override;
end;
Әрбір класта Info әдісі анықталған. Базалық класта virtual директивасының
Төменде әрбір класс үшін Info әдісінің анықталуы келтірілген.
function TPerson.Info: String;
begin
result := ' ';
end;
functicn TStud.Info: String;
begin
result := FName + ' группа ' + IntToStr(FGr)
end;
function TProf.Info: String;
begin
result := FName + ' кафедра ' + FDep;
end;
Екі класс та бір базалық кластан туындағандықтан студенттер мен
list: array[1..SZL] of TPerson;
Тізімді осылай жариялауға болады, өйткені Object Pascal аталық кластың
Студенттер мен оқытушылардың тізімін Info әдісін массив элементтеріне қолдану
st := ' ';
for i := 1 to SZL do
if list[i] NIL
then st := st + list[i] .Info + #13;
ShowMessage(st);
Бағдарламаның орындалуы барысында массивтің әрбір элементі TStud типті объектіден
Келесі бағдарлама жоғарыда қарастырылған TPerson, TStud және TProf
Сурет 2.1 «Полиморфизм» бағдарламасының қарым – қатынас терезесі
2.1 листингісі Полиморфизмнің демонстрациясы
Unit polimor_;
Interface
Uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
ТForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
GroupBox1: TGroupBox;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
( Private declarations )
public
( Public declarations )
end;
type
// базалық класс
TPerson = class
FName: String;
Constructor Create(AName: String);
Function Info: String; virtual;
end;
// Студент класы
TStud = class (TPerson)
FGr: Integer;
Constructor Create(AName: String; Gr: Integer);
Function Info: String; override;
end;
// Оқытушы класы
TProf = class(TPerson)
FDep: String;
Constructor Create(AName: String; Dep: String);
Function Info: String; override;
end;
const
SZL = 10; // тізімнің өлшемі
var
Forml: TForml
List: array[1..SZL] of TPerson; // тізім
n: Inteqer = 0
implementation
($R *.DFM}
constructor TPerson.Create(AName: string);
begin
FName:=AName;
end;
constructor TStud.Create(AName: string; Gr: integer);
begin
inherited Create(AName); // базалық кластың конструкторын шақыру
FGr:=Gr;
end;
constructor TProf.Create(AName: string; Dep: string);
begin
inherited Create(AName); // базалық кластың конструкторын шақыру
FDep:=Dep;
end;
function TPerson.Info: string;
begin
result:=FName;
end;
function TStud.Info: String;
begin
result := FName + ' группа ' + IntToStr(FGr)
end;
function TProf.Info: String;
begin
result := FName + ' кафедра ' + FDep;
end;
// Добавить батырмасына шерту
procedure ТForm1.Button1Click(Sender: TObject);
begin
if n < SZL then
begin
// объектіні класқа қосу
n:=n+1;
if RadioButton1.Checked
then // TStud объектісін құру
List[n]:=TStud.Create(Edit1.Text,StrToInt(Edit2.Text))
else // TProf объектісін құру
if RadioButton2.Checked then List[nl:=TРrоf.Create(Edit1.Text,Edit2.Text);
// енгізу өрісін тазалау
Edit1.Text :=' ';
Edit2.Text :=' ';
Edit1.SetFocus; // Тышқанның меңзері Фамилия өрісінде
end
else ShowMessage('Список заполнен!');
end;
procedure ТForm1.Button2Click(Sender: TObject);
var
i:integer; // индекс
st:string; // тізім
begin
for i:=1 to SZL do
if list[i] NIL then st:=st + list[i].info +
ShowMessage(' Список ' + #13 + st);
end;
end.
Добавить (Button1) батырмасын басқанда іске қосылатын TForm1.Button1Click процедурасы
Список (Button2) батырмасын басқанда іске қосылатын TForm1.Button2Click процедурасы тізімнің
Зертханалық жұмыс №5 "Қаситтер мен әдістер"
Кластың сипатталынуы "Қос мәнді теріс емес бүтін сан" (TN2).
Қасиет – аты, мәні, тақтық, бірінші сан, екінші сан.
Әдістер:
– процедуры: мәнді орнату (SetN2), сандарды ауыстыру (Swap);
– функциялар: басқа санға қарағанда кіші (LessThen), ақпарат (Info);
– конструктор (Create).
Листинг 2.2 «TN2» класын жүзеге асыратын бағдарламаның демонстрациясы
program Class_TN2;
{$APPTYPE CONSOLE} {Компилятор директивасы – бағдарламаның жұмыс істеу режимінің
{MS-DOS режиміне тәріздес мәтіндік режимнің эмуляторы құрылады}
uses SysUtils;
type
TN2 = class
fName: String;
fVal: integer;
constructor Create(aName: String);
procedure Swap;
function Info: String;
function LessThen(aNum: TN2): Boolean;
procedure SetVal(Value:Integer);
function GetOdd:string;
function GetD1:byte;
procedure SetD1(Value:byte);
function GetD2:byte;
procedure SetD2(Value:byte);
property Name:string read fName;
property Odd:string read GetOdd;
property Val:integer read fVal write SetVal;
property D1:byte read GetD1 write SetD1;
property D2:byte read GetD2 write SetD2;
end;
constructor TN2.Create(aName: String);
begin
fName:=aName;
fVal:=1;
end;
procedure TN2.Swap;
begin
SetVal(D2*10+D1);
end;
function TN2.Info: String;
begin
Result:='Naturalnoe dvuznachnoe '+odd+
' chislo '+Name+'='+IntToStr(Val)+#10#13+' first number='
+IntToStr(D1)+' second number='+IntToStr(D2);
end;
procedure TN2.SetVal(Value: Integer);
begin
if (Value>=0) and (Value