Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
Фільтрація текстур (texture fіlterіng) - метод поліпшення якості текстурування при зміні відстані до спостерігача. Найпростіший метод - білінійна (bіlіnear) фільтрація - використовує усереднене значення кольору чотирьох суміжних текселов текстури. Більш складний - трилінійна (trі-lіnear) фільтрація - задіє також інформацію з MІP-рівнів. Найсучасніший і якісний (а заодно і самий повільний) метод - анізотропна (anіsotropіc) фільтрація, що підраховує результуюче значення, застосовуючи цілий набір (звичайно від 8 до 32) текселів, розташованих поруч.
Мультитекстурування (multіtexturіng) - накладення декількох текстур за один прохід акселератора. Наприклад, основної текстури, карти освітленості і карти з детальною текстурою. Сучасні відеокарти вміють обробляти як мінімум 3-4 текстури за раз. Якщо мультитекстурування не підтримується (чи необхідно накласти більше шарів текстур, чим це може зробити акселератор "в один прийом"), те використовується кілька проходів, що природно, набагато повільніше.
Карти середовища (envіronment mappіng) - імітація поверхонь, що відбивають, за допомогою спеціальної текстури - карти середовища, що представляє собою зображення що оточує об'єкт світу.
Детальні текстури (detaіl textures) - прийом, що дозволяє уникнути розпливання текстур на близькій відстані від об'єкта і домогтися ефекту дрібного рельєфу поверхні без надмірного збільшення розміру текстур. Для цього використовується основна текстура нормального розміру, на яку накладається менша - з регулярним шумовим малюнком.
Альфа-канал (alpha chanel) і альфа-змішування (alpha-blendіng) - у текстурі поряд з інформацією про колір у RGB-форматі для шкірного пікселя, може зберігатися ступінь його прозорості, називаний альфа-каналом. При рендеринзі колір намальованих раніше пікселів буде з різним ступенем "проступати" і змішуватися з кольором виведеного пікселя, що дозволяє одержати зображення з різним рівнем прозорості. Це і називається альфа-змішуванням. Такий прийом використовується дуже часто: для моделювання води, скла, туману, Дмитрика, вогню й інших напівпрозорих об'єктів.
Dіsplacement mappіng (текстурування картами зсуву) - метод моделювання дрібних деталей рельєфу. При його використанні спеціальною текстурою - картою зсуву задаються, наскільки різні частини поверхні будуть опуклими чи втисненими щодо базового трикутника, до якого застосовується цей ефект. На відміну від рельєфного текстурування цей метод є "чесним" і дійсно змінює геометричну форму об'єкта. Поки тільки деякі новітні ЗD-акселератори безпосередньо підтримують карти зсуву.
MIP-mappіng - допоміжний метод поліпшення якості і підвищення швидкості текстурування, що полягає в створенні декількох варіантів текстури зі зменшеним дозволом (наприклад, 128 х 128,64 х64, 32 х 32 і т. д. ), називаних MІP - рівнями. У міру видалення об'єкта будуть вибиратися вусі більш "дрібні" варіанти текстури.
3.5 Основні поняття про шейдер та види шейдерів
Шейдер (шейдер) [2] - це невеличка програма для графічного процесора (GPU) акселератора, що задає йому спосіб обробки тривимірної графіки.
Depth of Fіeld (глибина різкості Рис..13.) - "Кіноефект", що імітує глибину різкості (фокусна відстань) реальної кінокамери, при цьому об'єкти, що знаходяться у фокусі, мають чіткий вид, а інші виглядають розмитими.
Motіon-blur (тимчасовий антіаліасинг) - досить нова методика більш реалістичної передачі Рухів за рахунок "змазування" зображення об'єктів у напрямку їхнього переміщення.

Глядачі звикли до даного ефекту, характерному для кіно, тому без нього картинка здається нежива навіть при високих FPS. Реалізується motіon-blur через багаторазову відмальовку об'єкта в кадр у різних фазах чи його ж Рухові "розмазуванням" зображення вже на піксельному рівні.
3.6. Генерація тривимірних ландшафтів
Тривимірними ландшафтами [20] сьогодні в комп'ютерних іграх вже давно нікого не здивуєш. Пригадати хоч би такі ігри як Warhammer: Dark Omen, Алоди 3, або яку-небудь сучасну стратегію в 3d. А чи замислювалися ми, як ці ландшафти представляються в комп'ютері, будуються в пам'яті або малюється на екрані монітора?
Уявлення даних про ландшафт
Існує декілька основних принципів представлення даних для зберігання інформації про ландшафти:
Перший - використання регулярної сітки висот (або ще інша назва Карта Висот - Heightmap).
· Друге - використання іррегулярної сітки вершин і зв'язків, що їх сполучають (тобто зберігання простій тріангулізірованій карті).
· Третій - зберігання карти ландшафту, але в даному випадку зберігаються не конкретні висоти, а інформація про використаний блок. В цьому випадку створюється деяка кількість заздалегідь побудованих сегментів, а на карті указуються тільки індекси цих сегментів.
Перший варіант - використання карти висот
Дані представлені у вигляді двомірного масиву. Вже задано дві координати (x, у - по висоті і ширині масиву), і третя координата задається значенням в конкретній комірці, це висота, як на Рис.14.

Рис.14 Представлення двомірного масиву
Зазвичай карту висот зберігають у файлах картинок. Це дозволяє легко вносити зміни і більш-менш наочно проглядати дані. Тоді двома координатами буде положення конкретного пікселя на картинці, а третя координата буде представлена кольором (чим вище значення, пряма залежність від яскравості пікселя - тим більше значення висоти для цієї точки). Зазвичай такі картинки містяться в монохромному варіанті, але можна використовувати і всі барви веселки. Другий варіант дає нам більше градацій висоти, чим передбачувані 256
градацій у разі м
онохромного уявлення.
Карта висот

3д-вигляд ландшафту
За допомогою цього способу можна представити достатньо обширні простори. Але у нього є один істотний недолік - дуже багато описи для крапок, а також, в деяких випадках, спостерігається надмірність даних (наприклад, коли у вас задається проста площина, то, в цьому випадку, для побудови простій площині використовуватиметься безліч крапок, хоча можна б було обійтися трьома. Хоча і ця сама надмірність може піти нам на користь, наприклад, при вертиксному освітленні.
У цього методу існує і декілька плюсів:
наочність, в будь-якій програмі переглядання графічних файлів можна відразу побачити всю інформацію;
· простота зміни цих самих даних, так як існує безліч програм для роботи з растровою графікою;
· і ще одне, в таких картах можна зберігати не тільки дані про висоту. Наприклад, припустимо, що для зберігання висоти ми використовуємо 16 біт, тобто дві колірні компоненти, це виходить 256x256=65536 градацій висоти. Останні 8 біти ми можемо використовувати для зберігання інформації про які-небудь особливості ландшафту, наприклад, розташування будівель, будов, мостів, рослинності і так далі.
· Ще одна ідея використання карт висот. Зберігатимемо, також числові, значення, але тепер не висот, а блоків (назвемо їх ландшафтними). Можна заздалегідь створити деяку кількість карт висот невеликого розміру (скажемо 8x8 або 16x16 пікселів), а в нашій карті блоків висот зберігати ідентифікатор існуючого блоку. Це дає значно більший розмір карти і, отже, ландшафту. Правда тут потрібно буде звернути особливу увагу на місця з'єднання блоків. Тобто, виходить, що у нас перший спосіб представлення даних для побудови ландшафту плавно перекочував в третій!
· З деяких інших плюсів можна згадати легкість знаходження координат (і висоти!) на карті.
· І ще один плюс - оскільки вершинні точки розташовані регулярно і достатньо близько, можна правильніше і достатньо акуратно проводити динамічне освітлення (часто, освітленість вершини безпосередньо залежить від відстані від цієї вершини до джерела освітлення). Це і є та сама користь від надмірності даних.
Другий спосіб - іррегулярна сітка
Ще один спосіб представлення даних для ландшафтів - іррегулярна сітка вершин і зв'язків тих, що їх сполучають. Часто такі рішення застосовуються в спеціалізованих пакетах для ігор (наприклад, редактор рівнів для Серйозного Сема) або спеціальних пакетах для роботи з тривимірною графікою (типу 3dmax, Maya). І зберігаються у вигляді тривимірних моделей. Це дає основний виграш в порівнянні з картами висот:
використовується значно менше інформації для побудови ландшафту. Нам необхідно зберігати тільки значення висот кожної вершини і зв'язку ці вершини сполучають. Це дає нам виграш в швидкості при передачі величезних масивів інформації по AGP, в процесі візуалізації ландшафту.
Але окрім плюсів у цього способу є і безліч недоліків:
алгоритми побудови ландшафтів в основному призначені для регулярних карт висот. Оптимізація таких алгоритмів під цей спосіб зажадає значних зусиль;
· Складнощі при динамічному освітленні - вершини розташовані достатньо далеко один від одного і нерівномірно;
· Зберігання, перегляд, модифікація такого ландшафту також представляє складнощі. При використанні карт висот ви користуєтеся достатньо простими і "стандартними" засобами піксельної графіки. Хоч би тим же MS Paint'ом. Тут же вам буде потрібно більш наворочені і "вагомі" пакети.
На Рис.15. зображає даний принцип:

Рис.15. «Іррегулярна сітка»
Спосіб третій - посегментна карта висот
У даному способі також використовуються карти висот. Тільки замість висот в ній зберігаються індекси ландшафтних сегментів. Як ці сегменти представлені, в принципі, ролі не грає. Вони можуть бути і регулярними, і іррегулярними (причому можна використовувати і ті та інші одночасно). Плюсів це дає нам наступні переваги:
Можливість представлення величезних відкритих просторів;
· Окрім самих ландшафтів в таких блоках можна зберігати і інформацію про будівлі, будови, рослини, специфічні ландшафтні рішення (наприклад, печери або скелі, що нависають один над одним);
· Можливість створення декількох варіантів одного і того ж сегменту, але при різному ступені деталізації. Залежно від швидкості або завантаженості комп'ютера можна вибирати більш менш деталізовані варіанти (так звані ландшафти LOD - LOD - Level Of Detail).
Мінусів у такого способу теж вистачає:
· Перший мінус - проблема стиковки різних сегментів.
· Другий - неочевидність даних. Поглянувши на картинку, не можна вмить уявити, як це повинно буде виглядати в грі.
· Отже, встає і проблема модифікації. Якщо при першому варіанті можна використовувати Paint, в другому 3dmax, то тут вам, швидше за все, буде потрібно самому писати редактор
Текстури для ландшафтів
Текстури для ландшафтів можна розділити на три частини приблизно стіалогичним чином.
По-перше - можна використовувати всього одну текстуру для всього ландшафту. Це дозволяє працювати всього з одним ресурсом, при цьому процедура рендерінга ландшафту довільного розміру міститиме в кращому разі 2-і рядки, в гіршому - 5-6 рядків.
У даному варіанті текстуризації підходить для ігор з достатньо великими просторами, де не дуже важливі деталі. Але при необхідності в більш деталізованих текстурах для ландшафту у нас виникає проблема. Щоб добитися більшої детальності, нам необхідно збільшувати розміри текстур. А це призводить до зниження швидкості і збільшення затримок.
При використанні для текстурізації одиночної текстури, ми маємо два можливі варіанти:
· Розмір текстури менший, або рівний, розміру ландшафту (при цьому краще, щоб ці розміри були рівними, або кратними один одному).
· Розмір текстури більше розмірів ландшафту.
Це дає можливість вибору формату вершин для ландшафту. У другому випадку нам однозначно доведеться використовувати текстуровані вершини. У першому ж випадку все набагато цікаво: ми можемо використовувати не текстуровані вершини, а забарвлені. При цьому текстуру ми використовуємо як ресурс, сховище інформації про кольори конкретних вершин. Це може дати нам великий приріст швидкості, а при використанні величезних (саме величезних, а не великих близько 5000x5000 пікселів і більш) ландшафтів і текстур дозволить добитися більшої деталізації (хоча у такому разі швидкість сильно залежатиме від розміру, адже при розмірі в 5000 на 5000 одиниць для зберігання ландшафту буде потрібно 5000x5000=25000000 вершин помножити на об'єм пам'яті для однієї вершини рівний 36 байт, 12 на три координати - тип float + 24 на колір, тип DWORD. Отримуємо, що для зберігання інформації про такий ландшафт нам буде потрібно 25000000x36=900000000 байт!!! Це приблизно 900 мб! При цьому ландшафт у нас представлений 49980002 полігонами! Тому, поки краще такими величезними ландшафтами не користуватися).
Другий варіант використання текстур схожий з третім варіантом представлення ландшафту. Можна для одного ландшафту використовувати не одну текстуру, а багато. При цьому ми можемо добитися практично будь-якої деталізації. Але унаслідок використання безлічі текстур, ми отримуємо в нагороду, не то, щоб реальну проблему, а головний біль по управлінню ними. Що негайно позначається на швидкості роботи програми при достатньо великій кількості текстур. Крім того, виникає і проблема правильної стиковки текстур.
Генерація ландшафту
Для генерація ландшафтів розглядається виключно ландшафти з регулярною сіткою. Це дозволить для їх генерації використовувати достатньо прості алгоритми, наприклад, алгоритму, мова про котрий йде нижче.
Ось використаний алгоритм:
Створюєм двомірний масив необхідного розміру;
· Генеруємо в цей масив (у всі осередки) випадкові значення;
· Проходимось простим згладжуючим фільтром:
· Береться точка (все по порядку);
· Навколо цієї точки береться значення всіх восьми точок + значення вибраної точки;
· Підсумовуються всі ці дев'ять значень;
· Ділиться дістане значення на 9 (кількість точок - просте усереднювання);
· Отриманий результат записуємо в початкову точку;
· Пробігається весь масив;
Далі заповнюється випадковими значеннями ще декілька точок в початковому масиві (зразкова кількість точок всього - tsize*tsize, потрібно заповнити tsiza*10 точок), конкретна точка вибирається випадковим чином;
· Наново проходиться згладжуючим фільтром.
На другому кроці заповнюєм масив випадковими значеннями – наприклад їх межі приблизно від -300 до +300. У передостанньому кроці знову використовується випадкові значення - в даному випадку їх в межі від -500 до +500. Це дозволяє добитися достатньо порізаного ландшафту як на Рис.16

|
Генерація ландшафтів з використанням Холмового алгоритму (Hill Algoritm)
Це простий ітераційний алгоритм, заснований на декількох вхідних параметрах. Алгоритм викладений в наступних кроках:
Створюється двомірний масив і ініціалізували його нульовим рівнем (заповнюється всі осередки нулями);
· Береться випадкова точка на ландшафті або біля його меж (за межами), а також береться випадковий радіус в заздалегідь заданих межах. Вибір цих меж впливає на вигляд ландшафту - або він буде пологим, або скелястим;
· У вибраній точці "піднімаємо" горб заданого радіусу;
· Повертаємось до другого кроку і так далі до вибраної кількості кроків. Від нього потім залежатиме зовнішній вигляд нашого ландшафту;
· Проводиться нормалізація ландшафту;
· Проводиться "долинізацію" ландшафту. Робим його схили пологішими.
Як згенерувати один горб
Перший, другий і четвертий кроки тривіальні, п'ятий і шостий розглянем далі. Фактично горб - це в нашому випадку половина кулі, чим більше радіус - тим більше горб (і вище). Математично це схоже на перевернуту параболу, приклад формули:

тут (x1, y1) - задана точка, r - вибраний радіус, (x2, y2) - висота горба. От як виглядає одиночний горб на Рис..17:

Рис..17 «Одиночний горб»
Що б згенерувати ландшафт повністю необхідно побудувати безліч таких горбів. Але є ще дві речі на яких необхідно звернути увагу. Перше - необхідно ігнорувати негативні значення висоти горба. Друге - при генерації подальших горбів краще додавати набутого значення для даного горба до вже існуючих значень. Це дозволяє побудувати правдоподібніший ландшафт, ніж правильно обкреслені округлі горби, приклад, як виглядає ландшафт при великій кількості
ітерацій на Рис.18:
|
Нормалізація Ландшафту
При генерації значень для ландшафту потрібно враховували виходи цих значень за деякі межі (наприклад - якщо потім ландшафт зберігатиметься в монохромній картинці, то необхідно, щоб всі значення знаходилися в межі від 0 до 256). Для цього необхідно провести нормалізацію значень. Математично нормалізація - це процес набуття значень з однієї межі, і переклад його в інші межі. От як це виглядає графічно на Рис. 19:
|

Щоб нам це зробити проводяться наступні дії:
спершу проходиться по всьому масиву і запам'ятовують найбільше і найменше значення;
· після того, як дізналися ці значення, потрібно наново пройти по всьому ландшафту і провести нормалізацію конкретних значень в межі від 0 до 1. У вигляді формули це виглядає так:

Після цього готовий ландшафт, нормалізований і готовий до подальшого використання.
"Долинізація" ландшафту
Взагалі кажучи, даний ландшафт вже можна використовувати, але якщо придивитися, то в нім достатні мало долин. Схили горбів надмірно круті, хочеться зробити їх пологішими. У цьому допоможе попередній крок - нормалізація. Всі значення у нас зараз знаходяться в межах від 0 до 1. Ідея "долинізацїї" полягає в наступному - узяти від кожного значення квадратний корінь. Це більшою мірою впливає на середні значення, практично не зачіпаючи мінімумів і максимумів. Графічно це виглядає так Рис. 20:
|
А ось, як це вплинуло на ландшафт Рис.21:
|

Тепер з цим алгоритмом можна закінчити.
В основному, розглянуті алгоритми призначені для створення простого горбистого або гористого ландшафту. Але існують і інші типи ландшафтів. Наприклад, острови (точніше за групу островів), озерні ландшафти. Їх можна реалізувати досить просто:
створюється простий, достатньо горбистий ландшафт;
· потім переміщаєм рівень води вгору або вниз. (при цьому слід обмовитися, що приймаєм за рівень води, зазвичай мається на увазі нульовий рівень, там де координати у=0).
Практично просто пройтись весь масив висот і змістити їх на якесь значення.
Є ще один тип ландшафтів - одиночні острови або гірські плато (як часто показують в американських фільмах), залежно від того, де потім "розмістити" воду.
Модифікація холмового алгоритму для островів
У багатьох випадках можна використовувати вже розглянуті алгоритми для генерації ландшафтів. Але іноді необхідно згенерувати острови, або острів. У цьому нам допоможе той же алгоритм, правда злегка модифікований.
У початковому алгоритмі вибирали центральну точку випадковим чином, і вона могла розташовуватися в будь-якій частині ландшафту. Тепер же потрібно, щоб горби були розташовані ближче до центру. Щоб зробити це, вводяться дві змінні (які потім потрібно випадковим чином змінювати), назвем їх відстань і кут. Відстань означатиме, як далеко від центру знаходиться центральна точка для одиночного горба. Воно може змінюватися від нуля (прямо по центру карти висот) до половини величини карти висот мінус радіус горба. Це дозволить уникнути ситуацій перетину горбів з краєм карти висот. Кут показуватиме, в якому напрямі від центру нам потрібно буде поставити горб. Змінюється в межах від 0 до двох Пі. Використовуючи ці два значення, можна отримати значення (x, у) для центральної точки конкретного горба і використовувати їх як і в простому алгоритмі. От як нам можна набути значень для x і у:

тут size - розмір карти висот, distance - відстань, theta - кут. Радіус повинен бути менше половини розміру карти висот.
Попрацювавши з цими величинами, можна отримати досить пристойно виглядаючий острів як на Рис..22:

Рис. 22 «Приклад острова»
Ось і весь алгоритм. Все гранично просто, і острів дійсно схожий на острів. Хоча немає, чогось не вистачає. Ну звичайно ж - острів-то де розташований? У воді як це показано на Рис. 23.

Рис.24
Ось і розглянуті деякі алгоритми побудови карт висот для ландшафтів. Потрібно розглянути ще деякі супутні операції: Згладжування (або по-іншому - розмиття). Низькочастотний фільтр для зменшення ефектів угловатості. При багатократному застосуванні дозволяє добитися дуже гладких контурів ландшафту. (Є аналог в програмі Adode Photoshop - фільтр Blur).
4. Опис програмного середовища Delphi.
Пакет Delphi[8,9] – продовження лінії компіляторів мови Pascal компанії Borland. Pascal як мова дуже проста, а строгий контроль типів даних сприяє ранньому виявленню помилок і дозволяє швидко створювати надійні і ефективні програми. Корпорація Borland постійно доповнювала мову. Колись у версію 4.0 були включені засоби роздільної трансляції, пізніше, починаючи з версією 5.5, з'явилися об'єкти, а до складу шостої версії пакету ввійшла повноцінна бібліотека класів Turbo Vision, що реалізовує віконну систему в текстовому режимі роботи відеоадаптера. Це був один з перших продуктів, що містили інтегроване середовище розробки програм.
В класі інструментальних засобів для початківців програмістів продуктам компанії Borland довелося конкурувати з середовищем Visual Basic корпорації Microsoft, де питання інтеграції і зручності роботи були вирішені краще. Колись, ще на початку 70-х років Н. Вірт опублікував повідомлення про Pascal, це був компактний, з невеликою кількістю основних понять і зарезервованих слів мова програмування, націлена на навчання студентів. Мова, на якій належить працювати користувачу Delphi, відрізняється від початкового не тільки наявністю безлічі нових понять і конструкцій, але й ідейно: в ньому замість мінімізації числа понять і використовування найпростіших конструкцій (що, безумовно, добре для навчання, але не завжди виправдано в практичній роботі), перевага віддається зручності роботи професійного користувача. Як мову Turbo Pascal природно порівнюють з його найближчими конкурентами – численними варіаціями на тему мови Basic (в першу чергу з Visual Basic корпорації Microsoft) і з C++. Я вважаю, що Turbo Pascal істотно перевершує Basic за рахунок повноцінного об'єктного підходу, що включає розвинуті механізми інкапсуляції, наслідування і поліморфізм. Остання версія мови, яка вживається в Delphi, по своїх можливостях наближається до C++. З основних механізмів, властивих C++, відсутнє тільки множинне наслідування. (Втім, цим красивим і могутнім механізмом породження нових класів користується лише невелика частина програмістів, які пишуть на С++.) Плюси застосування мови Pascal очевидні: з одного боку, на відміну від Visual Basic, заснованого на інтерпретації проміжного коду, для нього є компілятор, генерований машинний код, що дозволяє одержувати значно більш швидкі програми. З іншою – на відміну від C++ синтаксис мови Pascal сприяє побудові дуже швидких компіляторів.
Середовище програмування нагадує пакет Visual Basic. У вашому розпорядженні декілька окремих вікон: меню і інструментальні панелі, Object Inspector (в якому можна бачити властивості об'єкту і пов'язані з ним події), вікна візуального будівника інтерфейсів (Visual User Interface Builder), Object Browser (дозволяюче вивчати ієрархію класів і проглядати списки їх полів, методів і властивостей), вікна управління проектом (Project Manager) і редактора.
Delphi містить повноцінного текстового редактора типу Brief, призначення клавіш в якому відповідають прийнятим в Windows стандартам, а глибина ієрархії операцій Undo необмежена. Як це стало вже обов'язковим, реалізовано колірне виділення різних лексичних елементів програми. Процес побудови додатку достатньо простий. Потрібно вибрати форму (в поняття форми входять звичайні, діалогові, батьківські і дочірні вікна MDI), задати її властивості і включити до неї необхідні компоненти (видимі і, якщо знадобиться ті, що не відображаються): меню, інструментальні панелі, рядок стану і т. п., задати їх властивості і далі написати (за допомогою редактора початкового коду) обробники подій. Object Browser. Вікна типу Object Browser сталі невід'ємною частиною систем програмування на об'єктно-орієнтованих мовах. Робота з ними стає можливою відразу після того, як ви скомпілювали додаток.
Projeсt Manager – це окреме вікно, де перераховуються модулі і форми, що становлять проект. При кожному модулі указується маршрут до каталогу, в якому знаходиться початковий текст. Жирним шрифтом виділяються змінені, але ще не збережені частини проекту. У верхній частині вікна є набір кнопок: додати, видалити, показати початковий текст, показати форму, задати опції і синхронізувати вміст вікна з текстом файлу проекту, тобто з головною програмою на мові Pascal.
Опції, включаючи режими компіляції, задаються для всього проекту в цілому. В цьому відношенні традиційні make-файли, що використовуються в компіляторах мови С, значно гнучкіші.
Visual Component Library (VCL) Багатство палітри об'єктів для побудови призначеного для користувача інтерфейсу – один з ключових чинників при виборі інструменту візуального програмування. При цьому для користувача має значення як число елементів, включених безпосередньо в середовище, так і доступність елементів відповідного формату на ринку.
Компілятори мови Pascal компанії Borland [7] ніколи не примушували користувача довго чекати результатів компіляції. Виробники затверджують, що на сьогодні даний компілятор – найшвидший в світі. Компілятор, вбудований в Delphi дозволяє обробляти 120 тис. рядків початкового тексту за хвилину на машині 486/33 або близько 7 млн. – при використовуванні сучасного процесора Pentium 4/2ГГц. Він пропонує легкість розробки і швидкий час перевірки готового програмного блоку, характерного для мов четвертого покоління (4GL) і в той же час забезпечує якість коду, характерного для компілятора 3GL. Крім того, Delphi забезпечує швидку розробку без необхідності писати вставки на Сі або ручного написання коду (хоча це можливо).
В значенні проектування Delphi мало чим відрізняється від проектування в інтерпретуючому середовищі, проте після виконання компіляції ми одержуємо код, який виконується в 10-20 разів швидше, ніж теж саме, зроблене за допомогою інтерпретатора. Крім того, компілятор компілятору різниця, в Delphi компіляція проводиться безпосередньо в рідний машинний код, тоді як існують компілятори, що перетворюють програму на так званий p-код, який потім інтерпретується віртуальній p-машиною. Це не може не позначитися на фактичній швидкодії готового додатку.
Ймовірно, така висока швидкість пояснюється в першу чергу відмовою від демонстрації в процесі роботи числа скомпільованих рядків. Слід зазначити також, що завдяки опції оптимізації сегментів вдається істотно скоротити розмір виконуваного файлу. Можна запустити компілятор в режимі перевірки синтаксису. При цьому найтриваліша операція компоновки і виготовлення виконуваного файлу виконуватися не буде.
Ймовірно, та обставина, що Delphi позиціонується як засіб створення додатків, що взаємодіють з базами даних, і орієнтовано переважно на ринок інструментальних засобів клієнт/сервер, де до тепер домінують мови, що інтерпретуються, дозволило його авторам не замислюватися над створенням оптимізуючого компілятора, здатного використовувати всі достоїнства архітектури сучасних процесорів.
4.2. Могутня об'єктно-орієнтована мова
Сумісність з програмами, створеними раніше [7, 8] засобами Borland Pascal, зберігається, не дивлячись на те, що в мову внесені істотні зміни. Необхідність в деяких вдосконаленнях давно відчувалася. Найпомітніше з них – апарат виняткових ситуацій, подібний тому, що є в C++, був першим реалізований в компіляторах компанії Borland. Не секрет, що при написанні об'єктно-орієнтованих програм, активно працюючих з динамічною пам'яттю і іншими ресурсами, чималу складність представляє акуратне звільнення цих ресурсів у разі виникнення нештатних ситуацій. Особливо це актуально для середовища Windows, де число видів ресурсів досить велике, а неохайна робота з ними може швидко привести до зависання всієї системи. Передбачений в Delphi апарат виключень максимально спрощує кодування обробки нештатних ситуацій і звільнення ресурсів.
Об'єктно-орієнтований підхід в новій версії мови отримав значний розвиток. Перерахуємо основні новини.
· введено поняття класу;
· реалізовані методи класів, аналогічні статичним методам C++. Вони оперують не екземпляром класу, а самим класом;
· механізм інкапсуляції багато в чому вдосконалений. Введені захищені поля і методи, які, подібно приватним, не видні ззовні, але відрізняються від них тим, що доступні з методів класа-спадкоємця;
· введена обробка виняткових ситуацій. В Delphi це влаштовано в стилі С++. Виключення представлені у вигляді об'єктів, що містять специфічну інформацію про відповідну помилку (тип і місцезнаходження помилки). Розробник може залишити обробку помилки, що існувала за умовчанням, або написати свій власний обробник. Обробка виключень реалізована у вигляді exception-handling blocks (також ще називається protected blocks), які встановлюються ключовими словами try і end. Існують два типи таких блоків: try...except і try...finally;
· з'явилося декілька зручних синтаксичних конструкцій, в числі яких перетворення типа об'єкту з контролем коректності (у разі невдачі ініціюється виключення) і перевірка об'єкту на приналежність класу;
· зсилання на класи додають додатковий рівень гнучкості, так, коли ви хочете динамічно створювати об'єкти, чиї типи можуть бути відомі тільки під час виконання коду. Наприклад, зсилання на класи використовуються при формуванні користувачем документа з різного типу об'єктів, де користувач набирає потрібні об'єкти з меню або палітри. Власне, ця технологія використовувалася і при побудові Delphi;
· введений засіб, відомий як механізм делегування. Під делегуванням розуміється те, що якийсь об'єкт може надати іншому об'єкту відповідати на деякі події. Він використовується в Delphi для спрощення програмування подійно-орієнтованих частин програм, тобто призначеного для користувача інтерфейсу і всіляких процедур, що запускаються у відповідь на маніпуляції з базою даних.
Після того, як Borland внесла перераховані зміни, вийшла могутня об'єктно-орієнтована мова, співставна по своїх можливостях з C++. Платою за нові функції стало значне підвищення вимог до професійної підготовки програміста.
Мова програмування Delphi базується на Borland Object Pascal.
Крім того, Delphi підтримує такі низькорівневі особливості, як підкласи елементів управління Windows, перекриття циклу обробки повідомлень Windows, використовування вбудованого асемблера.
Основна акцепція цієї моделі в Delphi [7, 8] робиться на максимальному повторному використовуванні коду. Це дозволяє розробникам будувати додатки вельми швидко з наперед підготовлених об'єктів, а також дає їм можливість створювати свої власні об'єкти для середовища Delphi. Ніяких обмежень по типах об'єктів, які можуть створювати розробники, не існує. Дійсно, все в Delphi написано на них же, тому розробники мають доступ до тих же об'єктів і інструментів, які використовувалися для створення середовища розробки. В результаті немає ніякої різниці між об'єктами, поставляючими Borland або третіми фірмами, і об'єктами, які ви можете створити самі.
В стандартну поставку Delphi входять основні об'єкти, які утворюють вдало підібрану ієрархію з 270 базових класів. На Delphi можна однаково добре писати як додатки до корпоративних баз даних, так і, наприклад, ігрові програми. Багато в чому це пояснюється тим, що традиційно в середовищі Windows було достатньо складно реалізовувати призначений для користувача інтерфейс. Модель події в Windows завжди була складна для розуміння і відлагодження. Але саме розробка інтерфейсу в Delphi є найпростішою задачею для програміста.
Завдяки такій можливості додатку, виготовлені за допомогою Delphi, працюють надійно і стійко. Delphi підтримує використовування вже існуючих об'єктів, включаючи DLL, написані на С і С++, OLE серверу, VBX, об'єкти, створені за допомогою Delphi. З готових компонент робочі додатки збираються дуже швидко. Крім того, оскільки Delphi має повністю об'єктну орієнтацію, розробники можуть створювати свої об'єкти, що повторно використовуються, для того, щоб зменшити витрати на розробку.
Delphi пропонує розробникам – як у складі команди, так і індивідуальним – відкриту архітектуру, що дозволяє додавати компоненти, де б вони не були виготовлені, і оперувати цими введеними компонентами у візуальному будівельнику. Розробники можуть додавати CASE-інструменти, кодові генератори, а також авторські help’и, доступні через меню Delphi.
Компоненти, що використовуються при розробці в Delphi [7, 8], вбудовані в середовище розробки додатків, представляють з себе набір типів об'єктів, що використовуються як фундамент при будівництві додатку.
Цей називається Visual Component Library (VCL). В VCL є такі стандартні елементи управління, як рядки редагування, статичні елементи управління, рядки редагування із списками, списки об'єктів. Ще є такі компоненти, які раніше були доступні тільки в бібліотеках третіх фірм: табличні елементи управління, закладки, багатосторінкові записники. Всі об'єкти розбиті на сторінки по своїй функціональності і представлені в палітрі компонент.
VCL містить спеціальний об'єкт, який представляє інтерфейс графічних пристроїв Windows, і дозволяє розробникам малювати, не піклуючись про звичайні для програмування в середовищі Windows деталях.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 |


