Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
25
Міністерство освіти і науки України
Чернівецький національний університет
імені Юрія Федьковича
Факультет компютерних наук
Кафедра компютерних систем та мереж
Курсова робота
Опис мови Delphi
2008
АНОТАЦІЯ
Даний розділ містить основні відомості про історію розвитку мови Object Pascal та середовища Delphi, їх основні технології та їх застосування для роботи файлами. Розділ містить також опис основних особливостей мови, основних елементів мови повязаних побудовою та відображенням діаграм.
Опис мови займає 25 сторінок друкованого тексту, 3 рисунки.
Зміст
Вступ
1. Загальні відомості
.1 Історія розвитку середовища Delphi
.2 Основні елементи середовища
.3 Структура програми
. Елементи та засоби Delphi
.1 Принципи об'єктно-орієнтованого програмування
.2 Використання класів
.3 Опис компоненту TDBChart
.4 Робота з файлами в Delphi
.5 Основи вбудови ассемблерного коду
Висновки
Список літератури
На сучасному етапі розвитку компютерних систем в світі розвинулася і поширилася велика кількість мов програмування, які призначені для різних областей людської діяльності. Визначальним моментом при виборі мови програмування додатків в більшості випадків являється досвід у використанні тієї чи іншої мови.
Згідно технічного завдання мені необхідно використати середовище Delphi для розробки архіватора на основі статистичного метода Хаффмана.
Delphi є середовищем розробки програм, яке використовує багато передових ідей і концепцій, закладених в графічному інтерфейсі Windows. Як відомо, середовище розробки великою мірою визначає ефективність роботи програміста. У середовищі програмування Delphi є всі необхідні інструменти для того, щоб створювати повноцінні програми. Писати, компілювати і тестувати програму все це можна робити, не виходячи з Delphi.
Delphi мова програмування, що ґрунтується на діалекті мови Pascal від компанії Borland. До версії 7.0 мала назву Object Pascal. Окрім того Delphi - середовище розробки (IDE) для однойменної мови. Ця плутанина часто викликає непорозуміння. По суті, Delphi є об'єктно-орієнтованим розширенням мови Pascal.
Delphi - це нащадок Турбо Паскаля, який був випущений для операційної системи Cp/m в 1983 році. У лютому 1994 року Турбо Паскаль був перенесений на операційну систему MS-DOS. На ранньому етапі розвитку комп'ютерів IBM РС, Турбо Паскаль був однією з найбільш популярних мов розробки програмного забезпечення - головним чином тому, що це був цілком серйозний компілятор, який, включаючи компілятор, редактор і відгадчик. Середовище мало змогу працювати на машині з 64 Kb оперативної пам'яті.
Під Windows Турбо Паскаль був перенесений фірмою Borland в 1990 році. А найостанніша версія Borland Pascal 7.0 (що має тепер таку назву), не рахуючи Delphi, вийшла в світ в 1992 році. Розробка Delphi почалася в 1993 році. Після проведення beta-тестування Delphi показали на "Software Development '95".
Спочатку на Delphi можна було програмувати під MS Windows 3.1. Починаючи з версії 2.0 на Delphi можна створювати програми під будь-яку з 32-бітних версій MS Windows.
В 2000 році була спроба створити варіант Delphi під операційну систему на базі ядра Linux, така модифікація Delphi мала назву Kylix. Було випущено 3 версії Kylix, проте експеримент виявився невдалим і 2003 року проект був заморожений.
2003 року була створена модифікація мови під платформу Microsoft.NET, що отримала назву Delphi.NET. Цей варіант мови послідовно розвивається в версіях Delphi 8, 2005, 2006, 2007.
Частково Delphi підтримується також у відкритому проекті FreePascal, що потенційно дозволяє створювати програми під велику кількість платформ.
Інтегроване середовище Delphi складається з чотирьох основних елементів: головне вікно, вікно інспектора обєктів, вікно форми та вікно модуля (вікно коду).
Головне вікно має заголовок Delphi 7.0 Project1. Це вікно містить головне меню, панель кнопок швидкого доступу і палітру компонент.
Вікно, яке знаходиться у центрі, називається формою. Під час розробки форма являє собою вікно програми. У цьому вікні проходить основна частина роботи по проектуванню програми. Деякі елементи у вікні форми (лінії сітки, невізуальні компоненти) не будуть видимими під час виконання програми. Але, оскільки Delphi це середовище програмування типу WYSIWYG (What You See Is What You Get, що бачите, те й отримаєте), то більша частина того, що ми бачимо під час проектування є тим, що ми побачимо і під час виконання програми. Є можливість змінити різні його властивості, наприклад, прибрати кнопки максимізації та мінімізації вікна тощо.
Вікно коду працює аналогічно до простого текстового редактора. Можна використовувати клавіші PgUp i PgDn, клавіші курсору, мишу, можна виділити, скопіювати, вставити текст за допомогою меню EDIT і відповідних гарячих клавіш.
Вгорі вікна коду є закладка. Вона належить до файлу, який зараз редагується. Якщо відкрити декілька файлів, кожен з них буде мати свою закладку.
Інспектор обєктів або Object Inspector як правило знаходиться в лівій частині екрану і містить інформацію про виділений обєкт. Інспектор обєктів складається з таких елементів: комбінованої панелі (Combo box) вибору обєкту, сторінки властивостей (Properties Page) та сторінки подій (Events Page) вибраного обєкту.
У інспекторі обєктів описані всі властивості обєкту, і його використовують для зміни цих властивостей. Наприклад, можна змінити заголовок кнопки, клацнувши на ній мишкою, а потім записавши нову назву в полі Caption інспектора обєктів.
Крім того за допомогою інспектору обєктів можна переглянути та змінити всі події, що повязані з виділеним обєктом.
В основі будь-якої Delphi-програми лежить проект. Основою проекту в свою чергу є форма, на якій розміщаються необхідні для розвязку конкретної задачі компоненти. Проект складається з різних частин, кожна з яких розміщена в окремому файлі й виконує чітко визначені функції. Набір файлів, необхідних для створення програми, називається проектом. Компілятор послідовно обробляє файли проекту і будує з них EXE-програму, що виконується. Проект складається з таких файлів:
У проект можуть входити також логічно автономні елементи: малюнки (BMP-файли), значки (ICO-файли), файли довідників (HLP-файли) і т. і., але ними управляє сам програміст.
Схема формування Delphi-програми від постановки задачі до отримання готового до виконання файла представлена на Рис.1.3.1.
Програма Задача Проект
Рис. 1.3.1. Схема формування Delphi-програми.
Обєктно-орієнтоване програмування (ООП) одна з парадигм програмування, яка розглядає програму як множину взаємодіючих об'єктів. У ній використано декілька технологій від попередніх парадигм, включаючи успадкування, модульність, поліморфізм та інкапсуляцію. Не зважаючи на те, що ця парадигма з'явилась в 1960-тих роках, вона не мала широкого застосування до 1990-тих. Об'єктно-орієнтоване програмування сягає своїм корінням до створення мови програмування Симула в 1960-тих роках, одночасно з посиленням дискусій про кризу програмного забезпечення.
Об'єктно-орієнтовані програми можна розглядати як множину взаємодіючих об'єктів, на відміну від традиційних поглядів, коли програма розглядається як набір підпрограм, або як перелік інструкцій комп'ютеру. Відповідно до парадигми ООП, кожен об'єкт здатен отримувати повідомлення, обробляти дані, та надсилати повідомлення іншим об'єктам. Кожний об'єкт можна розглядати як незалежний автомат з окремим призначенням або відповідальністю.
Обєктно-орієнтоване програмування засноване на трьох принципах:
Спостережуване в об'єктах об'єднання даних і операцій в одне ціле було позначене терміном інкапсуляція. Застосування інкапсуляції зробило об'єкти схожими на маленькі програмні модулі і забезпечило приховування їх внутрішньої структури. Для об'єктів з'явилося поняття інтерфейсу, що значно підвищило їх надійність і цілісність.
Наслідування означає, що якщо ви хочете створити новий клас, лише небагато чим, що відрізняється від того, що вже існує, то немає необхідності в переписуванні наново всіх полів, методів і властивостей. Ви оголошуєте, що новий клас є нащадком (або дочірнім класом) наявного класу, так званим предком (або батьківським класом), і додаєте до нього нові поля, методи та властивості. Іншими словами додається те, що потрібне для переходу від загального до приватного. Процес створення нових класів на основі інших класів називається наслідуванням. Нові класи мають як успадковані ознаки, так і нові.
Поліморфізм означає, що в похідних класах ви можете змінювати роботу методів, що вже існують в базовому класі. При цьому весь програмний код, що керує об'єктами батьківського класу, придатний для управління об'єктами дочірнього класу без будь-якої модифікації.
Delphi підтримує дві моделі представлення об'єктів - стару і нову. Стара модель існує лише для сумісності з ранішими версіями компілятора, зокрема з Borland Pascal 7.0, тому ми її не розглядатимемо. Все, що сказане нижче, відноситься до нової моделі представлення об'єктів, могутнішої і багатшої по своїх можливостях. Для підтримка ООП в мову Object Pascal введена об'єктні типи даних, за допомогою яких одночасно описуються дані і операції над ними. Об'єктні типи називають класами, а їх екземпляри - об'єктами.
Класи об'єктів визначаються в секції type глобального блоку. Опис класу починається словом class і закінчується словом end. За формою оголошення класи схожі на звичайні записи, але крім полів даних можуть містити оголошення призначених для користувача процедур і функцій. Такі процедури і функції узагальнено називають методами, вони призначені для виконання над об'єктами різних операцій.
Заголовки методів, наступні за списком полів, грають роль попередніх (forward) оголошень. Програмний код методів поміщається нижче за визначення класу.
Клас, зазвичай, описує суть, що моделюється в програмі. Наприклад, клас Tdiskgauge описує вимірювач дискового простору. Клас містить два поля: Driveletter - буква накопичувача, що знаходиться під спостереженням, і Percentcritical - відсоток вільного простору на диску, з яким працює програма. Функція Getpercentfree визначена як метод роботи над будь-яким об'єктом класу Приведений вище опис є ні чим іншим, як декларацією інтерфейсу для управління об'єктами класу Tdiskgauge. Реалізація методів Getpercentfree і Checkstatus відсутня, але для створення і використання екземплярів класу вона поки і не потрібна. У цьому якраз і полягає сила інкапсуляції, яка робить об'єкти аналогічними програмним модулям. Для використання модуля необхідно вивчити лише його інтерфейсну частину, розділ реалізації для цього вивчати не потрібно.
Для представлення даних з деякого набору даних у вигляді графіків різних видів призначений компонент Tdbchart. За його допомогою можна одночасно показувати графіки для декількох полів даних. Графіки будуються на основі всіх наявних в наборі даних значень полів.
Налаштування параметрів компоненту здійснюється спеціальним редактором, який можна відкрити подвійним клацанням на перенесеному на форму компоненті.
Основою будь-якого графіка в компоненті Tdbchart є так звана серія, властивості якої представлені класом Tchartseries. Для того, щоб побудувати графік значень деякого поля набору даних, необхідно виконати наступні дії, більшість з яких виконується в спеціалізованому редакторі компоненту:
Редактор має дві головні сторінки - Chart і Series. Сторінка Chart містить багатосторінковий блокнот і призначена для настройки параметрів самого графіка. Сторінка Series також містить багатосторінковий блокнот і використовується для настройки серій значень даних.
Для створення нової серії необхідно в редакторові перейти на головну сторінку Chart, а на ній відкрити сторінку Series. На цій сторінці потрібно клацнути на кнопці Add, а потім в діалозі, що з'явився, вибрати тип серії. Після цього в списку на сторінці Series з'являється рядок нової серії. Тут можна перевизначити тип, колір і видимість серії, клацнувши на відповідній зоні рядка. Решта всіх сторінок блокнота на головній сторінці Chart призначена для настройки параметрів графіка. Можна перейти на головну сторінку Series і на ній із списку назв серій вибрати необхідну. Після цього на сторінці Data Source із списку вибирається рядок Dataset. Далі в списку Dataset, що з'явився, вибирається потрібний набір даних.
Рис. 2.3.1. Спеціалізований редактор компоненту Tdbchart.
Рис. 2.3.2. Приклад використання компонента Tdbchart
Рис. 2.3.3. Можливі види графіків
Список X дозволяє вибрати поле набору даних, значення якого послідовно відкладатимуться по осі абсцис. Список Y дозволяє вибрати поле набору даних, значення якого будуть відкладені по осі ординат. Відповідність між значеннями полів по двох осях визначається приналежністю до одного запису набору даних. Вибір поля в списку Labels прив'язує його значення у вигляді міток до осі абсцис.
Тепер залишилося тільки відкрити набір даних і компонент Tdbchart побудує графік. Аналогічним чином на цей же компонент можна помістити і інші графіки. Кожна серія відповідатиме одній кривій на графіку.
Властивості компонента TDBChart:
Редактор діаграм викликається:
Для задання значень, що відображаються, треба використовувати методи серій Series:
Add(Const Avalue:double; Const Alabel:string; Acolor:tcolor)
Параметр Avalue відповідає значенню, що додається, параметр alabel - назва, яка буде відображатися на діаграмі і в легенді, параметр Acolor - колір. Параметр alabel необов'язковий, його можна задавати порожнім.
Середовище Delphi дає вам можливість вибрати один з чотирьох варіантів роботи з файлами:
Часто сучасний програмний код Delphi для читання даних з файлу дуже схожий на той, що використовується в Turbo Pascal. Програмісти Borland зберегли незмінним старий набір файлових функцій, що працюють через файлові змінні.
При організації операцій файлового введення/виведення у додатку велике значення має, якого роду інформація міститься у файлі. Частіше за все це - рядки, але зустрічаються двійкові дані або структурована інформація, наприклад масиви або записи.
Природно, що відомості про тип даних, що зберігаються у файлі важливо задати спочатку. Для цього використовуються спеціальні файлові змінні, що визначають тип файлу. Вони поділяються на ті, що не типізуються і типізуються. Перед початком роботи з будь-яким файлом необхідно описати файлову змінну, що відповідає типу даних цього файлу. Надалі ця змінна використовується при зверненні до файлу.
У Delphi є можливість створювати файли, що не типізуються. Для їх позначення використовується ключове слово file: var Untypedfile: file;
Такі файлові змінні використовуються для організації швидкого і ефективного введення/виводу незалежно від типу даних. При цьому мається на увазі, що дані читаються або записуються у вигляді двійкового масиву. Для цього застосовуються спеціальні процедури блокового читання і запису.
Типізовані файли, забезпечують введення/виведення з урахуванням конкретного типу даних. Для їх оголошення використовується ключове слово file of, до якого додається конкретний тип даних. Наприклад, для роботи з файлом, що містить набір байтів, файлова змінна оголошується так: var Bytefile: file of byte;
При цьому можна використовувати будь-які типи фіксованого розміру, за винятком вказівників. Дозволяється застосовувати структурні типи, якщо їх складові частини задовольняють названому вище обмеженню. Наприклад, можна створити файлову змінну для запису:
type Country = record
Name: String;
Capital: String;
Population: Longlnt;
Square: Longlnt;
end;
var Countryfile: file of Country;
Для роботи з текстовими файлами використовується спеціальна файлова змінна Textfile або Text: var F: Textfile;
Тепер розглянемо дві найпоширеніші операції, що виконуються при роботі з файлами. Це читання і запис. Для їх здійснення застосовуються спеціальні функції файлового введення/виводу.
Отже, для виконання операції читання або запису необхідно провести наступні дії:
. Оголосити файлову змінну необхідного типу.
. За допомогою функції Assignfile пов'язати цю змінну з необхідним файлом.
. Відкрити файл за допомогою функцій Append, Reset, Rewrite.
. Виконати операції читання або запису. При цьому, залежно від складності завдання і структури даних, може використовуватися цілий ряд допоміжних функцій.
. Закрити файл за допомогою функції Closefile.
Як приклад розглянемо невеликий фрагмент коду.
...
var F: Textfile;
S: string;
begin
if Opendlg.Execute
then Assignfiie(F, Opendlg.FileName)
else Exit; Reset(F);
while Not EOF(F) do
begin
Readln(F, S);
Memo.Lines.Add(S);
end;
Closefile(F);
end;
...
Якщо в діалозі відкриття файлу Opendlg був вибраний файл, то його ім'я зв'язується з файловою змінною F за допомогою процедури Assignfile. Як ім'я файлу рекомендується завжди передавати повне ім'я файлу (включаючи його маршрут). Якраз у такому вигляді повертають результат вибору файлу діалоги роботи з файлами. Потім за допомогою процедури Reset цей файл відкривається для читання і запису.
У циклі виконується читання з файлу текстових рядків і запис їх в компонент Tmemo. Процедура Readin здійснює читання поточного рядка файлу і переходить на наступний рядок. Цикл виконується, поки функція EOF не повідомить про досягнення кінця файлу. Після завершення читання файл закривається. Такий же код можна використовувати і для запису даних у файл. Необхідно тільки замінити процедуру читання на процедуру запису.
Відкриття файлу може здійснюватися трьома процедурами - залежно від типу його подальшого використання.
Змінна Recsize використовується тільки при роботі з файлами, що не типізуються, і визначає розмір одного запису для операції передачі даних. Якщо цей параметр опущений, то за замовчуванням Recsize рівне 128 байт.
Читання даних з файлів, що типізуються і текстових, виконують процедури Read і Readin. Процедура Read має різне оголошення для текстових і інших файлів, що типізуються:
При одному виклику процедури можна читати дані в довільне число змінних. Звичайно, що тип змінних повинен співпадати з типом файлу. При читанні в чергову змінну читається рівно стільки байтів з файлу, скільки займає тип даних. У наступну змінну читається стільки ж байтів, розташованих услід. Після виконання процедури поточна позиція встановлюється на першому непрочитаному байті. Аналогічно працюють декілька процедур Read для однієї змінної, виконаних підряд.
Процедура procedure Readln([ var F: Text; ] VI [, V2...,Vn ]); прочитує один рядок текстового файлу і встановлює поточну позицію на наступному рядку.
Процедури для запису у файл write і writein описані аналогічно: procedure Write([var F: Text; ] PI [, P2..., Pn]); procedure Writein([ var F: Text; ] PI [, P2...,Pn ]). Параметри P1, P2..., Pn можуть бути одним з цілих або речових типів, одним із строкових типів або логічним типом. Але у них є можливість додаткового форматування при виводі. Кожен параметр запису може мати форму: Рn [: Minwidth [: Decplaces ] ], де Рn - змінна, що виводиться, або вираз; Minwidth - мінімальна ширина поля в символах, яка повинна бути більше 0; Decplaces - містить кількість десяткових символів після коми при відображенні дійсних чисел з фіксованою крапкою.
Для текстових файлів у функціях Read і write файлова змінна F може бути відсутня. У цьому випадку читання і запис здійснюються в стандартні файли введення/виводу. Коли програма компілюється як консольне застосування, Delphi автоматично пов'язує вхідний і вихідний файли з вікном консолі.
Для контролю за поточною позицією у файлі застосовуються дві основні функції.
Процедура procedure Seek(var F; N: Longint); забезпечує зсув поточної позиції на N елементів. Розмір одного елементу в байтах залежить від типу даних файлу.
Розглянемо тепер режим блокового введення/виводу даних між файлом і областю адресного простору (буфером). Цей режим відрізняється значною швидкістю передачі даних, причому швидкість пропорційна розміру одного передаваного блоку - чим більше блок, тим більше швидкість.
Для реалізації цього режиму необхідно використовувати файлові змінні, що тільки не типізуються. Розмір блоку визначається в процедурі відкриття файлу (Reset, Rewrite). Безпосередньо для виконання операцій використовуються процедури Blockread і Blockwrite. Процедура procedure Blockread(var F: File; var Buf; Count: Integer [; var Amttransferred: Integer]); виконує запис блоку з файлу в буфер. Параметр F посилається на файлову змінну, що не типізується, пов'язану з потрібним файлом.
Параметр Buf визначає будь-яку змінну (число, рядок, масив, структуру), в яку читаються байти з файлу. Параметр Count містить число прочитуваних блоків. Нарешті, необов'язковий параметр Amttransferred повертає число реально лічених блоків.
При використанні блокового читання або запису розмір блоку необхідно вибирати так, щоб він був кратний розміру одного значення того типу, який зберігається у файлі. Наприклад, якщо у файлі зберігаються значення типу Double (8 байт), то розмір блоку може бути рівний 8, 16, 24, 32 і так далі.
Для того, що б вставити Ассемблерний код в програму на Паскалі, можна скористатися складеним оператором asm... end. Разом із звичайним складеним оператором begin... end Паскаль підтримує і складений оператора asm... end в який записується код не на Паскалі, а на Ассемблері.
Приклад:
var A, B, Max: Integer;
begin Write ('Введіть A: ');
Readln (A); Write ('Введіть B: ');
Readln (B);
asm
mov AX, A
cmp AX, B
jg @e
mov AX, B
@e: mov Max, AX
end; {asm} Writeln ('Max = ', Max);
Readln; end.
Як видно з коду, програма видасть максимальне значення між змінними A і B.
Висновки
Мова програмування Delphi дуже широко використовується і має дуже велику кількість розроблених елементів та засобів, що значно полегшують розробку додатків. У Delphi, використовується багато передових ідей і концепцій, закладених в графічному інтерфейсі Windows. У середовищі програмування Delphi є всі необхідні інструменти для того, щоб створювати повноцінні програми. Писати, компілювати і тестувати програму все це можна робити, не виходячи з Delphi.
Завдяки можливості вбудови в програму ассемблерних вставок, програміст отримує змогу створювати програми з інтерфейсом Windows та дуже високою швидкодією, характерною для низькорівневих мов програмування.